<?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>177473</bug_id>
          
          <creation_ts>2017-09-25 16:18:52 -0700</creation_ts>
          <short_desc>WebAssembly: no VM / JS version of everything but Instance</short_desc>
          <delta_ts>2017-10-19 21:20:31 -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>WebAssembly</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=177568</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>178031</dependson>
          <blocked>177472</blocked>
    
    <blocked>177887</blocked>
    
    <blocked>177892</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1352476</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-25 16:18:52 -0700</bug_when>
    <thetext>It turns out that Instance is the central part of our implementation, and it touches everything. I&apos;m starting #177472 with all the other things, and then doing a follow-up to untangle Instance. This means we&apos;ll have a few hacks floating around temporarily (mostly pointer copies of objects), but it&apos;ll make my work more incremental.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352513</commentid>
    <comment_count>1</comment_count>
      <attachid>321775</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-25 17:11:21 -0700</bug_when>
    <thetext>Created attachment 321775
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352514</commentid>
    <comment_count>2</comment_count>
      <attachid>321775</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-25 17:13:14 -0700</bug_when>
    <thetext>Comment on attachment 321775
patch

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

&gt; Source/JavaScriptCore/API/WebAssembly.h:37
&gt; +#include &lt;JavaScriptCore/WATableDescriptor.h&gt;

I need to remove this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352556</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-25 19:23:33 -0700</bug_when>
    <thetext>Attachment 321775 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:213:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:254:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:257:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:258:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:259:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:266:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:273:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:274:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:275:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:300:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:409:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyTableConstructor.cpp:94:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:67:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmBBQPlan.h:53:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmBBQPlan.h:54:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmBBQPlan.h:57:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.h:62:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.h:104:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.h:105:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.h:106:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WasmCodeBlock.h:57:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmCodeBlock.h:57:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmCodeBlock.h:57:  The parameter name &quot;moduleInformation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:560:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmModule.h:52:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmModule.h:53:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmThunks.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/API/WebAssembly.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 35 in 105 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>1352560</commentid>
    <comment_count>4</comment_count>
      <attachid>321775</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-25 19:34:42 -0700</bug_when>
    <thetext>Comment on attachment 321775
patch

R- since it seems like you set the bots on fire.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352576</commentid>
    <comment_count>5</comment_count>
      <attachid>321790</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-25 21:56:28 -0700</bug_when>
    <thetext>Created attachment 321790
patch

- Fix include with should have been private.
- Fix WebKit style where sensible.
- Remove API header. That&apos;s for a later date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352578</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-25 21:59:58 -0700</bug_when>
    <thetext>Attachment 321790 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:410:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:67:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 7 in 104 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>1352592</commentid>
    <comment_count>7</comment_count>
      <attachid>321800</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-25 23:28:28 -0700</bug_when>
    <thetext>Created attachment 321800
patch

Fix build issues again. Turns out some of our headers are included in places I didn&apos;t expect! Just building JSC isn&apos;t sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352594</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-25 23:30:04 -0700</bug_when>
    <thetext>Attachment 321800 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:67:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 8 in 108 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>1352676</commentid>
    <comment_count>9</comment_count>
      <attachid>321822</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-26 09:07:21 -0700</bug_when>
    <thetext>Created attachment 321822
patch

Add missing forwarding header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352679</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-26 09:10:05 -0700</bug_when>
    <thetext>Attachment 321822 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:67:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 10 in 110 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>1352699</commentid>
    <comment_count>11</comment_count>
      <attachid>321828</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-26 09:56:19 -0700</bug_when>
    <thetext>Created attachment 321828
patch

Missing export. Linker was sad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352700</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-26 09:58:33 -0700</bug_when>
    <thetext>Attachment 321828 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:67:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 10 in 110 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>1352707</commentid>
    <comment_count>13</comment_count>
      <attachid>321831</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-26 10:09:07 -0700</bug_when>
    <thetext>Created attachment 321831
patch

Fix 32-bit build, it has WebAssembly disabled and I&apos;d added an unguarded field in VM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352708</commentid>
    <comment_count>14</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-26 10:11:45 -0700</bug_when>
    <thetext>Attachment 321831 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:67:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 10 in 110 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>1352725</commentid>
    <comment_count>15</comment_count>
      <attachid>321837</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-26 10:29:11 -0700</bug_when>
    <thetext>Created attachment 321837
patch

More 32-bit build fix...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352728</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-26 10:33:00 -0700</bug_when>
    <thetext>Attachment 321837 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:67:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 10 in 110 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>1352732</commentid>
    <comment_count>17</comment_count>
      <attachid>321839</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-26 10:42:53 -0700</bug_when>
    <thetext>Created attachment 321839
patch

Another 32-bit build fix.


The Windows and WPE problems are due to a file move, and unified build&apos;s Sources.txt not getting rebuilt. Keith is looking into that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352734</commentid>
    <comment_count>18</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-26 10:45:38 -0700</bug_when>
    <thetext>Attachment 321839 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:67:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 10 in 110 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>1353135</commentid>
    <comment_count>19</comment_count>
      <attachid>321839</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-27 09:33:31 -0700</bug_when>
    <thetext>Comment on attachment 321839
patch

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

I think it needs a few stylistic changes.

&gt; Source/JavaScriptCore/interpreter/StackVisitor.cpp:155
&gt; +    m_frame.m_CallerEntryFrame = m_frame.m_entryFrame;

Seems like Caller should be caller here.

&gt; Source/JavaScriptCore/interpreter/StackVisitor.h:117
&gt; +        EntryFrame* m_CallerEntryFrame;

caller

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:370
&gt; +    void copyCalleeSavesToEntryFrameCalleeSavesBuffer(EntryFrame** topEntryFrame, const TempRegisterSet&amp; usedRegisters = { RegisterSet::stubUnavailableRegisters() })

Strongly recommend making this EntryFrame*&amp;.  JSC is fuzzy about when we do * and when we do &amp;.  But this checks off some &amp; boxes for me:

- Never null.
- Nobody is going to ever repoint this pointer.
- There is no existing convention that we should point to EntryFrame* instead of referencing it (for example we prefer to point to ExecState rather than reference it, therefore we almost universally say ExecState* to be consistent)

I don&apos;t know if these three rules are something we all agree upon, but it seems that these three rules most easily explain JSC&apos;s existing uses of &amp; and *.  So, I think you should EntryFrame*&amp; here.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:555
&gt; +    int32_t (*growMemory)(JSWebAssemblyInstance*, int32_t) = [] (JSWebAssemblyInstance* instance, int32_t delta) -&gt; int32_t {

I think this is an opportunity to say &quot;auto growMemory&quot; here instead.  I think it&apos;s important to do that, because that means fewer churn if we decide to make this capture things.

&gt; Source/JavaScriptCore/wasm/WasmTable.cpp:104
&gt; +    Checked newSizeChecked = size();
&gt; +    newSizeChecked += delta;
&gt; +    uint32_t newSize;
&gt; +    if (newSizeChecked.safeGet(newSize) == CheckedState::DidOverflow)
&gt; +        return std::nullopt;
&gt; +
&gt; +    if (maximum() &amp;&amp; newSize &gt; *maximum())
&gt; +        return std::nullopt;
&gt; +    if (!isValidSize(newSize))
&gt; +        return std::nullopt;
&gt; +
&gt; +    {
&gt; +        Checked reallocFunctionsSizeChecked = newSizeChecked;
&gt; +        reallocFunctionsSizeChecked *= sizeof(CallableFunction);
&gt; +        uint32_t reallocFunctionsSize;
&gt; +        if (reallocFunctionsSizeChecked.safeGet(reallocFunctionsSize) == CheckedState::DidOverflow)
&gt; +            return std::nullopt;
&gt; +        m_functions.realloc(reallocFunctionsSize);
&gt; +        for (uint32_t i = m_size; i &lt; newSize; ++i)
&gt; +            new (&amp;m_functions.get()[i]) Wasm::CallableFunction();
&gt; +    }
&gt; +    
&gt; +    {
&gt; +        Checked reallocInstancesSizeChecked = newSizeChecked;
&gt; +        reallocInstancesSizeChecked *= sizeof(JSWebAssemblyInstance*);
&gt; +        uint32_t reallocInstancesSize;
&gt; +        if (reallocInstancesSizeChecked.safeGet(reallocInstancesSize) == CheckedState::DidOverflow)
&gt; +            return std::nullopt;
&gt; +        m_instances.realloc(reallocInstancesSize);
&gt; +        for (uint32_t i = m_size; i &lt; newSize; ++i)
&gt; +            m_instances.get()[i] = nullptr;
&gt; +    }
&gt; +
&gt; +    m_size = newSize;

Can all of this be Vector&lt;&gt;?

If not Vector&lt;&gt;, can you do something to reduce the deja vu?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353346</commentid>
    <comment_count>20</comment_count>
      <attachid>321995</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-27 12:23:54 -0700</bug_when>
    <thetext>Created attachment 321995
patch

Fixed style comments.

&gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:370
&gt; &gt; +    void copyCalleeSavesToEntryFrameCalleeSavesBuffer(EntryFrame** topEntryFrame, const TempRegisterSet&amp; usedRegisters = { RegisterSet::stubUnavailableRegisters() })
&gt; 
&gt; Strongly recommend making this EntryFrame*&amp;.  JSC is fuzzy about when we do
&gt; * and when we do &amp;.  But this checks off some &amp; boxes for me:
&gt; 
&gt; - Never null.
&gt; - Nobody is going to ever repoint this pointer.
&gt; - There is no existing convention that we should point to EntryFrame*
&gt; instead of referencing it (for example we prefer to point to ExecState
&gt; rather than reference it, therefore we almost universally say ExecState* to
&gt; be consistent)
&gt; 
&gt; I don&apos;t know if these three rules are something we all agree upon, but it
&gt; seems that these three rules most easily explain JSC&apos;s existing uses of &amp;
&gt; and *.  So, I think you should EntryFrame*&amp; here.

Yeah that makes a bunch of sense! Done.

&gt; &gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:555
&gt; &gt; +    int32_t (*growMemory)(JSWebAssemblyInstance*, int32_t) = [] (JSWebAssemblyInstance* instance, int32_t delta) -&gt; int32_t {
&gt; 
&gt; I think this is an opportunity to say &quot;auto growMemory&quot; here instead.  I
&gt; think it&apos;s important to do that, because that means fewer churn if we decide
&gt; to make this capture things.

Usually I would, but here we want a function pointer instead of a lambda&apos;s closure, because the address is passed to the JIT. We could use auto and coerce to function pointer with unary plus, but that&apos;s kinda obscure C++ and I like the explicit signature check this version adds.

&gt; &gt; Source/JavaScriptCore/wasm/WasmTable.cpp:104
[snip]
&gt; &gt; +
&gt; &gt; +    m_size = newSize;
&gt; 
&gt; Can all of this be Vector&lt;&gt;?
&gt; 
&gt; If not Vector&lt;&gt;, can you do something to reduce the deja vu?

I&apos;m not sure vector is great here, unless we pre-allocate and never touch it again, because of the small buffer (we could disable...) and the fact that the JIT reaches in to get the buffer address.

I refactored to remove copy-pasta, but it&apos;s also kinda ugly. Less code though!

Especially ugly:
  new (&amp;container.get()[i]) std::remove_reference_t&lt;decltype(*container.get())&gt;();

WDYT?

I could just add a `value_type` typedef to MallocPtr to avoid the ugly stuff there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353390</commentid>
    <comment_count>21</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-27 12:27:02 -0700</bug_when>
    <thetext>Attachment 321995 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 11 in 110 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>1353812</commentid>
    <comment_count>22</comment_count>
      <attachid>322012</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-27 13:35:23 -0700</bug_when>
    <thetext>Created attachment 322012
patch

Fix 32-bit build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353813</commentid>
    <comment_count>23</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-27 13:37:56 -0700</bug_when>
    <thetext>Attachment 322012 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 11 in 110 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>1353854</commentid>
    <comment_count>24</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-27 14:48:27 -0700</bug_when>
    <thetext>FWIW this would make the ugly code nicer: https://bugs.webkit.org/show_bug.cgi?id=177568</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354211</commentid>
    <comment_count>25</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-28 11:34:43 -0700</bug_when>
    <thetext>*** Bug 177568 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354222</commentid>
    <comment_count>26</comment_count>
      <attachid>322103</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-28 11:44:24 -0700</bug_when>
    <thetext>Created attachment 322103
patch

Update patch to contain the cleanup I suggested, instead of adding it to WTF separately. Looks much nicer now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354223</commentid>
    <comment_count>27</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-28 11:47:53 -0700</bug_when>
    <thetext>Attachment 322103 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ChangeLog:26:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:28:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:34:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:36:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:39:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:41:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:43:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:48:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:50:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:53:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:61:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:63:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:71:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:78:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:80:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:90:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:91:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:100:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:101:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:121:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:164:  default_construct_at is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 32 in 113 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>1355291</commentid>
    <comment_count>28</comment_count>
      <attachid>322103</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-02 10:30:58 -0700</bug_when>
    <thetext>Comment on attachment 322103
patch

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

r=me with comments

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:302
&gt; -        return adoptRef(new Memory(initial, maximum));
&gt; +        return adoptRef(new Memory(initial, maximum, std::forward&lt;WTF::Function&lt;void()&gt;&gt;(notifyMemoryPressure), std::forward&lt;WTF::Function&lt;void()&gt;&gt;(syncTryToReclaimMemory), std::forward&lt;WTF::Function&lt;void(PageCount, PageCount)&gt;&gt;(growSuccessCallback)));

I think it&apos;s weird that you&apos;re using std::forward.  Shouldn&apos;t this be WTFMove?

&gt; Source/JavaScriptCore/wasm/WasmTable.cpp:93
&gt; +    auto checkedGrow = [&amp;] (auto&amp; container) {
&gt; +        Checked reallocSizeChecked = newSizeChecked;
&gt; +        reallocSizeChecked *= sizeof(*container.get());
&gt; +        uint32_t reallocSize;
&gt; +        if (reallocSizeChecked.safeGet(reallocSize) == CheckedState::DidOverflow)
&gt; +            return false;
&gt; +        container.realloc(reallocSize);
&gt; +        for (uint32_t i = m_size; i &lt; newSize; ++i)
&gt; +            default_construct_at(&amp;container.get()[i]);
&gt; +        return true;
&gt; +    };

Nice

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344
&gt; +            RefPtr&lt;Wasm::Memory&gt; memory = Wasm::Memory::create(moduleInformation.memory.initial(), moduleInformation.memory.maximum(),
&gt; +                [&amp;vm] () { vm.heap.collectAsync(CollectionScope::Full); },
&gt; +                [&amp;vm] () { vm.heap.collectSync(CollectionScope::Full); },
&gt; +                [&amp;vm, jsMemory] (Wasm::PageCount oldPageCount, Wasm::PageCount newPageCount) { jsMemory-&gt;growSuccessCallback(vm, oldPageCount, newPageCount); });

That&apos;s pretty cool!

The one downside is that it&apos;s hard to tell what each callback is for.  One way to make this easy to read is to introduce dummy enums for each WTF::Function:

enum NotifyLowMemory { NotifyLowMemoryTag }
enum SyncTryToReclaim { SyncTryToReclaimTag }
enum GrowMemory { GrowMemoryTag }

And then this would do:

RefPtr&lt;...&gt; memory = ...(...,
    [&amp;vm] (NotifyLowMemory) { vm.heap.collectAsync(...); },
    [&amp;vm] (SyncTryToRedlaim) ...

I don&apos;t feel strongly about it, but it might be nice.

&gt; Source/JavaScriptCore/wasm/js/WasmToJS.cpp:445
&gt; +                jit.purifyNaN(fprReg);
&gt; +                jit.moveDoubleTo64(fprReg, scratch);
&gt; +                materializeDoubleEncodeOffset(doubleEncodeOffsetGPRReg);
&gt; +                jit.add64(doubleEncodeOffsetGPRReg, scratch);
&gt; +                jit.store64(scratch, calleeFrame.withOffset(calleeFrameOffset));
&gt; +                calleeFrameOffset += sizeof(Register);

Looks very similar to the code above.  Can you create a helper lambda or something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355570</commentid>
    <comment_count>29</comment_count>
      <attachid>322458</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-02 15:28:42 -0700</bug_when>
    <thetext>Created attachment 322458
patch

Address all of Fil&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355661</commentid>
    <comment_count>30</comment_count>
      <attachid>322103</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-02 18:13:31 -0700</bug_when>
    <thetext>Comment on attachment 322103
patch

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

r=me too
My meta comment here is I think this patch would be a lot easier to review if you had split it up.

&gt; Source/JavaScriptCore/ChangeLog:30
&gt; +            purpose: one to notify of memory pressure, and the other to ask for

what do you mean by memory pressure here?

&gt; Source/JavaScriptCore/ChangeLog:80
&gt; +          * WasmMemory doens&apos;t need to know about fault handling thunks. Only the IR

typo: doens&apos;t

&gt; Source/JavaScriptCore/ChangeLog:104
&gt; +            entrypoint. This triples the space allocated per instance&apos;s imported
&gt; +            function, but there shouldn&apos;t be that many imports. This has two upsides: it

Triples seems like a lot if there are a lot of these. I thought Emscripten generates a *ton* of imports?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:372
&gt; +        // Most memory accesses in signaling mode don&apos;t do an explicit exception check because they can rely on fault handling to detect out-of-bounds accesses. FaultSignalHandler nonetheless needs the thunk to exist so that it can jump to that thunk.

Style nit: this comment should be on more than one line

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:388
&gt; +            // FIXME: Because WasmToWasm call clobbers wasmContextInstance register and does not restore it, we need to restore it in the caller side.

wasmContextInstance? Isn&apos;t that redundant? Ditto elsewhere you do this.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:477
&gt; +            jit.loadPtr(CCallHelpers::Address(baseMemory, Wasm::Memory::offsetOfSize()), sizeRegs[0].sizeRegister);
&gt; +            jit.loadPtr(CCallHelpers::Address(baseMemory, Wasm::Memory::offsetOfMemory()), baseMemory);

Aren&apos;t we in the Wasm namespace here? If so, no need for Wasm::

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1206
&gt; +    // FIXME: when we have trap handlers, we can just let the call fail because Signature::invalidIndex is 0. https://bugs.webkit.org/show_bug.cgi?id=177210

How does this have anything to do with signature index? It seems like this only has to do with the code pointer we load.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1272
&gt; +            jit.loadPtr(CCallHelpers::Address(baseMemory, Wasm::Memory::offsetOfSize()), sizeRegs[0].sizeRegister); // Memory size.
&gt; +            jit.loadPtr(CCallHelpers::Address(baseMemory, Wasm::Memory::offsetOfMemory()), baseMemory); // Wasm::Memory::void*.

ditto about namespace

&gt; Source/JavaScriptCore/wasm/WasmContext.cpp:57
&gt; +void Context::store(JSWebAssemblyInstance* i, void* softStackLimit)

style: We usually don&apos;t use 1 letter variable names in code like this.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:302
&gt;&gt; +        return adoptRef(new Memory(initial, maximum, std::forward&lt;WTF::Function&lt;void()&gt;&gt;(notifyMemoryPressure), std::forward&lt;WTF::Function&lt;void()&gt;&gt;(syncTryToReclaimMemory), std::forward&lt;WTF::Function&lt;void(PageCount, PageCount)&gt;&gt;(growSuccessCallback)));
&gt; 
&gt; I think it&apos;s weird that you&apos;re using std::forward.  Shouldn&apos;t this be WTFMove?

agreed

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:331
&gt; +        return adoptRef(new Memory(fastMemory, initial, maximum, Memory::fastMappedBytes(), MemoryMode::Signaling, std::forward&lt;WTF::Function&lt;void()&gt;&gt;(notifyMemoryPressure), std::forward&lt;WTF::Function&lt;void()&gt;&gt;(syncTryToReclaimMemory), std::forward&lt;WTF::Function&lt;void(PageCount, PageCount)&gt;&gt;(growSuccessCallback)));

ditto here

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:346
&gt; +    return adoptRef(new Memory(slowMemory, initial, maximum, initialBytes, MemoryMode::BoundsChecking, std::forward&lt;WTF::Function&lt;void()&gt;&gt;(notifyMemoryPressure), std::forward&lt;WTF::Function&lt;void()&gt;&gt;(syncTryToReclaimMemory), std::forward&lt;WTF::Function&lt;void(PageCount, PageCount)&gt;&gt;(growSuccessCallback)));

and here

&gt; Source/JavaScriptCore/wasm/WasmMemory.h:78
&gt; +    enum class GrowFailReason {
&gt; +        InvalidDelta,
&gt; +        InvalidGrowSize,
&gt; +        WouldExceedMaximum,
&gt; +        OutOfMemory,
&gt; +    };
&gt; +    Expected&lt;PageCount, GrowFailReason&gt; grow(PageCount);

nice

&gt; Source/JavaScriptCore/wasm/WasmMemory.h:99
&gt; +    WTF::Function&lt;void()&gt; m_notifyMemoryPressure;
&gt; +    WTF::Function&lt;void()&gt; m_syncTryToReclaimMemory;
&gt; +    WTF::Function&lt;void(PageCount, PageCount)&gt; m_growSuccessCallback;

Do we really want to tie these to a Memory and not a call to grow()?

&gt; Source/JavaScriptCore/wasm/WasmMemoryMode.h:34
&gt; +namespace JSC {
&gt; +
&gt; +namespace Wasm {

This can go on one line if you want

&gt; Source/JavaScriptCore/wasm/WasmTable.h:47
&gt; +    enum class CreateFail {
&gt; +        InvalidSize,
&gt; +    };

This isn&apos;t used

&gt; Source/JavaScriptCore/wasm/WasmThunks.cpp:94
&gt; +    typedef void (*Run)(JSWebAssemblyInstance*, uint32_t);
&gt; +    Run run = OMGPlan::runForIndex;

Is this just for documenting the type?

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:62
&gt; +    for (unsigned i = 0; i &lt; m_numImportFunctions; ++i)
&gt; +        new (importFunctionInfo(i)) ImportFunctionInfo();

You can use default_construct_at if you&apos;d like

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344
&gt;&gt; +                [&amp;vm, jsMemory] (Wasm::PageCount oldPageCount, Wasm::PageCount newPageCount) { jsMemory-&gt;growSuccessCallback(vm, oldPageCount, newPageCount); });
&gt; 
&gt; That&apos;s pretty cool!
&gt; 
&gt; The one downside is that it&apos;s hard to tell what each callback is for.  One way to make this easy to read is to introduce dummy enums for each WTF::Function:
&gt; 
&gt; enum NotifyLowMemory { NotifyLowMemoryTag }
&gt; enum SyncTryToReclaim { SyncTryToReclaimTag }
&gt; enum GrowMemory { GrowMemoryTag }
&gt; 
&gt; And then this would do:
&gt; 
&gt; RefPtr&lt;...&gt; memory = ...(...,
&gt;     [&amp;vm] (NotifyLowMemory) { vm.heap.collectAsync(...); },
&gt;     [&amp;vm] (SyncTryToRedlaim) ...
&gt; 
&gt; I don&apos;t feel strongly about it, but it might be nice.

Or you could just give all these lambdas names. That&apos;s usually what I do in this situation. The nice thing about Fil&apos;s suggestion is the type checker will catch a bug if you provide the wrong lambda.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h:82
&gt; +    ImportFunctionInfo* importFunctionInfo(size_t importFunctionNum) { return &amp;bitwise_cast&lt;ImportFunctionInfo*&gt;(bitwise_cast&lt;char*&gt;(this) + offsetOfTail())[importFunctionNum]; }
&gt; +    static size_t offsetOfTargetInstance(size_t importFunctionNum) { return offsetOfTail() + importFunctionNum * sizeof(ImportFunctionInfo) + OBJECT_OFFSETOF(ImportFunctionInfo, targetInstance); }
&gt; +    static size_t offsetOfWasmEntrypoint(size_t importFunctionNum) { return offsetOfTail() + importFunctionNum * sizeof(ImportFunctionInfo) + OBJECT_OFFSETOF(ImportFunctionInfo, wasmEntrypoint); }
&gt; +    static size_t offsetOfImportFunction(size_t importFunctionNum) { return offsetOfTail() + importFunctionNum * sizeof(ImportFunctionInfo) + OBJECT_OFFSETOF(ImportFunctionInfo, importFunction); }
&gt; +    JSObject* importFunction(unsigned importFunctionNum) { RELEASE_ASSERT(importFunctionNum &lt; m_numImportFunctions); return importFunctionInfo(importFunctionNum)-&gt;importFunction.get(); }

oh boy

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:65
&gt; +

please remove

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.cpp:124
&gt; +const Wasm::ModuleInformation&amp; JSWebAssemblyModule::moduleInformation() const
&gt; +{
&gt; +    return m_module-&gt;moduleInformation();
&gt; +}
&gt; +
&gt; +SymbolTable* JSWebAssemblyModule::exportSymbolTable() const
&gt; +{
&gt; +    return m_exportSymbolTable.get();
&gt; +}
&gt; +
&gt; +Wasm::SignatureIndex JSWebAssemblyModule::signatureIndexFromFunctionIndexSpace(unsigned functionIndexSpace) const
&gt; +{
&gt; +    return m_module-&gt;signatureIndexFromFunctionIndexSpace(functionIndexSpace);
&gt; +}
&gt; +
&gt; +WebAssemblyToJSCallee* JSWebAssemblyModule::callee() const
&gt; +{
&gt; +    return m_callee.get();
&gt; +}
&gt; +
&gt; +JSWebAssemblyCodeBlock* JSWebAssemblyModule::codeBlock(Wasm::MemoryMode mode)
&gt; +{
&gt; +    return m_codeBlocks[static_cast&lt;size_t&gt;(mode)].get();
&gt; +}
&gt; +
&gt; +Wasm::Module&amp; JSWebAssemblyModule::module()
&gt; +{
&gt; +    return m_module.get();
&gt; +}

these all seem like the should be inlined. Are they only called from the cpp file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355707</commentid>
    <comment_count>31</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-02 22:34:47 -0700</bug_when>
    <thetext>Attachment 322458 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:344:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:164:  default_construct_at is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 12 in 114 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>1355916</commentid>
    <comment_count>32</comment_count>
      <attachid>322458</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-03 11:33:19 -0700</bug_when>
    <thetext>Comment on attachment 322458
patch

Clearing flags on attachment: 322458

Committed r222791: &lt;http://trac.webkit.org/changeset/222791&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355917</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-03 11:33:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355918</commentid>
    <comment_count>34</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-03 11:34:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/34794915&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356528</commentid>
    <comment_count>35</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-04 11:21:55 -0700</bug_when>
    <thetext>Will follow-up Saam&apos;s comments in https://bugs.webkit.org/show_bug.cgi?id=177887</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357755</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-06 15:10:29 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 178031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357769</commentid>
    <comment_count>37</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-10-06 15:14:16 -0700</bug_when>
    <thetext>*** Bug 177901 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362411</commentid>
    <comment_count>38</comment_count>
      <attachid>324306</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-19 15:48:10 -0700</bug_when>
    <thetext>Created attachment 324306
patch

Fix the bug that caused a revert: moving the wasm-&gt;JS entries to the Wasm::CodeBlock (from the JSWebAssemblyCodeBlock) was invalid because they have the address of the VM baked into them. They&apos;re now on the JSWebAssemblyInstance instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362412</commentid>
    <comment_count>39</comment_count>
      <attachid>324307</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-19 15:48:53 -0700</bug_when>
    <thetext>Created attachment 324307
change since last patch

Changes since last patch, so it&apos;s easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362416</commentid>
    <comment_count>40</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-19 15:52:02 -0700</bug_when>
    <thetext>Attachment 324306 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:349:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:164:  default_construct_at is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 12 in 115 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>1362425</commentid>
    <comment_count>41</comment_count>
      <attachid>324307</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-19 16:04:02 -0700</bug_when>
    <thetext>Comment on attachment 324307
change since last patch

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

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h:79
&gt; +    ImportFunctionInfo* importFunctionInfo(size_t importFunctionNum) { RELEASE_ASSERT(importFunctionNum &lt; m_numImportFunctions); return &amp;bitwise_cast&lt;ImportFunctionInfo*&gt;(bitwise_cast&lt;char*&gt;(this) + offsetOfTail())[importFunctionNum]; }

Let&apos;s put this on two lines.

&gt; Source/JavaScriptCore/wasm/js/WasmToJS.cpp:55
&gt; +static Expected&lt;MacroAssemblerCodeRef, BindingFailure&gt; handleBadI64Use(VM* vm, JIT&amp; jit, const Signature&amp; signature, unsigned importIndex)

why add this function? I think it just complicates reading this code for no reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362426</commentid>
    <comment_count>42</comment_count>
      <attachid>324306</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-19 16:05:49 -0700</bug_when>
    <thetext>Comment on attachment 324306
patch

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

r=me too

&gt; Source/WTF/wtf/StdLibExtras.h:167
&gt; +template&lt;typename T&gt;
&gt; +inline T&amp; default_construct_at(T* addr)
&gt; +{
&gt; +    return *new (addr) T();
&gt; +}

I&apos;d vote for removing this since nobody seemed to like it in the other patch you opened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362482</commentid>
    <comment_count>43</comment_count>
      <attachid>324328</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-19 18:42:19 -0700</bug_when>
    <thetext>Created attachment 324328
patch

(In reply to Saam Barati from comment #41)
&gt; Comment on attachment 324307 [details]
&gt; change since last patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=324307&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h:79
&gt; &gt; +    ImportFunctionInfo* importFunctionInfo(size_t importFunctionNum) { RELEASE_ASSERT(importFunctionNum &lt; m_numImportFunctions); return &amp;bitwise_cast&lt;ImportFunctionInfo*&gt;(bitwise_cast&lt;char*&gt;(this) + offsetOfTail())[importFunctionNum]; }
&gt; 
&gt; Let&apos;s put this on two lines.

Done.

&gt; &gt; Source/JavaScriptCore/wasm/js/WasmToJS.cpp:55
&gt; &gt; +static Expected&lt;MacroAssemblerCodeRef, BindingFailure&gt; handleBadI64Use(VM* vm, JIT&amp; jit, const Signature&amp; signature, unsigned importIndex)
&gt; 
&gt; why add this function? I think it just complicates reading this code for no
&gt; reason.

That function is just too huge, and it really does 3 things. I split off this one because I was having a hard time paging through it and that bit was irrelevant to what I was doing. I really should split what&apos;s left in 2... I really only removed 50 lines from a 600 line function.

&gt; &gt; Source/WTF/wtf/StdLibExtras.h:167
&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +inline T&amp; default_construct_at(T* addr)
&gt; &gt; +{
&gt; &gt; +    return *new (addr) T();
&gt; &gt; +}
&gt; 
&gt; I&apos;d vote for removing this since nobody seemed to like it in the other patch
&gt; you opened.

Good point, removed. I put back my ugly / amazing `new (&amp;container.get()[i]) std::remove_reference_t&lt;decltype(*container.get())&gt;();`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362483</commentid>
    <comment_count>44</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-19 18:44:02 -0700</bug_when>
    <thetext>Attachment 324328 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmMemory.cpp:400:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/ForwardingHeaders/wasm/WasmModule.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/wasm/WasmEmbedder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:105:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:349:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTable.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/JSToWasm.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:67:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/js/SerializedScriptValue.cpp:82:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 11 in 113 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>1362508</commentid>
    <comment_count>45</comment_count>
      <attachid>324328</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-19 19:23:35 -0700</bug_when>
    <thetext>Comment on attachment 324328
patch

Clearing flags on attachment: 324328

Committed r223738: &lt;https://trac.webkit.org/changeset/223738&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362509</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-19 19:23:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362548</commentid>
    <comment_count>47</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-19 21:20:31 -0700</bug_when>
    <thetext>*** Bug 177887 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321775</attachid>
            <date>2017-09-25 17:11:21 -0700</date>
            <delta_ts>2017-09-25 21:56:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>419166</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAzZGQ3NTA1MTJjNGM2MTYxMmUxOTczYmQ5ODIwYWVkZjE3YzE2ODg2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9XZWJBc3NlbWJseS5oICAgICAgICAgICAgfCAgMzkgKysKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgNDQ4ICsrKysr
KysrKysrKysrCiAuLi4vSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAg
ICAgICB8ICA4MCArKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCAgICAgICAg
ICAgICAgICAgIHwgIDExICstCiAuLi4vSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcCAgICAgICAgfCAgMTggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcCAgICAgICAgICB8ICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmNwcCAgICAgICAgICAgfCAgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmNwcCAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCAgICAgIHwgICAyICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAgICB8ICAgOCAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAgICAgfCAg
MjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCAgICAg
IHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJz
LmggICB8ICAxNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcCAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuY3BwIHwgIDI2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmggICB8ICAxMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1ZNRW50cnlSZWNvcmQuaCAgfCAgMjAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcCAgICAgIHwgIDMwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oICAgICAgICB8ICA0NCArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgICAgICAgIHwgICA4ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwICAgICAgfCAgIDYgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgICAgICAgIHwgIDMyICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAg
ICAgIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3Bw
ICAgICAgICB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtICAgfCAgIDYgKy0KIC4uLi9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtICAgICAgICAgICAgIHwgIDE4ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbSB8ICAxOSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaCAgICAgICAgICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCAgICAgICAgICAgICAgIHwgICA0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oICAgICAgICAgICAgICAgICB8ICAxMiArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgICAgICAgICAgfCAgMTggKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCAgIHwgMzgw
ICsrKystLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuaCAgICAgfCAgIDUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCAgICAgICAgIHwgIDIyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5oICAgICAgICAgICB8ICAxMyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW5JbmxpbmVzLmggICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmNwcCAgICAgICAgIHwgNjAyICstLS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmggICAgICAgICAgIHwgICA1ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcCAgICAgICB8ICAzOCAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oICAgICAgICAgfCAg
NDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcCAgICAgICAg
IHwgIDMzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oICAgICAg
ICAgICB8ICAzMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgg
ICAgICAgICAgfCAgNTcgKysKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwIHwgICAyICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmggICB8ICAgMiAtCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmggICAgICAgICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmNwcCAgICAgICAgfCAgNTggKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21JbnN0YW5jZS5oICAgICAgICAgIHwgIDg3ICsrKwogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAgICAgfCAxNTQgKysrLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCAgICAgICAgICAgIHwgIDMzICstCiAuLi4vSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICB8ICAxNCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggfCAgIDggKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwICAgICAgICAgIHwgIDI3
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggICAgICAgICAgICB8
ICAxNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAg
ICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCAg
ICAgICAgIHwgIDIxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5o
ICAgICAgICAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VD
b3VudC5oICAgICAgICAgfCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmNwcCAgICAgICAgICAgIHwgIDM1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5oICAgICAgICAgICAgICB8ICAyNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNpZ25hdHVyZS5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuaCAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGFibGUuY3BwICAgICAgICAgICB8IDEyNiArKysrCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaCAgICAgICAgICAgICB8ICA3NiArKysKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwICAgICAgICAgIHwgIDU5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmggICAgICAgICAgICB8ICAgNSAr
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwICAgICAgICB8ICAg
NyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggICAgICAgICAg
fCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcCAgICAg
ICAgIHwgMjI3ICsrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNt
LmggICAgICAgICAgIHwgIDQ3ICsrCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9K
U1dlYkFzc2VtYmx5LmNwcCB8ICAgMAogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBqc30v
SlNXZWJBc3NlbWJseS5oICAgfCAgNTAgKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suY3BwICAgICAgICAgICAgIHwgIDEzICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggICAgICAgICAgICAgICB8ICA0NiArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcCAgICAgICAgICAgICAgfCAxMTggKystLQogLi4uL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggfCAgODUgKystCiAuLi4vSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcCB8ICA3NiArKy0KIC4uLi9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCAgIHwgIDEzICstCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwICB8ICA3NSAr
LS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oIHwg
IDQzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAgICAgICAg
ICB8IDY1NiArKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dhc21Ub0pTLmggICAgICAgICAgIHwgIDQ5ICsrCiAuLi4vSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCB8ICAyNiArLQogLi4uL3dhc20vanMvV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCAgICAgfCAgIDYgKy0KIC4uLi93YXNtL2pzL1dl
YkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwICAgICAgIHwgIDEzICstCiAuLi4vd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAgICAgICAgICB8ICAgMyArLQogLi4uL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTkgKy0KIC4u
Li93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCAgICAgICAgIHwgICA1ICst
CiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgICAgICAgICAgICB8ICAy
MiArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwICAgICAgICAgICAgICAg
fCAgMTQgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAgICAg
ICAgIHwgICA4ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAg
ICAgICAgICB8ICAgMiArLQogMTA2IGZpbGVzIGNoYW5nZWQsIDI5NjMgaW5zZXJ0aW9ucygrKSwg
MTcxNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL1dlYkFzc2VtYmx5LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJl
bmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNw
cCAoMTAwJSkKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dl
YkFzc2VtYmx5LmggKDYyJSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA4MmVmMTZkLi42YjY3NjdlIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5
IEBACisyMDE3LTA5LTI1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWJBc3NlbWJseTogbm8gVk0gLyBKUyB2ZXJzaW9uIG9mIGV2ZXJ5dGhpbmcgYnV0IElu
c3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc0NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAt
IEV4Y2VlZGluZyBtYXggb24gbWVtb3J5IGdyb3d0aCBub3cgcmV0dXJucyBhIHJhbmdlIGVycm9y
IGFzIHBlcgorICAgICAgICBzcGVjLiBUaGlzIGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNo
YW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00KKyAgICAgICAgZXJyb3IuIFVwZGF0ZSB0aGUgY29y
cmVzcG9uZGluZyB0ZXN0LgorCisgICAgICAgICogd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanM6
CisgICAgICAgIChhc3NlcnRFcSk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGFibGUuanM6Cisg
ICAgICAgIChhc3NlcnQudGhyb3dzKToKKwogMjAxNy0wOS0yMyAgS2VpdGggTWlsbGVyICA8a2Vp
dGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaW5maW5pdGUgbG9vcGluZyB0ZXN0
MjYyIHRlc3QKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMg
Yi9KU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCmluZGV4IGMyODAwMWUuLjdmZTZi
MTMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKKysrIGIv
SlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcwpAQCAtNDUsNyArNDUsNyBAQCBmb3Ig
KGxldCBidWZmZXIgb2YgYnVmZmVycykgewogICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRlTGVuZ3Ro
LCAyKjY0KjEwMjQpOwogCiAgICAgLy8gVGhpcyBzaG91bGRuJ3QgbmV1dGVyIHRoZSBidWZmZXIg
c2luY2UgaXQgZmFpbHMuCi0gICAgYXNzZXJ0VGhyb3dzKCgpID0+IG1lbW9yeS5ncm93KDEwMDAp
LCBFcnJvciwgIk91dCBvZiBtZW1vcnkiKTsgCisgICAgYXNzZXJ0VGhyb3dzKCgpID0+IG1lbW9y
eS5ncm93KDEwMDApLCBSYW5nZUVycm9yLCAiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgd291bGQg
ZXhjZWVkIHRoZSBtZW1vcnkncyBkZWNsYXJlZCBtYXhpbXVtIHNpemUiKTsgCiAgICAgYXNzZXJ0
RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQqMTAyNCk7CiAgICAgYXNzZXJ0RXEobWVtb3J5LmJ1
ZmZlciwgYnVmZmVyKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUu
anMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCmluZGV4IDcyZDQ5NWIuLjQxMzI4NGQg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKKysrIGIvSlNUZXN0cy93
YXNtL2pzLWFwaS90YWJsZS5qcwpAQCAtMTY2LDggKzE2Niw4IEBAIGZ1bmN0aW9uIGFzc2VydEJh
ZFRhYmxlSW1wb3J0KHRhYmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKICAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5IC8gMzI6IHJlc2l6YWJsZSBs
aW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3Jl
YXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKICAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM3IC8gNDM6IHJlc2l6YWJs
ZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMg
Z3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAg
IFt7aW5pdGlhbDogMioqMzEsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNCAvIDI3OiBUYWJsZSdzIGluaXRp
YWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIGludmFsaWQgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyIC8gMzg6IFRh
YmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9v
IGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUncyBpbml0aWFsIHBh
Z2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBtYXhpbXVtIDEwMDAwMDAwIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSJdLAogICAgIF07CiAKICAgICBmb3IgKGNvbnN0IGQgb2YgYmFkRGVzY3JpcHRpb25zKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL1dlYkFzc2VtYmx5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL1dlYkFzc2VtYmx5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2MxZjlkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvV2ViQXNzZW1ibHkuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViQXNzZW1ibHlf
aAorI2RlZmluZSBXZWJBc3NlbWJseV9oCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9XQUV4
Y2VwdGlvbi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dBRnVuY3Rpb24uaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9XQUltcG9ydE9iamVjdC5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1dBSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9XQU1lbW9yeS5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dBTWVtb3J5RGVzY3JpcHRvci5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1dBTW9kdWxlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
V0FUYWJsZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dBVGFibGVEZXNjcmlwdG9yLmg+
CisKKyNlbmRpZiAvKiBXZWJBc3NlbWJseV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRl
eCAyMWQyZDZjLi4wYWFhMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
NTEgQEAKKzIwMTctMDktMjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYkFzc2VtYmx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQg
SW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgY2hhbmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9m
IGNvZGUgd2hpY2ggd2UgaGFkCisgICAgICAgIGludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNz
ZXMgd2hpY2ggcmVwcmVzZW50IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKworICAgICAgICBpbXBs
ZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNwZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhl
IHdheSB0b3dhcmRzCisgICAgICAgIGFsbG93aW5nIEpTQydzIFdlYkFzc2VtYmx5IHRvIHdvcmsg
d2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5nCisgICAgICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mgbm90ICp0aGUqIHRo
aW5nCisgICAgICAgIHlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3IEZJ
WE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KKyAgICAgICAgY2hhbmdlLiBBIGZv
bGxvdy11cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgorCisgICAgICAgIEkg
d2VudCBhYm91dCB0aGlzIGNoYW5nZSBpbiB0aGUgc2ltcGxlc3Qgd2F5IHBvc3NpYmxlOiBncmVw
IHRoZQorICAgICAgICBKYXZhU2NyaXB0Q29yZS93YXNtIGRpcmVjdG9yeSBmb3IgIkpTW15DX10i
IGFzIHdlbGwgYXMgIlZNIiBhbmQgZXhjbHVkZSB0aGUgL2pzLworICAgICAgICBzdWItZGlyZWN0
b3J5ICh3aGljaCBjb250YWlucyB0aGUgSlMgaW1wbGVtZW50YXRpb24gb2YgV2ViQXNzZW1ibHkp
LgorCisgICAgICAgIE5vbmUgb2YgdGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgbmVlZCBmb3IgYSBK
SVQgZW50aXRsZW1lbnQgdG8gYmUgYWJsZSB0byB1c2UKKyAgICAgICAgV2ViQXNzZW1ibHkuIFdl
IGRvbid0IGhhdmUgYW4gaW50ZXJwcmV0ZXIsIHRoZSBwcm9jZXNzIHRoZXJlZm9yZSBzdGlsbCBu
ZWVkcyB0bworICAgICAgICBiZSBhbGxvd2VkIHRvIEpJVCB0byB1c2UgdGhlc2UgcHVyZS1DKysg
QVBJcy4KKworICAgICAgICBJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKKworICAgICAgICAg
IC0gUmVtb3ZlIFZNIGZyb20gUGxhbiBhbmQgYXNzb2NpYXRlZCBwbGFjZXMuIEl0IGNhbiBqdXN0
IGxpdmUgYXMgYSBjYXB0dXJlIGluCisgICAgICAgICAgICB0aGUgY2FsbGJhY2sgbGFtYmRhIGlm
IGl0J3MgbmVlZGVkLgorICAgICAgICAgIC0gV2FzbTo6TWVtb3J5IHNob3VsZG4ndCByZXF1aXJl
IGEgVk0uIEl0IHdhcyBvbmx5IHVzZWQgdG8gYXNrIHRoZSBHQyB0bworICAgICAgICAgICAgY29s
bGVjdC4gV2Ugbm93IGluc3RlYWQgcGFzcyB0d28gbGFtYmRhcyBhdCBjb25zdHJ1Y3Rpb24gdGlt
ZSBmb3IgdGhpcworICAgICAgICAgICAgcHVycG9zZTogb25lIHRvIG5vdGlmeSBvZiBtZW1vcnkg
cHJlc3N1cmUsIGFuZCB0aGUgb3RoZXIgdG8gYXNrIGZvcgorICAgICAgICAgICAgc3luY3Job25v
dXMgbWVtb3J5IHJlY2xhbWF0aW9uLiBUaGlzIGFsbG93cyB3aG9ldmVyIGNyZWF0ZXMgdGhlIG1l
bW9yeSB0bworICAgICAgICAgICAgZGljdGF0ZSBob3cgdG8gcmVhY3QgdG8gYm90aCB0aGVzZSBj
YXNlcywgYW5kIGZvciBhIEpTIGVtYmVkZGluZyB0aGF0J3MgdG8KKyAgICAgICAgICAgIGNhbGwg
dGhlIEdDIChhc3luYyBvciBzeW5jLCByZXNwZWN0aXZlbHkpLgorICAgICAgICAgIC0gTW92ZSBn
cm93IGxvZ2ljIGZyb20gSlNXZWJBc3NlbWJseU1lbW9yeSB0byBXYXNtOjpNZW1vcnk6Omdyb3cu
IFVzZSBFeHBlY3RlZAorICAgICAgICAgICAgdGhlcmUsIHdpdGggYW4gZW51bSBjbGFzcyBmb3Ig
ZmFpbHVyZSB0eXBlcy4KKyAgICAgICAgICAtIEV4Y2VlZGluZyBtYXggb24gbWVtb3J5IGdyb3d0
aCBub3cgcmV0dXJucyBhIHJhbmdlIGVycm9yIGFzIHBlciBzcGVjLiBUaGlzCisgICAgICAgICAg
ICBpcyBhICh2ZXJ5IG1pbm9yKSBicmVha2luZyBjaGFuZ2U6IGl0IHVzZWQgdG8gdGhyb3cgT09N
IGVycm9yLiBVcGRhdGUgdGhlCisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRlc3QuCisgICAg
ICAgICAgLSBXaGVuIGdlbmVyYXRpbmcgdGhlIGdyb3dfbWVtb3J5IG9wY29kZSwgbm8gbmVlZCB0
byBnZXQgdGhlIFZNLiBJbnN0ZWFkLAorICAgICAgICAgICAgcmVhY2ggZGlyZWN0bHkgZm9yIFdh
c206Ok1lbW9yeSBhbmQgZ3JvdyBpdC4KKyAgICAgICAgICAtIEpTV2ViQXNzZW1ibHlNZW1vcnk6
Omdyb3cgY2FuIG5vdyBhbHdheXMgdGhyb3cgb24gZmFpbHVyZSwgYmVjYXVzZSBpdCdzIG9ubHkK
KyAgICAgICAgICAgIGV2ZXIgY2FsbGVkIGZyb20gSlMgKG5vdCBmcm9tIGdyb3dfbWVtb3J5IGFz
IGJlZm9yZSkuCisgICAgICAgICAgLSBXYXNtOjpNZW1vcnkgbm93IHRha2VzIGEgY2FsbGJhY2sg
Zm9yIHN1Y2Nlc3NmdWwgZ3Jvd3RoLiBUaGlzIGFsbG93cyBKUworICAgICAgICAgICAgd3JhcHBl
cnMgdG8gcmVnaXN0ZXIgdGhlbXNlbHZlcyB3aGVuIGdyb3d0aCBzdWNjZWVkcyB3aXRob3V0IFdh
c206Ok1lbW9yeQorICAgICAgICAgICAga25vd25pbmcgYW55dGhpbmcgYWJvdXQgSlMuIEl0J2xs
IGFsc28gYWxsb3cgY3JlYXRpbmcgYSBsaXN0IG9mIGNhbGxiYWNrcworICAgICAgICAgICAgZm9y
IHdoZW4gd2UgYWRkIHRocmVhZCBzdXBwb3J0ICh3ZSdsbCB3YW50IHRvIG5vdGlmeSBtYW55IHdy
YXBwZXJzLCBhbGwKKyAgICAgICAgICAgIHVuZGVyIGEgbG9jaykuCisgICAgICAgICAgLSBXYXNt
OjpNZW1vcnkgaXMgbm93IGJhY2sgdG8gYmVpbmcgdGhlIHNvdXJjZSBvZiB0cnV0aCBhYm91dCBh
ZGRyZXNzIC8gc2l6ZSwKKyAgICAgICAgICAgIHVzZWQgZGlyZWN0bHkgYnkgZ2VuZXJhdGVkIGNv
ZGUgaW5zdGVhZCBvZiBKU1dlYkFzc2VtYmx5TWVtb3J5LgorICAgICAgICAgIC0gTW92ZSB3YXNt
VG9KUyBmcm9tIHRoZSBnZW5lcmFsIFdhc21CaW5kaW5nIGhlYWRlciB0byBpdHMgb3duIGhlYWRl
ciB1bmRlcgorICAgICAgICAgICAgd2FzbS9qcy4gSXQncyBvbmx5IHVzZWQgYnkgd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCwgYW5kIHVzZXMgVk0sCisgICAgICAgICAgICBhbmQg
dGhlcmVmb3JlIGlzbid0IGdlbmVyYWwgV2ViQXNzZW1ibHkuCisgICAgICAgICAgLSBNYWtlIFdh
c206OkNvbnRleHQgYW4gYWN0dWFsIHR5cGUgKGp1c3QgYSBzdHJ1Y3QgaG9sZGluZyBhCisgICAg
ICAgICAgICBKU1dlYkFzc2VtbHlJbnN0YW5jZSBmb3Igbm93KSBpbnN0ZWFkIG9mIGFuIGFsaWFz
IGZvciB0aGF0LiBOb3RhYmx5IHRoaXMKKyAgICAgICAgICAgIGRvZXNuJ3QgYWRkIGFueXRoaW5n
IHRvIHRoZSBDb250ZXh0IGFuZCBkb2Vzbid0IGNoYW5nZSB3aGF0IGFjdHVhbGx5IGdldHMKKyAg
ICAgICAgICAgIHBhc3NlZCBhcm91bmQgaW4gSklUIGNvZGUgKGZhc3QgVExTIG9yIHJlZ2lzdGVy
cykgYmVjYXVzZSB0aGVzZSBjaGFuZ2VzCisgICAgICAgICAgICBwb3RlbnRpYWxseSBpbXBhY3Qg
cGVyZm9ybWFuY2UuIFRoZSBlbnRpcmUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBpcyB0bworICAg
ICAgICAgICAgYWxsb3cgcGFzc2luZyBXYXNtOjpDb250ZXh0IGFyb3VuZCB3aXRob3V0IGhhdmlu
ZyB0byBrbm93IGFib3V0IFZNLiBTaW5jZSBWTQorICAgICAgICAgICAgY29udGFpbnMgYSBXYXNt
OjpDb250ZXh0IHRoZSBKUyBlbWJlZGRpbmcgaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUsIGJ1dCB3
aXRoCisgICAgICAgICAgICB0aGlzIHNldHVwIGEgbm9uLUpTIGVtYmVkZGluZyBpcyBtdWNoIGJl
dHRlciBvZmYuCisgICAgICAgICAgLSBNb3ZlIEpTV2ViQXNzZW1ibHkgaW50byB0aGUgSlMgZm9s
ZGVyLgorICAgICAgICAgIC0gT01HUGxhbjogdXNlIFdhc206OkNvZGVCbG9jayBkaXJlY3RseSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suCisgICAgICAgICAgLSB3YXNtLT5KUyBz
dHVicyBhcmUgbm93IG9uIFdhc206OkNvZGVCbG9jaydzIHRhaWwgYXMgcmF3IHBvaW50ZXJzLCBp
bnN0ZWFkIG9mCisgICAgICAgICAgICBiZWluZyBvbiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLCBh
bmQgYXJlIG5vdyBjYWxsZWQgd2FzbS0+RW1iZWRkZXIKKyAgICAgICAgICAgIHN0dWJzLiBUaGUg
b3duZWQgcmVmZXJlbmNlIGlzIHN0aWxsIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBp
cyBzdGlsbAorICAgICAgICAgICAgY2FsbGVkIHdhc20tPkpTIHN0dWIuIFRoaXMgbW92ZSBtZWFu
cyB0aGF0IHRoZSBlbWJlZGRlciBtdXN0LCBhZnRlciBjcmVhdGluZworICAgICAgICAgICAgYSBX
YXNtOjpDb2RlQmxvY2ssIHNvbWVob3cgY3JlYXRlIHRoZSBzdHVicyB0byBjYWxsIGJhY2sgaW50
byB0aGUKKyAgICAgICAgICAgIGVtYmVkZGVyLiBUaGlzIGlzbid0IGFkZGluZyBhbnkgaW5kaXJl
Y3Rpb24gdG8gdGhlIGdlbmVyYXRlZCBjb2RlIGJlY2F1c2UKKyAgICAgICAgICAgIHRoZSBCMyBJ
UiBnZW5lcmF0b3Igbm93IHJlYWNoZXMgZm9yIFdhc206OkNvZGVCbG9jayBpbnN0ZWFkIG9mCisg
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLgorICAgICAgICAgIC0gTW92ZSBtb3Jl
IENvZGVCbG9jayB0aGluZ3MuIENvbXBpbGF0aW9uIGNvbXBsZXRpb24gaXMgbm93IG1hcmtlZCBi
eSBpdHMgb3duCisgICAgICAgICAgICBhdG9taWM8Ym9vbD4gZmxhZyBpbnN0ZWFkIG9mIGEgbnVs
bHB0ciBwbGFuOiB0aGF0IHJlcXVpcmVkIHVzaW5nIGEgbG9jaywgYW5kCisgICAgICAgICAgICB3
YXMgY2F1c2luZyBhIGRlYWRsb2NrIGluIHN0YWNrLXRyYWNlLmpzIGJlY2F1c2UgYmVmb3JlIG15
IGNoYW5nZXMKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sgZGlkIGl0cyBvd24g
Y29tcGxldGlvbiBjaGVja2luZyBzZXBhcmF0ZWx5IGZyb20KKyAgICAgICAgICAgIFdhc206OkNv
ZGVCbG9jaywgd2l0aG91dCBnZXR0aW5nIHRoZSBsb2NrLiBOb3cgdGhhdCBldmVyeXRoaW5nIHBv
aW50cyB0bworICAgICAgICAgICAgV2FzbTo6Q29kZUJsb2NrIGFuZCB0aGVyZSdzIG5vIGNhY2hl
ZCBjb21wbGV0aW9uIG1hcmtlciwgdGhlIGxvY2sgd2FzIGJlaW5nCisgICAgICAgICAgICBhY3F1
aXJlZCBpbiBhIHNhbml0eS1jaGVjayBhc3NlcnRpb24uCisgICAgICAgICAgLSBFbWJlZGRlciAt
PiBXYXNtIHdyYXBwZXJzIGFyZSBub3cgZ2VuZXJhdGVkIHRocm91Z2ggYSBmdW5jdGlvbiB0aGF0
J3MgcGFzc2VkCisgICAgICAgICAgICBpbiBhdCBjb21waWxhdGlvbiB0aW1lLCBpbnN0ZWFkIG9m
IGJlaW5nIGhhcmQtY29kZWQgYXMgYSBKUyAtPiBXYXNtIHdyYXBwZXIuCisgICAgICAgICAgLSBX
YXNtTWVtb3J5IGRvZW5zJ3QgbmVlZCB0byBrbm93IGFib3V0IGZhdWx0IGhhbmRsaW5nIHRodW5r
cy4gT25seSB0aGUgSVIKKyAgICAgICAgICAgIGdlbmVyYXRvciBzaG91bGQga25vdywgYW5kIHNo
b3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgZXhjZXB0aW9uIHRocm93aW5nCisgICAgICAgICAgICB0
aHVuayBpcyBnZW5lcmF0ZWQgaWYgYW55IG1lbW9yeSBpcyBwcmVzZW50IChub3RlOiB3aXRoIHNp
Z25hbCBoYW5kbGluZyBub3QKKyAgICAgICAgICAgIGFsbCBvZiB0aGVtIGdlbmVyYXRlIGFuIGV4
Y2VwdGlvbiBjaGVjaykuCisgICAgICAgICAgLSBNYWtlIGV4Y2VwdGlvbiB0aHJvd2luZyBwbHVn
Z2FibGU6IGluc3RlYWQgb2YgaGF2aW5nIGEgaGFyZC1jb2RlZAorICAgICAgICAgICAgSlMtc3Bl
Y2lmaWMgbGFtYmRhIHdlIG5vdyBoYXZlIGEgcmVndWxhciBDKysgZnVuY3Rpb24gYmVpbmcgY2Fs
bGVkIGZyb20gSklUCisgICAgICAgICAgICBjb2RlIHdoZW4gYSBXZWJBc3NlbWJseSBleGNlcHRp
b24gaXMgdGhyb3duLiBUaGlzIGFsbG93cyBhbnkgZW1iZWRkZXIgdG8gZ2V0CisgICAgICAgICAg
ICBjYWxsZWQgYXMgdGhleSB3aXNoLiBGb3Igbm93IGEgcHJvY2VzcyBjYW4gb25seSBoYXZlIGEg
c2luZ2xlIG9mIHRoZXNlCisgICAgICAgICAgICBmdW5jdGlvbnMgKGkuZS4gb25seSBvbmUgZW1i
ZWRkZXIgcGVyIHByb2Nlc3MpIGJlY2F1c2UgdGhlIHRyYXAgaGFuZGxlciBpcyBhCisgICAgICAg
ICAgICBzaW5nbGV0b24uIFRoYXQgY2FuIGJlIGZpeGVkIGluIGluICMxNzc0NzUuCisgICAgICAg
ICAgLSBDcmVhdGUgV2FzbUVtYmVkZGVyLmggd2hlcmUgYWxsIGVtYmVkZGVyIHBsdWdnaW5nIHdp
bGwgbGl2ZS4KKyAgICAgICAgICAtIFNwbGl0IHVwIEpTV2ViQXNzZW1ibHlUYWJsZSBpbnRvIFdh
c206OlRhYmxlIHdoaWNoIGlzCisgICAgICAgICAgICByZWZjb3VudGVkLiBKU1dlYkFzc2VtYmx5
VGFibGUgbm93IG9ubHkgY29udGFpbnMgdGhlIEpTIGZ1bmN0aW9ucyBpbiB0aGUKKyAgICAgICAg
ICAgIHRhYmxlLCBhbmQgV2FzbTo6VGFibGUgaXMgd2hhdCdzIHVzZWQgYnkgdGhlIEpJVCBjb2Rl
IHRvIGxvb2t1cCB3aGVyZSB0bworICAgICAgICAgICAgY2FsbCBhbmQgZG8gdGhlIGluc3RhbmNl
IGNoZWNrIChmb3IgY29udGV4dCBzd2l0Y2gpLiBOb3RlIHRoYXQgdGhpcyBjcmVhdGVzCisgICAg
ICAgICAgICBhbiBleHRyYSBhbGxvY2F0aW9uIGZvciBhbGwgdGhlIGluc3RhbmNlcyBpbiBXYXNt
OjpUYWJsZSwgYW5kIGluIGV4Y2hhbmdlCisgICAgICAgICAgICByZW1vdmVzIGFuIGluZGlyZWN0
aW9uIGluIEpJVCBjb2RlIGJlY2F1c2UgdGhlIGluc3RhbmNlIHVzZWQgdG8gYmUgb2J0YWluZWQK
KyAgICAgICAgICAgIG9mZiBvZiB0aGUgSlMgZnVuY3Rpb24uIEFsc28gbm90ZSB0aGF0IGl0J3Mg
dGhlIGVtYmVkZGVyIHRoYW4ga2VlcHMgdGhlCisgICAgICAgICAgICBpbnN0YW5jZXMgYWxpdmUs
IG5vdCBXYXNtOjpUYWJsZSAod2hpY2ggaG9sZHMgYSBkdW1iIHBvaW50ZXIgdG8gdGhlCisgICAg
ICAgICAgICBpbnN0YW5jZSksIGJlY2F1c2UgZG9pbmcgb3RoZXJ3aXNlIHdvdWxkIGNhdXNlIHJl
ZmVyZW5jZSBjeWNsZXMuCisgICAgICAgICAgLSBBZGQgV2FzbUluc3RhbmNlLiBJdCBkb2Vzbid0
IGRvIG11Y2ggZm9yIG5vdywgb3ducyBnbG9iYWxzLgorICAgICAgICAgIC0gSlNXZWJBc3NlbWJs
eSBpbnN0YW5jZSBub3cgZG9lc24ndCBqdXN0IGNvbnRhaW4gdGhlIGltcG9ydGVkIGZ1bmN0aW9u
cyBhcworICAgICAgICAgICAgSlNPYmplY3RzLCBpdCBhbHNvIGhhcyB0aGUgY29ycmVzcG9uZGlu
ZyBpbXBvcnQncyBpbnN0YW5jZSBhbmQgd2FzbQorICAgICAgICAgICAgZW50cnlwb2ludC4gVGhp
cyB0cmlwbGVzIHRoZSBzcGFjZSBhbGxvY2F0ZWQgcGVyIGluc3RhbmNlJ3MgaW1wb3J0ZWQKKyAg
ICAgICAgICAgIGZ1bmN0aW9uLCBidXQgdGhlcmUgc2hvdWxkbid0IGJlIHRoYXQgbWFueSBpbXBv
cnRzLiBUaGlzIGhhcyB0d28gdXBzaWRlczogaXQKKyAgICAgICAgICAgIGNyZWF0ZXMgc21hbGxl
ciBhbmQgZmFzdGVyIGNvZGUsIGFuZCBtYWtlcyBpcyBlYXNpZXIgdG8gZGlzYXNzb2NpYXRlCisg
ICAgICAgICAgICBlbWJlZGRlci1zcGVjaWZpYyB0aGluZ3MgZnJvbSBlbWJlZGRlci1uZXV0cmFs
IHRoaW5ncy4gVGhlIHNtYWxsIC8gZmFzdGVyCisgICAgICAgICAgICB3aW4gaXMgaW4gdHdvIHBs
YWNlczogQjMgSVIgZ2VuZXJhdG9yIG9ubHkgbmVlZHMgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbiBm
b3IKKyAgICAgICAgICAgIHRoZSBjYWxsIG9wY29kZSAod2hlbiB0aGUgY2FsbGVkIGluZGV4IGlz
IGFuIGltcG9ydCkgdG8ga25vdyB3aGV0aGVyIHRoZQorICAgICAgICAgICAgaW1wb3J0IGlzIHdh
c20tPndhc20gb3Igd2FzbS0+ZW1iZWRkZXIgKHRoaXMgaXNuJ3Qga25vd24gYXQgY29tcGlsZS10
aW1lCisgICAgICAgICAgICBiZWNhdXNlIGl0J3MgZGVwZW5kZW50IG9uIHRoZSBpbXBvcnQgb2Jq
ZWN0KSwgdGhpcyBpcyBub3cgZG9uZSBieSBzZWVpbmcgaWYKKyAgICAgICAgICAgIHRoYXQgaW1w
b3J0IGZ1bmN0aW9uIGhhcyBhbiBhc3NvY2lhdGVkIHRhcmdldCBpbnN0YW5jZSAob25seSB3YXNt
LT53YXNtCisgICAgICAgICAgICBkb2VzKTsgdGhlIG90aGVyIHBsYWNlIGlzIHdhc21CaW5kaW5n
IHdoaWNoIHVzZXMgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbiB0bworICAgICAgICAgICAgZmlndXJl
IG91dCB0aGUgd2FzbS0+d2FzbSB0YXJnZXQgaW5zdGFuY2UsIGFuZCB0aGVuIGdldHMKKyAgICAg
ICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gdG8gZG8gYSB0YWlsCisgICAgICAgICAgICBjYWxsLiBUaGUgZGlzYXNzb2NpYXRpb24g
Y29tZXMgYmVjYXVzZSB0aGUgdGFyZ2V0IGluc3RhbmNlIGNhbiBiZQorICAgICAgICAgICAgV2Fz
bTo6SW5zdGFuY2Ugb25jZSB3ZSBjaGFuZ2Ugd2hhdCB0aGUgQ29udGV4dCBpcywgYW5kCisgICAg
ICAgICAgICBXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiBpcyBhbHJlYWR5IGVtYmVkZGVyLWlu
ZGVwZW5kZW50LiBBcyBhIG5leHQgc3RlcCBJCisgICAgICAgICAgICBjYW4gbW92ZSB0aGlzIHRh
aWwgYWxsb2NhdGlvbiBmcm9tIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSB0byBXYXNtOjpJbnN0YW5j
ZSwKKyAgICAgICAgICAgIGFuZCBsZWF2ZSBpbXBvcnRGdW5jdGlvbiBpbiBhcyBhbiBvcGFxdWUg
cG9pbnRlciB3aGljaCBpcyBlbWJlZGRlci1zcGVjaWZpYywKKyAgICAgICAgICAgIGFuZCBpbiBK
UyB3aWxsIHJlbWFpbiBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+LgorICAgICAgICAgIC0gUmVuYW1l
IFZNRW50cnlGcmFtZSB0byBFbnRyeUZyYW1lLCBhbmQgaW4gbWFueSBwbGFjZXMgcGFzcyBhIHBv
aW50ZXIgdG8gaXQKKyAgICAgICAgICAgIGFyb3VuZCBpbnN0ZWFkIG9mIFZNLiBUaGlzIGlzIGEg
Zmlyc3Qgc3RlcCBpbiBhbGxvd2luZyBlbnRyeSBmcmFtZXMgd2hpY2gKKyAgICAgICAgICAgIGFy
ZW4ndCBzdG9yZWQgb24gVk0sIGJ1dCB3aGljaCBhcmUgaW5zdGVhZCBzdG9yZWQgaW4gYW4gZW1i
ZWRkZXItc3BlY2lmaWMKKyAgICAgICAgICAgIGxvY2F0aW9uLiBUaGF0IGNoYW5nZSB3b24ndCBy
ZWFsbHkgYWZmZWN0IEpTIGV4Y2VwdCB0aHJvdWdoIGNvZGUgY2h1cm4sIGJ1dAorICAgICAgICAg
ICAgd2lsbCBhbGxvdyBXZWJBc3NlbWJseSB0byB1c2Ugc29tZSBtYWNoaW5lcnkgaW4gYSBnZW5l
cmljIG1hbm5lciB3aXRob3V0CisgICAgICAgICAgICBoYXZpbmcgYSBWTS4KKworICAgICAgICAq
IEFQSS9XZWJBc3NlbWJseS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmguCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dl
bmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICog
ZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9m
RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAg
ICAoSlNDOjpEZWJ1Z2dlcjo6dW53aW5kRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
ZGlkRXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6
CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NS
RXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6Om9zckVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExD
b21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwv
RlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
Omxvd2VyKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJh
bWUgY29uc3QpOgorICAgICAgICAqIGludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAg
ICAoSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6Cisg
ICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxs
RnJhbWVUcmFjZXJXaXRoUmVzdG9yZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRy
YWNlcldpdGhSZXN0b3JlOjp+TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAg
ICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5k
RnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6
OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0
b3IpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAg
ICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlND
OjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2Fs
bGVySXNFbnRyeUZyYW1lIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVj
b3JkLmg6CisgICAgICAgIChKU0M6OlZNRW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToK
KyAgICAgICAgKEpTQzo6Vk1FbnRyeVJlY29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgor
ICAgICAgICAoSlNDOjpFbnRyeUZyYW1lOjp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAg
KiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5l
ZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVySW1wbCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQv
SklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAg
ICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9y
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2Fs
bEZyYW1lKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChK
U0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRU
aHVua3MuY3BwOgorICAgICAgICAoSlNDOjp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c206CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21w
dXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAg
ICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVX
YWxrZXI6OkZyYW1lV2Fsa2VyKToKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VU
b1BhcmVudEZyYW1lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1Vu
dmVyaWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoK
KyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZN
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZy
YW1lT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlND
Ojppc1NhbmVGcmFtZSk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJl
YWtwb2ludHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09u
U3RhY2spOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0
ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldh
c206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
OgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1
bmN0aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgor
ICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNt
VG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9X
YXNtQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Q29kZUJsb2NrOjpzZXRDb21waWxhdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21D
b2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9y
dFN0dWJzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6
CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHVi
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0Vt
YmVkZGVyU3R1Yik6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxs
U3R1YkZvckltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRp
b25GaW5pc2hlZCk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVC
bG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAg
ICAgKiB3YXNtL1dhc21Db250ZXh0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6
dXNlRmFzdFRMUyk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb250ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNt
Q29udGV4dC5oOgorICAgICAgICAqIHdhc20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9X
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21JbnN0YW5jZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6
Okluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6Cisg
ICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6
CisgICAgICAgICogd2FzbS9XYXNtSW5zdGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Zmlu
YWxpemVDcmVhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SW5zdGFuY2U6Om1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0
YWJsZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Oklu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJ
bnN0YW5jZTo6Y2FjaGVkU3RhY2tMaW1pdCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Oklu
c3RhbmNlOjpzZXRDYWNoZWRTdGFja0xpbWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnku
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVt
b3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNt
L1dhc21NZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9y
eSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAg
KiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBp
bm5lZFJlZ2lzdGVySW5mbzo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0
ZXJJbmZvOjpQaW5uZWRSZWdpc3RlckluZm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9T
YXZlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjptYWtlVmFsaWRhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlOjp2YWxpZGF0ZVN5bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRl
QXN5bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZTo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1
bGUuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdhc20v
V2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFuKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAqIHdh
c20vV2FzbU9NR1BsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3YXNt
L1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46OmFkZENvbXBsZXRpb25UYXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxh
bi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAq
IHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6
CisgICAgICAgICogd2FzbS9XYXNtVGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6VGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpU
YWJsZTo6Z3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNt
L1dhc21UYWJsZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGltdW0g
Y29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OlRhYmxlOjpvZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpU
YWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zm
c2V0T2ZJbnN0YW5jZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUp
OgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRo
cm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206
OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OlRo
dW5rczo6c2V0VGhyb3dXYXNtRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtz
Ojp0aHJvd1dhc21FeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAg
ICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xp
c3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRleHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
Lmg6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dh
c20uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
aC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9KU1dlYkFzc2VtYmx5LmguCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9jayk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6Cisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
OjppbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29udGV4
dCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0NhbGxl
ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZSk6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlw
b2ludCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBv
cnRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0
RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVybmFs
TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29kZUJs
b2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
Zldhc21UYWJsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
R2xvYmFscyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZX
YXNtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZldhc21NZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNh
Y2hlZFN0YWNrTGltaXQgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnNldENhY2hlZFN0YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Ondhc21NZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Ondhc21Nb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFsbG9j
YXRpb25TaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUg
Y29uc3QpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1l
bW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlN
ZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3Vj
Y2Vzc0NhbGxiYWNrKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoK
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
VGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6
Omdyb3cpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjppc1ZhbGlkU2l6ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4
aW11bSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAq
IHdhc20vanMvV2FzbVRvSlMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQmluZGluZy5jcHAuCisgICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1w
b3J0SlNDZWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlND
OjpXYXNtOjp3YXNtVG9KU0V4Y2VwdGlvbik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OmNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OndlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6d2ViQXNzZW1ibHlDb21waWxlRnVuYyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToK
KyAgICAgICAgKEpTQzo6Y29tcGlsZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2Vi
QXNzZW1ibHlWYWxpZGF0ZUZ1bmMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJs
ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRh
YmxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIw
MTctMDktMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBNYWtlIEF0dHJpYnV0ZSBhbiBlbnVtIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDU3NjJmNjguLmUxZjZkMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xNDYwLDcgKzE0NjAsNiBAQAogCQlBRDJGQ0MyMDFEQjU5Q0IyMDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMTQxREI1OUM1OTAwQjNFNzM2IC8qIFdlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKIAkJQUQyRkNDMjExREI1OUNCMjAw
QjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MxNTFEQjU5QzU5MDBCM0U3MzYg
LyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAqLzsgfTsKIAkJQUQyRkNDMkQxREI4
MzhGRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLzsgfTsKLQkJQUQyRkNDMzExREI4M0Q0OTAwQjNFNzM2
IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmggKi87
IH07CiAJCUFENDEyQjM0MUU3QjJFOUUwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0MTJCMzIxRTdCMkU4QTAw
OEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQUQ0MjUyNTExRTVEMEUxNDAwOUQyQTk3IC8qIEZ1bGxDb2RlT3Jp
Z2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQy
NTI1MDFFNUQwREVCMDA5RDJBOTcgLyogRnVsbENvZGVPcmlnaW4uaCAqLzsgfTsKIAkJQUQ0OTM3
QzQxRERCRTYxNDAwNzdDODA3IC8qIEFic3RyYWN0TW9kdWxlUmVjb3JkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDMjFEREJFNjBBMDA3N0M4
MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ2OCw2ICsxNDY3LDEyIEBACiAJCUFENDkzN0Q0MURE
RDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDQTFEREQyNzM0MDA3N0M4MDcgLyog
V2ViQXNzZW1ibHlGdW5jdGlvbi5oICovOyB9OwogCQlBRDRCMURGQTFERjI0NEUyMDA3MUFFMzIg
LyogV2FzbUJpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5oICovOyB9Owog
CQlBRDVCNDE2RjFFQkFGQjc3MDA4RUZBNDMgLyogV2FzbU5hbWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUI0MTZFMUVCQUZCNjUwMDhFRkE0MyAv
KiBXYXNtTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUFENUMzNkREMUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUMzNkRDMUY2ODhCNUYw
MDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3Rh
bmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVD
MzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RTYxRjY5RUM5MTAwMEJDQUFG
IC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkVBMUY3NUFENkEw
MDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9XYXNtLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFz
c2VtYmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdhc21Ub0pTLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIg
LyogV2FzbVRvSlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBRDc0MzhDMDFFMDQ1N0E0MDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ3NDM4QkYxRTA0NTc5
MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dD
TWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDhGRjM5ODFFQjVC
REIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUlu
ZGV4T3JOYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTQxNTYsOSArNDE2MSwyNSBAQAogCQlBRDJGQ0MxNTFEQjU5QzU5MDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMjYxREI4MzhDNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJv
dG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2Vt
Ymx5UHJvdG90eXBlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YkFzc2VtYmx5UHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVByb3RvdHlwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDJGQ0MyRTFEQjgzOUY3MDBCM0U3MzYgLyog
SlNXZWJBc3NlbWJseS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYkFzc2VtYmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUQyRkNDMkYx
REI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNDcxRjRCQTc4NjAwNjY5OTEyIC8qIFdBQmFzZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXQUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NEExRjRERTY4QzAwNjY5OTEyIC8qIFdBSW5zdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FJbnN0
YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0QjFGNERFNjhDMDA2
Njk5MTIgLyogV0FUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVRhYmxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTRDMUY0REU2OEMwMDY2OTkxMiAvKiBXQU1lbW9yeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXQU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDNGMUU1MjFGNEY0QUU1MDA2Njk5MTIgLyogV0FNZW1vcnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0FNZW1vcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU1
MzFGNEY0QUU1MDA2Njk5MTIgLyogV0FNb2R1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FN
b2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU1NDFGNEY0QUU1
MDA2Njk5MTIgLyogV0FJbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUluc3RhbmNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTUxRjRGNEFFNTAwNjY5
OTEyIC8qIFdBVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FUYWJsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY0MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4
Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBRDNGMUU2NTFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0FFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTWVtb3J5RGVzY3JpcHRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY5MUY1NDdDQjYwMDY2OTkxMiAvKiBXQU1lbW9y
eURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FNZW1vcnlEZXNjcmlwdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZBMUY1NDdDQjYwMDY2OTkxMiAvKiBXQUlt
cG9ydE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUltcG9ydE9iamVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2QjFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURl
c2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FUYWJsZURlc2NyaXB0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkMxRjU0N0NCODAwNjY5OTEyIC8qIFdBSW1wb3J0
T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBSW1wb3J0T2JqZWN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkQxRjU0N0NCODAwNjY5OTEyIC8qIFdBVGFi
bGVEZXNjcmlwdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBVGFibGVEZXNjcmlwdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNzAxRjU0QzNBQTAwNjY5OTEy
IC8qIFdBRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU3MTFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUQ0MTJCMzExRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Db250ZXh0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0MTJCMzIxRTdCMkU4QTAwOEFGMTU3IC8q
IFdhc21Db250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Db250
ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENDEyQjM1MUU3QjU3QzAwMDhB
RjE1NyAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDE3MywxNSArNDE5NCwyNiBAQAogCQlBRDRC
MURGNzFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUJpbmRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBRDRCMURGODFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUJpbmRpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1QjQxNkUxRUJBRkI2NTAwOEVGQTQzIC8qIFdhc21OYW1lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUVtYmVkZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2FzbUluc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtSW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUQ1QzM2RTMxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXYXNtVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZF
NDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21UYWJs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBD
MkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXYXNtU2lnbmF0dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3
NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNpZ25hdHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBRDg2QTkzRDFBQTREODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrR0NNYXBJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOERENkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1Rv
V2FzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1RvV2FzbS5oOyBwYXRoID0ganMvSlNUb1dhc20uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ4REQ2RDAxRjY3MDhBMzAwMDRFQjUyIC8q
IEpTVG9XYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTVG9XYXNtLmNwcDsgcGF0aCA9IGpz
L0pTVG9XYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTUxRUI1
QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtSW5kZXhPck5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSW5kZXhPck5hbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEQjZGNjdDMUUxNUQ3NTAwMDgyRjM4
NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21QYWdlQ291bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREJD
NTREMjFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5jcHA7
IHBhdGggPSBqcy9XZWJBc3NlbWJseVRvSlNDYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBREJDNTREMzFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2Fs
bGVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXYXNtVG9KUy5oOyBwYXRoID0ganMvV2FzbVRvSlMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pT
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdhc21Ub0pTLmNwcDsgcGF0aCA9IGpzL1dhc21Ub0pT
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRjIxRjYyNDgyOTAwMTMx
M0MyIC8qIEpTV2ViQXNzZW1ibHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJs
eS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyog
V2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREIxRjYyMThENzdEQjcwMDlCNThB
OCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9w
YXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxOTEsNiArNDIy
Myw4IEBACiAJCUFERTgwMjk2MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJv
clByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJB
c3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtF
cnJvclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk3
MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlw
ZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOUQxRTA4RjIyNjAwNThERTc4IC8qIFdlYkFzc2Vt
Ymx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHA7IHBhdGggPSBqcy9X
ZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQURGQzMwRjcxRjQ3QTdCODAwNjQ1MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFE
RkMzMEY5MUY0N0E4QzAwMDY0NTFEMyAvKiBXQU1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1v
ZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBE
NUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI1OUY4OTM4MTg5MUFEQjUwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3Ry
dWN0aW9uU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
bGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVG9vbEV4ZWN1dGFibGUueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NjQ1LDYgKzU2NzksMjYgQEAKIAkJCQk4NkYz
RUVCNjE2ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0
QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRB
OEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovLAorCQkJCUFEM0YxRTQ3
MUY0QkE3ODYwMDY2OTkxMiAvKiBXQUJhc2UuaCAqLywKKwkJCQlBRDNGMUU2NTFGNTBFNTdGMDA2
Njk5MTIgLyogV0FFeGNlcHRpb24uY3BwICovLAorCQkJCUFEM0YxRTY0MUY1MEU1N0YwMDY2OTkx
MiAvKiBXQUV4Y2VwdGlvbi5oICovLAorCQkJCUFEM0YxRTcxMUY1NEMzQUEwMDY2OTkxMiAvKiBX
QUZ1bmN0aW9uLmNwcCAqLywKKwkJCQlBRDNGMUU3MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5j
dGlvbi5oICovLAorCQkJCUFEM0YxRTZDMUY1NDdDQjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVj
dC5jcHAgKi8sCisJCQkJQUQzRjFFNkExRjU0N0NCNjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0
LmggKi8sCisJCQkJQUQzRjFFNTQxRjRGNEFFNTAwNjY5OTEyIC8qIFdBSW5zdGFuY2UuY3BwICov
LAorCQkJCUFEM0YxRTRBMUY0REU2OEMwMDY2OTkxMiAvKiBXQUluc3RhbmNlLmggKi8sCisJCQkJ
QUQzRjFFNTIxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTWVtb3J5LmNwcCAqLywKKwkJCQlBRDNGMUU0
QzFGNERFNjhDMDA2Njk5MTIgLyogV0FNZW1vcnkuaCAqLywKKwkJCQlBRDNGMUU2ODFGNTQ3Q0I2
MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9yLmNwcCAqLywKKwkJCQlBRDNGMUU2OTFGNTQ3
Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9yLmggKi8sCisJCQkJQUQzRjFFNTMxRjRG
NEFFNTAwNjY5OTEyIC8qIFdBTW9kdWxlLmNwcCAqLywKKwkJCQlBREZDMzBGOTFGNDdBOEMwMDA2
NDUxRDMgLyogV0FNb2R1bGUuaCAqLywKKwkJCQlBRDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyog
V0FUYWJsZS5jcHAgKi8sCisJCQkJQUQzRjFFNEIxRjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUu
aCAqLywKKwkJCQlBRDNGMUU2RDFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3Iu
Y3BwICovLAorCQkJCUFEM0YxRTZCMUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRv
ci5oICovLAorCQkJCUFERkMzMEY3MUY0N0E3QjgwMDY0NTFEMyAvKiBXZWJBc3NlbWJseS5oICov
LAogCQkJCTVERTNEMEY0MEREOERERkIwMDQ2ODcxNCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAq
LywKIAkJCSk7CiAJCQlwYXRoID0gQVBJOwpAQCAtNTk3OSw4ICs2MDMzLDYgQEAKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2
IC8qIGpzICovLAotCQkJCUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
LmNwcCAqLywKLQkJCQlBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5o
ICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5j
cHAgKi8sCiAJCQkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9y
LmggKi8sCiAJCQkJNTNDQTczMDcxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAq
LywKQEAgLTU5OTYsNiArNjA0OCw3IEBACiAJCQkJNTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8q
IFdhc21Db2RlQmxvY2suaCAqLywKIAkJCQlBRDQxMkIzMTFFN0IyRThBMDA4QUYxNTcgLyogV2Fz
bUNvbnRleHQuY3BwICovLAogCQkJCUFENDEyQjMyMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29u
dGV4dC5oICovLAorCQkJCUFENUMzNkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIu
aCAqLywKIAkJCQk3OURBRTI3OTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUu
aCAqLywKIAkJCQk1MzgxQjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgKi8sCiAJCQkJNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNp
Z25hbEhhbmRsZXIuaCAqLywKQEAgLTYwMDQsNiArNjA1Nyw4IEBACiAJCQkJNTNGNDBFOEExRDU5
MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oICovLAogCQkJCUFEOEZGMzk2MUVC
NUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuY3BwICovLAogCQkJCUFEOEZGMzk1MUVC
NUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLywKKwkJCQlBRDVDMzZERTFGNjk5
RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNwcCAqLywKKwkJCQlBRDVDMzZERjFGNjk5RUI2
MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8sCiAJCQkJQUQwMDY1OUQxRUNBQzdGRTAwMENB
OTI2IC8qIFdhc21MaW1pdHMuaCAqLywKIAkJCQk1M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyog
V2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLywKIAkJCQk1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEg
LyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8sCkBAIC02MDMyLDYgKzYwODcsOCBAQAogCQkJCTUz
RjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhC
RTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYx
RTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLywKKwkJCQlBRDVDMzZFMzFGNjlF
QzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmNwcCAqLywKKwkJCQlBRDVDMzZFNDFGNjlFQzhCMDAw
QkNBQUYgLyogV2FzbVRhYmxlLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8q
IFdhc21UaHVua3MuY3BwICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNt
VGh1bmtzLmggKi8sCiAJCQkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBD
b3VudC5oICovLApAQCAtNzYzMiw2ICs3Njg5LDEwIEBACiAJCUFEMkZDQjhBMURCNTg0MDAwMEIz
RTczNiAvKiBqcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJQUQ4REQ2RDAxRjY3MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLywKKwkJCQlBRDhE
RDZDRjFGNjcwODlGMDAwNEVCNTIgLyogSlNUb1dhc20uaCAqLywKKwkJCQlBREQwOUFGMjFGNjI0
ODI5MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8sCisJCQkJQUREMDlBRjMxRjYyNDgy
RTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1MzgzQUEyRjFFNjVFOEExMDBB
NTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJCQkJQUQ5RTg1MkUxRThB
MEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQk3OUVGRDQ4
MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcCAq
LywKQEAgLTc2NTEsNiArNzcxMiw4IEBACiAJCQkJQUQyRkNCQUQxREI1OERBNDAwQjNFNzM2IC8q
IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBRTFEQjU4REE0MDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCAqLywKIAkJCQlBRDJGQ0JBRjFEQjU4REE0
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmggKi8sCisJCQkJQUREMDlBRUYxRjVGNjIz
RjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLywKKwkJCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEz
QzIgLyogV2FzbVRvSlMuaCAqLywKIAkJCQlBRDJGQ0JCMDFEQjU4REE0MDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQUQyRkNCQjExREI1
OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCAqLywK
IAkJCQlBRDJGQ0JCMjFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQ
cm90b3R5cGUuY3BwICovLApAQCAtNzkyNiw2ICs3OTg5LDcgQEAKIAkJCQkwRkVDODVCQjFCRTE0
NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MzZFNTQ1MzFDNDY4RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBp
biBIZWFkZXJzICovLAorCQkJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJN
YWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzMTlEQTA0MUMxQkU0MEQwMDFEMjYwQiAvKiBC
M0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODUxRTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKQEAg
LTgwMTYsNiArODA4MCw3IEBACiAJCQkJRTMyOERBRUIxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVj
b2RlUmV3cml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4
QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYx
RTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAy
M0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhl
YWRlcnMgKi8sCkBAIC04MjE5LDYgKzgyODQsNyBAQAogCQkJCTBGQTU4MUJDMTUwRTk1MzAwMEI5
QTJEOSAvKiBERkdOb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3
NTAwMEMyMzk2IC8qIERGR051bGxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCOUNFNzE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2REQxRjY4OEI2NTAwMEJDQUFGIC8qIFdhc21F
bWJlZGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTkxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5
REQwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLywK
QEAgLTgzMjksOCArODM5NSwxMCBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBF
eGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhB
QjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4
ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2
RUExRjc1QUQ2QTAwMEJDQUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
M0M1NzFGMzNBNDUzMDBGNTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMy
QXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBX
YXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3
NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkw
MEFCQjIxNyAvKiBGUFJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzRFREJGNzFEQjVGRkM5
MDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTg3MzEsNyArODc5
OSw2IEBACiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJl
ZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAv
KiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAz
OUQwNjkgLyogSlNXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBRDJGQ0MzMTFEQjgzRDQ5
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYx
RThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjQsNiAr
ODk5MSw3IEBACiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8q
IFJlZ0V4cElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdB
NTMxNSAvKiBSZWdFeHBLZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkU2MUY2OUVDOTEw
MDBCQ0FBRiAvKiBXYXNtVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVCMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBSZWdFeHBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZE
MUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0QyMDJDNDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBmZDUyNmIyLi4zOGQwMzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MjYsNyArOTI2LDYgQEAgdG9vbHMv
SlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCiB0
b29scy9WTUluc3BlY3Rvci5jcHAKIAotd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKIHdhc20vV2FzbUJCUVBsYW4uY3BwCiB3YXNtL1dhc21CaW5kaW5n
LmNwcApAQCAtOTM0LDkgKzkzMywxMiBAQCB3YXNtL1dhc21DYWxsZWUuY3BwCiB3YXNtL1dhc21D
YWxsaW5nQ29udmVudGlvbi5jcHAKIHdhc20vV2FzbUNvZGVCbG9jay5jcHAKIHdhc20vV2FzbUNv
bnRleHQuY3BwCit3YXNtL1dhc21FbWJlZGRlci5oCiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuY3BwCiB3YXNtL1dhc21Gb3JtYXQuY3BwCiB3YXNtL1dhc21JbmRleE9yTmFtZS5jcHAKK3dh
c20vV2FzbUluc3RhbmNlLmNwcAord2FzbS9XYXNtSW5zdGFuY2UuaAogd2FzbS9XYXNtTWFjaGlu
ZVRocmVhZHMuY3BwCiB3YXNtL1dhc21NZW1vcnkuY3BwCiB3YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHAKQEAgLTk0OSwxMCArOTUxLDE1IEBAIHdhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAK
IHdhc20vV2FzbVBhZ2VDb3VudC5jcHAKIHdhc20vV2FzbVBsYW4uY3BwCiB3YXNtL1dhc21TaWdu
YXR1cmUuY3BwCit3YXNtL1dhc21UYWJsZS5jcHAKK3dhc20vV2FzbVRhYmxlLmgKIHdhc20vV2Fz
bVRodW5rcy5jcHAKIHdhc20vV2FzbVZhbGlkYXRlLmNwcAogd2FzbS9XYXNtV29ya2xpc3QuY3Bw
CiAKK3dhc20vanMvSlNUb1dhc20uY3BwCit3YXNtL2pzL0pTVG9XYXNtLmgKK3dhc20vanMvSlNX
ZWJBc3NlbWJseS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKIHdhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yLmNwcApAQCAtOTYyLDYgKzk2OSw4IEBAIHdhc20vanMvSlNXZWJBc3Nl
bWJseU1lbW9yeS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKIHdhc20vanMv
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmNwcAord2FzbS9qcy9XYXNtVG9KUy5jcHAKK3dhc20vanMvV2FzbVRvSlMuaAogd2FzbS9qcy9X
ZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJs
eUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCmluZGV4IDQyMjgwYzUuLjZkZjQ0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAtMTc5LDcgKzE3
OSw3IEBAIENhbGxTaXRlSW5kZXggQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpvcmlnaW5hbENhbGxT
aXRlSW5kZXgoKSBjb25zdCB7IHJldHVybiBzdHViCiB2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpCiB7CiAgICAgcmVzdG9yZVNjcmF0Y2go
KTsKLSAgICBqaXQtPmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIobV92bSk7CisgICAgaml0LT5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigmbV92bS50b3BFbnRyeUZyYW1lKTsKICAgICBpZiAobmVlZHNUb1Jlc3RvcmVSZWdp
c3RlcnNJZkV4Y2VwdGlvbigpKSB7CiAgICAgICAgIC8vIFRvIHRoZSBKSVQgdGhhdCBwcm9kdWNl
cyB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAgICAgIC8vIGNhbGwgc2l0ZSwg
dGhleSB3aWxsIGV4cGVjdCB0aGUgT1NSIGV4aXQgdG8gYmUgYXJyaXZlZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKaW5kZXggMzQ4YzY4Yy4uNzcxNmU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTQsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICoKQEAgLTY1Miw4ICs2NTIsOCBAQCB2b2lk
IERlYnVnZ2VyOjpzdGVwT3V0T2ZGdW5jdGlvbigpCiAgICAgaWYgKCFtX2lzUGF1c2VkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0u
dG9wVk1FbnRyeUZyYW1lOwotICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxG
cmFtZSA/IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKSA6
IG51bGxwdHI7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IG1fdm0udG9wRW50cnlG
cmFtZTsKKyAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1
cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpIDogbnVsbHB0cjsKICAg
ICBtX3BhdXNlT25TdGVwT3V0ID0gdHJ1ZTsKICAgICBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdN
b2RlRW5hYmxlZCk7CiAgICAgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygpOwpA
QCAtODMxLDggKzgzMSw4IEBAIHZvaWQgRGVidWdnZXI6OnJldHVybkV2ZW50KENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZy
YW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNh
bGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFt
ZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9j
dXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIFJl
dHVybmluZyBmcm9tIGEgY2FsbCwgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBleHByZXNzaW9uIG9u
IHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVybmluZyB0by4KICAgICBtX3Bhc3RGaXJzdEV4cHJl
c3Npb25JblN0YXRlbWVudCA9IHRydWU7CkBAIC04NTYsOCArODU2LDggQEAgdm9pZCBEZWJ1Z2dl
cjo6dW53aW5kRXZlbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKCFtX2N1cnJlbnRD
YWxsRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRy
eUZyYW1lID0gbV92bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAg
ICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOworICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRv
cEVudHJ5RnJhbWUpOwogCiAgICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciBhbiBleGNlcHRpb24g
bG9jYXRpb24gbGlrZSBhIHN0ZXAtb3V0LgogICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0g
bV9wYXVzZU9uQ2FsbEZyYW1lKQpAQCAtODg2LDggKzg4Niw4IEBAIHZvaWQgRGVidWdnZXI6OmRp
ZEV4ZWN1dGVQcm9ncmFtKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50
Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50
cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7Cisg
ICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0
b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIFJldHVybmluZyBmcm9tIGEgcHJvZ3JhbSwgY291bGQg
YmUgZXZhbCgpLCB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lIGV4cHJlc3Npb24gb24gdGhlIHN0YXRl
bWVudCB3ZSBhcmUgcmV0dXJuaW5nIHRvLgogICAgIG1fcGFzdEZpcnN0RXhwcmVzc2lvbkluU3Rh
dGVtZW50ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKaW5kZXggZDE5ZGRiNy4uZmY5Nzg3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogICAgIGlmICghbV9leGNlcHRpb25DaGVj
a3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNo
ZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50
cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJG
cmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENh
bGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGls
ZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkp
IHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAg
ICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRv
cEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFz
c2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4K
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCA1ODNiZjk4
Li4wMjFlYWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbgogICAgIFJl
Z2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0
YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwogCiAgICAgdW5zaWduZWQg
cmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOwotICAgIFZNRW50
cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0tPnRvcFZNRW50cnlGcmFtZSk7Cisg
ICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS0+dG9wRW50cnlGcmFt
ZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewog
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IHJlZ2lzdGVyU2F2ZUxvY2F0
aW9ucy0+YXQoaSk7CiAgICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoY3VycmVudEVu
dHJ5LnJlZygpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4
IDM0MzMwOGMuLmM3N2UwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNv
bXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgaWYgKGV4aXQubV9raW5kID09
IEdlbmVyaWNVbndpbmQpIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZh
Y3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCku
CiAgICAgICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBz
dGFjayBwb2ludGVyLgotICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOworICAgICAgICAgICAgaml0LnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZy
YW1lKTsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JD
YXRjaCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICAgICAg
aml0LmFkZFB0cigKQEAgLTUzNyw3ICs1MzcsNyBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0
KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0CiAg
ICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhp
dC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOworICAgICAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLnRvcEVudHJ5RnJhbWUpOwogCiAg
ICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0
cyBpbnRvIHRoZSBzdGFjay4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3Bw
CmluZGV4IGI3MzI3ZjMuLmVkMGFmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50
cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdVbnJl
YXNvbmFibGVPU1JFbnRyeUp1bXBEZXN0aW5hdGlvbik7CiAKICAgICBvay5saW5rKCZqaXQpOwot
ICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKnZtKTsKKyAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVU
YWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKaW5kZXggZmYyY2U1Ni4uMDNmMDJm
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCkBAIC0xMzEsNyAr
MTMxLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZXN1bHQmIHNh
ZmVwb2ludFJlc3VsdCkKIAogICAgIC8vIEVtaXQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgogICAg
ICpzdGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOworICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0udG9wRW50cnlGcmFt
ZSk7CiAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC5jYWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAppbmRleCA3
YzAxODFkLi5hYWM4NjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbCgpOwogCiAgICAgICAg
ICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRl
clRoYW5PckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMCkpOwotICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOworICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS50b3BFbnRyeUZyYW1lKTsKICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBqaXQu
Y2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CmluZGV4IDFjZWJjMDEuLmUwZTU5NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTI2NCw3ICsyNjQsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAg
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQu
Y29kZUJsb2NrKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDhlMDgxZDcuLmNlZmNh
ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xODYsNyArMTg2LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAg
Ly8gVGhlIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgcmVzdGFibGlzaCBvdXIgZnJhbWUg
aW4gdGhlIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgogICAgIGlmIChleGl0LmlzR2VuZXJpY1Vud2lu
ZEhhbmRsZXIoKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpOyAvLyBUaGUgZmlyc3QgdGltZSB3ZSBoaXQgdGhpcyBleGl0LCBsaWtlIGF0IGFsbCBvdGhl
ciB0aW1lcywgdGhpcyBmaWVsZCBzaG91bGQgYmUgbm9uLW51bGwuCi0gICAgICAgIGppdC5yZXN0
b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAg
ICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFkZHJlc3NP
ZkNhbGxGcmFtZUZvckNhdGNoKCksIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
cik7CiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJs
b2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQxMiw4ICs0MTIsOCBAQCBzdGF0aWMgdm9pZCBjb21w
aWxlU3R1YigKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVTYXZlcyA9IFZNOjpn
ZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgUmVnaXN0ZXJTZXQgdm1DYWxs
ZWVTYXZlc1RvU2tpcCA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwogICAgIGlmIChl
eGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIGppdC5sb2FkUHRyKCZ2bS0+dG9w
Vk1FbnRyeUZyYW1lLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVm
ZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5sb2FkUHRyKCZ2bS0+
dG9wRW50cnlGcmFtZSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZm
ZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICB9CiAKICAgICBmb3IgKFJlZyByZWcg
PSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAppbmRl
eCA5ZmEyOWQwLi5iZTYxYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTMtMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMjE3LDcgKzIxOCw3IEBAIEpTR2xvYmFs
T2JqZWN0KiBDYWxsRnJhbWU6Ondhc21Bd2FyZUxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKQog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoIWNhbGxlZSgpLmlzV2FzbSgpKQogICAg
ICAgICByZXR1cm4gbGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBXYXNtOjpsb2Fk
Q29udGV4dCh2bSktPmdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiB2bS53YXNtQ29udGV4dC5s
b2FkKCktPmdsb2JhbE9iamVjdCgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odm0pOwogICAg
IHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0yMzcsMjQgKzIzOCwyNCBAQCBib29s
IENhbGxGcmFtZTo6aXNBbnlXYXNtQ2FsbGVlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUNh
bGxGcmFtZSogQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJiBjdXJyVk1FbnRy
eUZyYW1lKQorQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJiBj
dXJyRW50cnlGcmFtZSkKIHsKLSAgICBpZiAoY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpID09
IGN1cnJWTUVudHJ5RnJhbWUpIHsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogY3VyclZNRW50cnlS
ZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJWTUVudHJ5RnJhbWUpOwotICAgICAgICBjdXJyVk1F
bnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAg
ICBpZiAoY2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAg
ICAgICBWTUVudHJ5UmVjb3JkKiBjdXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3Vy
ckVudHJ5RnJhbWUpOworICAgICAgICBjdXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3Jk
LT5wcmV2VG9wRW50cnlGcmFtZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQt
PnByZXZUb3BDYWxsRnJhbWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxG
cmFtZSo+KGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENhbGxGcmFtZSo+KGNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCi1TVVBQUkVT
U19BU0FOIENhbGxGcmFtZSogQ2FsbEZyYW1lOjp1bnNhZmVDYWxsZXJGcmFtZShWTUVudHJ5RnJh
bWUqJiBjdXJyVk1FbnRyeUZyYW1lKQorU1VQUFJFU1NfQVNBTiBDYWxsRnJhbWUqIENhbGxGcmFt
ZTo6dW5zYWZlQ2FsbGVyRnJhbWUoRW50cnlGcmFtZSomIGN1cnJFbnRyeUZyYW1lKQogewotICAg
IGlmICh1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgPT0gY3VyclZNRW50cnlGcmFt
ZSkgewotICAgICAgICBWTUVudHJ5UmVjb3JkKiBjdXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlS
ZWNvcmQoY3VyclZNRW50cnlGcmFtZSk7Ci0gICAgICAgIGN1cnJWTUVudHJ5RnJhbWUgPSBjdXJy
Vk1FbnRyeVJlY29yZC0+dW5zYWZlUHJldlRvcFZNRW50cnlGcmFtZSgpOworICAgIGlmICh1bnNh
ZmVDYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpID09IGN1cnJFbnRyeUZyYW1lKSB7CisgICAgICAg
IFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZChjdXJyRW50
cnlGcmFtZSk7CisgICAgICAgIGN1cnJFbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnVu
c2FmZVByZXZUb3BFbnRyeUZyYW1lKCk7CiAgICAgICAgIHJldHVybiBjdXJyVk1FbnRyeVJlY29y
ZC0+dW5zYWZlUHJldlRvcENhbGxGcmFtZSgpOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FsbEZyYW1lKj4odW5zYWZlQ2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4odW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJh
bWUoKSk7CiB9CiAKIFNvdXJjZU9yaWdpbiBDYWxsRnJhbWU6OmNhbGxlclNvdXJjZU9yaWdpbigp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXgg
NjIzMDlhMC4uNmQ1ZDcyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaApAQCAtMTQxLDEyICsxNDEsMTIgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAg
ICAgICAgIENhbGxGcmFtZSYgb3BlcmF0b3I9KGNvbnN0IFJlZ2lzdGVyJiByKSB7ICpzdGF0aWNf
Y2FzdDxSZWdpc3Rlcio+KHRoaXMpID0gcjsgcmV0dXJuICp0aGlzOyB9CiAKLSAgICAgICAgQ2Fs
bEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFt
ZSo+KGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7IH0KLSAgICAgICAgdm9pZCogY2FsbGVy
RnJhbWVPclZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZyYW1lQW5kUEMoKS5j
YWxsZXJGcmFtZTsgfQotICAgICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVuc2FmZUNhbGxlckZy
YW1lT3JWTUVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiB1bnNhZmVDYWxsZXJGcmFtZUFuZFBD
KCkuY2FsbGVyRnJhbWU7IH0KKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KGNhbGxlckZyYW1lT3JFbnRyeUZyYW1l
KCkpOyB9CisgICAgICAgIHZvaWQqIGNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gY2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9CisgICAgICAgIFNVUFBSRVNT
X0FTQU4gdm9pZCogdW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVy
biB1bnNhZmVDYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KIAotICAgICAgICBDYWxs
RnJhbWUqIHVuc2FmZUNhbGxlckZyYW1lKFZNRW50cnlGcmFtZSomKTsKLSAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJik7CisgICAg
ICAgIENhbGxGcmFtZSogdW5zYWZlQ2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYpOwog
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFNvdXJjZU9yaWdpbiBjYWxsZXJTb3VyY2VPcmln
aW4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Zy
YW1lVHJhY2Vycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJh
Y2Vycy5oCmluZGV4IGM1YjZiODMuLjc2YWNkNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotc3RydWN0IFZNRW50cnlGcmFtZTsKK3N0cnVjdCBFbnRyeUZyYW1lOwogCiBj
bGFzcyBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgewogcHVibGljOgpAQCAtNzQsMzMgKzc0LDMzIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFTU0VSVChjYWxs
RnJhbWUpOwotICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbEZyYW1l
KSA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZtLT50b3BWTUVudHJ5RnJhbWUpKTsKKyAgICAg
ICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJl
dF9jYXN0PHZvaWQqPih2bS0+dG9wRW50cnlGcmFtZSkpOwogICAgICAgICB2bS0+dG9wQ2FsbEZy
YW1lID0gY2FsbEZyYW1lOwogICAgIH0KIH07CiAKIGNsYXNzIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlIHsKIHB1YmxpYzoKLSAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlcldpdGhSZXN0b3JlKFZNKiB2bSwgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQorICAgIEFMV0FZU19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyV2l0aFJlc3RvcmUoVk0qIHZtLCBFbnRyeUZyYW1lKiBFbnRyeUZyYW1lLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICAgICAgOiBtX3ZtKHZtKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZt
KTsKICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZSk7Ci0gICAgICAgIG1fc2F2ZWRUb3BWTUVudHJ5
RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX3NhdmVkVG9wRW50cnlGcmFt
ZSA9IHZtLT50b3BFbnRyeUZyYW1lOwogICAgICAgICBtX3NhdmVkVG9wQ2FsbEZyYW1lID0gdm0t
PnRvcENhbGxGcmFtZTsKLSAgICAgICAgdm0tPnRvcFZNRW50cnlGcmFtZSA9IHZtRW50cnlGcmFt
ZTsKKyAgICAgICAgdm0tPnRvcEVudHJ5RnJhbWUgPSBFbnRyeUZyYW1lOwogICAgICAgICB2bS0+
dG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgfk5h
dGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKCkKICAgICB7Ci0gICAgICAgIG1fdm0tPnRv
cFZNRW50cnlGcmFtZSA9IG1fc2F2ZWRUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIG1fdm0tPnRv
cEVudHJ5RnJhbWUgPSBtX3NhdmVkVG9wRW50cnlGcmFtZTsKICAgICAgICAgbV92bS0+dG9wQ2Fs
bEZyYW1lID0gbV9zYXZlZFRvcENhbGxGcmFtZTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgVk0q
IG1fdm07Ci0gICAgVk1FbnRyeUZyYW1lKiBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lOworICAgIEVu
dHJ5RnJhbWUqIG1fc2F2ZWRUb3BFbnRyeUZyYW1lOwogICAgIENhbGxGcmFtZSogbV9zYXZlZFRv
cENhbGxGcmFtZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDEzNTNlMTAuLmE1MTNlNDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNjUzLDkg
KzY1Myw5IEBAIHB1YmxpYzoKIAogICAgICAgICBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKG1f
dm0sIG1fY2FsbEZyYW1lKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2aXNpdG9yKTsKIAotICAgICAgICBib29sIHNob3Vs
ZFN0b3BVbndpbmRpbmcgPSB2aXNpdG9yLT5jYWxsZXJJc1ZNRW50cnlGcmFtZSgpOworICAgICAg
ICBib29sIHNob3VsZFN0b3BVbndpbmRpbmcgPSB2aXNpdG9yLT5jYWxsZXJJc0VudHJ5RnJhbWUo
KTsKICAgICAgICAgaWYgKHNob3VsZFN0b3BVbndpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpEb25lOwogCkBAIC02NjMsNyArNjYzLDcgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHZvaWQgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoU3RhY2tWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAogICAgIHsKICNpZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NB
VkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRD
YWxsZWVTYXZlcyA9IHZpc2l0b3ItPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKQEAgLTY3Niw3ICs2
NzYsNyBAQCBwcml2YXRlOgogICAgICAgICBpbnRwdHJfdCogZnJhbWUgPSByZWludGVycHJldF9j
YXN0PGludHB0cl90Kj4obV9jYWxsRnJhbWUtPnJlZ2lzdGVycygpKTsKIAogICAgICAgICB1bnNp
Z25lZCByZWdpc3RlckNvdW50ID0gY3VycmVudENhbGxlZVNhdmVzLT5zaXplKCk7Ci0gICAgICAg
IFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQobV92bS50b3BWTUVudHJ5RnJh
bWUpOworICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0u
dG9wRW50cnlGcmFtZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3Rl
ckNvdW50OyBpKyspIHsKICAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgY3VycmVudEVudHJ5
ID0gY3VycmVudENhbGxlZVNhdmVzLT5hdChpKTsKICAgICAgICAgICAgIGlmIChkb250Q29weVJl
Z2lzdGVycy5nZXQoY3VycmVudEVudHJ5LnJlZygpKSkKQEAgLTcwMiw3ICs3MDIsNyBAQCBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJh
bWUqJiBjYWxsRnJhbWUsIEV4YwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKIAogICAgIGlmICh1bndpbmRTdGFydCA9PSBVbndpbmRGcm9tQ2FsbGVyRnJhbWUpIHsK
LSAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpID09IHZt
LnRvcFZNRW50cnlGcmFtZSkKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPckVu
dHJ5RnJhbWUoKSA9PSB2bS50b3BFbnRyeUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApp
bmRleCA4NWQxNDdhLi4xZGE5M2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDE4ICs0NCwx
OCBAQCBTdGFja1Zpc2l0b3I6OlN0YWNrVmlzaXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFZN
KiB2bSkKICAgICBDYWxsRnJhbWUqIHRvcEZyYW1lOwogICAgIGlmIChzdGFydEZyYW1lKSB7CiAg
ICAgICAgIEFTU0VSVCh2bSk7Ci0gICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bS0+
dG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX2ZyYW1lLm1fZW50cnlGcmFtZSA9IHZtLT50b3BF
bnRyeUZyYW1lOwogICAgICAgICB0b3BGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgICAg
IAotICAgICAgICBpZiAodG9wRnJhbWUgJiYgc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZnJhbWUubV9W
TUVudHJ5RnJhbWUpID09IHN0YXRpY19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKLSAgICAgICAg
ICAgIHRvcEZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKS0+bV9w
cmV2VG9wQ2FsbEZyYW1lOwotICAgICAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlGcmFtZSA9IHZt
RW50cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcFZNRW50cnlGcmFt
ZTsKKyAgICAgICAgaWYgKHRvcEZyYW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1f
ZW50cnlGcmFtZSkgPT0gc3RhdGljX2Nhc3Q8dm9pZCo+KHRvcEZyYW1lKSkgeworICAgICAgICAg
ICAgdG9wRnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUubV9lbnRyeUZyYW1lKS0+bV9wcmV2
VG9wQ2FsbEZyYW1lOworICAgICAgICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bUVudHJ5
UmVjb3JkKG1fZnJhbWUubV9lbnRyeUZyYW1lKS0+bV9wcmV2VG9wRW50cnlGcmFtZTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSAwOwor
ICAgICAgICBtX2ZyYW1lLm1fZW50cnlGcmFtZSA9IDA7CiAgICAgICAgIHRvcEZyYW1lID0gMDsK
ICAgICB9Ci0gICAgbV9mcmFtZS5tX2NhbGxlcklzVk1FbnRyeUZyYW1lID0gZmFsc2U7CisgICAg
bV9mcmFtZS5tX2NhbGxlcklzRW50cnlGcmFtZSA9IGZhbHNlOwogICAgIHJlYWRGcmFtZSh0b3BG
cmFtZSk7CiAKICAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgY2FsbGVyIHdhbnRzIHRvIHN0YXJ0
IHVud2luZGluZyBmcm9tLgpAQCAtNzUsMTQgKzc1LDE0IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpn
b3RvTmV4dEZyYW1lKCkKICAgICAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUu
Y2FsbEZyYW1lKCksICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcik7CiAgICAgICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9mcmFtZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1f
Q2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSBt
X2ZyYW1lLm1fQ2FsbGVyRW50cnlGcmFtZTsKICAgICAgICAgICAgIHJlYWRGcmFtZShtX2ZyYW1l
LmNhbGxlckZyYW1lKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlYWRJbmxpbmVk
RnJhbWUobV9mcmFtZS5jYWxsRnJhbWUoKSwgY2FsbGVyQ29kZU9yaWdpbik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgbV9mcmFtZS5tX1ZN
RW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5t
X2VudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fQ2FsbGVyRW50cnlGcmFtZTsKICAgICByZWFkRnJhbWUo
bV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsKIH0KIApAQCAtMTUyLDkgKzE1Miw5IEBAIHZvaWQgU3Rh
Y2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2Rl
T3JpZ2luKiBjb2RlT3JpCiB7CiAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsK
ICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7Ci0gICAgbV9mcmFtZS5tX0NhbGxlclZNRW50cnlG
cmFtZSA9IG1fZnJhbWUubV9WTUVudHJ5RnJhbWU7Ci0gICAgbV9mcmFtZS5tX2NhbGxlckZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZShtX2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lKTsK
LSAgICBtX2ZyYW1lLm1fY2FsbGVySXNWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fQ2FsbGVyVk1F
bnRyeUZyYW1lICE9IG1fZnJhbWUubV9WTUVudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX0NhbGxl
ckVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fZW50cnlGcmFtZTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVy
RnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1l
KTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVySXNFbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlckVu
dHJ5RnJhbWUgIT0gbV9mcmFtZS5tX2VudHJ5RnJhbWU7CiAgICAgbV9mcmFtZS5tX2lzV2FzbUZy
YW1lID0gZmFsc2U7CiAKICAgICBDYWxsZWVCaXRzIGNhbGxlZSA9IGNhbGxGcmFtZS0+Y2FsbGVl
KCk7CkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQsIEluZGVudGVyIGluZGVudCwgc3RkOjpmdW5jdGlvbjwKIAogICAgICAg
ICAgICAgaW5kZW50LS07CiAgICAgICAgIH0KLSAgICAgICAgb3V0LnByaW50KGluZGVudCwgInZt
RW50cnlGcmFtZTogIiwgUmF3UG9pbnRlcih2bUVudHJ5RnJhbWUoKSksICJcbiIpOworICAgICAg
ICBvdXQucHJpbnQoaW5kZW50LCAiRW50cnlGcmFtZTogIiwgUmF3UG9pbnRlcihtX2VudHJ5RnJh
bWUpLCAiXG4iKTsKICAgICAgICAgaW5kZW50LS07CiAgICAgfQogICAgIG91dC5wcmludChpbmRl
bnQsICJ9XG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaAppbmRleCA4YWQwOTQwLi43MDc5ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25z
dCB7IHJldHVybiBtX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgICAgIGJvb2wg
Y2FsbGVySXNWTUVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlcklzVk1FbnRyeUZy
YW1lOyB9CisgICAgICAgIGJvb2wgY2FsbGVySXNFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsZXJJc0VudHJ5RnJhbWU7IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVyRnJhbWU7IH0KICAgICAgICAgQ2FsbGVlQml0cyBjYWxs
ZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CkBAIC05Nyw3ICs5Nyw2IEBAIHB1
YmxpYzoKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKIAogICAgICAgICBDbG9uZWRBcmd1bWVudHMqIGNyZWF0ZUFyZ3VtZW50cygpOwotICAgICAg
ICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fVk1FbnRyeUZy
YW1lOyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsRnJhbWU7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIElu
ZGVudGVyID0gSW5kZW50ZXIoKSkgY29uc3Q7CkBAIC0xMTQsOCArMTEzLDggQEAgcHVibGljOgog
ICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIG1faW5saW5lQ2FsbEZyYW1lOwogI2VuZGlmCiAgICAg
ICAgIENhbGxGcmFtZSogbV9jYWxsRnJhbWU7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogbV9WTUVu
dHJ5RnJhbWU7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogbV9DYWxsZXJWTUVudHJ5RnJhbWU7Cisg
ICAgICAgIEVudHJ5RnJhbWUqIG1fZW50cnlGcmFtZTsKKyAgICAgICAgRW50cnlGcmFtZSogbV9D
YWxsZXJFbnRyeUZyYW1lOwogICAgICAgICBDYWxsRnJhbWUqIG1fY2FsbGVyRnJhbWU7CiAgICAg
ICAgIENhbGxlZUJpdHMgbV9jYWxsZWU7CiAgICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CkBAIC0xMjMsNyArMTIyLDcgQEAgcHVibGljOgogICAgICAgICBzaXplX3QgbV9hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKICAg
ICAgICAgV2FzbTo6SW5kZXhPck5hbWUgbV93YXNtRnVuY3Rpb25JbmRleE9yTmFtZTsKLSAgICAg
ICAgYm9vbCBtX2NhbGxlcklzVk1FbnRyeUZyYW1lIDogMTsKKyAgICAgICAgYm9vbCBtX2NhbGxl
cklzRW50cnlGcmFtZSA6IDE7CiAgICAgICAgIGJvb2wgbV9pc1dhc21GcmFtZSA6IDE7CiAKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFN0YWNrVmlzaXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCmluZGV4IGYzNmMyYmUuLjAxMDNhNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVj
b3JkLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNRW50cnlSZWNv
cmQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSw3ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgVk1F
bnRyeUZyYW1lOworc3RydWN0IEVudHJ5RnJhbWU7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBW
TTsKIApAQCAtNDAsNyArNDAsNyBAQCBzdHJ1Y3QgVk1FbnRyeVJlY29yZCB7CiAgICAgICovCiAg
ICAgVk0qIG1fdm07CiAgICAgRXhlY1N0YXRlKiBtX3ByZXZUb3BDYWxsRnJhbWU7Ci0gICAgVk1F
bnRyeUZyYW1lKiBtX3ByZXZUb3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogbV9wcmV2
VG9wRW50cnlGcmFtZTsKIAogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTID4gMAogICAgIGludHB0cl90IGNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJb
TlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlNdOwpAQCAtNDksMjAgKzQ5LDIwIEBAIHN0
cnVjdCBWTUVudHJ5UmVjb3JkIHsKICAgICBFeGVjU3RhdGUqIHByZXZUb3BDYWxsRnJhbWUoKSB7
IHJldHVybiBtX3ByZXZUb3BDYWxsRnJhbWU7IH0KICAgICBTVVBQUkVTU19BU0FOIEV4ZWNTdGF0
ZSogdW5zYWZlUHJldlRvcENhbGxGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcENhbGxGcmFtZTsg
fQogCi0gICAgVk1FbnRyeUZyYW1lKiBwcmV2VG9wVk1FbnRyeUZyYW1lKCkgeyByZXR1cm4gbV9w
cmV2VG9wVk1FbnRyeUZyYW1lOyB9Ci0gICAgU1VQUFJFU1NfQVNBTiBWTUVudHJ5RnJhbWUqIHVu
c2FmZVByZXZUb3BWTUVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BWTUVudHJ5RnJhbWU7
IH0KKyAgICBFbnRyeUZyYW1lKiBwcmV2VG9wRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRv
cEVudHJ5RnJhbWU7IH0KKyAgICBTVVBQUkVTU19BU0FOIEVudHJ5RnJhbWUqIHVuc2FmZVByZXZU
b3BFbnRyeUZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wRW50cnlGcmFtZTsgfQogfTsKIAotZXh0
ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKFZNRW50cnlGcmFtZSopOworZXh0
ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKEVudHJ5RnJhbWUqKTsKIAotc3Ry
dWN0IFZNRW50cnlGcmFtZSB7CitzdHJ1Y3QgRW50cnlGcmFtZSB7CiAjaWYgRU5BQkxFKEpJVCkg
JiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgc3RhdGljIHB0cmRp
ZmZfdCB2bUVudHJ5UmVjb3JkT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSog
ZmFrZVZNRW50cnlGcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Vk1FbnRyeUZyYW1lKj4oMHgxMDAw
KTsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChmYWtlVk1F
bnRyeUZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSogZmFrZUVudHJ5RnJhbWUgPSByZWludGVy
cHJldF9jYXN0PEVudHJ5RnJhbWUqPigweDEwMDApOworICAgICAgICBWTUVudHJ5UmVjb3JkKiBy
ZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGZha2VFbnRyeUZyYW1lKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZWNvcmQpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFrZVZNRW50cnlGcmFtZSkpOwor
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGZha2VFbnRyeUZyYW1lKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCA4ZDMxZjdhLi4zNzE5YmE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC01
ODIsNyArNTgyLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhWTSYg
dm0sIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLAogfQogI2VuZGlmCiAKLXZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoVk0mIHZtKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSoqIHRvcEVudHJ5
RnJhbWUpCiB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNh
dmVSZWdpc3Rlck9mZnNldHMoKTsKQEAgLTYwNSw4ICs2MDUsOCBAQCB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KFZNJiB2bQogICAgIH0KICAgICBBU1NFUlQoc2NyYXRjaCAhPSBJbnZhbGlkR1BSUmVnKTsKIAot
ICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwgc2NyYXRjaCk7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQo
KSksIHNjcmF0Y2gpOworICAgIGxvYWRQdHIodG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVy
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBl
eGNlcHQgZm9yIHRoZSBzY3JhdGNoLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKQEAgLTc3OCw0MSArNzc4LDQxIEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKFZNJiB2bSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlCiB9CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi12b2lkIEFzc2VtYmx5SGVscGVy
czo6bG9hZFdhc21Db250ZXh0KEdQUlJlZyBkc3QpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9h
ZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIGRzdCkKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNf
SklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKFdh
c206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBsb2FkRnJvbVRMU1B0cihmYXN0
VExTT2Zmc2V0Rm9yS2V5KFdURl9XQVNNX0NPTlRFWFRfS0VZKSwgZHN0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgotICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKS53YXNtQ29udGV4dFBvaW50ZXIsIGRzdCk7CisgICAgbW92ZShXYXNtOjpQaW5uZWRSZWdp
c3RlckluZm86OmdldCgpLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBkc3QpOwogfQogCi12
b2lkIEFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dChHUFJSZWcgc3JjKQordm9pZCBB
c3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShHUFJSZWcgc3JjKQogewog
I2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250
ZXh0KCkpIHsKKyAgICBpZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAg
IHN0b3JlVG9UTFNQdHIoc3JjLCBmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9XQVNNX0NPTlRFWFRf
S0VZKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtb3ZlKHNyYywgV2Fz
bTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dFBvaW50ZXIpOworICAgIG1v
dmUoc3JjLCBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLndhc21Db250ZXh0SW5zdGFu
Y2VQb2ludGVyKTsKIH0KIAotYm9vbCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dE5l
ZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQorYm9vbCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNt
Q29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCiB7CiAjaWYgRU5BQkxF
KEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAg
ICBpZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICByZXR1cm4gbG9hZEZy
b21UTFNQdHJOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNN
YWNyb1NjcmF0Y2hSZWdpc3RlcigpCitib29sIEFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCiB7CiAjaWYgRU5BQkxFKEZB
U1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAgICBp
ZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICByZXR1cm4gc3RvcmVUb1RM
U1B0ck5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogICAgIHJldHVybiBmYWxz
ZTsKQEAgLTg3NSwxMCArODc1LDEwIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwo
Vk0mIHZtLCBWX0RlYnVnT3BlcmF0aW9uX0VQUCBmdW5jdGlvbiwgdm9pZCogYXJnCiAgICAgfQog
fQogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKQordm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
SW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIpCiB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6
OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIGNhbGxlZVNhdmVzQnVmZmVyKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNC
dWZmZXJPZmZzZXQoKSksIGNhbGxlZVNhdmVzQnVmZmVyKTsKIAogICAgIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZz
ZXRzKCk7CiAgICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCmluZGV4IGE2OGMzNjkuLmNjNzBhMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMzYwLDI4ICszNjAsMjggQEAgcHVibGljOgogICAg
IHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJS
ZWcgdm1HUFIpCiAgICAgewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4g
MAotICAgICAgICBsb2FkUHRyKEFkZHJlc3Modm1HUFIsIFZNOjp0b3BWTUVudHJ5RnJhbWVPZmZz
ZXQoKSksIHZtR1BSKTsKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwodm1HUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Modm1HUFIs
IFZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KCkpLCB2bUdQUik7CisgICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh2bUdQUik7CiAjZWxzZQogICAg
ICAgICBVTlVTRURfUEFSQU0odm1HUFIpOwogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSwgY29uc3Qg
VGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCkgfSkKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqKiB0b3BFbnRyeUZyYW1lLCBjb25zdCBUZW1w
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSB9KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lT
VEVSUyA+IDAKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BS
KDApOwotICAgICAgICBsb2FkUHRyKCZ2bS50b3BWTUVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAg
ICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwodGVt
cDEpOworICAgICAgICBsb2FkUHRyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAgICAgY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKICNl
bHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh1c2Vk
UmVnaXN0ZXJzKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVz
RnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJik7CisgICAgdm9pZCByZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqKik7
CiAKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkK
KyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiogdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCkgfSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigw
KTsKQEAgLTM5Miw4ICszOTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2so
KSk7CiAKICAgICAgICAgLy8gQ29weSBzYXZlZCBjYWxsZWVTYXZlcyBvbiBzdGFjayBvciB1bnNh
dmVkIGNhbGxlZVNhdmVzIGluIHJlZ2lzdGVyIHRvIHZtIGNhbGxlZVNhdmUgYnVmZmVyCi0gICAg
ICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwgdGVtcDEpOwotICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNl
dCgpKSwgdGVtcDEpOworICAgICAgICBsb2FkUHRyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
QnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7CiAKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
ICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9IGNvZGVC
bG9jaygpLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC00MDEsMTIgKzQwMSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6
ZSgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBp
KyspIHsKLSAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgdm1FbnRyeSA9IGFsbENhbGxlZVNh
dmVzLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQodm1FbnRy
eS5yZWcoKSkpCisgICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVl
U2F2ZXMtPmF0KGkpOworICAgICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRy
eS5yZWcoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+ZmluZCh2
bUVudHJ5LnJlZygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGN1cnJlbnRGcmFt
ZUVudHJ5ID0gY3VycmVudENhbGxlZVNhdmVzLT5maW5kKGVudHJ5LnJlZygpKTsKIAotICAgICAg
ICAgICAgaWYgKHZtRW50cnkucmVnKCkuaXNHUFIoKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5
LnJlZygpLmlzR1BSKCkpIHsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVnVG9TdG9yZTsKICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gTG9hZCBjYWxsZWVTYXZlIGZyb20gc3RhY2sgaW50byB0ZW1wIHJlZ2lzdGVyCkBAIC00
MTQsOSArNDE0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIHJl
Z1RvU3RvcmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAv
LyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIHJl
Z1RvU3RvcmUgPSB2bUVudHJ5LnJlZygpLmdwcigpOworICAgICAgICAgICAgICAgICAgICByZWdU
b1N0b3JlID0gZW50cnkucmVnKCkuZ3ByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihy
ZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgICAg
ICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgZW50cnkub2Zmc2V0KCkp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwUmVnVG9T
dG9yZTsKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKQEAgLTQyNSw5
ICs0MjUsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGxvYWREb3VibGUoQWRkcmVz
cyhmcmFtZVBvaW50ZXJSZWdpc3RlciwgY3VycmVudEZyYW1lRW50cnktPm9mZnNldCgpKSwgZnBS
ZWdUb1N0b3JlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAg
Ly8gSnVzdCBzdG9yZSBjYWxsZWUgc2F2ZSBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICBm
cFJlZ1RvU3RvcmUgPSB2bUVudHJ5LnJlZygpLmZwcigpOworICAgICAgICAgICAgICAgICAgICBm
cFJlZ1RvU3RvcmUgPSBlbnRyeS5yZWcoKS5mcHIoKTsKIAotICAgICAgICAgICAgICAgIHN0b3Jl
RG91YmxlKGZwUmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgdm1FbnRyeS5vZmZzZXQoKSkpOwor
ICAgICAgICAgICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwg
ZW50cnkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2Vsc2UKQEAgLTE2
NDQsMTQgKzE2NDQsMTQgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCi0gICAgdm9pZCBsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRzdCk7Ci0gICAgdm9pZCBzdG9y
ZVdhc21Db250ZXh0KEdQUlJlZyBzcmMpOwotICAgIHN0YXRpYyBib29sIGxvYWRXYXNtQ29udGV4
dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdG9yZVdhc21D
b250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOworICAgIHZvaWQgbG9hZFdhc21Db250
ZXh0SW5zdGFuY2UoR1BSUmVnIGRzdCk7CisgICAgdm9pZCBzdG9yZVdhc21Db250ZXh0SW5zdGFu
Y2UoR1BSUmVnIHNyYyk7CisgICAgc3RhdGljIGJvb2wgbG9hZFdhc21Db250ZXh0SW5zdGFuY2VO
ZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAKIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgdm9pZCBjb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVz
QnVmZmVyKTsKIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBt
X2Jhc2VsaW5lQ29kZUJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDVlY2Yz
YTYuLjdjOTRjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTExMSw3ICsxMTEs
NyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5
dGVjb2RlT2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBjb3B5Q2FsbGVlU2F2
ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCkt
PnRvcEVudHJ5RnJhbWUpOwogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwg
bV9ieXRlY29kZU9mZnNldCk7CiAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRy
KFplcm8sIHJldHVyblZhbHVlR1BSKSk7CkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogICAgIGlmICghbV9leGNlcHRpb25DaGVj
a3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNo
ZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50
cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJG
cmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENh
bGxGcmFtZSopLgogCkBAIC05MDUsNyArOTA1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMoKQogICAgICAgICBtX2V4Y2VwdGlvbkhhbmRsZXIgPSBsYWJlbCgp
OwogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAg
ICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9w
RW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNz
ZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgog
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRleCBjYTJk
YjhjLi5mMjAxOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4
Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01Niw4ICs1Niw4IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0s
IEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKICAgICAKICAg
ICBFeGVjU3RhdGUqIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZTsKICAgICBpZiAo
dW53aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIFZNRW50cnlG
cmFtZSogdG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICAgICAgc2hh
ZG93Q2hpY2tlblRvcEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJh
bWUpOworICAgICAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJh
bWU7CisgICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUodG9wRW50cnlGcmFtZSk7CiAgICAgfQogICAgIHZtLT5zaGFkb3dDaGlja2VuKCkubG9nKCp2
bSwgc2hhZG93Q2hpY2tlblRvcEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93UGFj
a2V0KCkpOwogICAgIApAQCAtODQsNyArODQsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZt
LCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgfSBl
bHNlCiAgICAgICAgIGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRyKGhhbmRsZVVuY2F1
Z2h0RXhjZXB0aW9uKTsKICAgICAKLSAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
Y2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BWTUVudHJ5RnJhbWUp
KTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAKICAgICB2bS0+Y2FsbEZy
YW1lRm9yQ2F0Y2ggPSBjYWxsRnJhbWU7CiAgICAgdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
ID0gY2F0Y2hSb3V0aW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
aW5kZXggOWI0MTY2YS4uY2I2NGIxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1
cm5WYWx1ZUdQUik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMCk7CiAgICAganVtcFRv
RXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2
bSgpKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Zt
KSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTk1Miw3ICs5NTIsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaQogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CiAgICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVP
clJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAg
IGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgICAgIEp1bXAgbm9PcHRp
bWl6ZWRFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGExMjI4ZDMu
LjYwN2E0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTc2NSw3ICs3NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJu
VmFsdWVHUFIpOwotICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKCkpOworICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwpAQCAtODI2LDcgKzgyNiw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF90b19zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlCiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIC8vIG9wZXJhdGlvblRocm93IHJldHVy
bnMgdGhlIGNhbGxGcmFtZSBmb3IgdGhlIGhhbmRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCBjMDRjZGM0Li5lNjM5OTNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTEwMywxNCArMTAzLDE0
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayoKICAgICBWTSogdm0gPSBjb2RlQmxvY2stPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAotICAgIFZNRW50
cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICBF
bnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAgIGlmICgh
Y2FsbGVyRnJhbWUpIHsKICAgICAgICAgY2FsbGVyRnJhbWUgPSBleGVjOwotICAgICAgICB2bUVu
dHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOworICAgICAgICBlbnRyeUZyYW1lID0gdm0t
PnRvcEVudHJ5RnJhbWU7CiAgICAgfQogCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZy
YW1lKTsKICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUpOwog
fQogCkBAIC0xMjAsMTAgKzEyMCwxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhy
b3dEaXZpZGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAotICAgIFZNRW50
cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICBF
bnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogCi0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNh
bGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIo
dm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJy
b3JTY29wZSgqdm0pOwogICAgIHRocm93RXhjZXB0aW9uKGNhbGxlckZyYW1lLCBzY29wZSwgY3Jl
YXRlRXJyb3IoY2FsbGVyRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiRGl2aXNpb24gYnkgemVybyBvciBk
aXZpc2lvbiBvdmVyZmxvdy4iKSkpOwogfQpAQCAtMTMzLDEwICsxMzMsMTAgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRocm93T3V0T2ZCb3VuZHNBY2Nlc3NFcnJvcihFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoKnZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0g
dm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+
Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0g
dm0tPnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNh
bGxlckZyYW1lKGVudHJ5RnJhbWUpOwogCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZy
YW1lKTsKICAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSgqdm0pOwogICAgIHRocm93
RXhjZXB0aW9uKGNhbGxlckZyYW1lLCBzY29wZSwgY3JlYXRlRXJyb3IoY2FsbGVyRnJhbWUsIEFT
Q0lJTGl0ZXJhbCgiT3V0LW9mLWJvdW5kcyBhY2Nlc3MuIikpKTsKIH0KQEAgLTE0OSw5ICsxNDks
OSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2soRXhlY1N0
YXRlKiBleGVjKQogCiAgICAgaW50MzJfdCBtaXNzaW5nQXJnQ291bnQgPSBDb21tb25TbG93UGF0
aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgKnZtLCBDb2RlRm9yQ2FsbCk7CiAgICAgaWYgKG1pc3Np
bmdBcmdDb3VudCA8IDApIHsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2
bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhl
Yy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAg
ICAgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgICAg
ICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7
CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgZW50
cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihj
YWxsZXJGcmFtZSwgc2NvcGUpOwogICAgIH0KIApAQCAtMTY1LDkgKzE2NSw5IEBAIGludDMyX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhl
YykKIAogICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0
eUNoZWNrRm9yKGV4ZWMsICp2bSwgQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgaWYgKG1pc3NpbmdB
cmdDb3VudCA8IDApIHsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+
dG9wVk1FbnRyeUZyYW1lOwotICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+
Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
V2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICAg
ICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgICAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7Cisg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgZW50cnlG
cmFtZSwgY2FsbGVyRnJhbWUpOwogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
ZXJGcmFtZSwgc2NvcGUpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDkyZTQyYjEuLmU0Mzk2MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcihWTSogdm0pCiAgICAgLy8gZXZlbiB0aG91Z2ggd2Ugd29uJ3QgdXNlIGl0LgogICAgIGpp
dC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSKTsKIAotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBqaXQuc2V0dXBBcmd1
bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7CkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBu
YXRpdmVGb3JHZW5lcmF0b3IoVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGsKICAgICAv
LyBIYW5kbGUgYW4gZXhjZXB0aW9uCiAgICAgZXhjZXB0aW9uSGFuZGxlci5saW5rKCZqaXQpOwog
Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KnZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKICAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6
OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2KSAm
JiBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBlOWEwZDJhLi4zNTAz
NWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMTg3Miw4ICsxODcyLDggQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U3RkRXJyKEV4ZWNTdGF0ZSogZXhlYykg
eyByZXR1cm4gcHJpbnQKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1w
Q2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOwot
ICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5
RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1l
OworICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRy
eUZyYW1lKTsKICAgICBpZiAoY2FsbGVyRnJhbWUpCiAgICAgICAgIHZtLmludGVycHJldGVyLT5k
dW1wQ2FsbEZyYW1lKGNhbGxlckZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKaW5kZXggNzM1ZTcxYi4uMzY2NGUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC00ODEsMTMgKzQ4MSwxMyBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgVk1F
bnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZy
YW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAg
RW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZy
YW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwogICAg
IGlmICghY2FsbGVyRnJhbWUpIHsKICAgICAgICAgY2FsbGVyRnJhbWUgPSBleGVjOwotICAgICAg
ICB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIHRvcEVudHJ5RnJh
bWUgPSB2bS50b3BFbnRyeUZyYW1lOwogICAgIH0KLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJX
aXRoUmVzdG9yZSB0cmFjZXIoJnZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIoJnZtLCB0b3BFbnRyeUZyYW1l
LCBjYWxsZXJGcmFtZSk7CiAKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCmluZGV4IDM2ZjY0ODYuLjUy
OTY3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMywgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTExNiw3ICsxMTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9OYXRpdmUo
dm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1leHRlcm4gIkMiIFZNRW50cnlSZWNv
cmQqIHZtRW50cnlSZWNvcmQoVk1FbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQorZXh0ZXJuICJDIiBW
TUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUpCiB7CiAg
ICAgLy8gVGhlIEMgTG9vcCBkb2Vzbid0IGhhdmUgYW55IGNhbGxlZSBzYXZlIHJlZ2lzdGVycywg
c28gdGhlIFZNRW50cnlSZWNvcmQgaXMgYWxsb2NhdGVkIGF0IHRoZSBiYXNlIG9mIHRoZSBmcmFt
ZS4KICAgICBpbnRwdHJfdCBzdGFja0FsaWdubWVudCA9IHN0YWNrQWxpZ25tZW50Qnl0ZXMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQppbmRleCA1ZGRlNjY0Li43YmYxZWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC02NTksNyArNjU5LDcgQEAg
ZW5kCiAKIG1hY3JvIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0sIHRlbXApCiAgICAgaWYgQVJNNjQgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAg
ICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06
OnRvcEVudHJ5RnJhbWVbdm1dLCB0ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVt
cCkKICAgICAgICAgbGVhcCBWTUVudHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVy
W3RlbXBdLCB0ZW1wCiAgICAgICAgIGlmIEFSTTY0CkBAIC03MDEsNyArNzAxLDcgQEAgZW5kCiAK
IG1hY3JvIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bSwgdGVtcCkKICAgICBpZiBBUk02NCBvciBYODZfNjQgb3IgWDg2XzY0X1dJTgotICAgICAg
ICBsb2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdGVtcAorICAgICAgICBsb2FkcCBWTTo6
dG9wRW50cnlGcmFtZVt2bV0sIHRlbXAKICAgICAgICAgdm1FbnRyeVJlY29yZCh0ZW1wLCB0ZW1w
KQogICAgICAgICBsZWFwIFZNRW50cnlSZWNvcmQ6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJb
dGVtcF0sIHRlbXAKICAgICAgICAgaWYgQVJNNjQKQEAgLTExNDQsNyArMTE0NCw3IEBAIGlmIG5v
dCBDX0xPT1AKICAgICAgICAgc3RvcmVwIGFkZHJlc3MsIFZNOjptX2xhc3RTdGFja1RvcFt2bV0K
ICAgICAgICAgcmV0CiAgICAgCi0gICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNv
bnN0IFZNRW50cnlGcmFtZSogZW50cnlGcmFtZSkKKyAgICAjIFZNRW50cnlSZWNvcmQqIHZtRW50
cnlSZWNvcmQoY29uc3QgRW50cnlGcmFtZSogZW50cnlGcmFtZSkKICAgICBnbG9iYWwgX3ZtRW50
cnlSZWNvcmQKICAgICBfdm1FbnRyeVJlY29yZDoKICAgICAgICAgaWYgWDg2IG9yIFg4Nl9XSU4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20KaW5kZXggMTE0YTk3OC4uMzMwOTBlMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20K
QEAgLTEyNSw4ICsxMjUsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgc3RvcmVw
IHZtLCBWTUVudHJ5UmVjb3JkOjptX3ZtW3NwXQogICAgIGxvYWRwIFZNOjp0b3BDYWxsRnJhbWVb
dm1dLCB0NAogICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1l
W3NwXQotICAgIGxvYWRwIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dLCB0NAotICAgIHN0b3JlcCB0
NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXQorICAgIGxvYWRwIFZN
Ojp0b3BFbnRyeUZyYW1lW3ZtXSwgdDQKKyAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1f
cHJldlRvcEVudHJ5RnJhbWVbc3BdCiAKICAgICAjIEFsaWduIHN0YWNrIHBvaW50ZXIKICAgICBp
ZiBYODZfV0lOIG9yIE1JUFMKQEAgLTE4OSw4ICsxODksOCBAQCBtYWNybyBkb1ZNRW50cnkobWFr
ZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQ1CiAgICAgbG9hZHAg
Vk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDQKICAgICBzdG9yZXAgdDQs
IFZNOjp0b3BDYWxsRnJhbWVbdDVdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
Vk1FbnRyeUZyYW1lW3NwXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNOjp0b3BWTUVudHJ5RnJhbWVb
dDVdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ0
CisgICAgc3RvcmVwIHQ0LCBWTTo6dG9wRW50cnlGcmFtZVt0NV0KIAogICAgIGlmIEFSTXY3CiAg
ICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCB0NQpAQCAtMjQxLDcgKzI0
MSw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKIAogLmNvcHlBcmdzRG9uZToKICAgICBz
dG9yZXAgc3AsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgc3RvcmVwIGNmciwgVk06OnRvcFZN
RW50cnlGcmFtZVt2bV0KKyAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAog
ICAgIG1ha2VDYWxsKGVudHJ5LCB0MywgdDQpCiAKQEAgLTI1NSw4ICsyNTUsOCBAQCBtYWNybyBk
b1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQ1
CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDQKICAg
ICBzdG9yZXAgdDQsIFZNOjp0b3BDYWxsRnJhbWVbdDVdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29y
ZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNOjp0b3BW
TUVudHJ5RnJhbWVbdDVdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlG
cmFtZVtzcF0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTTo6dG9wRW50cnlGcmFtZVt0NV0KIAogICAg
IGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCB0NQpA
QCAtMzI0LDggKzMyNCw4IEBAIF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBW
TUVudHJ5UmVjb3JkOjptX3ZtW3NwXSwgdDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3By
ZXZUb3BDYWxsRnJhbWVbc3BdLCB0NQogICAgIHN0b3JlcCB0NSwgVk06OnRvcENhbGxGcmFtZVt0
M10KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdLCB0
NQotICAgIHN0b3JlcCB0NSwgVk06OnRvcFZNRW50cnlGcmFtZVt0M10KKyAgICBsb2FkcCBWTUVu
dHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3NwXSwgdDUKKyAgICBzdG9yZXAgdDUsIFZN
Ojp0b3BFbnRyeUZyYW1lW3QzXQogCiAgICAgaWYgQVJNdjcKICAgICAgICAgc3VicCBjZnIsIENh
bGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGUzN2EwZjYuLjk1OTA5MzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCkBAIC0xMjksOCArMTI5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxs
KQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0KICAgICBsb2FkcCBWTTo6
dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJl
dlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQK
LSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0K
KyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVu
dHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3NwXQogCiAgICAgbG9hZGkgUHJvdG9DYWxs
RnJhbWU6OnBhZGRlZEFyZ0NvdW50W3Byb3RvQ2FsbEZyYW1lXSwgdDQKICAgICBhZGRwIENhbGxG
cmFtZUhlYWRlclNsb3RzLCB0NCwgdDQKQEAgLTE3MSw4ICsxNzEsOCBAQCBtYWNybyBkb1ZNRW50
cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVt0NF0sIHZtCiAgICAg
bG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVn
CiAgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcENhbGxGcmFtZVt2bV0KLSAgICBsb2Fk
cCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcK
LSAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIGxv
YWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcK
KyAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIHN1
YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCBzcAogCkBAIC0yMjAsNyArMjIwLDcgQEAg
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGVsc2UKICAgICAgICAgc3RvcmVwIHNwLCBW
TTo6dG9wQ2FsbEZyYW1lW3ZtXQogICAgIGVuZAotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVu
dHJ5RnJhbWVbdm1dCisgICAgc3RvcmVwIGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudChleHRyYVRlbXBSZWcsIDB4YmFkMGRjMDIpCiAK
QEAgLTIzNiw4ICsyMzYsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAg
Vk1FbnRyeVJlY29yZDo6bV92bVt0NF0sIHZtCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wQ2FsbEZyYW1lW3Q0XSwgdDIKICAgICBzdG9yZXAgdDIsIFZNOjp0b3BDYWxsRnJhbWVb
dm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwg
dDIKLSAgICBzdG9yZXAgdDIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0NF0sIHQyCisgICAgc3RvcmVwIHQyLCBW
TTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVT
aXplLCBzcAogCkBAIC0yNzYsNyArMjc2LDYgQEAgbWFjcm8gbWFrZUhvc3RGdW5jdGlvbkNhbGwo
ZW50cnksIHRlbXApCiAgICAgZW5kCiBlbmQKIAotCiBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246
CiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQz
CkBAIC0yOTEsOCArMjkwLDggQEAgX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRw
IFZNRW50cnlSZWNvcmQ6Om1fdm1bdDJdLCB0MwogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1f
cHJldlRvcENhbGxGcmFtZVt0Ml0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRyYVRlbXBS
ZWcsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2
VG9wVk1FbnRyeUZyYW1lW3QyXSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJhVGVtcFJl
ZywgVk06OnRvcFZNRW50cnlGcmFtZVt0M10KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3By
ZXZUb3BFbnRyeUZyYW1lW3QyXSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJhVGVtcFJl
ZywgVk06OnRvcEVudHJ5RnJhbWVbdDNdCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJT
YXZlU2l6ZSwgc3AKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApp
bmRleCBhNWE1M2M2Li4yYTJiYmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcApAQCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVu
ZGVudE9wdGlvbnMoKQogICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseSgpID0gZmFsc2U7
CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5KCkpCi0gICAgICAgIE9wdGlvbnM6
OnVzZVdlYkFzc2VtYmx5RmFzdFRMUygpID0gZmFsc2U7CisgICAgICAgIE9wdGlvbnM6OnVzZUZh
c3RUTFNGb3JXYXNtQ29udGV4dCgpID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggM2NlYzU1Mi4uODQ3
NWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDY3LDgg
KzQ2Nyw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWdu
ZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcywgMTI4LCBOb3JtYWwsICJXZWJB
c3NlbWJseSBmYXN0IG1lbW9yaWVzIHVzZSA0R2lCIHZpcnR1YWwgYWxsb2NhdGlvbnMsIHBsdXMg
YSByZWR6b25lIChjb3VudGVkIGFzIG11bHRpcGxlIG9mIDY0S2lCIFdlYkFzc2VtYmx5IHBhZ2Vz
KSBhdCB0aGUgZW5kIHRvIGNhdGNoIHJlZytpbW0gYWNjZXNzZXMgd2hpY2ggZXhjZWVkIDMyLWJp
dCwgYW55dGhpbmcgYmV5b25kIHRoZSByZWR6b25lIGlzIGV4cGxpY2l0bHkgYm91bmRzLWNoZWNr
ZWQiKSBcCiAgICAgdihib29sLCBjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSwgZmFs
c2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgY3Jhc2ggaWYgd2UgY2FuJ3Qgb2J0YWluIGZh
c3QgbWVtb3J5IGZvciB3YXNtLiIpIFwKICAgICB2KHVuc2lnbmVkLCBtYXhOdW1XZWJBc3NlbWJs
eUZhc3RNZW1vcmllcywgNCwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCB1c2VXZWJB
c3NlbWJseUZhc3RUTFMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVz
ZSBmYXN0IHRocmVhZC1sb2NhbCBzdG9yYWdlIGlmIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBw
bGF0Zm9ybS4iKSBcCi0gICAgdihib29sLCB1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQsIHRydWUs
IE5vcm1hbCwgIklmIHRydWUgKGFuZCBmYXN0IFRMUyBpcyBlbmFibGVkKSwgd2Ugd2lsbCBzdG9y
ZSBjb250ZXh0IGluIGZhc3QgVExTLiBJZiBmYWxzZSwgd2Ugd2lsbCBwaW4gaXQgdG8gYSByZWdp
c3Rlci4iKSBcCisgICAgdihib29sLCB1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQsIHRydWUsIE5v
cm1hbCwgIklmIHRydWUsIHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0IFRMUy4gSWYgZmFs
c2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAogICAgIHYoYm9vbCwgdXNlQ2Fs
bElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3
aWxsIHVzZSBDYWxsTGlua0luZm8gdG8gaW5saW5lIGNhY2hlIFdhc20gdG8gSlMgY2FsbHMuIikg
XAogICAgIHYoYm9vbCwgdXNlT2JqZWN0UmVzdFNwcmVhZCwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1
ZSwgd2Ugd2lsbCBlbmFibGUgT2JqZWN0IFJlc3QvU3ByZWFkIGZlYXR1cmUuIikgXAogICAgIHYo
Ym9vbCwgdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIHVzZSBvdXIgbm9ybWFsIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsaW5nLiBJZiBm
YWxzZSwgdGhlIGFsbG9jYXRpb24gcHJvZmlsZSB3aWxsIGFsd2F5cyBjbGFpbSB0byBiZSB1bmRl
Y2lkZWQuIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHAKaW5kZXggYTRiZTk1Yi4uM2JjZjZjMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAgLTgzLDcgKzgzLDcg
QEAgcHVibGljOgogICAgIEZyYW1lV2Fsa2VyKFZNJiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUs
IGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb2RlQmxvY2tTZXRMb2NrZXIsIGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBtYWNoaW5lVGhyZWFkc0xvY2tlcikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAg
ICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKLSAgICAgICAgLCBtX3ZtRW50cnlGcmFtZSh2bS50
b3BWTUVudHJ5RnJhbWUpCisgICAgICAgICwgbV9lbnRyeUZyYW1lKHZtLnRvcEVudHJ5RnJhbWUp
CiAgICAgICAgICwgbV9jb2RlQmxvY2tTZXRMb2NrZXIoY29kZUJsb2NrU2V0TG9ja2VyKQogICAg
ICAgICAsIG1fbWFjaGluZVRocmVhZHNMb2NrZXIobWFjaGluZVRocmVhZHNMb2NrZXIpCiAgICAg
ewpAQCAtMTMwLDcgKzEzMCw3IEBAIHByb3RlY3RlZDoKICAgICBTVVBQUkVTU19BU0FOCiAgICAg
dm9pZCBhZHZhbmNlVG9QYXJlbnRGcmFtZSgpCiAgICAgewotICAgICAgICBtX2NhbGxGcmFtZSA9
IG1fY2FsbEZyYW1lLT51bnNhZmVDYWxsZXJGcmFtZShtX3ZtRW50cnlGcmFtZSk7CisgICAgICAg
IG1fY2FsbEZyYW1lID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxlckZyYW1lKG1fZW50cnlGcmFt
ZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc0F0VG9wKCkgY29uc3QKQEAgLTE4OCw3ICsxODgsNyBA
QCBwcm90ZWN0ZWQ6CiAKICAgICBWTSYgbV92bTsKICAgICBFeGVjU3RhdGUqIG1fY2FsbEZyYW1l
OwotICAgIFZNRW50cnlGcmFtZSogbV92bUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogbV9l
bnRyeUZyYW1lOwogICAgIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBtX2NvZGVCbG9ja1NldExvY2tl
cjsKICAgICBjb25zdCBBYnN0cmFjdExvY2tlciYgbV9tYWNoaW5lVGhyZWFkc0xvY2tlcjsKICAg
ICBib29sIG1fYmFpbGluZ091dCB7IGZhbHNlIH07CkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKICAgICAgICAg
ICAgICAgICAvLyBXZSByZXVzZSBMTEludCBDb2RlQmxvY2tzIGZvciB0aGUgYmFzZWxpbmUgSklU
LCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBib3RoIGppdCB0eXBlcy4KICAgICAgICAgICAgICAg
ICAvLyBUaGlzIG1pZ2h0IGFsc28gYmUgZmFsc2UgZm9yIHZhcmlvdXMgcmVhc29ucyAoa25vd24g
YW5kIHVua25vd24pLCBldmVuIHRob3VnaAogICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwZXIg
dW5saWtlbHkuIE9uZSByZWFzb24gdGhhdCB0aGlzIGNhbiBiZSBmYWxzZSBpcyB3aGVuIHdlIHRo
cm93IGZyb20gYSBERkcgZnJhbWUsCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBo
YXZpbmcgdG8gdW53aW5kIHBhc3QgYSBWTUVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1
dGluZworICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBw
YXN0IGFuIEVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZwogICAgICAgICAgICAg
ICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbi4gU28gd2Ug
anVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5n
IGl0LgogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAppbmRleCAwNmU5MzAzLi40
YzY1ZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Nj
b3BlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01NywxMyArNTcsMTMgQEAgVGhyb3dTY29wZTo6flRocm93U2NvcGUoKQogCiAgICAgYm9vbCB3
aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQgPSBmYWxzZTsKICAgICB2b2lkKiBwcmV2aW91c1Njb3Bl
ID0gbV9wcmV2aW91c1Njb3BlOwotICAgIHZvaWQqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9w
Vk1FbnRyeUZyYW1lOworICAgIHZvaWQqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJh
bWU7CiAKLSAgICAvLyBJZiB0aGUgdG9wVk1FbnRyeUZyYW1lIHdhcyBwdXNoZWQgb24gdGhlIHN0
YWNrIGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBpbnN0YW50aWF0ZWQsCisgICAgLy8gSWYg
dGhlIHRvcEVudHJ5RnJhbWUgd2FzIHB1c2hlZCBvbiB0aGUgc3RhY2sgYWZ0ZXIgdGhlIHByZXZp
b3VzU2NvcGUgd2FzIGluc3RhbnRpYXRlZCwKICAgICAvLyB0aGVuIHRoaXMgdGhyb3dTY29wZSB3
aWxsIGJlIHJldHVybmluZyB0byBMTElOVCBvciBKSVQgY29kZSB0aGF0IGFsd2F5cyBkbyBhbiBl
eGNlcHRpb24KICAgICAvLyBjaGVjay4gSW4gdGhhdCBjYXNlLCBza2lwIHRoZSBzaW11bGF0ZWQg
dGhyb3cgYmVjYXVzZSB0aGUgTExJbnQgYW5kIEpJVCB3aWxsIGJlCiAgICAgLy8gY2hlY2tpbmcg
Zm9yIHRoZSBleGNlcHRpb24gdGhlaXIgb3duIHdheSBpbnN0ZWFkIG9mIGNhbGxpbmcgVGhyb3dT
Y29wZTo6ZXhjZXB0aW9uKCkuCi0gICAgaWYgKHRvcFZNRW50cnlGcmFtZSAmJiBwcmV2aW91c1Nj
b3BlID4gdG9wVk1FbnRyeUZyYW1lKQorICAgIGlmICh0b3BFbnRyeUZyYW1lICYmIHByZXZpb3Vz
U2NvcGUgPiB0b3BFbnRyeUZyYW1lKQogICAgICAgICB3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQg
PSB0cnVlOwogICAgIAogICAgIGlmICghd2lsbEJlSGFuZGxlQnlMTEludE9ySklUKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDE4MWUzYjcuLjNlZTUxODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBWTTo6Vk0oVk1U
eXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAsIHZtVHlwZSh2bVR5
cGUpCiAgICAgLCBjbGllbnREYXRhKDApCi0gICAgLCB0b3BWTUVudHJ5RnJhbWUobnVsbHB0cikK
KyAgICAsIHRvcEVudHJ5RnJhbWUobnVsbHB0cikKICAgICAsIHRvcENhbGxGcmFtZShDYWxsRnJh
bWU6Om5vQ2FsbGVyKCkpCiAgICAgLCBwcm9taXNlRGVmZXJyZWRUaW1lcihzdGQ6Om1ha2VfdW5p
cXVlPFByb21pc2VEZWZlcnJlZFRpbWVyPigqdGhpcykpCiAgICAgLCBtX2F0b21pY1N0cmluZ1Rh
YmxlKHZtVHlwZSA9PSBEZWZhdWx0ID8gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFi
bGUoKSA6IG5ldyBBdG9taWNTdHJpbmdUYWJsZSkKQEAgLTM2OCw3ICszNjgsNyBAQCBWTTo6flZN
KCkKICAgICBwcm9taXNlRGVmZXJyZWRUaW1lci0+c3RvcFJ1bm5pbmdUYXNrcygpOwogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoV2FzbTo6ZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgp
KQotICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLnN0b3BBbGxQbGFuc0ZvclZNKCp0aGlz
KTsKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JDb250ZXh0
KHdhc21Db250ZXh0KTsKICNlbmRpZgogICAgIGlmIChVTkxJS0VMWShtX3dhdGNoZG9nKSkKICAg
ICAgICAgbV93YXRjaGRvZy0+d2lsbERlc3Ryb3lWTSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCmluZGV4IDk1NTg1OTQuLjkyNzcxM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlU
YWJsZS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgi
CisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5j
bHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRB
cml0aG1ldGljLmg+CkBAIC0zMjksMTQgKzMzMCwxMyBAQCBwdWJsaWM6CiAKICAgICBWTVR5cGUg
dm1UeXBlOwogICAgIENsaWVudERhdGEqIGNsaWVudERhdGE7Ci0gICAgVk1FbnRyeUZyYW1lKiB0
b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZTsKICAgICAvLyBO
T1RFOiBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiB3aGlsZSByb2xsaW5nIGJhY2sgdGhlIGNh
bGwgZnJhbWUsIHRoaXMgbWF5IGJlIGVxdWFsIHRvCi0gICAgLy8gdG9wVk1FbnRyeUZyYW1lLgor
ICAgIC8vIHRvcEVudHJ5RnJhbWUuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgdm9p
ZCosIGJlY2F1c2UgaXQgbWlnaHQgbm90IHBvaW50IHRvIGEgQ2FsbEZyYW1lLgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA0NDEKICAgICBFeGVjU3Rh
dGUqIHRvcENhbGxGcmFtZSB7IG51bGxwdHIgfTsKLSAgICAvLyBGSVhNRTogU2F2ZSB0aGlzIHN0
YXRlIGVsc2V3aGVyZSB0byBhbGxvdyBQSUMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjk3NzMKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0
IHsgbnVsbHB0ciB9OworICAgIFdhc206OkNvbnRleHQgd2FzbUNvbnRleHQ7CiAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0
ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKQEAgLTUwMSw5ICs1MDEsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHRvcFZNRW50cnlGcmFtZU9mZnNldCgp
CisgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcFZNRW50cnlGcmFtZSk7CisgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUpOwogICAgIH0KIAogICAg
IHZvaWQgcmVzdG9yZVByZXZpb3VzRXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IHNl
dEV4Y2VwdGlvbihleGNlcHRpb24pOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCmluZGV4IGRlYWE0NDkuLjg3M2QzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC04OSw3ICs4OSw3IEBAIGlubGluZSBDYWxsRnJhbWUq
IHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSkKICAgICByZXR1
cm4gdG9wQ2FsbEZyYW1lOwogfQogCi1zdGF0aWMgYm9vbCBpc1NhbmVGcmFtZShDYWxsRnJhbWUq
IGZyYW1lLCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBWTUVudHJ5RnJhbWUqIGVudHJ5RnJhbWUs
IFN0YWNrQm91bmRzIHN0YWNrQm91bmRzKQorc3RhdGljIGJvb2wgaXNTYW5lRnJhbWUoQ2FsbEZy
YW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSwgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMpCiB7CiAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZyYW1lKSA+PSByZWludGVycHJldF9jYXN0PHZvaWQqPihlbnRyeUZyYW1lKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIxLDE4ICsxMjEsMTggQEAgdm9pZCBWTVRyYXBzOjp0
cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91
bmRzIHN0YWMKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGZvdW5kQ29kZUJsb2NrID0gbnVsbHB0
cjsKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsK
KyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKIAogICAgIC8v
IFdlIGRvbid0IGhhdmUgYSBjYWxsZWUgdG8gc3RhcnQgd2l0aC4gU28sIHVzZSB0aGUgZW5kIG9m
IHRoZSBzdGFjayB0byBrZWVwIHRoZQogICAgIC8vIGlzU2FuZUZyYW1lKCkgY2hlY2tlciBiZWxv
dyBoYXBweSBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi4gSXQgd2lsbCBzdGlsbCBjaGVjawogICAg
IC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlzIGluIHRoZSBzdGFja0JvdW5kcy4KICAg
ICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihz
dGFja0JvdW5kcy5lbmQoKSk7CiAKLSAgICBpZiAoIXZtRW50cnlGcmFtZSB8fCAhY2FsbEZyYW1l
KQorICAgIGlmICghZW50cnlGcmFtZSB8fCAhY2FsbEZyYW1lKQogICAgICAgICByZXR1cm47IC8v
IE5vdCBydW5uaW5nIEpTIGNvZGUuIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRl
ci4KIAogICAgIGRvIHsKLSAgICAgICAgaWYgKCFpc1NhbmVGcmFtZShjYWxsRnJhbWUsIGNhbGxl
ZUZyYW1lLCB2bUVudHJ5RnJhbWUsIHN0YWNrQm91bmRzKSkKKyAgICAgICAgaWYgKCFpc1NhbmVG
cmFtZShjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBlbnRyeUZyYW1lLCBzdGFja0JvdW5kcykpCiAg
ICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRl
ci4KIAogICAgICAgICBDb2RlQmxvY2sqIGNhbmRpZGF0ZUNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CkBAIC0xNDIsOSArMTQyLDkgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxs
VHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMK
ICAgICAgICAgfQogCiAgICAgICAgIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lOwotICAgICAgICBj
YWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgICAg
IGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAKLSAgICB9
IHdoaWxlIChjYWxsRnJhbWUgJiYgdm1FbnRyeUZyYW1lKTsKKyAgICB9IHdoaWxlIChjYWxsRnJh
bWUgJiYgZW50cnlGcmFtZSk7CiAKICAgICBpZiAoIWZvdW5kQ29kZUJsb2NrKSB7CiAgICAgICAg
IC8vIFdlIG1heSBoYXZlIGp1c3QgZW50ZXJlZCB0aGUgZnJhbWUgYW5kIHRoZSBjb2RlQmxvY2sg
cG9pbnRlciBpcyBub3QKQEAgLTE4MSwxNyArMTgxLDE3IEBAIHZvaWQgVk1UcmFwczo6aW52YWxp
ZGF0ZUNvZGVCbG9ja3NPblN0YWNrKExvY2tlcjxMb2NrPiYsIEV4ZWNTdGF0ZSogdG9wQ2FsbEZy
YW1lCiAKICAgICBtX25lZWRUb0ludmFsaWRhdGVkQ29kZUJsb2NrcyA9IGZhbHNlOwogCi0gICAg
Vk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bSgpLnRvcFZNRW50cnlGcmFtZTsKKyAgICBF
bnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0oKS50b3BFbnRyeUZyYW1lOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gdG9wQ2FsbEZyYW1lOwogCi0gICAgaWYgKCF2bUVudHJ5RnJhbWUpCisg
ICAgaWYgKCFlbnRyeUZyYW1lKQogICAgICAgICByZXR1cm47IC8vIE5vdCBydW5uaW5nIEpTIGNv
ZGUuIE5vdGhpbmcgdG8gaW52YWxpZGF0ZS4KIAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
ICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvVk1UcmFwcyk7Ci0gICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCBhZDdkNjIxLi44MjMxY2I5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCkBAIC00OSw4ICs0OSw2IEBACiAjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAiSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5n
Q29udmVudGlvbi5oIgpAQCAtMTc4LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAK
LSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwg
SW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9y
eU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2Vk
dXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYs
IE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGll
clVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAg
LTI0Nyw3ICsyNDUsNyBAQCBwcml2YXRlOgogCiAgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKIAot
ICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1
ZSopOworICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFz
aWNCbG9jayosIFZhbHVlKik7CiAgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0
ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiwg
QmFzaWNCbG9jayopOwogCiAgICAgT3JpZ2luIG9yaWdpbigpOwpAQCAtMjY3LDcgKzI2NSw3IEBA
IHByaXZhdGU6CiAgICAgSW5zZXJ0aW9uU2V0IG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXM7CiAg
ICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcg
bV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9OwotICAgIEdQUlJlZyBtX3dhc21Db250
ZXh0R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9
OwogCiAgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1ZSB7IG51bGxwdHIgfTsgLy8gQWx3YXlzIHVz
ZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRl
cmlhbGl6ZWQgd2hlbiB1c2VkLgpAQCAtMjkxLDM3ICsyODksMzcgQEAgaW50MzJfdCBCM0lSR2Vu
ZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQz
Ml90IG9mZnMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnJl
c3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1
ZSogYXJnKQordm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQ
cm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJnKQogewotICAgIGlm
ICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMo
KSkgewogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKLSAgICAgICAg
aWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0
ZXIoKSkKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNl
TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKLSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBh
bGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHROZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0
KHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250
ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAg
ICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEJlY2F1c2Ug
V2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5v
dCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgor
ICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4
dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJl
c3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgogICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJv
bSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQg
cmVnaXN0ZXIuCiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CiAgICAgRWZm
ZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIGVmZmVjdHMud3JpdGVzUGlubmVk
ID0gdHJ1ZTsKICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7Ci0gICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxh
dGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEdQUikpOworICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOwogICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwot
ICAgIEdQUlJlZyB3YXNtQ29udGV4dEdQUiA9IG1fd2FzbUNvbnRleHRHUFI7CisgICAgR1BSUmVn
IHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKLSAgICAgICAgaml0Lm1vdmUocGFyYW1b
MF0uZ3ByKCksIHdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3By
KCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUm
IHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgVGllclVwQ291bnQqIHRpZXJVcCkKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5h
bEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUg
Y29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGll
clVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9pbmZv
KGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBp
bGF0aW9uTW9kZSkKQEAgLTMzOSw5ICszMzcsOSBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJh
dG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQog
ICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAg
bV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CiAKLSAgICBtX3dhc21Db250ZXh0
R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dFBvaW50ZXI7Ci0gICAgaWYgKCF1c2VGYXN0VExT
Rm9yQ29udGV4dCgpKQotICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEdQ
Uik7CisgICAgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4
dEluc3RhbmNlUG9pbnRlcjsKKyAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAg
ICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAKICAgICBp
ZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKICAgICAgICAgQVNTRVJUKCFwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CkBAIC0zNTAsNiArMzQ4LDkgQEAg
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rlcihy
ZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAgICAgfQogCisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlv
bikKKyAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhy
b3dXYXNtRXhjZXB0aW9uKTsKKwogICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3By
b2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBwaW5uZWRHUFIpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKQEAgLTM2Myw2ICszNjQsMTYgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRp
b25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAg
ICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgLy8gTW9zdCBtZW1vcnkgYWNjZXNzZXMg
aW4gc2lnbmFsaW5nIG1vZGUgZG9uJ3QgZG8gYW4gZXhwbGljaXQgZXhjZXB0aW9uIGNoZWNrIGJl
Y2F1c2UgdGhleSBjYW4gcmVseSBvbiBmYXVsdCBoYW5kbGluZyB0byBkZXRlY3Qgb3V0LW9mLWJv
dW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZSB0
aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNhbiBqdW1wIHRvIHRoYXQgdGh1bmsuCisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKICAgICB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2Nh
dGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwpAQCAtMzczLDEyICszODQs
MTIgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0g
c3RhY2tPdmVyZmxvd0NoZWNrOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNv
bWVSZWdpc3RlcihmcmFtZVBvaW50ZXIpOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmNs
b2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAgICAgaWYg
KCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVz
ZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHQgcmVnaXN0ZXIgYW5kIGRvZXMg
bm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUu
CisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5j
ZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0
IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJv
bSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQg
cmVnaXN0ZXIuCiAgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gZmFsc2U7CiAgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMu
cmVhZHNQaW5uZWQgPSB0cnVlOwotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1
bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0R1BSKTsKKyAgICAgICAg
ICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWco
bV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAgICAgICAgfQogICAgICAgICBzdGFja092ZXJm
bG93Q2hlY2stPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDI7CiAgICAgICAgIHN0YWNrT3ZlcmZs
b3dDaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewpAQCAtNDAxLDcgKzQxMiw3IEBAIEIz
SVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8s
IFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dDaGVj
ayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2ZWRa
b25lU2l6ZSgpOwogICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21ha2Vz
Q2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5lZWRV
bmRlcmZsb3dDaGVjazsKIAotICAgICAgICAgICAgR1BSUmVnIGNvbnRleHQgPSB1c2VGYXN0VExT
Rm9yQ29udGV4dCgpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEdQUjsKKyAgICAg
ICAgICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyBw
YXJhbXNbMF0uZ3ByKCkgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAKICAgICAgICAgICAg
IC8vIFRoaXMgYWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYg
dGhlaXIgZnJhbWUgc2l6ZSBpcyB3aXRoaW4KICAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRz
IHNpbmNlIHRoZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCkBA
IC00MTEsMTAgKzQyMiwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKIAotICAgICAgICAgICAg
ICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZFdhc21Db250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1
c2VGYXN0VExTKCkpCisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0
YW5jZShjb250ZXh0SW5zdGFuY2UpOwogCi0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mQ2FjaGVkU3RhY2tM
aW1pdCgpKSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0
Y2gxKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7
CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCkBAIC00
MjMsMTAgKzQzNCwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9u
TGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNt
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIHVzZUZhc3RUTFNGb3JDb250ZXh0
KCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250
ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVj
ayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNv
cnJlY3QuCi0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYg
YWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQo
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
SWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRX
YXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBk
b24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRj
aHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFj
ayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KICAgICAgICAg
ICAgIH0KQEAgLTQzOCw3ICs0NDksNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogCiB2b2lk
IEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9y
eUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBC
YXNpY0Jsb2NrKiBibG9jaykKIHsKLSAgICByZXN0b3JlV2FzbUNvbnRleHQocHJvYywgYmxvY2ss
IGluc3RhbmNlKTsKKyAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwcm9jLCBibG9jaywg
aW5zdGFuY2UpOwogCiAgICAgaWYgKCEhbWVtb3J5KSB7CiAgICAgICAgIGNvbnN0IFBpbm5lZFJl
Z2lzdGVySW5mbyogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAt
NDU4LDEyICs0NjksMTIgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlH
bG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3IKIAogICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBH
UFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdw
cigpLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNp
emVSZWdpc3RlcnM7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwog
ICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxv
d2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVu
dCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9m
ZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5Ojpv
ZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5
OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgaml0
LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0
KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwog
ICAgICAgICB9KTsKQEAgLTU0MSwyNCArNTUyLDIxIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
VW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
R3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIGludDMyX3QgKCpncm93TWVtb3J5KSAoQ29udGV4dCos
IGludDMyX3QpID0gW10gKENvbnRleHQqIHdhc21Db250ZXh0LCBpbnQzMl90IGRlbHRhKSAtPiBp
bnQzMl90IHsKLSAgICAgICAgVk0mIHZtID0gKndhc21Db250ZXh0LT52bSgpOwotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgSlNXZWJBc3Nl
bWJseU1lbW9yeSogd2FzbU1lbW9yeSA9IHdhc21Db250ZXh0LT5tZW1vcnkoKTsKLQorICAgIGlu
dDMyX3QgKCpncm93TWVtb3J5KShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBpbnQzMl90KSA9IFtd
IChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQz
Ml90IHsKICAgICAgICAgaWYgKGRlbHRhIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAot
ICAgICAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IGZhbHNlOwotICAg
ICAgICAvLyBncm93KCkgZG9lcyBub3QgcmVxdWlyZSBFeGVjU3RhdGUqIGlmIGl0IGRvZXNuJ3Qg
dGhyb3cgZXhjZXB0aW9ucy4KLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbnVsbHB0cjsKLSAg
ICAgICAgUGFnZUNvdW50IHJlc3VsdCA9IHdhc21NZW1vcnktPmdyb3codm0sIGV4ZWMsIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihkZWx0YSksIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7
Ci0gICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgICAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYXV0byBncm93biA9IGlu
c3RhbmNlLT5pbnRlcm5hbE1lbW9yeSgpLmdyb3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAg
IGlmICghZ3Jvd24pCisgICAgICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgorICAgICAg
ICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CisgICAg
ICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToK
KyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQogCi0gICAgICAgIHJldHVy
biByZXN1bHQucGFnZUNvdW50KCk7CisgICAgICAgIHJldHVybiBncm93bi52YWx1ZSgpLnBhZ2VD
b3VudCgpOwogICAgIH07CiAKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLApAQCAtNTcyLDEzICs1ODAsMTMg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRh
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJl
bnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IFZhbHVlKiBtZW1vcnlPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVl
KCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1v
cnkoKSkpOworICAgIFZhbHVlKiBtZW1vcnlPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBp
bnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpKTsKIAotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0
eXBlKHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KG51bGxwdHIpLT5tZW1vcnko
KS0+bWVtb3J5KCkuc2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVz
IG9uIHRoaXMgc2l6ZSIpOwotICAgIFZhbHVlKiBzaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgb3JpZ2luKCksIG1lbW9yeU9i
amVjdCwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXpl
KCkpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxXYXNt
OjpNZW1vcnkqPihudWxscHRyKS0+c2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVn
ZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOworICAgIFZhbHVlKiBzaXplID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgb3JpZ2luKCks
IG1lbW9yeU9iamVjdCwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNp
emUoKSkpOwogICAgIAogICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0gMTY7Ci0g
ICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDEgPDwgc2hpZnRWYWx1ZSwg
IlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOworICAg
IHN0YXRpY19hc3NlcnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAxdWxsIDw8IHNoaWZ0VmFsdWUs
ICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKICAg
ICBWYWx1ZSogbnVtUGFnZXMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIFpTaHIsIG9yaWdpbigpLAogICAgICAgICBzaXplLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgc2hpZnRWYWx1ZSkpOwogCkBAIC0x
MDY5LDE0ICsxMDc3LDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgbV9tYXhO
dW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKICAgICAgICAgLy8gRklYTUUgaW1w
b3J0cyBjYW4gYmUgbGlua2VkIGhlcmUsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9p
bnQsIGJlY2F1c2UgYWxsIGltcG9ydCBzdHVicyBhcmUgZ2VuZXJhdGVkIGJlZm9yZSBCMyBjb21w
aWxhdGlvbiBzdGFydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY0NjIKLSAgICAgICAgVmFsdWUqIGZ1bmN0aW9uSW1wb3J0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpKTsKLSAgICAgICAgVmFs
dWUqIGpzVHlwZU9mSW1wb3J0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkOFosIG9yaWdpbigpLCBmdW5jdGlvbkltcG9ydCwgc2FmZUNhc3Q8aW50
MzJfdD4oSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSkpOwotICAgICAgICBWYWx1ZSogaXNX
YXNtQ2FsbCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWws
IG9yaWdpbigpLCBqc1R5cGVPZkltcG9ydCwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIFdlYkFzc2VtYmx5RnVuY3Rpb25UeXBlKSk7Cisg
ICAgICAgIFZhbHVlKiB0YXJnZXRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3Rh
bmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZlRhcmdldEluc3RhbmNlKGZ1bmN0aW9uSW5kZXgpKSk7CisgICAgICAgIFZhbHVlKiBpc1dh
c21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVh
bCwgb3JpZ2luKCksIHRhcmdldEluc3RhbmNlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpOwogCiAgICAgICAgIEJhc2ljQmxvY2sq
IGlzV2FzbUJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGlz
SlNCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBpc0VtYmVk
ZGVyQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICAgICAgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2Fs
bCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlzSlNCbG9j
aykpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGlzV2FzbUNhbGwsIEZyZXF1ZW50ZWRCbG9jayhpc1dh
c21CbG9jayksIEZyZXF1ZW50ZWRCbG9jayhpc0VtYmVkZGVyQmxvY2spKTsKIAogICAgICAgICBW
YWx1ZSogd2FzbUNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwo
bV9wcm9jLCBpc1dhc21CbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUp
LAogICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKQEAgLTEw
OTcsMTUgKzExMDQsMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBVcHNpbG9u
VmFsdWUqIHdhc21DYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxw
dHIgOiBpc1dhc21CbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgd2FzbUNhbGxSZXN1bHQpOwogICAgICAgICBpc1dhc21CbG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAg
Ly8gRklYTUU6IExldHMgcmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24gYnkgY3JlYXRpbmcgYSBQSUMg
ZnJpZW5kbHkgSUMKKyAgICAgICAgLy8gRklYTUU6IExldCdzIHJlbW92ZSB0aGlzIGluZGlyZWN0
aW9uIGJ5IGNyZWF0aW5nIGEgUElDIGZyaWVuZGx5IElDCiAgICAgICAgIC8vIGZvciBjYWxscyBv
dXQgdG8gSlMuIFRoaXMgc2hvdWxkbid0IGJlIHRoYXQgaGFyZCB0byBkby4gV2UgY291bGQgcHJv
YmFibHkKICAgICAgICAgLy8gaW1wbGVtZW50IHRoZSBJQyB0byBiZSBvdmVyIFdhc206OkNvbnRl
eHQqLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwMzc1Ci0gICAgICAgIFZhbHVlKiBjb2RlQmxvY2sgPSBpc0pTQmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLAotICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSk7Ci0gICAgICAgIFZhbHVlKiBqdW1wRGVzdGlu
YXRpb24gPSBpc0pTQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAotICAgICAg
ICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNvZGVCbG9jaywgc2FmZUNhc3Q8
aW50MzJfdD4oSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0
dWIoZnVuY3Rpb25JbmRleCkpKTsKLSAgICAgICAgVmFsdWUqIGpzQ2FsbFJlc3VsdCA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzSlNCbG9jaywgb3JpZ2luKCks
IGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAorICAgICAgICBWYWx1ZSogY29kZUJsb2NrID0g
aXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKKyAgICAgICAg
ICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVD
YXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtQ29kZUJsb2Nr
KCkpKTsKKyAgICAgICAgVmFsdWUqIGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRkZXJCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCisgICAgICAgICAgICBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwgY29kZUJsb2NrLCBzYWZlQ2FzdDxpbnQzMl90PihDb2RlQmxvY2s6
Om9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5kZXgpKSk7CisgICAg
ICAgIFZhbHVlKiBlbWJlZGRlckNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5z
ZXR1cENhbGwobV9wcm9jLCBpc0VtYmVkZGVyQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlw
ZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQg
PSB0cnVlOwpAQCAtMTExOSw4ICsxMTI2LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAg
ICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6
IDFdLmdwcigpKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAg
ICBVcHNpbG9uVmFsdWUqIGpzQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZvaWQg
PyBudWxscHRyIDogaXNKU0Jsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCBqc0NhbGxSZXN1bHQpOwotICAgICAgICBpc0pTQmxvY2stPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24pOworICAgICAgICBV
cHNpbG9uVmFsdWUqIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZv
aWQgPyBudWxscHRyIDogaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCBlbWJlZGRlckNhbGxSZXN1bHQpOworICAgICAgICBpc0VtYmVkZGVy
QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250
aW51YXRpb24pOwogCiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOwogCkBA
IC0xMTI5LDcgKzExMzYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgcmVzdWx0ID0gY29udGludWF0aW9uLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgUGhpLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwgb3JpZ2luKCkpOwogICAgICAgICAgICAg
d2FzbUNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKLSAgICAgICAgICAgIGpzQ2Fs
bFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOworICAgICAgICAgICAgZW1iZWRkZXJDYWxs
UmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBU
aGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwg
YW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgpAQCAtMTE2NSwxNyArMTE3
MiwxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgIG1fbWF4TnVtSlNDYWxsQXJndW1l
bnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhcmdzLnNpemUoKSkpOwogCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlcjsKLSAgICBFeHByZXNzaW9uVHlwZSBqc0Z1bmN0aW9uQnVmZmVyOworICAgIEV4cHJl
c3Npb25UeXBlIGluc3RhbmNlc0J1ZmZlcjsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyU2l6ZTsKICAgICB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkpKTsKKyAg
ICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZldhc21UYWJsZSgpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVD
YXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSkpOwot
ICAgICAgICBqc0Z1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAg
ICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9m
SlNGdW5jdGlvbnMoKSkpOworICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFdh
c206OlRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7CisgICAgICAgIGluc3RhbmNlc0J1ZmZl
ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50
MzJfdD4oV2FzbTo6VGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpKTsKICAgICAgICAgY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlclNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIHRhYmxlLCBz
YWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mU2l6ZSgpKSk7Cisg
ICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbTo6VGFibGU6Om9mZnNldE9m
U2l6ZSgpKSk7CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBsb29raW5n
IGZvciBpcyB2YWxpZC4KQEAgLTExOTUsNiArMTIwMiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVz
c2lvCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbiA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlciwgb2Zmc2V0KTsKIAogICAgIC8vIENoZWNrIHRoYXQgdGhlIENhbGxhYmxlRnVuY3Rp
b24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNuJ3QuIEFuICJpbnZhbGlkIiBTaWdu
YXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQuCisgICAgLy8gRklYTUU6
IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFp
bCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihD
YWxsYWJsZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQzMl90KSwgIkxv
YWQgY29kZWdlbiBhc3N1bWVzIGkzMiIpOwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25h
dHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMy
X3Q+KE9CSkVDVF9PRkZTRVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBzaWduYXR1cmVJbmRleCkpKTsK
ICAgICB7CkBAIC0xMjIzLDE5ICsxMjMxLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAg
ICAgewogICAgICAgICBWYWx1ZSogb2Zmc2V0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBNdWwsIG9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBjYWxsZWVJbmRleCks
Ci0gICAgICAgICAgICBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PikpKTsKLSAgICAgICAgVmFsdWUqIGpzT2JqZWN0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQWRkLCBvcmlnaW4oKSwganNGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KSk7CisgICAgICAgICAg
ICBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoV2FzbTo6SW5zdGFuY2UqKSkpOworICAg
ICAgICBWYWx1ZSogbmV3Q29udGV4dEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBv
cmlnaW4oKSwgaW5zdGFuY2VzQnVmZmVyLCBvZmZzZXQpKTsKIAogICAgICAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICAgICAgQmFzaWNCbG9jayog
ZG9Db250ZXh0U3dpdGNoID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAgICAgICAgVmFsdWUqIG5l
d0NvbnRleHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAganNPYmplY3QsIHNh
ZmVDYXN0PGludDMyX3Q+KFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpvZmZzZXRPZkluc3RhbmNl
KCkpKTsKLSAgICAgICAgVmFsdWUqIGlzU2FtZUNvbnRleHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG5ld0Nv
bnRleHQsIGluc3RhbmNlVmFsdWUoKSk7CisgICAgICAgIFZhbHVlKiBpc1NhbWVDb250ZXh0SW5z
dGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBv
cmlnaW4oKSwKKyAgICAgICAgICAgIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgp
KTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2Ms
IEIzOjpCcmFuY2gsIG9yaWdpbigpLAotICAgICAgICAgICAgaXNTYW1lQ29udGV4dCwgRnJlcXVl
bnRlZEJsb2NrKGNvbnRpbnVhdGlvbiksIEZyZXF1ZW50ZWRCbG9jayhkb0NvbnRleHRTd2l0Y2gp
KTsKKyAgICAgICAgICAgIGlzU2FtZUNvbnRleHRJbnN0YW5jZSwgRnJlcXVlbnRlZEJsb2NrKGNv
bnRpbnVhdGlvbiksIEZyZXF1ZW50ZWRCbG9jayhkb0NvbnRleHRTd2l0Y2gpKTsKIAogICAgICAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBkb0NvbnRleHRTd2l0Y2gtPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbigpKTsKICAgICAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMTI0MywyNiArMTI0
OSwyNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MjE4MQogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVy
SW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CiAgICAgICAg
IHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygp
KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG5ld0NvbnRleHQsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29udGV4dEluc3RhbmNl
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGlu
c3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIEdQUlJlZyBu
ZXdDb250ZXh0ID0gcGFyYW1zWzBdLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRl
eHQgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3Rh
bmNlID0gcGFyYW1zWzBdLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJbnN0
YW5jZSA9IHBhcmFtc1sxXS5ncHIoKTsKICAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVy
SW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAgICAgICAgICAg
ICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKICAgICAg
ICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsK
LSAgICAgICAgICAgIEFTU0VSVChuZXdDb250ZXh0ICE9IGJhc2VNZW1vcnkpOwotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHQsIENvbnRleHQ6
Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBq
aXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHQs
IENvbnRleHQ6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7Ci0gICAgICAgICAgICBqaXQu
c3RvcmVXYXNtQ29udGV4dChuZXdDb250ZXh0KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZk1lbW9yeSgp
KSwgYmFzZU1lbW9yeSk7IC8vIEpTV2ViQXNzZW1ibHlNZW1vcnkqLgorICAgICAgICAgICAgQVNT
RVJUKG5ld0NvbnRleHRJbnN0YW5jZSAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsK
KyAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobmV3Q29udGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3Rh
bmNlKG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeSouCiAg
ICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAg
IEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dCk7CisgICAgICAg
ICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJbnN0YW5j
ZSk7CiAgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOwotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
KTsgLy8gTWVtb3J5IHNpemUuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnko
KSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtTWVtb3J5Ojp2b2lkKi4KKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9m
ZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUu
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9y
eSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206
Ok1lbW9yeTo6dm9pZCouCiAgICAgICAgIH0pOwogICAgICAgICBkb0NvbnRleHRTd2l0Y2gtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24p
OwogCkBAIC0xMzM5LDE5NCArMTM0NSw2IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZHVtcChjb25z
dCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzCiAgICAg
ZGF0YUxvZ0xuKCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVh
dGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQotewotICAgIENDYWxs
SGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRKSVQ7Ci0KLSAg
ICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKLSAg
ICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLQotICAgIC8vIEZJWE1FIFN0b3AgdXNpbmcg
MCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1MzIxCi0gICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uID0gaml0
Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQ
UkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0LnN0b3JlUHRyKEdQUklu
Zm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9uOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgKmxp
bmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92ZUxvY2F0aW9u
KTsKLSAgICB9KTsKLQotICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9
IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7Ci0gICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlu
bmVkUmVncy50b1NhdmUobW9kZSk7Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgdW5zaWdu
ZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKTsKLSAgICAvLyBUaGV5IHNo
b3VsZCBhbGwgYmUgY2FsbGVlIHNhdmVzLgotICAgIHRvU2F2ZS5maWx0ZXIoUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgQVNTRVJUKHRvU2F2ZS5udW1iZXJPZlNldEdQ
UnMoKSA9PSB0b1NhdmVTaXplKTsKLSNlbmRpZgotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qg
cmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNl
VHlwZTo6RnJhbWVQb2ludGVyQmFzZWQpOwotICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9TcGlsbDsKLQotICAgIHVuc2lnbmVkIHRvdGFsRnJh
bWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yodm9pZCopOwotICAgIHRv
dGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMo
KTsKLSAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAg
dW5zaWduZWQgbnVtR1BScyA9IDA7Ci0gICAgdW5zaWduZWQgbnVtRlBScyA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgewot
ICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewotICAgICAgICBjYXNlIFdh
c206Okk2NDoKLSAgICAgICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAgICAgICAgICBpZiAobnVtR1BS
cyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAg
ICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICArK251
bUdQUnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAg
ICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICB0b3RhbEZy
YW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgKytudW1GUFJzOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdG90YWxGcmFtZVNpemUg
PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCB0b3RhbEZy
YW1lU2l6ZSk7Ci0gICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRv
dGFsRnJhbWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQot
ICAgIC8vIFdlIHNhdmUgYWxsIHRoZXNlIHJlZ2lzdGVycyByZWdhcmRsZXNzIG9mIGhhdmluZyBh
IG1lbW9yeSBvciBub3QuCi0gICAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHdlIHVzZSBvbmUgb2Yg
dGhlc2UgYXMgYSBzY3JhdGNoLiBUaGF0IHNhaWQsCi0gICAgLy8gYWxtb3N0IGFsbCByZWFsIHdh
c20gcHJvZ3JhbXMgdXNlIG1lbW9yeSwgc28gaXQncyBub3QgcmVhbGx5Ci0gICAgLy8gd29ydGgg
b3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhhdCB0aGV5IGRvbid0LgotICAgIGZvciAoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7Ci0gICAg
ICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKLSAgICAgICAgcHRyZGlm
Zl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOwotICAgICAgICBqaXQuc3RvcmVQdHIo
cmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9m
ZnNldCkpOwotICAgIH0KLQotICAgIEdQUlJlZyB3YXNtQ29udGV4dEdQUiA9IHBpbm5lZFJlZ3Mu
d2FzbUNvbnRleHRQb2ludGVyOwotCi0gICAgewotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKTsKLSAgICAgICAgbnVtR1BScyA9IDA7Ci0gICAgICAgIG51bUZQUnMgPSAw
OwotICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBzZXQgdGhlIHBpbm5lZCByZWdpc3RlcnMgYWZ0
ZXIgdGhpcy4gU28KLSAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGlzIGFzIGEgc2NyYXRjaCBmb3Ig
bm93IHNpbmNlIHdlIHNhdmVkIGl0IGFib3ZlLgotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9
IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0KLSAgICAgICAgcHRyZGlmZl90IGpzT2Zm
c2V0ID0gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKLQotICAgICAgICAvLyB2bUVudHJ5VG9XYXNtIHBhc3NlcyBXYXNtOjpDb250ZXh0KiBhcyB0
aGUgZmlyc3QgSlMgYXJndW1lbnQgd2hlbiB3ZSdyZQotICAgICAgICAvLyBub3QgdXNpbmcgZmFz
dCBUTFMgdG8gaG9sZCB0aGUgV2FzbTo6Q29udGV4dCouCi0gICAgICAgIGlmICghdXNlRmFzdFRM
U0ZvckNvbnRleHQoKSkgewotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21Db250ZXh0
R1BSKTsKLSAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwdHJkaWZmX3Qgd2FzbU9mZnNldCA9IENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgewotICAgICAgICAg
ICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKLSAgICAgICAgICAgIGNhc2UgV2Fz
bTo6STMyOgotICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6Ci0gICAgICAgICAgICAgICAgaWYg
KG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206Okkz
MikgewotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJh
bWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQo
aSkgPT0gV2FzbTo6STMyKQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwg
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0
KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytudW1HUFJzOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICBjYXNl
IFdhc206OkY2NDoKLSAgICAgICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
aWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNl
dCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0
ICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgKytudW1GUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCEhaW5mby5tZW1vcnkp
IHsKLSAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2lu
dGVyOwotCi0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyh3YXNtQ29udGV4dEdQUiwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChiYXNlTWVtb3J5KTsKLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewot
ICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3Rl
cnM7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwotICAgICAgICAg
ICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2Rl
IGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJl
Z2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6
ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBqaXQu
YWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQp
LCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOwotICAgIH0KLQotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNh
ZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9
IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICBBU1NFUlQo
ZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAg
IGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9u
SW5kZXhTcGFjZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNh
bGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7Ci0gICAgfSk7Ci0KLQotICAgIGZvciAoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7Ci0gICAg
ICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKLSAgICAgICAgQVNTRVJU
KHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIHB0cmRpZmZfdCBvZmZz
ZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOwot
ICAgIH0KLQotICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewotICAgIGNhc2Ug
V2FzbTo6RjMyOgotICAgICAgICBqaXQubW92ZUZsb2F0VG8zMihGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFdhc206OkY2NDoKLSAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJldHVyblZh
bHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGppdC5lbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOwotICAgIGppdC5yZXQoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIGF1dG8g
QjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gT3JpZ2luCiB7CiAgICAgT3Bjb2RlT3JpZ2luIG9y
aWdpbihtX3BhcnNlci0+Y3VycmVudE9wY29kZSgpLCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0
YXJ0aW5nT2Zmc2V0KCkpOwpAQCAtMTUzNCw3ICsxMzUyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjpvcmlnaW4oKSAtPiBPcmlnaW4KICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3Jp
Z2luKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29u
dGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKK0V4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29t
cGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0
aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBp
bGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJV
cENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7
CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7
CiAKQEAgLTE1NTgsMTEgKzEzNzYsMTEgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAgICAg
ICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsKCkKICAgICAgICAg
OiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsKCkpOwogCi0gICAgQjNJ
UkdlbmVyYXRvciBjb250ZXh0KGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCB0
aWVyVXApOwotICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0
LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKKyAgICBC
M0lSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbklu
ZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgRnVuY3Rpb25QYXJzZXI8QjNJ
UkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxl
bmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBh
cnNlci5wYXJzZSgpKTsKIAotICAgIGNvbnRleHQuaW5zZXJ0Q29uc3RhbnRzKCk7CisgICAgaXJH
ZW5lcmF0b3IuaW5zZXJ0Q29uc3RhbnRzKCk7CiAKICAgICBwcm9jZWR1cmUucmVzZXRSZWFjaGFi
aWxpdHkoKTsKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCmluZGV4IGUyYzZhZGIuLjY5YmU0NDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCM09w
YXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJX
YXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1v
ZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCkBAIC01NCw5
ICs1NSw3IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIHN0ZDo6dW5pcXVlX3B0
cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzOwogfTsKIAot
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0cik7Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250
ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Kiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNp
emVfdCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Jiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4
Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5kZXggMjJlZGQxNi4uZDBl
YWZhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAt
MjksOCArMjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29t
cGlsYXRpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtNTMsMjEgKzUxLDIxIEBAIG5h
bWVzcGFjZSBXYXNtQkJRUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihWTSogdm0sIFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4gaW5mbywgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6
IEJhc2Uodm0sIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzaykpCitCQlFQbGFuOjpCQlFQbGFu
KENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQXN5bmNXb3Jr
IHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9u
KQorICAgIDogQmFzZShjb250ZXh0LCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spLCBXVEZN
b3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICAsIG1f
c3RhdGUoU3RhdGU6OlZhbGlkYXRlZCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CiB9CiAK
LUJCUVBsYW46OkJCUVBsYW4oVk0qIHZtLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIEFzeW5j
V29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCQlFQbGFuKHZtLCBhZG9w
dFJlZigqbmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZN
b3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWlu
dDhfdD4mJiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICA6IEJCUVBsYW4oY29udGV4dCwgYWRvcHRS
ZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwgd29yaywgV1RGTW92
ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRp
b24pCiB7CiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpJbml0aWFsOwogfQogCi1CQlFQbGFuOjpCQlFQ
bGFuKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBB
c3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQmFzZSh2bSwgc291
cmNlLCBzb3VyY2VMZW5ndGgsIFdURk1vdmUodGFzaykpCitCQlFQbGFuOjpCQlFQbGFuKENvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwg
QXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IEJhc2UoY29udGV4
dCwgc291cmNlLCBzb3VyY2VMZW5ndGgsIFdURk1vdmUodGFzaykpCiAgICAgLCBtX3N0YXRlKFN0
YXRlOjpJbml0aWFsKQogICAgICwgbV9hc3luY1dvcmsod29yaykKIHsKQEAgLTI2OSw3ICsyNjcs
NyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0g
PSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKICAgICAgICAgVGllclVwQ291bnQq
IHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291bnRz
W2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKLSAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVS
ZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5k
ZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVw
KTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUo
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9k
ZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7
CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CkBAIC0yODUsNyArMjgzLDcg
QEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKIAogICAgICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlcy5jb250YWlucyhmdW5j
dGlvbkluZGV4KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2pzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMu
YWRkKGZ1bmN0aW9uSW5kZXgsIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVu
Y3Rpb25JbmRleCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNt
SW50ZXJuYWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5kZXgsIG1fY3JlYXRlRW1iZWRkZXJXcmFw
cGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCAmbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgICAgICB9CiAKQEAgLTMxNCwxNCAr
MzEyLDE0IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlcikKICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50
Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoYXV0byBqc1Rv
V2FzbUludGVybmFsRnVuY3Rpb24gPSBtX2pzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGZ1
bmN0aW9uSW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBlbWJlZGRlclRvV2FzbUludGVy
bmFsRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGZ1bmN0
aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250
ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAg
ICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgp
KSkgewogICAgICAgICAgICAgICAgICAgICBCYXNlOjpmYWlsKGxvY2tlciwgbWFrZVN0cmluZygi
T3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IGluIGZ1bmN0aW9uIGVudHJ5cG9pbnQgYXQgaW5kZXgg
IiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGpzVG9XYXNtSW50
ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
QjM6OkNvbXBpbGF0aW9uPigKKyAgICAgICAgICAgICAgICBlbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpD
b21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZl
ciwgKCJKYXZhU2NyaXB0LT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9u
SW5kZXgsIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpKSwKICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0
LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IDM1OWYxM2IuLmU4YzczN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApAQCAtMjgsMTIgKzI4LDEyIEBACiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIK
LSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKICNpbmNs
dWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00
MSw4ICs0MSw2IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbExpbmtJbmZvOwotY2xh
c3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKIAogbmFtZXNwYWNl
IFdhc20gewogCkBAIC01MCwxMiArNDgsMTMgQEAgY2xhc3MgQkJRUGxhbiBmaW5hbCA6IHB1Ymxp
YyBQbGFuIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gUGxhbjsKICAgICBlbnVtIEFzeW5j
V29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGlsZSwgVmFsaWRhdGlvbiB9OworCiAgICAgLy8gTm90
ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFu
IG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIEJCUVBsYW4o
Vk0qLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oVk0qLCBWZWN0b3I8dWludDhfdD4mJiwg
QXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBCQlFQbGFuKENvbnRleHQqIGNvbnRl
eHQsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwg
Q3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiwg
QXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhy
b3dXYXNtRXhjZXB0aW9uKTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBv
bmx5IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5n
LiB2YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJp
ZCBvZiBmdW5jdGlvbiB0ZXN0cyB3ZSBzaG91bGQgcmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMg
Y29uc3RydWN0b3IuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSosIGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90Kiwgc2l6
ZV90LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgYm9vbCBwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKCk7CiAKQEAgLTE0MSw3ICsxNDAsNyBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uczsKICAgICBIYXNoU2V0PHVpbnQzMl90LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJf
dD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBt
X2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzOwotICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+
OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9q
c1RvV2FzbUludGVybmFsRnVuY3Rpb25zOworICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+
OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9l
bWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNv
bnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8VGllclVwQ291bnQ+IG1f
dGllclVwQ291bnRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuSW5saW5lcy5oCmluZGV4IDFiOGI1NmYuLjQ0NDc5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCkBAIC0zOSwxMCArMzksMTAgQEAg
dm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykK
ICAgICBBU1NFUlQoIWZhaWxlZCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rp
b25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rp
b25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKIAotICAgICAgICBSZWZQdHI8
V2FzbTo6Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWU7Ci0gICAgICAgIGlmIChhdXRvIGpzVG9X
YXNtRnVuY3Rpb24gPSBtX2pzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVu
Y3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAgIGpzRW50cnlwb2ludENhbGxlZSA9IFdhc206OkNh
bGxlZTo6Y3JlYXRlKFdURk1vdmUoanNUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOwotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGpzVG9XYXNtRnVuY3Rpb24t
PmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShqc0VudHJ5cG9pbnRDYWxs
ZWUuZ2V0KCkpKTsKKyAgICAgICAgUmVmUHRyPFdhc206OkNhbGxlZT4gZW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlOworICAgICAgICBpZiAoYXV0byBlbWJlZGRlclRvV2FzbUZ1bmN0aW9uID0gbV9l
bWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgp
KSB7CisgICAgICAgICAgICBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6
OmNyZWF0ZShXVEZNb3ZlKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihlbWJlZGRlclRvV2FzbUZ1
bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBJbnRlcm5hbEZ1
bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rp
b25JbmRleF0uZ2V0KCk7CkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6
ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYgY2FsbGJhY2spCiAgICAgICAgIFJlZjxXYXNtOjpDYWxs
ZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShm
dW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24uZ2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpOwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwg
Q2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwogCi0gICAg
ICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShqc0VudHJ5cG9pbnRD
YWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CisgICAgICAgIGNhbGxiYWNr
KGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUp
LCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKaW5kZXggNjdjY2Y1ZS4uNDkxMGM4MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtMjksNTk2
ICsyOSwxNCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgotI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgotI2luY2x1ZGUgIkpJVEV4Y2VwdGlv
bnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIk5hdGl2ZUVycm9y
Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKLSNpbmNsdWRlICJX
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKLSNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgotI2luY2x1
ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKIHVzaW5nIEpJVCA9IENDYWxsSGVscGVyczsKIAotc3RhdGljIHZvaWQgbWF0ZXJpYWxp
emVJbXBvcnRKU0NlbGwoSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJSZWcgcmVz
dWx0KQotewotICAgIC8vIFdlJ3JlIGNhbGxpbmcgb3V0IG9mIHRoZSBjdXJyZW50IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlLiBUaGF0IEluc3RhbmNlIGhhcyBhIGxpc3Qgb2YgYWxsIGl0cyBpbXBvcnQg
ZnVuY3Rpb25zLgotICAgIGppdC5sb2FkV2FzbUNvbnRleHQocmVzdWx0KTsKLSAgICBqaXQubG9h
ZFB0cihKSVQ6OkFkZHJlc3MocmVzdWx0LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
SW1wb3J0RnVuY3Rpb24oaW1wb3J0SW5kZXgpKSwgcmVzdWx0KTsKLX0KLQotRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSnMoVk0qIHZtLCBCYWc8
Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9u
IGRvZXNuJ3QgcHJvcGVybHkgYWJzdHJhY3QgYXdheSB0aGUgY2FsbGluZyBjb252ZW50aW9uLgot
ICAgIC8vIEl0J2QgYmUgc3VwZXIgZWFzeSB0byBkbyBzbzogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2OTQwMQotICAgIGNvbnN0IFdhc21DYWxsaW5nQ29udmVudGlv
biYgd2FzbUNDID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7Ci0gICAgY29uc3QgSlNDQ2FsbGlu
Z0NvbnZlbnRpb24mIGpzQ0MgPSBqc2NDYWxsaW5nQ29udmVudGlvbigpOwotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgdW5zaWduZWQgYXJnQ291bnQgPSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
OwotICAgIEpJVCBqaXQ7Ci0KLSAgICAvLyBOb3RlOiBXYXNtQjNJUkdlbmVyYXRvciBhc3N1bWVz
IHRoYXQgdGhpcyBzdHViIHRyZWF0cyBTUCBhcyBhIGNhbGxlZSBzYXZlLgotICAgIC8vIElmIHdl
IGV2ZXIgY2hhbmdlIHRoaXMsIHdlIHdpbGwgYWxzbyBuZWVkIHRvIGNoYW5nZSBXYXNtQjNJUkdl
bmVyYXRvci4KLQotICAgIC8vIEJlbG93LCB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2FsbGluZyBj
b252ZW50aW9uIGlzIGFsd2F5cyBvbiB0aGUgc3RhY2suCi0gICAgQVNTRVJUKCFqc0NDLm1fZ3By
QXJncy5zaXplKCkpOwotICAgIEFTU0VSVCghanNDQy5tX2ZwckFyZ3Muc2l6ZSgpKTsKLQotICAg
IGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3Rl
ZEltbTMyKDApLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKLQotICAgIHsKLSAgICAgICAgYm9vbCBoYXNC
YWRJNjRVc2UgPSBmYWxzZTsKLSAgICAgICAgaGFzQmFkSTY0VXNlIHw9IHNpZ25hdHVyZS5yZXR1
cm5UeXBlKCkgPT0gSTY0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051
bSA8IGFyZ0NvdW50ICYmICFoYXNCYWRJNjRVc2U7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBU
eXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3
aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2Fz
ZSBGdW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICAgICAgICAgIGNhc2UgSTY0OiB7Ci0gICAg
ICAgICAgICAgICAgaGFzQmFkSTY0VXNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoYXNCYWRJNjRV
c2UpIHsKLSAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCp2bSk7Ci0gICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgICAgIGppdC5sb2Fk
V2FzbUNvbnRleHQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLQotICAgICAgICAgICAgLy8gU3Rv
cmUgQ2FsbGVlLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNh
bGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0
cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSkpOwotCi0gICAgICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAg
ICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAgICAgICAg
dm9pZCAoKnRocm93QmFkSTY0KShFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKSA9
IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogd2FzbUNvbnRleHQp
IC0+IHZvaWQgewotICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAg
ICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0gICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSB3YXNtQ29udGV4dC0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8qIGVycm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsICp2bSwg
Z2xvYmFsT2JqZWN0LT50eXBlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBB
U0NJSUxpdGVyYWwoImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1bWVudCB0
byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgICAgIEFT
U0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
QmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQotICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIHRocm93QmFkSTY0KTsKLSAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW52YWxpZCBpNjQgdXNlIGlu
IGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
SGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2FsbGluZyBjb252ZW50aW9uIHNhdmVzIGF0IGxl
YXN0IGFsbCB0aGUgd2FzbSBjYWxsZWUgc2F2ZWQuIFdlIHRoZXJlZm9yZSBkb24ndCBuZWVkIHRv
IHNhdmUgYW5kIHJlc3RvcmUgbW9yZSByZWdpc3RlcnMgc2luY2UgdGhlIHdhc20gY2FsbGVlIGFs
cmVhZHkgdG9vayBjYXJlIG9mIHRoaXMuCi0gICAgUmVnaXN0ZXJTZXQgbWlzc2luZ0NhbGxlZVNh
dmVzID0gd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICBtaXNzaW5nQ2FsbGVlU2F2
ZXMuZXhjbHVkZShqc0NDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycyk7Ci0gICAgQVNTRVJUKG1pc3Np
bmdDYWxsZWVTYXZlcy5pc0VtcHR5KCkpOwotCi0gICAgaWYgKCFPcHRpb25zOjp1c2VDYWxsSUNz
Rm9yV2ViQXNzZW1ibHlUb0pTQ2FsbHMoKSkgewotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3Jh
dGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFyZ0NvdW50ICogc2l6ZW9mKHVp
bnQ2NF90KSk7Ci0gICAgICAgIGNoYXIqIGJ1ZmZlciA9IGFyZ0NvdW50ID8gc3RhdGljX2Nhc3Q8
Y2hhcio+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiBudWxscHRyOwotICAgICAgICB1
bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRG
UFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgYnVmZmVyT2Zmc2V0ID0gMDsKLSAgICAgICAgdW5z
aWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGNvbnN0IEdQUlJlZyBzY3Jh
dGNoR1BSID0gR1BSSW5mbzo6cmVnQ1MwOwotICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSwgc2l6ZW9mKFJlZ2lzdGVyKSkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7Ci0KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdO
dW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdO
dW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZv
aWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0g
ICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgY2FzZSBJMzI6IHsKLSAgICAgICAgICAgICAgICBHUFJS
ZWcgZ3ByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkR1BScyA8IHdhc21DQy5t
X2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSB3YXNtQ0MubV9n
cHJBcmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMs
IHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAg
ICAgICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZy
T2Zmc2V0KSwgZ3ByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9m
KFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0Lnplcm9F
eHRlbmQzMlRvUHRyKGdwclJlZywgZ3ByUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2
NChncHJSZWcsIGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7Ci0gICAgICAgICAgICAgICAgKyttYXJz
aGFsbGVkR1BSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAg
ICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkK
LSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVk
RlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMg
YXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBG
UFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQo
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJl
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJs
ZShmcHJSZWcsIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZw
clJlZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQ
UiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRG
UFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBGNjQ6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAg
ICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5m
cHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Un
dmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZh
aWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86
OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZl
ciArIGJ1ZmZlck9mZnNldCk7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgYnVmZmVyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgIH0KLSAg
ICAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGlmIChhcmdDb3Vu
dCkgewotICAgICAgICAgICAgLy8gVGhlIEdDIHNob3VsZCBub3QgbG9vayBhdCB0aGlzIGJ1ZmZl
ciBhdCBhbGwsIHRoZXNlIGFyZW4ndCBKU1ZhbHVlcy4KLSAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVM
ZW5ndGgoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdWludDY0X3QgKCpjYWxsRnVuYykoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBTaWduYXR1cmVJbmRleCwgdWludDY0X3QqKSA9Ci0gICAgICAgICAgICBbXSAo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY2FsbGVlLCBTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCwgdWludDY0X3QqIGJ1ZmZlcikgLT4gdWludDY0X3QgeyAKLSAgICAgICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKLSAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKTsgKythcmdOdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgVHlwZSBhcmdUeXBl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFs
dWUgYXJnOwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEZ1bmM6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEkzMjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZyA9IGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGJ1ZmZlclthcmdOdW1dKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGMzI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRjY0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgYXJnID0ganNOdW1iZXIoYml0d2lzZV9jYXN0PGRvdWJsZT4oYnVmZmVyW2FyZ051bV0p
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZyk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgICAgICAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBjYWxsZWUtPm1ldGhvZFRhYmxlKCp2bSktPmdldENhbGxEYXRh
KGNhbGxlZSwgY2FsbERhdGEpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxU
eXBlICE9IENhbGxUeXBlOjpOb25lKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGNhbGwoZXhlYywgY2FsbGVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFy
Z3MpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7
Ci0KLSAgICAgICAgICAgICAgICB1aW50NjRfdCByZWFsUmVzdWx0OwotICAgICAgICAgICAgICAg
IHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
RnVuYzoKLSAgICAgICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBJNjQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJMzI6IHsK
LSAgICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihz
dGF0aWNfY2FzdDx1aW50MzJfdD4ocmVzdWx0LnRvSW50MzIoZXhlYykpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2Ug
RjY0OgotICAgICAgICAgICAgICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
YWxSZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHJlc3VsdC50b051bWJlcihleGVjKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIDApOwotICAgICAgICAgICAgICAgIHJldHVybiByZWFsUmVzdWx0OwotICAgICAgICAgICAg
fTsKLSAgICAgICAgCi0gICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7Ci0gICAgICAgIAotICAgICAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQsIGltcG9y
dEluZGV4LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQ
UkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgPj0gNCwgIldlIHJlbHkgb24gdGhpcyB3
aXRoIHRoZSBjYWxsIGJlbG93LiIpOwotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
c2lnbmF0dXJlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYnVmZmVyKSk7Ci0g
ICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGF1dG8gbm9FeGNlcHRpb24g
PSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpJbnZlcnRlZEV4
Y2VwdGlvbkNoZWNrKTsKLQotICAgICAgICAvLyBleGNlcHRpb24gaGVyZS4KLSAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7Ci0gICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAo
RXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKLSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0gICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgICAgIEFTU0VS
VCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAgIH07Ci0gICAgICAgIGF1dG8gZXhj
ZXB0aW9uQ2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5k
bGVyKCp2bSk7Ci0KLSAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsKLSAgICAgICAgc3dp
dGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRjY0OiB7Ci0gICAg
ICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgICAgIGpp
dC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgICAgIGppdC5yZXQoKTsKLQotICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpKQotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpP
dXRPZk1lbW9yeSk7Ci0KLSAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNhbGxGdW5jKTsK
LSAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkNhbGwsIGRvVW53aW5kaW5nKTsKLQot
ICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5K
YXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpKTsKLSAgICB9Ci0KLSAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVk
IHRvIHBlcmZvcm0gYSBzdGFjayBjaGVjayBoZXJlIHNpbmNlIFdhc21CM0lSR2VuZXJhdG9yCi0g
ICAgLy8gd2lsbCBkbyB0aGUgc3RhY2sgY2hlY2sgZm9yIHVzLiBXaGVuZXZlciBpdCBkZXRlY3Rz
IHRoYXQgaXQgbWlnaHQgbWFrZQotICAgIC8vIGEgY2FsbCB0byB0aGlzIHRodW5rLCBpdCdsbCBt
YWtlIHN1cmUgaXRzIHN0YWNrIGNoZWNrIGluY2x1ZGVzIHNwYWNlCi0gICAgLy8gZm9yIHVzIGhl
cmUuCi0KLSAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSBhcmdDb3VudCAr
IDE7IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgotICAgIGNvbnN0IHVuc2lnbmVkIG51
bWJlck9mUmVnc0ZvckNhbGwgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIG51
bWJlck9mUGFyYW1ldGVyczsKLSAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2Fs
bCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpOwotICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNh
bGwpOwotICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja09m
ZnNldCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgSklUOjpB
ZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7Ci0KLSAgICAvLyBGSVhNRSBtYWtlIHRoZXNlIGxvb3BzIHdoaWNo
IHN3aXRjaCBvbiBTaWduYXR1cmUgaWYgdGhlcmUgYXJlIG1hbnkgYXJndW1lbnRzIG9uIHRoZSBz
dGFjay4gSXQnbGwgb3RoZXJ3aXNlIGJlIGh1Z2UgZm9yIGh1Z2Ugc2lnbmF0dXJlcy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTU0NwotICAgIAotICAgIC8vIEZp
cnN0IGdvIHRocm91Z2ggdGhlIGludGVnZXIgcGFyYW1ldGVycywgZnJlZWluZyB1cCB0aGVpciBy
ZWdpc3RlciBmb3IgdXNlIGFmdGVyd2FyZHMuCi0gICAgewotICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkR1BScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKLSAg
ICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFy
Z3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5z
aWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJn
TnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBl
IGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRj
aCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBG
dW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBh
Ym92ZS4KLSAgICAgICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGdw
clJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJB
cmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJn
c1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVz
ZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAg
ICBncHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNl
dCksIGdwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdp
c3Rlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQ
UnM7Ci0gICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwclJlZywgZ3ByUmVn
KTsgLy8gQ2xlYXIgbm9uLWludDMyIGFuZCBub24tdGFnIGJpdHMuCi0gICAgICAgICAgICAgICAg
aml0LmJveEludDMyKGdwclJlZywgSlNWYWx1ZVJlZ3MoZ3ByUmVnKSwgRG9Ob3RIYXZlVGFnUmVn
aXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChncHJSZWcsIGNhbGxlZUZyYW1l
LndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBjYWxsZWVG
cmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBGMzI6Ci0gICAgICAgICAgICBjYXNlIEY2
NDoKLSAgICAgICAgICAgICAgICAvLyBTa2lwcGVkOiBoYW5kbGVkIGJlbG93LgotICAgICAgICAg
ICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA+PSB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAg
ICAgICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zm
c2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgewotICAgICAgICAvLyBJbnRlZ2Vy
IHJlZ2lzdGVycyBoYXZlIGFscmVhZHkgYmVlbiBzcGlsbGVkLCB0aGVzZSBhcmUgbm93IGF2YWls
YWJsZS4KLSAgICAgICAgR1BSUmVnIGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMDsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjE7Ci0gICAgICAgIGJvb2wgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0g
ZmFsc2U7Ci0gICAgICAgIGF1dG8gbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQgPSBbJmhh
c01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCwgJmppdF0gKEdQUlJlZyBkZXN0KSB7Ci0g
ICAgICAgICAgICBpZiAoIWhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCkgewotICAg
ICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoRG91YmxlRW5jb2RlT2Zmc2V0ID09IDFsbCA8PCA0
OCwgImNvZGVnZW4gYXNzdW1lcyB0aGlzIGJlbG93Iik7Ci0gICAgICAgICAgICAgICAgaml0Lm1v
dmUoSklUOjpUcnVzdGVkSW1tMzIoMSksIGRlc3QpOwotICAgICAgICAgICAgICAgIGppdC5sc2hp
ZnQ2NChKSVQ6OlRydXN0ZWRJbW0zMig0OCksIGRlc3QpOwotICAgICAgICAgICAgICAgIGhhc01h
dGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwotICAgICAgICB1
bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1l
T2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50
OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3Vt
ZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAg
IGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55
ZnVuYzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAgICAgICAgICBjYXNlIEkz
MjoKLSAgICAgICAgICAgICAgICAvLyBTa2lwcGVkOiBoYW5kbGVkIGFib3ZlLgotICAgICAgICAg
ICAgICAgIGlmIChtYXJzaGFsbGVkR1BScyA+PSB3YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAg
ICAgICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zm
c2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQ
UnNdLmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAv
LyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFy
ZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBS
SW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJ
VDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcp
OwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUo
ZnByUmVnLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsK
LSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgICAgICBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVP
ZmZzZXRHUFJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZz
ZXRHUFJSZWcsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gs
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJS
ZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJn
cy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3Nb
bWFyc2hhbGxlZEZQUnNdLmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2Ug
cmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAg
ZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zm
c2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJl
Z2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0LnB1cmlmeU5h
TihmcHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNj
cmF0Y2gpOwotICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRv
dWJsZUVuY29kZU9mZnNldEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJs
ZUVuY29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3Jl
NjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOwot
ICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGpp
dC5sb2FkV2FzbUNvbnRleHQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotCi0gICAgR1BSUmVnIGltcG9ydEpTQ2VsbEdQ
UlJlZyA9IEdQUkluZm86OnJlZ1QwOyAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgZm9y
IHNsb3cgcGF0aCBiZWxvdy4KLSAgICBBU1NFUlQoIXdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3Rl
cnMuZ2V0KGltcG9ydEpTQ2VsbEdQUlJlZykpOwotCi0gICAgbWF0ZXJpYWxpemVJbXBvcnRKU0Nl
bGwoaml0LCBpbXBvcnRJbmRleCwgaW1wb3J0SlNDZWxsR1BSUmVnKTsKLQotICAgIGppdC5zdG9y
ZTY0KGltcG9ydEpTQ2VsbEdQUlJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVT
bG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAg
aml0LnN0b3JlMzIoSklUOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwgY2FsbGVl
RnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpKTsKLSAgICBqaXQuc3Rv
cmU2NChKSVQ6OlRydXN0ZWRJbW02NChWYWx1ZVVuZGVmaW5lZCksIGNhbGxlZUZyYW1lLndpdGhP
ZmZzZXQoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOwotCi0gICAgLy8gRklYTUUgVGFpbCBjYWxsIGlmIHRoZSB3YXNtIHJl
dHVybiB0eXBlIGlzIHZvaWQgYW5kIG5vIHJlZ2lzdGVycyB3ZXJlIHNwaWxsZWQuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODgKLQotICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvcy5hZGQoKTsKLSAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIENvZGVPcmlnaW4oKSwgaW1wb3J0SlNDZWxs
R1BSUmVnKTsKLSAgICBKSVQ6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVDo6
VHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSgwKTsKLSAgICBKSVQ6Okp1bXAgc2xvd1Bh
dGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaW1w
b3J0SlNDZWxsR1BSUmVnLCB0YXJnZXRUb0NoZWNrLCBpbml0aWFsUmlnaHRWYWx1ZSk7Ci0gICAg
SklUOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0gICAgSklUOjpKdW1wIGRvbmUg
PSBqaXQuanVtcCgpOwotICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0gICAgLy8gQ2FsbGVlIG5l
ZWRzIHRvIGJlIGluIHJlZ1QwIGhlcmUuCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBMaW5rIGluZm8g
bmVlZHMgdG8gYmUgaW4gcmVnVDIuCi0gICAgSklUOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJD
YWxsKCk7Ci0gICAgZG9uZS5saW5rKCZqaXQpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBleGNlcHRpb25DaGVja3M7Ci0KLSAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkp
IHsKLSAgICBjYXNlIFZvaWQ6Ci0gICAgICAgIC8vIERpc2NhcmQuCi0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRnVuYzoKLSAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgIC8vIEZvciB0aGUgSmF2
YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMgd2l0aCB0aGVzZSB0eXBlcyBpbiB0aGVpciBzaWdu
YXR1cmUgcmV0dXJuIGFyZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSB2YWxpZGF0aW9uIGVycm9yLgot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEk2NDogewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBI
YW5kbGVkIGFib3ZlLgotICAgIH0KLSAgICBjYXNlIEkzMjogewotICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7Ci0KLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7Ci0gICAgICAgIHNs
b3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwotICAgICAgICBqaXQuemVy
b0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgc2xv
d1BhdGgubGluaygmaml0KTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxs
KCk7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRp
b24oKnZtKSk7Ci0KLSAgICAgICAgaW50MzJfdCAoKmNvbnZlcnRUb0kzMikoRXhlY1N0YXRlKiwg
SlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGludDMyX3QgeyAK
LSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gdi50b0lu
dDMyKGV4ZWMpOwotICAgICAgICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
Y29udmVydFRvSTMyKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGMzI6IHsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOwotICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNo
SWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVy
cyk7Ci0gICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVl
UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0g
ICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCi0gICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAg
ICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQot
ICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOwotICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0
ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAg
ICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwotICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgaml0LmNvbnZlcnREb3VibGVU
b0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7
Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIG5vdEFOdW1iZXIu
bGluaygmaml0KTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0g
ICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZt
KSk7Ci0KLSAgICAgICAgZmxvYXQgKCpjb252ZXJ0VG9GMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
ID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBmbG9hdCB7IAotICAgICAgICAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4odi50b051bWJlcihleGVjKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhjYWxsLCBjb252ZXJ0VG9GMzIpOwotICAgICAgICB9KTsKLQotICAgICAgICBkb25lLmxp
bmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEY2NDogewotICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIGF1dG8gbm90QU51bWJlciA9
IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZl
VGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgYXV0byBpc0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdElu
dDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVn
aXN0ZXJzKTsKLSAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKLSAgICAgICAgaml0LnNpZ25FeHRl
bmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQu
anVtcCgpKTsKLQotICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOwotICAgICAgICBqaXQubW92
ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIyKTsKLSAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5h
cHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwotICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9u
Q2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBk
b3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUgeyAKLSAgICAgICAgICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gdi50b051bWJlcihleGVjKTsKLSAgICAgICAgfTsK
LSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0Y2NCk7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIH0KLQotICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIGppdC5yZXQoKTsK
LQotICAgIGlmICghZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsKLSAgICAgICAgZXhjZXB0aW9u
Q2hlY2tzLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7Ci0gICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBhdXRvIGNh
bGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0p
OwotCi0gICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0
YXRlKiBleGVjKSAtPiB2b2lkIHsKLSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwot
ICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAg
ICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgICAgIEFTU0VSVCghIXZt
LT5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIGRvVW53aW5kaW5nKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKLSAgICBpZiAoVU5MSUtFTFkocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUo
KSkpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZN
ZW1vcnkpOwotCi0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0t
PmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpOwot
ICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCk7Ci0gICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRp
b25zKGNhbGxSZXR1cm5Mb2NhdGlvbiwgaG90UGF0aEJlZ2luLCBob3RQYXRoT3RoZXIpOwotCi0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFT
Y3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSkpOwotfQotCiBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogewogICAgIGNv
bnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCk7CkBAIC02MzMsMjQgKzUxLDIzIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAg
QVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBzY3JhdGNoKTsKICAgICBHUFJSZWcg
c2l6ZVJlZ0FzU2NyYXRjaCA9IHNpemVSZWdzWzBdLnNpemVSZWdpc3RlcjsKIAotICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPENvbnRleHQsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZT46OnZh
bHVlLCAiVGhpcyBpcyBhc3N1bWVkIGluIHRoZSBjb2RlIGJlbG93LiIpOwogICAgIC8vIEIzJ3Mg
Y2FsbCBjb2RlZ2VuIGVuc3VyZXMgdGhhdCB0aGUgSlNDZWxsIGlzIGEgV2ViQXNzZW1ibHlGdW5j
dGlvbi4KLSAgICBqaXQubG9hZFdhc21Db250ZXh0KHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQg
SW5zdGFuY2UqCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRl
eCkpLCBzY3JhdGNoKTsKLQotICAgIC8vIEdldCB0aGUgY2FsbGVlJ3MgV2ViQXNzZW1ibHkuSW5z
dGFuY2UgYW5kIHNldCBpdCBhcyBXYXNtQ29udGV4dC4gVGhlIGNhbGxlciB3aWxsIHRha2UgY2Fy
ZSBvZiByZXN0b3JpbmcgaXRzIG93biBJbnN0YW5jZS4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFk
ZHJlc3Moc2NyYXRjaCwgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwg
YmFzZU1lbW9yeSk7IC8vIEluc3RhbmNlKi4KLSAgICBqaXQuc3RvcmVXYXNtQ29udGV4dChiYXNl
TWVtb3J5KTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uoc2l6ZVJlZ0FzU2NyYXRj
aCk7IC8vIE9sZCBJbnN0YW5jZSoKKyAgICAvLyBHZXQgdGhlIGNhbGxlZSdzIFdlYkFzc2VtYmx5
Lkluc3RhbmNlIGFuZCBzZXQgaXQgYXMgV2FzbUNvbnRleHQncyBpbnN0YW5jZS4gVGhlIGNhbGxl
ciB3aWxsIHRha2UgY2FyZSBvZiByZXN0b3JpbmcgaXRzIG93biBJbnN0YW5jZS4KKyAgICBqaXQu
bG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKGltcG9ydEluZGV4KSksIGJhc2VNZW1vcnkpOyAv
LyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLgorICAgIC8vIFdoaWxlIHdlJ3JlIGFjY2Vzc2luZyB0
aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQgdGhlIHdhc20gZW50cnlwb2ludCBzbyB3ZSBjYW4gdGFp
bCBjYWxsIHRvIGl0IGJlbG93LgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVn
QXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbUVudHJ5cG9pbnQo
aW1wb3J0SW5kZXgpKSwgc2NyYXRjaCk7IC8vIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uLgorICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7CiAKICAg
ICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIHNpemVSZWdBc1NjcmF0Y2gp
OwogICAgIGppdC5zdG9yZVB0cihzaXplUmVnQXNTY3JhdGNoLCBKSVQ6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkp
OwogCiAgICAgLy8gRklYTUUgdGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UgaGF2ZSB0aGUgc2FtZSBwaW5uZWQgcmVnaXN0ZXJzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCiAgICAgLy8gU2V0IHVwIHRo
ZSBjYWxsZWUncyBiYXNlTWVtb3J5IHJlZ2lzdGVyIGFzIHdlbGwgYXMgdGhlIG1lbW9yeSBzaXpl
IHJlZ2lzdGVycy4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIEpT
V2ViQXNzZW1ibHlNZW1vcnkqLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVt
b3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7IC8vIFdhc206Ok1lbW9yeSouCiAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zm
c2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNh
bGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpv
ZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXpl
LgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc21NZW1vcnk6OnZv
aWQqLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1v
cnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5
IHNpemUuCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1l
bW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6OnZv
aWQqLgogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkg
ewogICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkp
OwogICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IHNjcmF0Y2gpOwpA
QCAtNjU4LDcgKzc1LDYgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5n
RmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICB9CiAKICAgICAv
LyBUYWlsIGNhbGwgaW50byB0aGUgY2FsbGVlIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZz
ZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpLCBzY3JhdGNoKTsKICAgICBqaXQubG9h
ZFB0cihzY3JhdGNoLCBzY3JhdGNoKTsKICAgICBqaXQuanVtcChzY3JhdGNoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKaW5kZXggNGUyNjJiYS4uZmVjNmJkNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkgKzI4LDcgQEAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0j
aW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSA8d3RmL0Jh
Zy5oPgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ0
LDcgKzQyLDYgQEAgZW51bSBjbGFzcyBCaW5kaW5nRmFpbHVyZSB7CiB9OwogCiBFeHBlY3RlZDxN
YWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVk
IGltcG9ydEluZGV4KTsKLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub0pzKFZNKiwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNp
Z25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCk7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5j
cHAKaW5kZXggNzBmZWZiMC4uOTgwNDM4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5jcHAKQEAgLTM1LDE2ICszNSwyNiBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1v
ZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKK1JlZjxDb2RlQmxvY2s+
IENvZGVCbG9jazo6Y3JlYXRlKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBDcmVhdGVFbWJlZGRlcldyYXBwZXIm
JiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNl
cHRpb24pCit7CisgICAgc2l6ZV90IGltcG9ydEZ1bmN0aW9uQ291bnQgPSBtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3RO
dWxsLCBmYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplKGltcG9ydEZ1bmN0aW9uQ291bnQpKSkgQ29k
ZUJsb2NrKGNvbnRleHQsIG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uLCBXVEZNb3ZlKGNyZWF0ZUVt
YmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbXBvcnRGdW5jdGlvbkNvdW50OyArK2kpCisgICAgICAgIHJlc3VsdC0+aW1wb3J0
V2FzbVRvRW1iZWRkZXJTdHViKGkpID0gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRSZWYoKnJl
c3VsdCk7Cit9CisKK0NvZGVCbG9jazo6Q29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9y
eU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBDcmVhdGVF
bWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlv
biB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBtX2NhbGxlZUNvdW50KG1vZHVsZUluZm9ybWF0
aW9uLmludGVybmFsRnVuY3Rpb25Db3VudCgpKQogICAgICwgbV9tb2RlKG1vZGUpCiB7CiAgICAg
UmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7Ci0gICAgbV9wbGFuID0gYWRv
cHRSZWYoKm5ldyBCQlFQbGFuKG51bGxwdHIsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBC
QlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFZNKiwgUGxh
biYpIHsKKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBtYWtl
UmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJl
ZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUo
cHJvdGVjdGVkVGhpcyldIChQbGFuJikgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgpKSB7CiAgICAgICAgICAgICBt
X2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgICAgICBtX3Bs
YW4gPSBudWxscHRyOworICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY2LDEwICs3NiwxMCBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJ
bmZvcm1hdGlvbikKICAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFuLT50YWtl
V2FzbVRvV2FzbUNhbGxzaXRlcygpOwogICAgICAgICBtX3RpZXJVcENvdW50cyA9IG1fcGxhbi0+
dGFrZVRpZXJVcENvdW50cygpOwogCi0gICAgICAgIG1fcGxhbiA9IG51bGxwdHI7Ci0gICAgfSkp
KTsKLQorICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAgfSksIFdURk1vdmUo
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7CiAgICAgbV9wbGFu
LT5zZXRNb2RlKG1vZGUpOworCiAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjplbnN1cmVXb3Jr
bGlzdCgpOwogICAgIC8vIE5vdGUsIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGVucXVldWUgdGhlIHBs
YW4sIHRoZXJlIGlzIGEgY2hhbmNlIHRoZSBhYm92ZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4K
ICAgICB3b3JrbGlzdC5lbnF1ZXVlKG1ha2VSZWYoKm1fcGxhbi5nZXQoKSkpOwpAQCAtOTIsNyAr
MTAyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OndhaXRVbnRpbEZpbmlzaGVkKCkKICAgICAvLyBlbHNl
LCBpZiB3ZSBkb24ndCBoYXZlIGEgcGxhbiwgd2UncmUgYWxyZWFkeSBjb21waWxlZC4KIH0KIAot
dm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25DYWxs
YmFjayYmIHRhc2spCit2b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKENvbnRleHQqIGNvbnRl
eHQsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiB7CiAgICAgUmVmUHRyPFBsYW4+
IHBsYW47CiAgICAgewpAQCAtMTA0LDEyICsxMTQsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmNvbXBp
bGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiAgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgdG8ga2VlcCBhIFJlZlB0ciBvbiB0aGUgUGxhbiBiZWNhdXNlIHRo
ZSB3b3JrbGlzdCB3aWxsIGtlZXAKICAgICAgICAgLy8gYSBSZWZQdHIgb24gdGhlIFBsYW4gdW50
aWwgdGhlIHBsYW4gZmluaXNoZXMgbm90aWZ5aW5nIGFsbCBvZiBpdHMgY2FsbGJhY2tzLgogICAg
ICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsKLSAgICAgICAgcGxh
bi0+YWRkQ29tcGxldGlvblRhc2sodm0sIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tU
eXBlPihbdGhpcywgdGFzayA9IFdURk1vdmUodGFzayksIHByb3RlY3RlZFRoaXMgPSBXVEZNb3Zl
KHByb3RlY3RlZFRoaXMpXSAoVk0qIHZtLCBQbGFuJikgewotICAgICAgICAgICAgQVNTRVJUKHZt
KTsKLSAgICAgICAgICAgIHRhc2stPnJ1bigqdm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAgICAg
cGxhbi0+YWRkQ29tcGxldGlvblRhc2soY29udGV4dCwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpD
YWxsYmFja1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92ZSh0YXNrKSwgcHJvdGVjdGVkVGhpcyA9
IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgeworICAgICAgICAgICAgdGFzay0+cnVu
KG1ha2VSZWYoKnRoaXMpKTsKICAgICAgICAgfSkpOwogICAgIH0gZWxzZQotICAgICAgICB0YXNr
LT5ydW4odm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAgICAgdGFzay0+cnVuKG1ha2VSZWYoKnRo
aXMpKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1lbW9yeU1vZGUgbWVtb3J5
TW9kZSkKQEAgLTEzMCw2ICsxMzksMTMgQEAgYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1l
bW9yeU1vZGUgbWVtb3J5TW9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKwordm9pZCBDb2Rl
QmxvY2s6OnNldENvbXBpbGF0aW9uRmluaXNoZWQoKQoreworICAgIG1fcGxhbiA9IG51bGxwdHI7
CisgICAgbV9jb21waWxhdGlvbkZpbmlzaGVkLnN0b3JlKHRydWUpOworfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IDJkYmY3ZTQuLmI5Njg3
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2su
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTI4
LDYgKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKKyNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0zNywxMSArMzksMTAgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNz
IENhbGxlZTsKK3N0cnVjdCBDb250ZXh0OwogY2xhc3MgQkJRUGxhbjsKIGNsYXNzIE9NR1BsYW47
CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CkBAIC01MSwyMCArNTIsNDIgQEAgZW51bSBjbGFz
cyBNZW1vcnlNb2RlIDogdWludDhfdDsKICAgICAKIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxDb2RlQmxvY2s+IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHZv
aWQgQ2FsbGJhY2tUeXBlKFZNJiwgUmVmPENvZGVCbG9jaz4mJik7CisgICAgdHlwZWRlZiB2b2lk
IENhbGxiYWNrVHlwZShSZWY8Q29kZUJsb2NrPiYmKTsKICAgICB1c2luZyBBc3luY0NvbXBpbGF0
aW9uQ2FsbGJhY2sgPSBSZWZQdHI8V1RGOjpTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwotICAg
IHN0YXRpYyBSZWY8Q29kZUJsb2NrPiBjcmVhdGUoTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZv
cm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24pCisgICAgc3RhdGljIFJlZjxDb2RlQmxvY2s+IGNy
ZWF0ZShDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9u
JiBtb2R1bGVJbmZvcm1hdGlvbiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4
Y2VwdGlvbik7CisKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0U3R1YnMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCop
PihzaXplb2YoQ29kZUJsb2NrKSk7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBvcnRDb3VudCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGZ1bmN0
aW9uSW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIHZvaWQqJiBpbXBvcnRX
YXNtVG9FbWJlZGRlclN0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBDb2RlQmxvY2sobW9kZSwgbW9kdWxlSW5mb3JtYXRpb24pKTsK
KyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRk
ZXJTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNl
dE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleDsKKyAgICB9CisK
KyAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9KU0NhbGxTdHViRm9y
SW1wb3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJ1bm5h
YmxlKCkpOworICAgICAgICByZXR1cm4gJmltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihpbXBvcnRJ
bmRleCk7CiAgICAgfQogCiAgICAgdm9pZCB3YWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHZvaWQg
Y29tcGlsZUFzeW5jKFZNJiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQg
Y29tcGlsZUFzeW5jKENvbnRleHQqLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CiAKICAg
ICBib29sIGNvbXBpbGF0aW9uRmluaXNoZWQoKQogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICByZXR1cm4gIW1fcGxhbjsKKyAgICAgICAgcmV0
dXJuIG1fY29tcGlsYXRpb25GaW5pc2hlZC5sb2FkKCk7CiAgICAgfQogICAgIGJvb2wgcnVubmFi
bGUoKSB7IHJldHVybiBjb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIW1fZXJyb3JNZXNzYWdlOyB9
CiAKQEAgLTc4LDkgKzEwMSwxMiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdW5zaWduZWQgZnVu
Y3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvV2FzbUV4aXRTdHVicy5z
aXplKCk7IH0KKyAgICAKKyAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkg
dmFsaWQgb25jZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgogCiAgICAgQ2FsbGVl
JiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291
bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNl
IC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogCkBAIC05MCw2ICsxMTYsNyBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIENhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChy
dW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49
IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0g
ZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAgICBpZiAo
bV9vcHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4XSkKQEAgLTExNyw3ICsxNDQsOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPTUdQbGFuOwogCi0gICAgQ29kZUJsb2Nr
KE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJik7CisgICAgQ29kZUJsb2NrKENvbnRleHQq
LCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYm
LCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgp
OwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAg
ICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7CkBAIC0xMjgsNiArMTU2LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3dh
c21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93
YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CisgICAgc3Rk
OjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKICAgICBTdHJp
bmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgTG9jayBtX2xvY2s7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwCmluZGV4IGZlYTE2ZGUuLmUwNTlmYzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5jcHAKQEAgLTI4LDMwICsyOCw0
MSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKICNp
bmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYgdm0pCitib29s
IENvbnRleHQ6OnVzZUZhc3RUTFMoKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAg
cmV0dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNlKiBDb250ZXh0
Ojpsb2FkKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmICh1c2VG
YXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENvbnRleHQq
PihfcHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKKyAg
ICBpZiAodXNlRmFzdFRMUygpKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05U
RVhUX0tFWSkpOwogI2VuZGlmCi0gICAgcmV0dXJuIHZtLndhc21Db250ZXh0OworICAgIHJldHVy
biBpbnN0YW5jZTsKIH0KIAotdm9pZCBzdG9yZUNvbnRleHQoVk0mIHZtLCBDb250ZXh0KiBjb250
ZXh0KQordm9pZCBDb250ZXh0OjpzdG9yZShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGksIHZvaWQq
IHNvZnRTdGFja0xpbWl0KQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKHVz
ZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIF9wdGhyZWFkX3NldHNwZWNpZmljX2RpcmVj
dChXVEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9jYXN0PHZvaWQqPihjb250ZXh0KSk7Cisg
ICAgaWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0
KFdURl9XQVNNX0NPTlRFWFRfS0VZLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGkpKTsKICNlbmRpZgot
ICAgIHZtLndhc21Db250ZXh0ID0gY29udGV4dDsKLSAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
Y29udGV4dC0+c2V0Q2FjaGVkU3RhY2tMaW1pdCh2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKyAgICBp
bnN0YW5jZSA9IGk7CisgICAgaWYgKGluc3RhbmNlKQorICAgICAgICBpbnN0YW5jZS0+c2V0Q2Fj
aGVkU3RhY2tMaW1pdChzb2Z0U3RhY2tMaW1pdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAppbmRleCAzY2Y2
NWZiLi5jMmI1MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgK
QEAgLTI3LDM3ICsyNywyMCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgotCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgVk07CitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiAK
IG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdGhpcyB0byBiZSBz
b21ldGhpbmcgZWxzZSBhdCBzb21lIHBvaW50OgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MDI2MAotdXNpbmcgQ29udGV4dCA9IEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTsKLQotaW5saW5lIGJvb2wgdXNlRmFzdFRMUygpCi17Ci0jaWYgRU5BQkxFKEZBU1RfVExT
X0pJVCkKLSAgICByZXR1cm4gT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0VExTKCk7Ci0jZWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQorc3RydWN0IENvbnRleHQgeworICAgIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgeyBudWxscHRyIH07CiAKLWlubGluZSBib29s
IHVzZUZhc3RUTFNGb3JDb250ZXh0KCkKLXsKLSAgICBpZiAodXNlRmFzdFRMUygpKQotICAgICAg
ICByZXR1cm4gT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQorICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogbG9hZCgpIGNvbnN0OworICAg
IHZvaWQgc3RvcmUoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdm9pZCogc29mdFN0YWNrTGltaXQp
OwogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYpOwotdm9pZCBzdG9yZUNvbnRleHQoVk0mLCBD
b250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgdXNlRmFzdFRMUygpOworfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRk
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDUxNTQ4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKQEAg
LTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
V2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDxtZW1v
cnk+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hvdWxkIGJlIFdhc206Okluc3RhbmNlLCBz
byBzaG91bGQgdXNlIGJlbG93LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKKworbmFtZXNw
YWNlIFdhc20geworCitzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Oworc3RydWN0IEludGVybmFs
RnVuY3Rpb247CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CitjbGFzcyBTaWduYXR1cmU7Citz
dHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsKKworLy8gQ3JlYXRlIHdyYXBwZXIgY29kZSB0
byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNzZW1ibHkuCit1c2luZyBDcmVhdGVFbWJlZGRl
cldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVp
bnQzMl90KT47CisKKy8vIENhbGxlZCBhcyBzb29uIGFzIGFuIGV4Y2VwdGlvbiBpcyBkZXRlY3Rl
ZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMgdG8gY29udGludWUgYXQuCit1c2luZyBUaHJv
d1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlw
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4IDJiMWQ4Mjgu
LmNjMWU3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
YXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkV4
ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgotI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNt
TWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAppbmRleCAzODEyODM2
Li5lNWUwN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZh
dWx0U2lnbmFsSGFuZGxlci5oCkBAIC0yNyw4ICsyNyw2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCiB2b2lkIHJlZ2lzdGVyQ29kZSh2b2lk
KiBzdGFydCwgdm9pZCogZW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aAppbmRleCBiMjIyMjE3Li5lN2IzZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCkBAIC00NCwxNCArNDQsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IEpTRnVuY3Rpb247Ci0KIG5hbWVzcGFjZSBCMyB7CiBjbGFzcyBDb21waWxhdGlvbjsKIH0KIAog
bmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Oworc3RydWN0IE1v
ZHVsZUluZm9ybWF0aW9uOworCiBpbmxpbmUgYm9vbCBpc1ZhbHVlVHlwZShUeXBlIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlu
c3RhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGJlMGU3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNl
LmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5o
IgorCisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRp
b24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIHsKK3NpemVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZShN
b2R1bGUmIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gbW9kdWxlLm1vZHVsZUluZm9ybWF0aW9uKCku
Z2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworfQorfQorCitJbnN0YW5jZTo6SW5z
dGFuY2UoUmVmPE1vZHVsZT4mJiBtb2R1bGUpCisgICAgOiBtX21vZHVsZShXVEZNb3ZlKG1vZHVs
ZSkpCisgICAgLCBtX2dsb2JhbHMoTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGdsb2JhbE1l
bW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdldCgpKSkpCit7Cit9CisKK0luc3RhbmNlOjp+SW5zdGFu
Y2UoKSB7IH0KKworc2l6ZV90IEluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGdsb2JhbE1lbW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdldCgpKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5j
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3OGE3NAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCkBAIC0wLDAgKzEsODcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
KyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1
ZGUgIldhc21UYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2Ns
YXNzIEluc3RhbmNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEluc3RhbmNlPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxJbnN0YW5jZT4gY3JlYXRlKFJlZjxNb2R1bGU+JiYgbW9k
dWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zdGFuY2UoV1RGTW92
ZShtb2R1bGUpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluYWxpemVDcmVhdGlvbihSZWY8
Q29kZUJsb2NrPiYmIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIG1fY29kZUJsb2NrID0gV1RG
TW92ZShjb2RlQmxvY2spOworICAgIH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5JbnN0YW5j
ZSgpOworCisgICAgc2l6ZV90IGV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3Q7CisKKyAgICBN
b2R1bGUmIG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQorICAgIE1lbW9yeSog
bWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KKyAgICBUYWJsZSogdGFibGUoKSB7
IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisKKyAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CisgICAgaW50NjRf
dCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQo
KVtpXTsgfQorICAgIGZsb2F0IGxvYWRGMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMyR2xvYmFsKGkpKTsgfQorICAgIGRvdWJsZSBs
b2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3Vi
bGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9CisgICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwg
aW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQoKVtpXSA9IGJpdHM7IH0KKworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZFN0YWNrTGltaXQpOyB9CisgICAgdm9pZCogY2FjaGVk
U3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZv
aWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBsaW1pdCkgeyBtX2NhY2hlZFN0YWNrTGltaXQg
PSBsaW1pdDsgfQorCisgICAgZnJpZW5kIGNsYXNzIEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
OyAvLyBGSVhNRSByZW1vdmUgdGhpcyBvbmNlIHJlZmFjdG9yZWQgaHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTc3NDcyLgorCitwcml2YXRlOgorICAgIEluc3RhbmNlKFJlZjxNb2R1bGU+JiYpOworICAg
IAorICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fY29k
ZUJsb2NrOworICAgIFJlZlB0cjxNZW1vcnk+IG1fbWVtb3J5OworICAgIFJlZlB0cjxUYWJsZT4g
bV90YWJsZTsKKyAgICBNYWxsb2NQdHI8dWludDY0X3Q+IG1fZ2xvYmFsczsKKyAgICB2b2lkKiBt
X2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludHB0cl90Pjo6bWF4KCkpIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBjNWY0OGU5Li5lNTg0OGRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjgsMTMgKzI4LDE4IEBACiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIldhc21U
aHVua3MuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
ICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1
ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KICNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNs
dWRlIDx3dGYvUkFNU2l6ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDxj
c3RyaW5nPgorI2luY2x1ZGUgPG11dGV4PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCkBAIC01MSwxOSArNTYsMTkgQEAgTkVWRVJfSU5MSU5FIE5PX1JFVFVSTl9EVUVfVE9f
Q1JBU0ggdm9pZCB3ZWJBc3NlbWJseUNvdWxkbnRHZXRGYXN0TWVtb3J5KCkgeyBDUkEKIHN0cnVj
dCBNZW1vcnlSZXN1bHQgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIFN1Y2Nlc3MsCi0gICAg
ICAgIFN1Y2Nlc3NBbmRBc3luY0dDLAotICAgICAgICBTeW5jR0NBbmRSZXRyeQorICAgICAgICBT
dWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUsCisgICAgICAgIFN5bmNUcnlUb1JlY2xhaW1N
ZW1vcnkKICAgICB9OwotICAgIAorCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRvU3RyaW5nKEtp
bmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNlIFN1
Y2Nlc3M6CiAgICAgICAgICAgICByZXR1cm4gIlN1Y2Nlc3MiOwotICAgICAgICBjYXNlIFN1Y2Nl
c3NBbmRBc3luY0dDOgotICAgICAgICAgICAgcmV0dXJuICJTdWNjZXNzQW5kQXN5bmNHQyI7Ci0g
ICAgICAgIGNhc2UgU3luY0dDQW5kUmV0cnk6Ci0gICAgICAgICAgICByZXR1cm4gIlN5bmNHQ0Fu
ZFJldHJ5IjsKKyAgICAgICAgY2FzZSBTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU6Cisg
ICAgICAgICAgICByZXR1cm4gIlN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZSI7CisgICAg
ICAgIGNhc2UgU3luY1RyeVRvUmVjbGFpbU1lbW9yeToKKyAgICAgICAgICAgIHJldHVybiAiU3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeSI7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05OCwxNyArMTAzLDE3
IEBAIHB1YmxpYzoKICAgICAgICAgTWVtb3J5UmVzdWx0IHJlc3VsdCA9IFsmXSB7CiAgICAgICAg
ICAgICBhdXRvIGhvbGRlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgICAgICBpZiAobV9t
ZW1vcmllcy5zaXplKCkgPj0gbV9tYXhDb3VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVt
b3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5j
VHJ5VG9SZWNsYWltTWVtb3J5KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgdm9pZCogcmVz
dWx0ID0gR2lnYWNhZ2U6OnRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEdpZ2FjYWdlOjpQcmltaXRp
dmUsIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1
bHQ6OlN5bmNHQ0FuZFJldHJ5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0
KG51bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fbWVtb3JpZXMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQoCiAgICAgICAgICAgICAgICAgcmVz
dWx0LAotICAgICAgICAgICAgICAgIG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQgLyAy
ID8gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kQXN5bmNHQyA6IE1lbW9yeVJlc3VsdDo6U3VjY2Vz
cyk7CisgICAgICAgICAgICAgICAgbV9tZW1vcmllcy5zaXplKCkgPj0gbV9tYXhDb3VudCAvIDIg
PyBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZSA6IE1lbW9yeVJl
c3VsdDo6U3VjY2Vzcyk7CiAgICAgICAgIH0oKTsKICAgICAgICAgCiAgICAgICAgIGlmIChPcHRp
b25zOjpsb2dXZWJBc3NlbWJseU1lbW9yeSgpKQpAQCAtMTUzLDEyICsxNTgsMTIgQEAgcHVibGlj
OgogICAgICAgICBNZW1vcnlSZXN1bHQ6OktpbmQgcmVzdWx0ID0gWyZdIHsKICAgICAgICAgICAg
IGF1dG8gaG9sZGVyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgICAgIGlmIChtX3BoeXNp
Y2FsQnl0ZXMgKyBieXRlcyA+IG1lbW9yeUxpbWl0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1l
bW9yeVJlc3VsdDo6U3luY1RyeVRvUmVjbGFpbU1lbW9yeTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV9waHlzaWNhbEJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAobV9waHlzaWNhbEJ5dGVzID49IG1lbW9yeUxpbWl0KCkgLyAyKQotICAgICAgICAgICAg
ICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3NBbmRBc3luY0dDOworICAgICAgICAgICAg
ICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3VjY2VzczsK
ICAgICAgICAgfSgpOwpAQCAtMjA1LDcgKzIxMCw3IEBAIHN0YXRpYyBNZW1vcnlNYW5hZ2VyJiBt
ZW1vcnlNYW5hZ2VyKCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLWJvb2wgdHJ5QW5k
R0MoVk0mIHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKK2Jvb2wgdHJ5QWxsb2NhdGUoY29uc3Qg
RnVuYyYgYWxsb2NhdGUsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZCAoKT4mIG5vdGlmeU1lbW9y
eVByZXNzdXJlLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiBzeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5KQogewogICAgIHVuc2lnbmVkIG51bVRyaWVzID0gMjsKICAgICBib29sIGRvbmUgPSBm
YWxzZTsKQEAgLTIxNCwxNCArMjE5LDE2IEBAIGJvb2wgdHJ5QW5kR0MoVk0mIHZtLCBjb25zdCBG
dW5jJiBhbGxvY2F0ZSkKICAgICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M6CiAgICAg
ICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1l
bW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICB2bS5oZWFwLmNvbGxl
Y3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICBjYXNlIE1lbW9yeVJlc3Vs
dDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAgICAgaWYgKG5vdGlm
eU1lbW9yeVByZXNzdXJlKQorICAgICAgICAgICAgICAgIG5vdGlmeU1lbW9yeVByZXNzdXJlKCk7
CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnk6CisgICAgICAgIGNhc2UgTWVtb3J5UmVz
dWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OgogICAgICAgICAgICAgaWYgKGkgKyAxID09IG51
bVRyaWVzKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgdm0uaGVhcC5jb2xs
ZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICAgICAgaWYgKHN5bmNUcnlU
b1JlY2xhaW1NZW1vcnkpCisgICAgICAgICAgICAgICAgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDAsMjIgKzI0Nywz
MiBAQCBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkKICAgICByZXR1cm4g
IiI7CiB9CiAKLU1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSkKK01lbW9yeTo6TWVtb3J5KCkKK3sKK30KKworTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBGdW5jdGlvbjx2b2lkICgpPiYmIG5vdGlmeU1l
bW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2b2lkICgpPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnks
IFdURjo6RnVuY3Rpb248dm9pZCAoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNz
Q2FsbGJhY2spCiAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhp
bXVtKQorICAgICwgbV9ub3RpZnlNZW1vcnlQcmVzc3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5j
dGlvbjx2b2lkICgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpKQorICAgICwgbV9zeW5jVHJ5VG9S
ZWNsYWltTWVtb3J5KHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+PihzeW5jVHJ5
VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhzdGQ6OmZvcndh
cmQ8V1RGOjpGdW5jdGlvbjx2b2lkIChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vz
c0NhbGxiYWNrKSkKIHsKICAgICBBU1NFUlQoIWluaXRpYWwuYnl0ZXMoKSk7CiAgICAgQVNTRVJU
KG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyk7CiAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwogfQogCi1NZW1v
cnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUpCitNZW1vcnk6Ok1l
bW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
c2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUsIEZ1bmN0aW9uPHZvaWQgKCk+
JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgc3luY1RyeVRvUmVj
bGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkIChQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYg
Z3Jvd1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1fbWVtb3J5KG1lbW9yeSkKICAgICAsIG1fc2l6
ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4
aW11bShtYXhpbXVtKQogICAgICwgbV9tYXBwZWRDYXBhY2l0eShtYXBwZWRDYXBhY2l0eSkKICAg
ICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9ub3RpZnlNZW1vcnlQcmVzc3VyZShzdGQ6OmZvcndh
cmQ8V1RGOjpGdW5jdGlvbjx2b2lkICgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpKQorICAgICwg
bV9zeW5jVHJ5VG9SZWNsYWltTWVtb3J5KHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQg
KCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFj
ayhzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkIChQYWdlQ291bnQsIFBhZ2VDb3VudCk+
Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkKIHsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVt
b3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CkBAIC0yNzUsNyArMjkyLDEyIEBA
IHN0YXRpYyB2b2lkIGNvbW1pdFplcm9QYWdlcyh2b2lkKiBzdGFydEFkZHJlc3MsIHNpemVfdCBz
aXplSW5CeXRlcykKICNlbmRpZgogfQogCi1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShW
TSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKK1JlZlB0cjxNZW1v
cnk+IE1lbW9yeTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeSgp
KTsKK30KKyAgICAKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgRnVuY3Rpb248dm9pZCAoKT4mJiBub3RpZnlNZW1vcnlQ
cmVzc3VyZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxi
YWNrKQogewogICAgIEFTU0VSVChpbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11
bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5
IG91ciBjYWxsZXIuCkBAIC0yODMsMzMgKzMwNSwyNyBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6
OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAg
ICBjb25zdCBzaXplX3QgaW5pdGlhbEJ5dGVzID0gaW5pdGlhbC5ieXRlcygpOwogICAgIGNvbnN0
IHNpemVfdCBtYXhpbXVtQnl0ZXMgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogMDsKIAot
ICAgIC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5n
IGNvZGUuCi0gICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCiAgICAgaWYgKG1heGltdW0gJiYgIW1heGltdW1CeXRlcykgewogICAgICAgICAvLyBVc2Vy
IHNwZWNpZmllZCBhIHplcm8gbWF4aW11bSwgaW5pdGlhbCBzaXplIG11c3QgYWxzbyBiZSB6ZXJv
LgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtLCBzdGQ6OmZvcndhcmQ8V1RGOjpG
dW5jdGlvbjx2b2lkICgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RG
OjpGdW5jdGlvbjx2b2lkICgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2Fy
ZDxXVEY6OkZ1bmN0aW9uPHZvaWQgKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNz
Q2FsbGJhY2spKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgZG9uZSA9IHRyeUFuZEdDKAotICAg
ICAgICB2bSwKKyAgICBib29sIGRvbmUgPSB0cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+
IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigp
LnRyeUFsbG9jYXRlUGh5c2ljYWxCeXRlcyhpbml0aWFsQnl0ZXMpOwotICAgICAgICB9KTsKKyAg
ICAgICAgfSwgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwog
ICAgIGlmICghZG9uZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIGNo
YXIqIGZhc3RNZW1vcnkgPSBudWxscHRyOwogICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eUZhc3RNZW1vcnkoKSkgewotICAgICAgICB0cnlBbmRHQygKLSAgICAgICAgICAgIHZtLAorICAg
ICAgICB0cnlBbGxvY2F0ZSgKICAgICAgICAgICAgIFsmXSAoKSAtPiBNZW1vcnlSZXN1bHQ6Oktp
bmQgewogICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbWVtb3J5TWFuYWdlcigpLnRyeUFs
bG9jYXRlVmlydHVhbFBhZ2VzKCk7CiAgICAgICAgICAgICAgICAgZmFzdE1lbW9yeSA9IGJpdHdp
c2VfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2VQdHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQua2luZDsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSwgbm90aWZ5TWVtb3J5
UHJlc3N1cmUsIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgIH0KICAgICAKICAgICBpZiAo
ZmFzdE1lbW9yeSkgewpAQCAtMzIwLDE1ICszMzYsMTUgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5
OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiAg
ICAgICAgIH0KIAogICAgICAgICBjb21taXRaZXJvUGFnZXMoZmFzdE1lbW9yeSwgaW5pdGlhbEJ5
dGVzKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGZhc3RN
ZW1vcnksIGluaXRpYWwsIG1heGltdW0sIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIE1lbW9y
eU1vZGU6OlNpZ25hbGluZykpOworCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5
KGZhc3RNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCks
IE1lbW9yeU1vZGU6OlNpZ25hbGluZywgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCAo
KT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9p
ZCAoKT4+KHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlv
bjx2b2lkIChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwog
ICAgIH0KICAgICAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Y3Jhc2hJZldlYkFzc2VtYmx5
Q2FudEZhc3RNZW1vcnkoKSkpCiAgICAgICAgIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1v
cnkoKTsKIAogICAgIGlmICghaW5pdGlhbEJ5dGVzKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0sIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZv
aWQgKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9u
PHZvaWQgKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVu
Y3Rpb248dm9pZCAoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykp
KTsKICAgICAKICAgICB2b2lkKiBzbG93TWVtb3J5ID0gR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxs
b2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RGOjpwYWdlU2l6ZSgpLCBpbml0aWFsQnl0ZXMpOwog
ICAgIGlmICghc2xvd01lbW9yeSkgewpAQCAtMzM2LDcgKzM1Miw3IEBAIFJlZlB0cjxNZW1vcnk+
IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgbWVtc2V0KHNsb3dNZW1v
cnksIDAsIGluaXRpYWxCeXRlcyk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xv
d01lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgaW5pdGlhbEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3Vu
ZHNDaGVja2luZykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KHNsb3dNZW1vcnks
IGluaXRpYWwsIG1heGltdW0sIGluaXRpYWxCeXRlcywgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmcsIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+Pihub3RpZnlNZW1vcnlQcmVz
c3VyZSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+PihzeW5jVHJ5VG9SZWNs
YWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCAoUGFnZUNvdW50LCBQ
YWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKIH0KIAogTWVtb3J5Ojp+TWVtb3J5
KCkKQEAgLTM0NSw3ICszNjEsMTAgQEAgTWVtb3J5Ojp+TWVtb3J5KCkKICAgICAgICAgbWVtb3J5
TWFuYWdlcigpLmZyZWVQaHlzaWNhbEJ5dGVzKG1fc2l6ZSk7CiAgICAgICAgIHN3aXRjaCAobV9t
b2RlKSB7CiAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgotICAgICAgICAgICAg
bXByb3RlY3QobV9tZW1vcnksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8
IFBST1RfV1JJVEUpOworICAgICAgICAgICAgaWYgKG1wcm90ZWN0KG1fbWVtb3J5LCBNZW1vcnk6
OmZhc3RNYXBwZWRCeXRlcygpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICAg
ICAgICAgIGRhdGFMb2coIm1wcm90ZWN0IGZhaWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVWaXJ0dWFsUGFnZXMobV9t
ZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmc6CkBAIC0zNzEsMzQgKzM5MCw1MCBAQCBib29sIE1lbW9yeTo6YWRkcmVzc0lz
SW5BY3RpdmVGYXN0TWVtb3J5KHZvaWQqIGFkZHJlc3MpCiAgICAgcmV0dXJuIG1lbW9yeU1hbmFn
ZXIoKS5jb250YWluc0FkZHJlc3MoYWRkcmVzcyk7CiB9CiAKLWJvb2wgTWVtb3J5Ojpncm93KFZN
JiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCitFeHBlY3RlZDxQYWdlQ291bnQsIE1lbW9yeTo6R3Jv
d0ZhaWxSZWFzb24+IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgZGVsdGEpCiB7Ci0gICAgUkVMRUFT
RV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOworICAgIGNv
bnN0IFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBzaXplSW5QYWdlcygpOwogCi0gICAg
ZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyB0byAiLCBuZXdTaXplLCAiIGZyb20g
IiwgKnRoaXMpOworICAgIGlmICghZGVsdGEuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OkludmFsaWREZWx0YSk7CisgICAgCisgICAgY29u
c3QgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCA9IG9sZFBhZ2VDb3VudCArIGRlbHRhOwor
ICAgIGlmICghbmV3UGFnZUNvdW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jv
d0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZSk7CiAKLSAgICBpZiAobWF4aW11bSgpICYmIG5l
d1NpemUgPiBtYXhpbXVtKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHN1Y2Nl
c3MgPSBbJl0gKCkgeworICAgICAgICBtX2dyb3dTdWNjZXNzQ2FsbGJhY2sob2xkUGFnZUNvdW50
LCBuZXdQYWdlQ291bnQpOworICAgICAgICByZXR1cm4gb2xkUGFnZUNvdW50OworICAgIH07CiAK
LSAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5dGVzKCk7CisgICAgaWYgKGRlbHRh
LnBhZ2VDb3VudCgpID09IDApCisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CisKKyAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93KCIsIGRlbHRhLCAiKSB0byAiLCBuZXdQYWdl
Q291bnQsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgUkVMRUFTRV9BU1NFUlQobmV3UGFnZUNvdW50
ID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisKKyAgICBpZiAobWF4aW11bSgpICYm
IG5ld1BhZ2VDb3VudCA+IG1heGltdW0oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW0pOworCisgICAgc2l6ZV90IGRlc2ly
ZWRTaXplID0gbmV3UGFnZUNvdW50LmJ5dGVzKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZGVzaXJl
ZFNpemUgPiBtX3NpemUpOwogICAgIHNpemVfdCBleHRyYUJ5dGVzID0gZGVzaXJlZFNpemUgLSBt
X3NpemU7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXh0cmFCeXRlcyk7Ci0gICAgYm9vbCBzdWNjZXNz
ID0gdHJ5QW5kR0MoCi0gICAgICAgIHZtLAorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2Nlc3MgPSB0
cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAg
ICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlUGh5c2ljYWxCeXRlcyhl
eHRyYUJ5dGVzKTsKLSAgICAgICAgfSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAorICAgICAgICB9LCBtX25vdGlmeU1lbW9yeVByZXNzdXJlLCBt
X3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOworICAgIGlmICghYWxsb2NhdGlvblN1Y2Nlc3MpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkp
OworCiAgICAgc3dpdGNoIChtb2RlKCkpIHsKICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1heGltdW0oKS5ieXRlcygpICE9IDAp
OwotICAgICAgICAKKwogICAgICAgICB2b2lkKiBuZXdNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxp
Z25lZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCksIGRlc2lyZWRT
aXplKTsKICAgICAgICAgaWYgKCFuZXdNZW1vcnkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246Ok91dE9m
TWVtb3J5KTsKKwogICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsK
ICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PGNoYXIqPihuZXdNZW1vcnkpICsgbV9zaXplLCAw
LCBkZXNpcmVkU2l6ZSAtIG1fc2l6ZSk7CiAgICAgICAgIGlmIChtX21lbW9yeSkKQEAgLTQwNiw3
ICs0NDEsNyBAQCBib29sIE1lbW9yeTo6Z3JvdyhWTSYgdm0sIFBhZ2VDb3VudCBuZXdTaXplKQog
ICAgICAgICBtX21lbW9yeSA9IG5ld01lbW9yeTsKICAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9
IGRlc2lyZWRTaXplOwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CiAgICAgfQogICAgIGNhc2UgTWVt
b3J5TW9kZTo6U2lnbmFsaW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbWVtb3J5KTsK
QEAgLTQxNSwxNiArNDUwLDE3IEBAIGJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50
IG5ld1NpemUpCiAgICAgICAgIAogICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWFya2lu
ZyBXZWJBc3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiBhcyByZWFk
K3dyaXRlIGluIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyksICIsICIsIFJhd1Bv
aW50ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFCeXRlcyksICIpIik7CiAgICAgICAgIGlmIChtcHJv
dGVjdChzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IGluLXBsYWNl
IGZhaWxlZCAiLCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBkYXRhTG9nKCJtcHJvdGVjdCBmYWlsZWQ6ICIsIHN0cmVycm9yKGVycm5vKSwgIlxuIik7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAg
ICAgIGNvbW1pdFplcm9QYWdlcyhzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMpOwogICAgICAgICBt
X3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB9Ci0gICAg
CisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CisgICAgfQorICAgIH0KKwogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBvbGRQ
YWdlQ291bnQ7CiB9CiAKIHZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXggNjBhOWJiNy4uZTk4
MDc3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaApAQCAtMjksNiAr
MjksOCBAQAogCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogCisjaW5jbHVkZSA8d3RmL0V4
cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTM4LDggKzQwLDYgQEAgY2xh
c3MgUHJpbnRTdHJlYW07CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNw
YWNlIFdhc20gewogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNl
ZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwpAQCAtNTcs
OCArNTcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0mKSBjb25z
dDsKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWVt
b3J5OyB9Ci0gICAgCi0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisKKyAgICBzdGF0aWMgUmVmUHRyPE1l
bW9yeT4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiBu
b3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIHN5bmNUcnlUb1Jl
Y2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZCAoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYm
IGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCiAgICAgfk1lbW9yeSgpOwogCkBAIC03NSwyMiArNzYs
MzQgQEAgcHVibGljOgogCiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlOyB9CiAKLSAgICAvLyBncm93KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIEpT
V2ViQXNzZW1ibHlNZW1vcnkgb2JqZWN0IHNpbmNlIHRoYXQgb2JqZWN0IG5lZWRzIHRvIHVwZGF0
ZSBpbnRlcm5hbAotICAgIC8vIHBvaW50ZXJzIHdpdGggdGhlIGN1cnJlbnQgYmFzZSBhbmQgc2l6
ZS4KLSAgICBib29sIGdyb3coVk0mLCBQYWdlQ291bnQpOworICAgIGVudW0gY2xhc3MgR3Jvd0Zh
aWxSZWFzb24geworICAgICAgICBJbnZhbGlkRGVsdGEsCisgICAgICAgIEludmFsaWRHcm93U2l6
ZSwKKyAgICAgICAgV291bGRFeGNlZWRNYXhpbXVtLAorICAgICAgICBPdXRPZk1lbW9yeSwKKyAg
ICB9OworICAgIEV4cGVjdGVkPFBhZ2VDb3VudCwgR3Jvd0ZhaWxSZWFzb24+IGdyb3coUGFnZUNv
dW50KTsKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7
IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoTWVtb3J5LCBtX21lbW9yeSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0K
KwogcHJpdmF0ZToKLSAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7Ci0g
ICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisgICAgTWVt
b3J5KCk7CisgICAgTWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VD
b3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUsIFdURjo6RnVu
Y3Rpb248dm9pZCAoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lk
ICgpPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZCAoUGFnZUNv
dW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOworICAgIE1lbW9yeShQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZCAoKT4m
JiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIHN5bmNUcnlU
b1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZCAoUGFnZUNvdW50LCBQYWdlQ291bnQp
PiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBtb3Zl
IHRoZXNlIHRvIHRoZSBpbnN0YW5jZSB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3Rh
bmNlIGNhbGxzLgorICAgIC8vIEZJWE1FOiB3ZSBjYWNoZSB0aGVzZSBvbiB0aGUgaW5zdGFuY2Vz
IHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5zdGFuY2UgY2FsbHMuIFRoaXMgd2lsbCBy
ZXF1aXJlIHVwZGF0aW5nIGFsbCB0aGUgaW5zdGFuY2VzIHdoZW4gZ3JvdyBpcyBjYWxsZWQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUKICAgICB2b2lkKiBt
X21lbW9yeSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwogICAgIFBhZ2VD
b3VudCBtX2luaXRpYWw7CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKICAgICBzaXplX3QgbV9t
YXBwZWRDYXBhY2l0eSB7IDAgfTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nIH07CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiBtX25vdGlmeU1l
bW9yeVByZXNzdXJlOworICAgIFdURjo6RnVuY3Rpb248dm9pZCAoKT4gbV9zeW5jVHJ5VG9SZWNs
YWltTWVtb3J5OworICAgIFdURjo6RnVuY3Rpb248dm9pZCAoUGFnZUNvdW50LCBQYWdlQ291bnQp
PiBtX2dyb3dTdWNjZXNzQ2FsbGJhY2s7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9y
bWF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHAKaW5kZXggYmY1NjVmMC4uYjVjMzRiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC01Nyw3ICs1Nyw3
IEBAIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKQog
ICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mb0ZsYWcsIFtdICgpIHsK
ICAgICAgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CiAg
ICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAg
IEdQUlJlZyB3YXNtQ29udGV4dFBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBHUFJS
ZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJl
Z2lzdGVyLCBhbmQgd2Ugc2hvdWxkIGFsbG93IGRpZmZlcmVudAogICAgICAgICAvLyAgICAgICAg
V2ViQXNzZW1ibHkuSW5zdGFuY2UgdG8gaGF2ZSBkaWZmZXJlbnQgcGlucy4gUmlnaHQgbm93IHdl
IHRha2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9uZSBlbnRyeS4KQEAgLTY1LDI3ICs2NSwyNyBAQCBj
b25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAgICAg
ICAgLy8gICAgICAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2Mjk1MgogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07CiAg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGlubmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6ZXMuc2l6
ZSgpICsgMTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQorICAgICAgICBp
ZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgICAgICsrbnVtYmVyT2ZQaW5uZWRS
ZWdpc3RlcnM7CiAgICAgICAgIFZlY3RvcjxHUFJSZWc+IHBpbm5lZFJlZ3MgPSBnZXRQaW5uZWRS
ZWdpc3RlcnMobnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnMpOwogCiAgICAgICAgIGJhc2VNZW1vcnlQ
b2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOwotICAgICAgICBpZiAoIXVzZUZhc3RUTFNG
b3JDb250ZXh0KCkpCi0gICAgICAgICAgICB3YXNtQ29udGV4dFBvaW50ZXIgPSBwaW5uZWRSZWdz
LnRha2VMYXN0KCk7CisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAg
ICAgICAgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7
CiAKICAgICAgICAgQVNTRVJUKHBpbm5lZFNpemVzLnNpemUoKSA9PSBwaW5uZWRSZWdzLnNpemUo
KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaW5uZWRTaXplcy5zaXplKCk7
ICsraSkKICAgICAgICAgICAgIHNpemVSZWdpc3RlcnMuYXBwZW5kKHsgcGlubmVkUmVnc1tpXSwg
cGlubmVkU2l6ZXNbaV0gfSk7Ci0gICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25z
dHJ1Y3QoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250
ZXh0UG9pbnRlcik7CisgICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3Qo
V1RGTW92ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyKTsKICAgICB9KTsKIAogICAgIHJldHVybiBzdGF0aWNQaW5uZWRSZWdpc3Rl
ckluZm8uZ2V0KCk7CiB9CiAKLVBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZv
KFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBi
YXNlTWVtb3J5UG9pbnRlciwgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRlcikKK1Bpbm5lZFJlZ2lz
dGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZv
PiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BSUmVnIHdhc21D
b250ZXh0SW5zdGFuY2VQb2ludGVyKQogICAgIDogc2l6ZVJlZ2lzdGVycyhXVEZNb3ZlKHNpemVS
ZWdpc3RlcnMpKQogICAgICwgYmFzZU1lbW9yeVBvaW50ZXIoYmFzZU1lbW9yeVBvaW50ZXIpCi0g
ICAgLCB3YXNtQ29udGV4dFBvaW50ZXIod2FzbUNvbnRleHRQb2ludGVyKQorICAgICwgd2FzbUNv
bnRleHRJbnN0YW5jZVBvaW50ZXIod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpCiB7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmgKaW5kZXggNDIzN2JhYy4uMjMzMjllYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgUGlu
bmVkU2l6ZVJlZ2lzdGVySW5mbyB7CiBzdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJbmZvIHsKICAgICBW
ZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKICAgICBHUFJSZWcg
YmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRlcjsKKyAgICBH
UFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CiAgICAgc3RhdGljIGNvbnN0IFBpbm5l
ZFJlZ2lzdGVySW5mbyYgZ2V0KCk7CiAgICAgUGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5u
ZWRTaXplUmVnaXN0ZXJJbmZvPiYmLCBHUFJSZWcsIEdQUlJlZyk7CiAKQEAgLTUyLDggKzUyLDgg
QEAgc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7CiAgICAgewogICAgICAgICBSZWdpc3RlclNl
dCByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5zZXQoYmFzZU1lbW9yeVBvaW50ZXIpOwotICAgICAg
ICBpZiAod2FzbUNvbnRleHRQb2ludGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBy
ZXN1bHQuc2V0KHdhc21Db250ZXh0UG9pbnRlcik7CisgICAgICAgIGlmICh3YXNtQ29udGV4dElu
c3RhbmNlUG9pbnRlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmVzdWx0LnNldCh3
YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1v
ZGU6OlNpZ25hbGluZykgewogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogc2l6
ZVJlZ2lzdGVycykKICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGluZm8uc2l6ZVJlZ2lzdGVy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKaW5kZXggOGUzNjZm
NC4uOTkyZTNkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAK
QEAgLTU2LDI3ICs1NiwyNiBAQCBzdGF0aWMgTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IG1ha2VW
YWxpZGF0aW9uUmVzdWx0KEJCUVBsYW4mIHBsYW4pCiAKIHN0YXRpYyBQbGFuOjpDb21wbGV0aW9u
VGFzayBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJh
Y2smJiBjYWxsYmFjaykKIHsKLSAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxs
YmFja1R5cGU+KFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoVk0qIHZtLCBQbGFuJiBw
bGFuKSB7CisgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFBsYW4mIHBsYW4pIHsKICAgICAgICAgQVNT
RVJUKCFwbGFuLmhhc1dvcmsoKSk7Ci0gICAgICAgIEFTU0VSVCh2bSk7Ci0gICAgICAgIGNhbGxi
YWNrLT5ydW4oKnZtLCBtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxCQlFQbGFuJj4o
cGxhbikpKTsKKyAgICAgICAgY2FsbGJhY2stPnJ1bihtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0
aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKICAgICB9KTsKIH0KIAotTW9kdWxlOjpWYWxpZGF0
aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYg
c291cmNlKQorTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKENv
bnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKIHsKLSAgICBSZWY8QkJR
UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbigmdm0sIFdURk1vdmUoc291cmNlKSwg
QkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBSZWY8QkJR
UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJj
ZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpLCBudWxscHRyLCBu
dWxscHRyKSk7CiAgICAgcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogICAgIHJldHVy
biBtYWtlVmFsaWRhdGlvblJlc3VsdChwbGFuLmdldCgpKTsKIH0KIAotdm9pZCBNb2R1bGU6OnZh
bGlkYXRlQXN5bmMoVk0mIHZtLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5
bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgTW9kdWxlOjp2YWxpZGF0ZUFz
eW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpB
c3luY1ZhbGlkYXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIFJlZjxQbGFuPiBwbGFu
ID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKCZ2bSwgV1RGTW92ZShzb3VyY2UpLCBCQlFQbGFuOjpW
YWxpZGF0aW9uLCBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKSkpOwor
ICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIFdURk1v
dmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhX
VEZNb3ZlKGNhbGxiYWNrKSksIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICBXYXNtOjplbnN1cmVX
b3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAKLVJlZjxDb2RlQmxvY2s+IE1v
ZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlKQorUmVmPENvZGVCbG9j
az4gTW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlN
b2RlIG1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwg
VGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBSZWZQdHI8Q29k
ZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpA
QCAtODcsMjMgKzg2LDIzIEBAIFJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2Rl
QmxvY2soTWVtb3J5TW9kZSBtb2RlKQogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIGJh
Y2sgb2ZmIHJldHJ5aW5nIGF0IHNvbWUgcG9pbnQ6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYwNwogICAgIGlmICghY29kZUJsb2NrIHx8IChjb2Rl
QmxvY2stPmNvbXBpbGF0aW9uRmluaXNoZWQoKSAmJiAhY29kZUJsb2NrLT5ydW5uYWJsZSgpKSkg
ewotICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZShtb2RlLCBjb25zdF9jYXN0
PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24oKSkpOworICAgICAgICBjb2Rl
QmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZShjb250ZXh0LCBtb2RlLCBjb25zdF9jYXN0PE1vZHVs
ZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24oKSksIFdURk1vdmUoY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICAgICAgbV9jb2RlQmxvY2tzW3N0
YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXSA9IGNvZGVCbG9jazsKICAgICB9CiAgICAgcmV0dXJu
IGNvZGVCbG9jay5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6
OmNvbXBpbGVTeW5jKE1lbW9yeU1vZGUgbW9kZSkKK1JlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Y29t
cGlsZVN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRl
cldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24pCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JD
cmVhdGVDb2RlQmxvY2sobW9kZSk7CisgICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0
T3JDcmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldy
YXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIGNvZGVCbG9jay0+d2FpdFVudGlsRmlu
aXNoZWQoKTsKICAgICByZXR1cm4gY29kZUJsb2NrOwogfQogCi12b2lkIE1vZHVsZTo6Y29tcGls
ZUFzeW5jKFZNJiB2bSwgTWVtb3J5TW9kZSBtb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRp
b25DYWxsYmFjayYmIHRhc2spCit2b2lkIE1vZHVsZTo6Y29tcGlsZUFzeW5jKENvbnRleHQqIGNv
bnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJh
Y2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIs
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgUmVmPENvZGVC
bG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2sobW9kZSk7Ci0gICAgY29kZUJs
b2NrLT5jb21waWxlQXN5bmModm0sIFdURk1vdmUodGFzaykpOworICAgIFJlZjxDb2RlQmxvY2s+
IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIFdURk1vdmUo
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBjb2RlQmxv
Y2stPmNvbXBpbGVBc3luYyhjb250ZXh0LCBXVEZNb3ZlKHRhc2spKTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApp
bmRleCBhMWFmNzU4Li43YTlmNTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5j
bHVkZSAiV2FzbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3
dGYvTG9jay5oPgpAQCAtMzYsMTkgKzM3LDIwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKK3N0cnVjdCBDb250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwog
Y2xhc3MgUGxhbjsKIAogdXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1aW50MzJfdDsKLSAgICAKKwog
Y2xhc3MgTW9kdWxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZT4gewogcHVi
bGljOgogICAgIHVzaW5nIFZhbGlkYXRpb25SZXN1bHQgPSBXVEY6OkV4cGVjdGVkPFJlZlB0cjxN
b2R1bGU+LCBTdHJpbmc+OwotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0mLCBWYWxp
ZGF0aW9uUmVzdWx0JiYpOworICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVmFsaWRhdGlv
blJlc3VsdCYmKTsKICAgICB1c2luZyBBc3luY1ZhbGlkYXRpb25DYWxsYmFjayA9IFJlZlB0cjxT
aGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwogCi0gICAgc3RhdGljIFZhbGlkYXRpb25SZXN1bHQg
dmFsaWRhdGVTeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKTsKLSAgICBzdGF0aWMg
dm9pZCB2YWxpZGF0ZUFzeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6
OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOworICAgIHN0YXRpYyBWYWxpZGF0aW9uUmVzdWx0
IHZhbGlkYXRlU3luYyhDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2Up
OworICAgIHN0YXRpYyB2b2lkIHZhbGlkYXRlQXN5bmMoQ29udGV4dCogY29udGV4dCwgVmVjdG9y
PHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOwog
CiAgICAgc3RhdGljIFJlZjxNb2R1bGU+IGNyZWF0ZShSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYg
bW9kdWxlSW5mb3JtYXRpb24pCiAgICAgewpAQCAtNTgsMTQgKzYwLDE0IEBAIHB1YmxpYzoKICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdDsKICAgICBjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21v
ZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9CiAKLSAgICBSZWY8Q29kZUJsb2NrPiBjb21waWxlU3lu
YyhNZW1vcnlNb2RlKTsKLSAgICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIE1lbW9yeU1vZGUsIENv
ZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOworICAgIFJlZjxDb2RlQmxvY2s+
IGNvbXBpbGVTeW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXIm
JiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0Kiwg
TWVtb3J5TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiwgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB+TW9kdWxlKCk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihNZW1vcnlN
b2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2Rl
KV0uZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2Rl
QmxvY2soTWVtb3J5TW9kZSk7CisgICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxv
Y2soQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dh
c21FeGNlcHRpb24pOwogCiAgICAgTW9kdWxlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJik7CiAg
ICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA2Yzk0OGI1
Li42ZDQ0YWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmNwcApAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAog
I2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRh
YmxlLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgpAQCAtMjY1LDcgKzI2
NCw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXph
YmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwogICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkK
ICAgICAgICAgcmV0dXJuIGxpbWl0cy5nZXRVbmV4cGVjdGVkKCk7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighSlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0aWFsKSwgIlRhYmxl
J3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdGlhbCA+IG1heFRhYmxlRW50cmllcywgIlRhYmxlJ3Mg
aW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgdG9vIGJpZywgbWF4aW11bSAi
LCBtYXhUYWJsZUVudHJpZXMpOwogCiAgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49
IGluaXRpYWwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAK
aW5kZXggNzRjZjY1My4uY2NkZjcyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcApAQCAtMzEsOSArMzEsMTAgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9u
LmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2Fz
bUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2Fz
bUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCkBAIC01MSwxMCArNTIsMTAgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFuSW50
ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdQbGFu
OjpPTUdQbGFuKFJlZjxNb2R1bGU+IG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVt
b3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKG51bGxwdHIs
IG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5m
b3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQotICAgICwgbV9tb2R1bGUobW9kdWxlLmNvcHlS
ZWYoKSkKLSAgICAsIG1fY29kZUJsb2NrKCptb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKSkKK09N
R1BsYW46Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0
YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3Jt
YXRpb24mPihtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92ZSh0YXNrKSkKKyAg
ICAsIG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAsIG1fY29kZUJsb2NrKCptX21vZHVs
ZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5k
ZXgpCiB7CiAgICAgc2V0TW9kZShtb2RlKTsKQEAgLTE2MiwxMyArMTYzLDEzIEBAIHZvaWQgT01H
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xv
Y2spKTsKIH0KIAotdm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCogY29udGV4dCwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKK3ZvaWQgT01HUGxhbjo6cnVuRm9ySW5kZXgoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHsKLSAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb250ZXh0LT5jb2RlQmxvY2soKTsK
LSAgICBBU1NFUlQoY29udGV4dC0+bWVtb3J5TW9kZSgpID09IGNvZGVCbG9jay0+bV9jb2RlQmxv
Y2stPm1vZGUoKSk7CisgICAgV2FzbTo6Q29kZUJsb2NrJiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+
d2FzbUNvZGVCbG9jaygpOworICAgIEFTU0VSVChpbnN0YW5jZS0+d2FzbU1lbW9yeSgpLT5tb2Rl
KCkgPT0gY29kZUJsb2NrLm1vZGUoKSk7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5tX2NvZGVCbG9j
ay0+dGllclVwQ291bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAoKSkgewotICAg
ICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihjb250ZXh0LT5tb2R1
bGUoKS0+bW9kdWxlKCksIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jay0+bV9jb2RlQmxvY2stPm1v
ZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBpZiAoY29kZUJsb2NrLnRpZXJVcENv
dW50KGZ1bmN0aW9uSW5kZXgpLnNob3VsZFN0YXJ0VGllclVwKCkpIHsKKyAgICAgICAgUmVmPFBs
YW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVm
PFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPndhc21Nb2R1bGUoKSksIGZ1bmN0aW9uSW5kZXgsIGNv
ZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdv
cmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
T3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JD
b21wbGV0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAppbmRl
eCA3MTY0YTllLi5iODA4MjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQ
bGFuLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtTW9k
dWxlLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKQEAgLTQxLDE3ICs0MCwyMCBAQCBuYW1lc3Bh
Y2UgV2FzbSB7CiBjbGFzcyBPTUdQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgog
ICAgIHVzaW5nIEJhc2UgPSBQbGFuOwotICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3Vs
ZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBi
ZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdQbGFuKFJlZjxNb2R1bGU+LCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIGJvb2wg
aGFzV29yaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2NvbXBsZXRlZDsgfQogICAgIHZv
aWQgd29yayhDb21waWxhdGlvbkVmZm9ydCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBtdWx0aVRocmVh
ZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHN0YXRpYyB2b2lk
IHJ1bkZvckluZGV4KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpOworCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNu
J3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCiAgICAgdXNpbmcgQmFzZTo6bV9sb2NrOwog
CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNl
IHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgor
ICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworCiAgICAgYm9vbCBpc0NvbXBsZXRl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb21wbGV0ZWQ7IH0KICAgICB2b2lkIGNvbXBs
ZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCiAgICAgewpAQCAtNjUs
OCArNjcsNiBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKIH07CiAK
LXZvaWQgcnVuT01HUGxhbkZvckluZGV4KENvbnRleHQqLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
KTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdl
Q291bnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAppbmRl
eCBlNDM4NDdjLi5lZjA1ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGFnZUNvdW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBh
Z2VDb3VudC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU3LDYgKzU3LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBw
YWdlQ291bnQgPD0gbWF4UGFnZUNvdW50OwogICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFsaWQobV9wYWdlQ291bnQpOworICAg
IH0KIAogICAgIHN0YXRpYyBQYWdlQ291bnQgZnJvbUJ5dGVzKHVpbnQ2NF90IGJ5dGVzKQogICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBiYTI3Y2Y5Li5k
MDYzY2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzI5
LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9u
LmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5o
IgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTUxLDIwICs0OSwyNyBAQCBuYW1lc3BhY2Ug
V2FzbVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9
CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBs
ZXRpb25UYXNrJiYgdGFzaykKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShpbmZvKSkK
KyAgICAsIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFw
cGVyKSkKKyAgICAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbikKICAg
ICAsIG1fc291cmNlKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5kYXRhKCkpCiAgICAgLCBt
X3NvdXJjZUxlbmd0aChtX21vZHVsZUluZm9ybWF0aW9uLT5zb3VyY2Uuc2l6ZSgpKQogewotICAg
IG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih2bSwgV1RGTW92ZSh0YXNr
KSkpOworICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0
LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK1Bs
YW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBQbGFuKGNvbnRleHQsIFdURk1vdmUoaW5mbyks
IFdURk1vdmUodGFzayksIG51bGxwdHIsIG51bGxwdHIpCit7Cit9CisKK1BsYW46OlBsYW4oQ29u
dGV4dCogY29udGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3Ro
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKGFkb3B0
UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oVmVjdG9yPHVpbnQ4X3Q+KCkpKSkKICAgICAsIG1f
c291cmNlKHNvdXJjZSkKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKIHsKLSAg
ICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodm0sIFdURk1vdmUodGFz
aykpKTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4
dCwgV1RGTW92ZSh0YXNrKSkpOwogfQogCiB2b2lkIFBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyhj
b25zdCBBYnN0cmFjdExvY2tlciYpCkBAIC03MiwxOCArNzcsMTggQEAgdm9pZCBQbGFuOjpydW5D
b21wbGV0aW9uVGFza3MoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgIEFTU0VSVChpc0NvbXBs
ZXRlKCkgJiYgIWhhc1dvcmsoKSk7CiAKICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX2NvbXBsZXRp
b25UYXNrcykKLSAgICAgICAgdGFzay5zZWNvbmQtPnJ1bih0YXNrLmZpcnN0LCAqdGhpcyk7Cisg
ICAgICAgIHRhc2suc2Vjb25kLT5ydW4oKnRoaXMpOwogICAgIG1fY29tcGxldGlvblRhc2tzLmNs
ZWFyKCk7CiAgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgUGxhbjo6YWRk
Q29tcGxldGlvblRhc2soVk0mIHZtLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCit2b2lkIFBsYW46
OmFkZENvbXBsZXRpb25UYXNrKENvbnRleHQqIGNvbnRleHQsIENvbXBsZXRpb25UYXNrJiYgdGFz
aykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIGlmICghaXNDb21wbGV0
ZSgpKQotICAgICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoJnZt
LCBXVEZNb3ZlKHRhc2spKSk7CisgICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiAgICAgZWxzZQotICAgICAgICB0
YXNrLT5ydW4oJnZtLCAqdGhpcyk7CisgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CiB9CiAKIHZv
aWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24oKQpAQCAtOTQsMTkgKzk5LDE5IEBAIHZvaWQgUGxh
bjo6d2FpdEZvckNvbXBsZXRpb24oKQogICAgIH0KIH0KIAotYm9vbCBQbGFuOjp0cnlSZW1vdmVW
TUFuZENhbmNlbElmTGFzdChWTSYgdm0pCitib29sIFBsYW46OnRyeVJlbW92ZUNvbnRleHRBbmRD
YW5jZWxJZkxhc3QoQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOwogCiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgLy8gV2UgYWxs
b3cgdGhlIGZpcnN0IGNvbXBsZXRpb24gdGFzayB0byBub3QgaGF2ZSBhIHZtLgorICAgICAgICAv
LyBXZSBhbGxvdyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNrIHRvIG5vdCBoYXZlIGEgQ29udGV4
dC4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fY29tcGxldGlvblRhc2tzLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgQVNTRVJUKG1fY29tcGxldGlvblRhc2tzW2ldLmZpcnN0
KTsKICAgICB9CiAKICAgICBib29sIHJlbW92ZWRBbnlUYXNrcyA9IGZhbHNlOwotICAgIG1fY29t
cGxldGlvblRhc2tzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3Qgc3RkOjpwYWlyPFZNKiwg
Q29tcGxldGlvblRhc2s+JiBwYWlyKSB7Ci0gICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFp
ci5maXJzdCA9PSAmdm07CisgICAgbV9jb21wbGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hpbmco
WyZdIChjb25zdCBzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiYgcGFpcikgewor
ICAgICAgICBib29sIHNob3VsZFJlbW92ZSA9IHBhaXIuZmlyc3QgPT0gJmNvbnRleHQ7CiAgICAg
ICAgIHJlbW92ZWRBbnlUYXNrcyB8PSBzaG91bGRSZW1vdmU7CiAgICAgICAgIHJldHVybiBzaG91
bGRSZW1vdmU7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRl
eCAxMGY4YTFiLi43YTA3YmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgK
QEAgLTI4LDggKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJD
b21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJH
ZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtTW9k
dWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL1No
YXJlZFRhc2suaD4KQEAgLTM5LDI1ICszOSwyNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IENhbGxMaW5rSW5mbzsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgSlNQcm9taXNlRGVm
ZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENvbnRleHQ7CisKIGNsYXNzIFBs
YW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogcHVibGljOgotICAgIHR5
cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0qLCBQbGFuJik7CisgICAgdHlwZWRlZiB2b2lkIENh
bGxiYWNrVHlwZShQbGFuJik7CiAgICAgdXNpbmcgQ29tcGxldGlvblRhc2sgPSBSZWZQdHI8U2hh
cmVkVGFzazxDYWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMgQ29tcGxldGlvblRhc2sgZG9udEZp
bmFsaXplKCkgeyByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxDYWxsYmFja1R5cGU+KFtdKFZNKiwg
UGxhbiYpIHsgfSk7IH0KLSAgICBQbGFuKFZNKiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29t
cGxldGlvblRhc2smJik7CisKKyAgICBzdGF0aWMgQ29tcGxldGlvblRhc2sgZG9udEZpbmFsaXpl
KCkgeyByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxDYWxsYmFja1R5cGU+KFtdKFBsYW4mKSB7IH0p
OyB9CisgICAgUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlv
blRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7Cisg
ICAgUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2sm
Jik7CiAKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVzZWQg
aWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0aW9u
L2Z1bmN0aW9uIHRlc3RzCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSosIGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYp
OwogICAgIHZpcnR1YWwgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlv
dSBndWFyYW50ZWUgdGhlIG9yZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRo
ZQogICAgIC8vIGNvbXBsZXRpb24gdGFza3MgYmVpbmcgY2FsbGVkLgotICAgIHZvaWQgYWRkQ29t
cGxldGlvblRhc2soVk0mLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICB2b2lkIGFkZENvbXBsZXRp
b25UYXNrKENvbnRleHQqLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIHZvaWQgc2V0TW9kZShN
ZW1vcnlNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQogICAgIE1lbW9yeU1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpAQCAtNzIsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHdhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGNh
bmNlbGxlZCB0aGUgcGxhbi4KLSAgICBib29sIHRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZN
Jik7CisgICAgYm9vbCB0cnlSZW1vdmVDb250ZXh0QW5kQ2FuY2VsSWZMYXN0KENvbnRleHQmKTsK
IAogcHJvdGVjdGVkOgogICAgIHZvaWQgcnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJik7CkBAIC04Myw3ICs4NSwxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAKLSAgICBWZWN0b3I8c3RkOjpwYWly
PFZNKiwgQ29tcGxldGlvblRhc2s+LCAxPiBtX2NvbXBsZXRpb25UYXNrczsKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPENvbnRleHQqLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRhc2tz
OworCisgICAgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyOwor
ICAgIFRocm93V2FzbUV4Y2VwdGlvbiBtX3Rocm93V2FzbUV4Y2VwdGlvbiB7IG51bGxwdHIgfTsK
IAogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNpemVfdCBtX3NvdXJj
ZUxlbmd0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWdu
YXR1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAK
aW5kZXggOGI2MDBlZC4uNmE0MmQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNpZ25hdHVyZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNpZ25hdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5o
CmluZGV4IGU0MTNiMjUuLmFhY2VkNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2lnbmF0dXJlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNiBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIHVzaW5nIFNpZ25h
dHVyZUFyZ0NvdW50ID0gdWludDMyX3Q7CkBAIC0xNTYsNyArMTU0LDcgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxKU0M6Oldhc206OlNpZ25hdHVyZUhhc2g+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEoKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gU2ln
bmF0dXJlIGluZm9ybWF0aW9uIGlzIGhlbGQgZ2xvYmFsbHkgYW5kIHNoYXJlZCBieSBWTXMgdG8g
YWxsb3cgYWxsIHNpZ25hdHVyZXMgdG8gYmUgdW5pcXVlLiBUaGlzIGlzIHJlcXVpcmVkIHdoZW4g
d2FzbSBjYWxscyBhbm90aGVyIHdhc20gaW5zdGFuY2UsIGFuZCBtdXN0IHdvcmsgd2hlbiBtb2R1
bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBWTXMuCisvLyBTaWduYXR1cmUgaW5mb3Jt
YXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5IHRoZSBlbnRpcmUgcHJvY2VzcyB0
byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hl
biB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1v
ZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4KIC8vIE5vdGU6IHNpZ25hdHVy
ZXMgYXJlIG5ldmVyIHJlbW92ZWQgYmVjYXVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgYWNjb3VudGlu
ZyBmb3IgYWxsIFdlYkFzc2VtYmx5Lk1vZHVsZSBhbmQgd2hpY2ggc2lnbmF0dXJlcyB0aGV5IHVz
ZS4gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25hdHVyZXMgaXMgYm91bmRlZCwgYW5kIGlzbid0
IHdvcnRoIHRoZSBjb3VudGluZyBvdmVyaGVhZC4gV2UgY291bGQgY2xlYXIgZXZlcnl0aGluZyB3
aGVuIHdlIHJlYWNoIHplcm8gb3V0c3RhbmRpbmcgV2ViQXNzZW1ibHkuTW9kdWxlLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDM3CiBjbGFzcyBTaWduYXR1cmVJ
bmZvcm1hdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2lnbmF0dXJlSW5mb3JtYXRp
b24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRlZmFlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK1JlZlB0
cjxUYWJsZT4gVGFibGU6OmNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBtYXhpbXVtKQoreworICAgIGlmICghaXNWYWxpZFNpemUoaW5pdGlhbCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51bGwsIGZh
c3RNYWxsb2Moc2l6ZW9mKFRhYmxlKSkpIFRhYmxlKGluaXRpYWwsIG1heGltdW0pKTsKK30KKwor
VGFibGU6On5UYWJsZSgpCit7Cit9CisKK1RhYmxlOjpUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQoreworICAgIG1fc2l6ZSA9IGluaXRpYWw7
CisgICAgbV9tYXhpbXVtID0gbWF4aW11bTsKKyAgICBBU1NFUlQoaXNWYWxpZFNpemUobV9zaXpl
KSk7CisgICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOworCisg
ICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4
aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgorICAgIC8vIEJ1dCBmb3Ig
bm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4KKyAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxX
YXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgbV9pbnN0YW5jZXMgPSBN
YWxsb2NQdHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj46Om1hbGxvYyhzaXplb2YoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkpOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgeworICAgICAgICBuZXcgKCZtX2Z1bmN0
aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQo
bV9mdW5jdGlvbnMuZ2V0KClbaV0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjpp
bnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KKyAgICAg
ICAgbV9pbnN0YW5jZXMuZ2V0KClbaV0gPSBudWxscHRyOworICAgIH0KK30KKworc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gVGFibGU6Omdyb3codWludDMyX3QgZGVsdGEpCit7CisgICAgaWYgKGRl
bHRhID09IDApCisgICAgICAgIHJldHVybiBzaXplKCk7CisKKyAgICB1c2luZyBDaGVja2VkID0g
Q2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+OworICAgIENoZWNrZWQgbmV3U2l6ZUNo
ZWNrZWQgPSBzaXplKCk7CisgICAgbmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7CisgICAgdWludDMy
X3QgbmV3U2l6ZTsKKyAgICBpZiAobmV3U2l6ZUNoZWNrZWQuc2FmZUdldChuZXdTaXplKSA9PSBD
aGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gKm1heGltdW0oKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWlzVmFsaWRTaXplKG5ld1NpemUpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgeworICAgICAgICBDaGVja2VkIHJlYWxsb2NG
dW5jdGlvbnNTaXplQ2hlY2tlZCA9IG5ld1NpemVDaGVja2VkOworICAgICAgICByZWFsbG9jRnVu
Y3Rpb25zU2l6ZUNoZWNrZWQgKj0gc2l6ZW9mKENhbGxhYmxlRnVuY3Rpb24pOworICAgICAgICB1
aW50MzJfdCByZWFsbG9jRnVuY3Rpb25zU2l6ZTsKKyAgICAgICAgaWYgKHJlYWxsb2NGdW5jdGlv
bnNTaXplQ2hlY2tlZC5zYWZlR2V0KHJlYWxsb2NGdW5jdGlvbnNTaXplKSA9PSBDaGVja2VkU3Rh
dGU6OkRpZE92ZXJmbG93KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgbV9mdW5jdGlvbnMucmVhbGxvYyhyZWFsbG9jRnVuY3Rpb25zU2l6ZSk7CisgICAgICAgIGZv
ciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgIG5l
dyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAg
fQorICAgIAorICAgIHsKKyAgICAgICAgQ2hlY2tlZCByZWFsbG9jSW5zdGFuY2VzU2l6ZUNoZWNr
ZWQgPSBuZXdTaXplQ2hlY2tlZDsKKyAgICAgICAgcmVhbGxvY0luc3RhbmNlc1NpemVDaGVja2Vk
ICo9IHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKKyAgICAgICAgdWludDMyX3QgcmVh
bGxvY0luc3RhbmNlc1NpemU7CisgICAgICAgIGlmIChyZWFsbG9jSW5zdGFuY2VzU2l6ZUNoZWNr
ZWQuc2FmZUdldChyZWFsbG9jSW5zdGFuY2VzU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVy
ZmxvdykKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIG1faW5zdGFu
Y2VzLnJlYWxsb2MocmVhbGxvY0luc3RhbmNlc1NpemUpOworICAgICAgICBmb3IgKHVpbnQzMl90
IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kpCisgICAgICAgICAgICBtX2luc3RhbmNlcy5n
ZXQoKVtpXSA9IG51bGxwdHI7CisgICAgfQorCisgICAgbV9zaXplID0gbmV3U2l6ZTsKKworICAg
IHJldHVybiBuZXdTaXplOworfQorCit2b2lkIFRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90
IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBtX2Z1
bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgQVNT
RVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWdu
YXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2Rl
LgorICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgVGFi
bGU6OnNldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4LCBDYWxsYWJsZUZ1bmN0aW9uIGZ1bmN0aW9u
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGluZGV4IDwgc2l6ZSgpKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlv
bjsKKyAgICBtX2luc3RhbmNlcy5nZXQoKVtpbmRleF0gPSBpbnN0YW5jZTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OlRhYmxlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmI5MDhlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGFibGUuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbUxp
bWl0cy5oIgorI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U7IC8vIEZJWE1FIHRoaXMgc2hvdWxkIGJlIFdhc206Okluc3RhbmNlIGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE3NzQ3MgorCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhYmxlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFRhYmxlPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBD
cmVhdGVGYWlsIHsKKyAgICAgICAgSW52YWxpZFNpemUsCisgICAgfTsKKyAgICBzdGF0aWMgUmVm
UHRyPFRhYmxlPiBjcmVhdGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gbWF4aW11bSk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+VGFibGUoKTsKKworICAgIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07
IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gZ3Jvdyh1aW50MzJfdCBkZWx0YSkgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9pZCBzZXRGdW5j
dGlvbih1aW50MzJfdCwgQ2FsbGFibGVGdW5jdGlvbiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7
IC8vIEZJWE1FIG1ha2UgdGhpcyBXYXNtOjpJbnN0YW5jZS4gaHR0cHM6Ly93ZWJraXQub3JnL2Iv
MTc3NDcyCisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihUYWJsZSwgbV9zaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1fZnVuY3Rp
b25zKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZXMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1faW5zdGFuY2VzKTsgfQorCisgICAgc3RhdGljIGJv
b2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6ZSkgeyByZXR1cm4gc2l6ZSA8IG1heFRhYmxlRW50
cmllczsgfQorCitwcml2YXRlOgorICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOworCisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
bV9tYXhpbXVtOworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICBNYWxsb2NQdHI8Q2FsbGFibGVG
dW5jdGlvbj4gbV9mdW5jdGlvbnM7CisgICAgLy8gY2FsbF9pbmRpcmVjdCBuZWVkcyB0byBkbyBh
biBJbnN0YW5jZSBjaGVjayB0byBwb3RlbnRpYWxseSBjb250ZXh0IHN3aXRjaCB3aGVuIGNhbGxp
bmcgYSBmdW5jdGlvbiB0byBhbm90aGVyIGluc3RhbmNlLiBXZSBjYW4gaG9sZCByYXcgcG9pbnRl
cnMgdG8gSW5zdGFuY2UgaGVyZSBiZWNhdXNlIHRoZSBlbWJlZGRlciBlbnN1cmVzIHRoYXQgVGFi
bGUga2VlcHMgYWxsIHRoZSBpbnN0YW5jZXMgYWxpdmUuIFdlIGNvdWxkbid0IGhvbGQgYSBSZWYg
aGVyZSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGN5Y2xlcy4KKyAgICBNYWxsb2NQdHI8SlNXZWJB
c3NlbWJseUluc3RhbmNlKj4gbV9pbnN0YW5jZXM7IC8vIEZJWE1FIG1ha2UgdGhpcyBhIFdhc206
Okluc3RhbmNlLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCmluZGV4IDk3N2IwMWIuLmMyMzU5ODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBAIC0yOSwxMSAr
MjksOSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVy
cy5oIgotI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCkBAIC00OCw0NiArNDYsMTggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBB
YnN0cmFjdExvY2tlciYKIAogICAgIC8vIFRoZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVzdCBt
b3ZlIEV4Y2VwdGlvblR5cGUgaW50byB0aGUgYXJndW1lbnRHUFIxIGJlZm9yZSBqdW1waW5nIGhl
cmUuCiAgICAgLy8gV2UncmUgYWxsb3dlZCB0byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZS4gV2Ug
YXJlIG5vdCBhbGxvd2VkIHRvIHVzZSBjYWxsZWUgc2F2ZXMuCi0gICAgaml0LmxvYWRXYXNtQ29u
dGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjIsIENvbnRleHQ6Om9mZnNldE9mVk0oKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZlZNKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwogICAg
IGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICAgICBqaXQuYnJlYWtwb2ludCgp
OyAvLyBXZSBzaG91bGQgbm90IHJlYWNoIHRoaXMuCiAKLSAgICB2b2lkKiAoKnRocm93V2FzbUV4
Y2VwdGlvbikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgV2FzbTo6Q29udGV4dCop
ID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBXYXNtOjpD
b250ZXh0KiB3YXNtQ29udGV4dCkgLT4gdm9pZCogewotICAgICAgICBWTSogdm0gPSB3YXNtQ29u
dGV4dC0+dm0oKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmplY3QoKTsKLQotICAgICAgICAgICAgSlNPYmplY3Qq
IGVycm9yOyAKLSAgICAgICAgICAgIGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3Zl
cmZsb3cpCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Io
ZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBl
cnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2Jh
bE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JN
ZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgIH0KLQotICAgICAgICBnZW5lcmlj
VW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNo
KTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKLSAgICAg
ICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6Ci0gICAgICAgIC8vIFRoaXMg
aXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5kbGVV
bmNhdWdodEV4Y2VwdGlvbikKLSAgICAgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxl
ZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWly
ZQotICAgICAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBW
TSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCi0gICAgICAg
IC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxs
IGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCi0gICAgICAgIC8vIHRvIHRoZSBleGNlcHRp
b24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxl
IGhhY2suCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzA0NDAKLSAgICAgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4od2FzbUNvbnRleHQtPndlYkFz
c2VtYmx5VG9KU0NhbGxlZSgpKTsKLSAgICAgICAgcmV0dXJuIHZtLT50YXJnZXRNYWNoaW5lUENG
b3JUaHJvdzsKLSAgICB9OwotCisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7CisgICAgUkVM
RUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJv
d1dhc21FeGNlcHRpb24pOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cih0
aHJvd1dhc21FeGNlcHRpb24pKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKSk7CiB9CiAKQEAgLTExOSw4ICs4OSwxMCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKGNv
bnN0IEFic3RyYWN0TG9ja2VyJikKICNlbmRpZgogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tC
eXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGws
IGV4dHJhUGFkZGluZ0J5dGVzKTsKIAotICAgIGppdC5sb2FkV2FzbUNvbnRleHQoR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihydW5PTUdQbGFuRm9ySW5kZXgpKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpSdW4pKEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSosIHVpbnQzMl90KTsKKyAgICBSdW4gcnVuID0gT01HUGxhbjo6cnVuRm9ySW5kZXg7Cisg
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocnVuKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmNhbGwoR1BS
SW5mbzo6YXJndW1lbnRHUFIyKTsKIAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVz
dG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdp
c3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24s
IGV4dHJhUGFkZGluZ0J5dGVzKTsKQEAgLTE0Miw2ICsxMTQsMTkgQEAgVGh1bmtzJiBUaHVua3M6
OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuICp0aHVua3M7CiB9CiAKK3ZvaWQgVGh1bmtzOjpzZXRU
aHJvd1dhc21FeGNlcHRpb24oVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikK
K3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgLy8gVGhlIHRodW5r
cyBhcmUgdW5pcXVlIGZvciB0aGUgZW50aXJlIHByb2Nlc3MsIHRoZXJlZm9yZSBjaGFuZ2luZyB0
aGUgdGhyb3dpbmcgZnVuY3Rpb24gY2hhbmdlcyBpdCBmb3IgYWxsIHVzZXMgb2YgV2ViQXNzZW1i
bHkuCisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdGhyb3dXYXNtRXhjZXB0aW9uIHx8IG1fdGhyb3dX
YXNtRXhjZXB0aW9uID09IHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgbV90aHJvd1dhc21FeGNl
cHRpb24gPSB0aHJvd1dhc21FeGNlcHRpb247Cit9CisKK1Rocm93V2FzbUV4Y2VwdGlvbiBUaHVu
a3M6OnRocm93V2FzbUV4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIG1fdGhyb3dXYXNtRXhjZXB0
aW9uOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKaW5kZXggZGYxNGNhMi4uNGU5N2Nh
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaApAQCAtMjcsNiArMjcs
NyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVy
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CkBAIC00Miw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBpbml0aWFsaXplKCk7CiAgICAgc3RhdGljIFRodW5rcyYgc2luZ2xldG9uKCk7CiAKKyAg
ICB2b2lkIHNldFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24pOworICAgIFRo
cm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24oKTsKKwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBzdHViKFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsKQEAgLTUwLDYg
KzU0LDcgQEAgcHJpdmF0ZToKICAgICBUaHVua3MoKSA9IGRlZmF1bHQ7CiAKICAgICBIYXNoTWFw
PFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fc3R1YnM7CisgICAgVGhy
b3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIExv
Y2sgbV9sb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlz
dC5jcHAKaW5kZXggOWM1YjY4NC4uMmZlMTMyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldh
c21Xb3JrbGlzdC5oIgogCkBAIC0xNzIsMTMgKzE3MywxMyBAQCB2b2lkIFdvcmtsaXN0Ojpjb21w
bGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCiAgICAgcGxhbi53YWl0Rm9yQ29tcGxl
dGlvbigpOwogfQogCi12b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCit2
b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JDb250ZXh0KENvbnRleHQmIGNvbnRleHQpCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgVmVjdG9yPFF1ZXVlRWxlbWVu
dD4gZWxlbWVudHM7CiAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICBR
dWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUuZGVxdWV1ZSgpOwotICAgICAgICBib29sIGRp
ZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0pOwor
ICAgICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFu
ZENhbmNlbElmTGFzdChjb250ZXh0KTsKICAgICAgICAgaWYgKCFkaWRDYW5jZWwpCiAgICAgICAg
ICAgICBlbGVtZW50cy5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgfQpAQCAtMTg4LDcg
KzE4OSw3IEBAIHZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKIAogICAg
IGZvciAoYXV0byYgdGhyZWFkIDogbV90aHJlYWRzKSB7CiAgICAgICAgIGlmICh0aHJlYWQtPmVs
ZW1lbnQucGxhbikgewotICAgICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1l
bnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAgICAgICAgYm9v
bCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFuZENh
bmNlbElmTGFzdChjb250ZXh0KTsKICAgICAgICAgICAgIGlmIChkaWRDYW5jZWwpIHsKICAgICAg
ICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBkZWFkbG9ja2lu
ZyBzaW5jZSB0aGUgdGhyZWFkIGNhbid0IGJsb2NrIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGEgbmV3
IHBsYW4gYW5kIG11c3QgaG9sZCB0aGUgbG9jayB0byBkbyBzby4KICAgICAgICAgICAgICAgICB0
aHJlYWQtPnN5bmNocm9uaXplLndhaXQoKm1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Xb3JrbGlzdC5oCmluZGV4IDZiNjkzNTIuLjc0OGE5ZWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgotCiAjaW5jbHVkZSA8cXVldWU+
CiAKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CkBAIC0zNywxMCArMzUsOSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7Ci0KIG5hbWVzcGFj
ZSBXYXNtIHsKIAorc3RydWN0IENvbnRleHQ7CiBjbGFzcyBQbGFuOwogCiBjbGFzcyBXb3JrbGlz
dCB7CkBAIC01MCwxMyArNDcsMTAgQEAgcHVibGljOgogICAgIH5Xb3JrbGlzdCgpOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbnF1ZXVlKFJlZjxQbGFuPik7Ci0gICAgdm9pZCBzdG9w
QWxsUGxhbnNGb3JWTShWTSYpOworICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yQ29udGV4dChDb250
ZXh0Jik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXBsZXRlUGxhblN5bmNocm9u
b3VzbHkoUGxhbiYpOwogCi0gICAgdm9pZCBhY3RpdmF0ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQq
LCBQbGFuKik7Ci0gICAgdm9pZCBkZWFjdGl2ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFu
Kik7Ci0KICAgICBlbnVtIGNsYXNzIFByaW9yaXR5IHsKICAgICAgICAgU2h1dGRvd24sCiAgICAg
ICAgIFN5bmNocm9ub3VzLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjcxMDkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKQEAg
LTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRp
b25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4KQoreworICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9u
Q29udGV4dC5qc0VudHJ5cG9pbnRKSVQ7CisKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91
bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
KTsKKworICAgIC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgaml0LnN0b3JlNjQoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFi
ZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQ
UiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7
CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3Vs
dC0+Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoY2FsbGVlTW92ZUxvY2F0aW9uKTsKKyAgICB9KTsKKworICAgIGNvbnN0IFBp
bm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7
CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlubmVkUmVncy50b1NhdmUobW9kZSk7CisKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5udW1i
ZXJPZlNldEdQUnMoKTsKKyAgICAvLyBUaGV5IHNob3VsZCBhbGwgYmUgY2FsbGVlIHNhdmVzLgor
ICAgIHRvU2F2ZS5maWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cisg
ICAgQVNTRVJUKHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKSA9PSB0b1NhdmVTaXplKTsKKyNlbmRp
ZgorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUsIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQpOwor
ICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9T
cGlsbDsKKworICAgIHVuc2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5z
aXplKCkgKiBzaXplb2Yodm9pZCopOworICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5n
Q29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAg
dW5zaWduZWQgbnVtRlBScyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5h
cmd1bWVudChpKSkgeworICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgY2FzZSBXYXNt
OjpJMzI6CisgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNp
emVvZih2b2lkKik7CisgICAgICAgICAgICArK251bUdQUnM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAg
ICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNp
emUoKSkKKyAgICAgICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOwor
ICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgdG90YWxGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCB0b3RhbEZyYW1lU2l6ZSk7CisgICAgaml0LnN1YlB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRvdGFsRnJhbWVTaXplKSwgTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdlIHNhdmUgYWxsIHRoZXNlIHJl
Z2lzdGVycyByZWdhcmRsZXNzIG9mIGhhdmluZyBhIG1lbW9yeSBvciBub3QuCisgICAgLy8gVGhl
IHJlYXNvbiBpcyB0aGF0IHdlIHVzZSBvbmUgb2YgdGhlc2UgYXMgYSBzY3JhdGNoLiBUaGF0IHNh
aWQsCisgICAgLy8gYWxtb3N0IGFsbCByZWFsIHdhc20gcHJvZ3JhbXMgdXNlIG1lbW9yeSwgc28g
aXQncyBub3QgcmVhbGx5CisgICAgLy8gd29ydGggb3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhh
dCB0aGV5IGRvbid0LgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZz
ZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNl
dC5yZWcoKS5ncHIoKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9m
ZnNldCgpOworICAgICAgICBqaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCkpOworICAgIH0KKworICAgIEdQUlJl
ZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNl
UG9pbnRlcjsKKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZy
YW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7CisgICAgICAgIG51bUdQUnMgPSAwOworICAgICAgICBudW1GUFJzID0gMDsKKyAgICAgICAg
Ly8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNv
CisgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3
ZSBzYXZlZCBpdCBhYm92ZS4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdz
LmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisKKyAgICAg
ICAgLy8gdm1FbnRyeVRvV2FzbSBwYXNzZXMgV2FzbTo6Q29udGV4dConcyBpbnN0YW5jZSBhcyB0
aGUgZmlyc3QgSlMgYXJndW1lbnQgd2hlbiB3ZSdyZQorICAgICAgICAvLyBub3QgdXNpbmcgZmFz
dCBUTFMgdG8gaG9sZCB0aGUgV2FzbTo6Q29udGV4dConcyBpbnN0YW5jZS4KKyAgICAgICAgaWYg
KCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3
YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwdHJkaWZmX3Qgd2FzbU9mZnNl
dCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
IGkrKykgeworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAg
ICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6Cisg
ICAgICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9n
cHJBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3Vt
ZW50KGkpID09IFdhc206OkkzMikgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zm
c2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihz
Y3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNl
dCksIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2Ny
YXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9p
ZCopOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
aWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKQorICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQ
UnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251
bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytudW1H
UFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6
CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgICAgICBpZiAobnVtRlBS
cyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBX
YXNtOjpGMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0
KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqc09m
ZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKCEhaW5mby5tZW1vcnkpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRS
ZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRM
UygpKQorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21D
b250ZXh0SW5zdGFuY2VHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBqaXQubG9h
ZFdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAgICAgICBjb25z
dCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAg
IEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVS
ZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFy
dCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZl
IHRvIDAuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVS
ZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Mu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lz
dGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6
b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgIH0KKworICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmltcG9ydEZ1
bmN0aW9uQ291bnQoKTsKKyAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5mby5mdW5j
dGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7Cisg
ICAgfSk7CisKKworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQg
OiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5y
ZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOworICAgIH0KKworICAgIHN3aXRjaCAoc2lnbmF0dXJl
LnJldHVyblR5cGUoKSkgeworICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBqaXQubW92ZUZs
b2F0VG8zMihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgaml0Lm1vdmVE
b3VibGVUbzY0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDQ3OTU1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApA
QCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5o
IgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5j
bHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFj
ZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3Qg
U2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKc2ltaWxh
cml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pT
V2ViQXNzZW1ibHkuY3BwCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXZWJBc3NlbWJseS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseS5oCnNpbWlsYXJpdHkgaW5kZXggNjIlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseS5oCmluZGV4IDBmYWY5NzcuLmM1NzhkZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKQEAgLTI4LDMxICsyOCwz
MSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0j
aW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgotI2luY2x1ZGUgImpzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgiCi0jaW5jbHVkZSAianMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5VGFibGUuaCIKLSNpbmNsdWRlICJq
cy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgotI2luY2x1
ZGUgImpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9X
ZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCIKLSNp
bmNsdWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlQcm90b3R5
cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmgi
Ci0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuaCIKLSNpbmNs
dWRlICJqcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJB
c3NlbWJseVRhYmxlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlUb0pTQ2Fs
bGVlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUNv
bXBpbGVFcnJvckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCisjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlJbnN0YW5jZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TGlua0Vycm9yQ29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oIgorI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlQ
cm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9y
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUuaCIKKyNpbmNs
dWRlICJXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCmluZGV4IGY5MWU2YzcuLjA4MjUxNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suY3BwCkBAIC0zMiw4ICszMiw4IEBACiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNp
bmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgog
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTQ0LDcgKzQ0LDcgQEAgY29uc3Qg
Q2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5
Q29kZUJsb2NrIiwgbnVsbHAKIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmNyZWF0ZShWTSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxvY2s+IGNvZGVCbG9jaywg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKQogewogICAgIGNvbnN0IFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlKCkubW9kdWxlSW5m
b3JtYXRpb24oKTsKLSAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGVJ
bmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayh2bSwgV1RGTW92ZShjb2RlQmxvY2spLCBtb2R1bGVJbmZvcm1hdGlvbik7CisgICAgYXV0byog
cmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9j
az4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIFdURk1vdmUoY29kZUJsb2Nr
KSwgbW9kdWxlSW5mb3JtYXRpb24pOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIG1v
ZHVsZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTU4LDcgKzU4LDcgQEAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpD
b2RlQmxvY2s+JiYgY28KICAgICBtX3dhc21Ub0pTRXhpdFN0dWJzLnJlc2VydmVDYXBhY2l0eSht
X2NvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGlt
cG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX2NvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRD
b3VudCgpOyArK2ltcG9ydEluZGV4KSB7CiAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLmF0KGltcG9ydEluZGV4KTsKLSAgICAgICAgYXV0byBiaW5kaW5nID0gV2FzbTo6d2Fz
bVRvSnMoJnZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRJbmRleCk7
CisgICAgICAgIGF1dG8gYmluZGluZyA9IFdhc206Ondhc21Ub0pTKCZ2bSwgbV9jYWxsTGlua0lu
Zm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0SW5kZXgpOwogICAgICAgICBpZiAoVU5MSUtFTFko
IWJpbmRpbmcpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGJpbmRpbmcuZXJyb3IoKSkgewogICAg
ICAgICAgICAgY2FzZSBXYXNtOjpCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnk6CkBAIC02OCw3
ICs2OCw3IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2so
Vk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIGNvCiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1fd2FzbVRvSlNFeGl0U3R1
YnMudW5jaGVja2VkQXBwZW5kKGJpbmRpbmcudmFsdWUoKSk7Ci0gICAgICAgIGltcG9ydFdhc21U
b0pTU3R1YihpbXBvcnRJbmRleCkgPSBtX3dhc21Ub0pTRXhpdFN0dWJzW2ltcG9ydEluZGV4XS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmltcG9ydFdh
c21Ub0VtYmVkZGVyU3R1YihpbXBvcnRJbmRleCkgPSBtX3dhc21Ub0pTRXhpdFN0dWJzW2ltcG9y
dEluZGV4XS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiB9CiAKQEAgLTgzLDEx
ICs4Myw2IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOwogfQogCi1ib29s
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzU2FmZVRvUnVuKG1l
bW9yeS0+bWVtb3J5KCkubW9kZSgpKTsKLX0KLQogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
OjpjbGVhckpTQ2FsbElDcyhWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxM
aW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKaW5kZXggNTI3MDNm
OC4uYWJiOGM2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtNjQsMzkgKzY0LDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuICZ2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlOwogICAgIH0KIAotICAg
IHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpOyB9Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9k
dWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KKyAgICBXYXNtOjpDb2RlQmxv
Y2smIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CiAKLSAgICBib29s
IGlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKSBjb25zdDsKKyAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQogCiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqKTsKIAotICAg
IC8vIFRoZXNlIHR3byBjYWxsZWUgZ2V0dGVycyBhcmUgb25seSB2YWxpZCBvbmNlIHRoZSBjYWxs
ZWVzIGhhdmUgYmVlbiBwb3B1bGF0ZWQuCi0KLSAgICBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICByZXR1cm4gbV9j
b2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleFNwYWNlKTsKLSAgICB9Ci0gICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRp
b24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChydW5uYWJsZSgp
KTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlv
bkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICB9Ci0KLSAg
ICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1w
b3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bm5hYmxl
KCkpOwotICAgICAgICByZXR1cm4gJmltcG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1Yih1
bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9y
dFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogaW1wb3J0SW5kZXg7Ci0gICAgfQotCi0gICAgV2Fz
bTo6Q29kZUJsb2NrJiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQot
CiAgICAgdm9pZCBjbGVhckpTQ2FsbElDcyhWTSYpOwogCiAgICAgYm9vbCBydW5uYWJsZSgpIGNv
bnN0IHsgcmV0dXJuICFtX2Vycm9yTWVzc2FnZTsgfQpAQCAtMTE0LDIxICs4Nyw2IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBzdGF0aWMgc2l6ZV90
IG9mZnNldE9mSW1wb3J0U3R1YnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihzaXplb2YoSlNXZWJBc3NlbWJseUNvZGVCbG9j
aykpOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxz
aXplX3Q+IGZ1bmN0aW9uSW1wb3J0Q291bnQpCi0gICAgewotICAgICAgICByZXR1cm4gKG9mZnNl
dE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBmdW5jdGlvbkltcG9ydENvdW50KS51
bnNhZmVHZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lkKiYgaW1wb3J0V2FzbVRvSlNTdHViKHVuc2ln
bmVkIGltcG9ydEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8dm9p
ZCoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0
dWIoaW1wb3J0SW5kZXgpKTsKLSAgICB9Ci0KICAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxp
emVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7CiAgICAgICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKICAgICB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAK
aW5kZXggYzc3ZmEwNS4uYzUyZWVjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC00OSwxMiArNDksMTcg
QEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6SlNXZWJBc3Nl
bWJseUluc3RhbmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIG51bUlt
cG9ydEZ1bmN0aW9ucykKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0
aW9ucywgUmVmPFdhc206Okluc3RhbmNlPiYmIGluc3RhbmNlKQogICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQorICAgICwgbV9pbnN0YW5jZShXVEZNb3ZlKGluc3RhbmNlKSkKICAgICAsIG1fdm0o
JnZtKQorICAgICwgbV93YXNtTW9kdWxlKG1faW5zdGFuY2UtPm1vZHVsZSgpKQorICAgICwgbV93
YXNtVGFibGUobV9pbnN0YW5jZS0+bV90YWJsZS5nZXQoKSkKKyAgICAsIG1fZ2xvYmFscyhtX2lu
c3RhbmNlLT5tX2dsb2JhbHMuZ2V0KCkpCiAgICAgLCBtX251bUltcG9ydEZ1bmN0aW9ucyhudW1J
bXBvcnRGdW5jdGlvbnMpCiB7Ci0gICAgbWVtc2V0KGltcG9ydEZ1bmN0aW9ucygpLCAwLCBtX251
bUltcG9ydEZ1bmN0aW9ucyAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2kpCisgICAg
ICAgIG5ldyAoaW1wb3J0RnVuY3Rpb25JbmZvKGkpKSBJbXBvcnRGdW5jdGlvbkluZm8oKTsKIH0K
IAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxl
TmFtZXNwYWNlT2JqZWN0KQpAQCAtNjMsMTIgKzY4LDEwIEBAIHZvaWQgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVs
ZSwKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCiAgICAgbV9tb2R1bGUuc2V0
KHZtLCB0aGlzLCBtb2R1bGUpOwotICAgIGNvbnN0IHNpemVfdCBleHRyYU1lbW9yeVNpemUgPSBn
bG9iYWxNZW1vcnlCeXRlU2l6ZSgpOwotICAgIG1fZ2xvYmFscyA9IE1hbGxvY1B0cjx1aW50NjRf
dD46Om1hbGxvYyhleHRyYU1lbW9yeVNpemUpOwotICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1v
cnlBbGxvY2F0ZWQoZXh0cmFNZW1vcnlTaXplKTsKLQogICAgIG1fbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0LnNldCh2bSwgdGhpcywgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICBtX2NhbGxlZS5z
ZXQodm0sIHRoaXMsIG1vZHVsZS0+Y2FsbGVlKCkpOworICAgIAorICAgIGhlYXAoKS0+cmVwb3J0
RXh0cmFNZW1vcnlBbGxvY2F0ZWQobV9pbnN0YW5jZS0+ZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSk7
CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
QEAgLTg4LDQwICs5MSw0NCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fbWVtb3J5KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX3RhYmxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7Ci0g
ICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+Z2xvYmFsTWVt
b3J5Qnl0ZVNpemUoKSk7CisgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhp
c09iamVjdC0+bV9pbnN0YW5jZS0+ZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2kp
Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9ucygpW2ld
KTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25JbmZv
KGkpLT5pbXBvcnRGdW5jdGlvbik7IC8vIFRoaXMgYWxzbyBrZWVwcyB0aGUgZnVuY3Rpb25zJyBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UgYWxpdmUuCiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBSZWY8V2FzbTo6
Q29kZUJsb2NrPiYmIHdhc21Db2RlQmxvY2spCiB7CisgICAgbV9pbnN0YW5jZS0+ZmluYWxpemVD
cmVhdGlvbih3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSk7CisgICAgbV93YXNtQ29kZUJsb2NrID0g
d2FzbUNvZGVCbG9jay5wdHIoKTsKKwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIGlmICghd2FzbUNvZGVCbG9jay0+cnVubmFibGUoKSkgewogICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1
cmUoKSwgd2FzbUNvZGVCbG9jay0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUKHdhc21Db2RlQmxvY2stPmlzU2FmZVRvUnVuKG1l
bW9yeU1vZGUoKSkpOwotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1v
ZHVsZSgpLT5jb2RlQmxvY2sobWVtb3J5TW9kZSgpKTsKLSAgICBpZiAoY29kZUJsb2NrKSB7Cisg
ICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayoganNDb2RlQmxvY2sgPSBtX21vZHVsZS0+Y29kZUJs
b2NrKG1lbW9yeU1vZGUoKSk7CisgICAgaWYgKGpzQ29kZUJsb2NrKSB7CiAgICAgICAgIC8vIEEg
Q29kZUJsb2NrIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGNvbXBpbGVkLiBJZiBzbywgaXQgbWVh
bnMKICAgICAgICAgLy8gdGhhdCB0aGUgQ29kZUJsb2NrIHdlIGFyZSB0cnlpbmcgdG8gY29tcGls
ZSBtdXN0IGJlIHRoZSBzYW1lCiAgICAgICAgIC8vIGJlY2F1c2Ugd2Ugd2lsbCBuZXZlciBjb21w
aWxlIGEgQ29kZUJsb2NrIGFnYWluIG9uY2UgaXQncwogICAgICAgICAvLyBydW5uYWJsZS4KLSAg
ICAgICAgQVNTRVJUKCZjb2RlQmxvY2stPmNvZGVCbG9jaygpID09IHdhc21Db2RlQmxvY2sucHRy
KCkpOwotICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CisgICAg
ICAgIEFTU0VSVCgmanNDb2RlQmxvY2stPmNvZGVCbG9jaygpID09IHdhc21Db2RlQmxvY2sucHRy
KCkpOworICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGpzQ29kZUJsb2NrKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBjb2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpj
cmVhdGUodm0sIHdhc21Db2RlQmxvY2suY29weVJlZigpLCBtX21vZHVsZS5nZXQoKSk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWSghY29kZUJsb2NrLT5ydW5uYWJsZSgpKSkgewotICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNyZWF0
ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJl
KCksIGNvZGVCbG9jay0+ZXJyb3JNZXNzYWdlKCkpKTsKKyAgICAgICAganNDb2RlQmxvY2sgPSBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIFdURk1vdmUod2FzbUNvZGVCbG9jayks
IG1fbW9kdWxlLmdldCgpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFqc0NvZGVCbG9jay0+cnVu
bmFibGUoKSkpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dl
YkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCBqc0NvZGVCbG9jay0+ZXJyb3JNZXNzYWdlKCkp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay5z
ZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Ci0gICAgICAgIG1vZHVsZSgpLT5zZXRDb2RlQmxvY2so
dm0sIG1lbW9yeU1vZGUoKSwgY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZt
LCB0aGlzLCBqc0NvZGVCbG9jayk7CisgICAgICAgIG1fbW9kdWxlLT5zZXRDb2RlQmxvY2sodm0s
IG1lbW9yeU1vZGUoKSwganNDb2RlQmxvY2spOwogICAgIH0KIAogICAgIGF1dG8qIG1vZHVsZVJl
Y29yZCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KG1fbW9kdWxlTmFtZXNwYWNl
T2JqZWN0LT5tb2R1bGVSZWNvcmQoKSk7Ci0gICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIG1v
ZHVsZSgpLCB0aGlzKTsKKyAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbV9tb2R1bGUuZ2V0
KCksIHRoaXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAg
ICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0ZShleGVjKTsKQEAg
LTEyOSw3ICsxMzYsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVh
dGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgUmVmPFdhc206OgogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1
cmUqIGluc3RhbmNlU3RydWN0dXJlKQorSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJs
eU1vZHVsZSoganNNb2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5z
dGFuY2VTdHJ1Y3R1cmUsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0YW5jZSkKIHsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0xNTgsOCArMTY1LDgg
QEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
KiBtb2R1bGVOYW1lc3BhY2UgPSBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVj
KTsKICAgICAvLyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdlIHNo
b3VsZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFsbG9j
YXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkpKSBKU1dl
YkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlv
bi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpOwotICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2
bSwganNNb2R1bGUsIG1vZHVsZU5hbWVzcGFjZSk7CisgICAgYXV0byoganNJbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwg
YWxsb2NhdGlvblNpemUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkp
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1vZHVsZUluZm9y
bWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSwgV1RGTW92ZShpbnN0YW5jZSkpOworICAgIGpz
SW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxlTmFtZXNwYWNlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgLy8g
TGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1lbXB0eSBsaXN0cyBv
ZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3Rz
IGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHkuCkBAIC0xOTAsMTUg
KzE5NywyMSBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgaWYgKCF2YWx1
ZS5pc0Z1bmN0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQs
ICJpbXBvcnQgZnVuY3Rpb24iLCAibXVzdCBiZSBjYWxsYWJsZSIpKSk7CiAKKyAgICAgICAgICAg
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY2FsbGVlSW5zdGFuY2UgPSBudWxscHRyOworICAgICAg
ICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnQgPSBu
dWxscHRyOwogICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0
Kj4odmFsdWUpOworCiAgICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBFeHBvcnRlZCBGdW5j
dGlvbiBFeG90aWMgT2JqZWN0OgogICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2Fz
bUZ1bmN0aW9uOwogICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21X
cmFwcGVyRnVuY3Rpb247CiAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlv
bih2bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsKICAg
ICAgICAgICAgICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0Y2gg
dGhlIHNpZ25hdHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KICAgICAg
ICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4Owot
ICAgICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgaWYgKHdh
c21GdW5jdGlvbikgewogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4
ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBj
YWxsZWVJbnN0YW5jZSA9IHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgd2FzbUVudHJ5cG9pbnQgPSB3YXNtRnVuY3Rpb24tPndhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5j
dGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNs
b3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KQEAgLTIxNSw3ICsyMjgsMTAgQEAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlMKICAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRvIHRo
ZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3ZlICh0
aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxvdyAo
dGhlIEpTRnVuY3Rpb24pLgogCiAgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rpb25z
ID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmltcG9ydEZ1bmN0
aW9ucygpW251bUltcG9ydEZ1bmN0aW9ucysrXS5zZXQodm0sIGluc3RhbmNlLCBmdW5jdGlvbik7
CisgICAgICAgICAgICBJbXBvcnRGdW5jdGlvbkluZm8qIGluZm8gPSBqc0luc3RhbmNlLT5pbXBv
cnRGdW5jdGlvbkluZm8obnVtSW1wb3J0RnVuY3Rpb25zKyspOworICAgICAgICAgICAgaW5mby0+
dGFyZ2V0SW5zdGFuY2UgPSBjYWxsZWVJbnN0YW5jZTsKKyAgICAgICAgICAgIGluZm8tPndhc21F
bnRyeXBvaW50ID0gd2FzbUVudHJ5cG9pbnQ7CisgICAgICAgICAgICBpbmZvLT5pbXBvcnRGdW5j
dGlvbi5zZXQodm0sIGpzSW5zdGFuY2UsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIC8vIHYuIEFw
cGVuZCBjbG9zdXJlIHRvIGltcG9ydHMuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMjQzLDcgKzI1OSw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICAgICAgICAg
IC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2
LltbVGFibGVdXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0
KHZtLCBpbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV90YWJsZS5z
ZXQodm0sIGpzSW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPm1fd2Fz
bVRhYmxlID0gdGFibGUtPnRhYmxlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CkBAIC0yNzMsOCArMjkwLDggQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgICAgICAg
ICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgogICAgICAgICAgICAgLy8gaWlpLiBBcHBl
bmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBBU1NFUlQoIWluc3RhbmNl
LT5tX21lbW9yeSk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnkuc2V0KHZtLCBpbnN0
YW5jZSwgbWVtb3J5KTsKKyAgICAgICAgICAgIEFTU0VSVCghanNJbnN0YW5jZS0+bV9tZW1vcnkp
OworICAgICAgICAgICAganNJbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBtZW1vcnkpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yOTEsMTMgKzMwOCwxMyBAQCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBKUwogICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gaW1wb3J0
LmtpbmRJbmRleCk7CiAgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2Jh
bHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgewogICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6
Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyss
IHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3Rh
bmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVjKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAg
ICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0
d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CisgICAgICAgICAgICAg
ICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgICAg
IGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5p
bnN0YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMzE1LDE0ICszMzIsMjEgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01lbW9y
eUltcG9ydCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pc0ltcG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9yeSB3
aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpN
ZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJ
bXBvcnQoKSk7CisKKyAgICAgICAgICAgIGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJBc3NlbWJseU1l
bW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9y
eT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSwKKyAgICAgICAg
ICAgICAgICBbJnZtXSAoKSB7IHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxlY3Rpb25TY29wZTo6
RnVsbCk7IH0sCisgICAgICAgICAgICAgICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RTeW5j
KENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgICAgICAgICAgWyZ2bSwganNNZW1v
cnldIChXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdlQ291bnQgbmV3UGFn
ZUNvdW50KSB7IGpzTWVtb3J5LT5ncm93U3VjY2Vzc0NhbGxiYWNrKHZtLCBvbGRQYWdlQ291bnQs
IG5ld1BhZ2VDb3VudCk7IH0pOwogICAgICAgICAgICAgaWYgKCFtZW1vcnkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKIAot
ICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsCi0gICAgICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIG1lbW9yeS5y
ZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgICAgICAgICBqc01lbW9yeS0+YWRvcHQobWVtb3J5LnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAganNJbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBq
c01lbW9yeSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzM2LDE5ICszNjAsMjQgQEAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNT
dGF0ZSogZXhlYywgSlMKICAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZv
cm1hdGlvbiAmJiAhaGFzVGFibGVJbXBvcnQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkpOwogICAgICAg
ICAgICAgLy8gV2UgY3JlYXRlIGEgVGFibGUgd2hlbiBpdCdzIGEgVGFibGUgZGVmaW5pdGlvbi4K
LSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBKU1dlYkFzc2VtYmx5VGFi
bGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3Nl
bWJseVRhYmxlU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3Jt
YXRpb24ubWF4aW11bSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpUYWJsZT4gd2FzbVRh
YmxlID0gV2FzbTo6VGFibGU6OmNyZWF0ZShtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0
aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVt
KCkpOworICAgICAgICAgICAgaWYgKCF3YXNtVGFibGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCAiY291bGRu
J3QgY3JlYXRlIFRhYmxlIikpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJs
ZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgd2FzbVRhYmxlLnJlbGVh
c2VOb25OdWxsKCkpOwogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRv
IGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCiAgICAgICAgICAg
ICAvLyBJZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQgaGF2ZSB0aHJv
d24gYSB2YWxpZGF0aW9uIGVycm9yLgogICAgICAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwogICAgICAgICAgICAgQVNTRVJUKHRhYmxlKTsKLSAgICAgICAgICAgIGluc3Rh
bmNlLT5tX3RhYmxlLnNldCh2bSwgaW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5z
dGFuY2UtPm1fdGFibGUuc2V0KHZtLCBqc0luc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBq
c0luc3RhbmNlLT5tX3dhc21UYWJsZSA9IHRhYmxlLT50YWJsZSgpOwogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIGlmICghaW5zdGFuY2UtPm1lbW9yeSgpKSB7CisgICAgaWYgKCFqc0luc3Rh
bmNlLT5tZW1vcnkoKSkgewogICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGR1bW15IG1l
bW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5nIGZvciBhIG51
bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJzLgotICAgICAg
ICBpbnN0YW5jZS0+bV9tZW1vcnkuc2V0KHZtLCBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseU1lbW9y
eTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2Vt
Ymx5TWVtb3J5U3RydWN0dXJlKCksIFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCAwLCAwKS5yZWxl
YXNlTm9uTnVsbCgpKSk7CisgICAgICAgIGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJBc3NlbWJseU1l
bW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOworICAgICAgICBqc01lbW9yeS0+YWRvcHQoV2FzbTo6
TWVtb3J5OjpjcmVhdGUoKS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAganNJbnN0YW5jZS0+
c2V0TWVtb3J5KHZtLCBqc01lbW9yeSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7CiAgICAgfQogICAgIApAQCAtMzYwLDIwICszODksMTMgQEAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbGl6
YXRpb25UeXBlICE9IFdhc206Okdsb2JhbDo6SXNJbXBvcnQpOwogICAgICAgICAgICAgaWYgKGds
b2JhbC5pbml0aWFsaXphdGlvblR5cGUgPT0gV2FzbTo6R2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0
KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVt
YmVyIDwgbnVtSW1wb3J0R2xvYmFscyk7Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEds
b2JhbChnbG9iYWxJbmRleCwgaW5zdGFuY2UtPmxvYWRJNjRHbG9iYWwoZ2xvYmFsLmluaXRpYWxC
aXRzT3JJbXBvcnROdW1iZXIpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0YW5j
ZSgpLnNldEdsb2JhbChnbG9iYWxJbmRleCwganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTY0
R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7CiAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBn
bG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7CisgICAgICAgICAgICAgICAganNJbnN0
YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0aWFsQml0
c09ySW1wb3J0TnVtYmVyKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEFTU0VSVCghaW5zdGFu
Y2UtPmNvZGVCbG9jaygpKTsKLQotICAgIHJldHVybiBpbnN0YW5jZTsKLX0KLQotc2l6ZV90IEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6Z2xvYmFsTWVtb3J5Qnl0ZVNpemUoKSBjb25zdAotewotICAg
IHJldHVybiBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSAqIHNp
emVvZihSZWdpc3Rlcik7CisgICAgcmV0dXJuIGpzSW5zdGFuY2U7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaAppbmRleCAzY2ZlNTQ5Li5kNTI1NTBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAt
MzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxl
LmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5LDc1ICs0MSw5NCBAQCBjbGFzcyBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdDsKIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBXZWJBc3Nl
bWJseVRvSlNDYWxsZWU7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIENvZGVCbG9jazsKK2Ns
YXNzIFRhYmxlOyAvLyBGSVhNRSByZW1vdmUgdGhpcyBhZnRlciByZWZhY3RvcmluZy4gaHR0cHM6
Ly93ZWJraXQub3JnL2IvMTc3NDcyCit9CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA6
IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rl
c3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0
KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU09i
amVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYpOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0
KCk7IH0KICAgICB2b2lkIGZpbmFsaXplQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUqLCBSZWY8V2Fz
bTo6Q29kZUJsb2NrPiYmKTsKLQotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0KLSAgICBKU09iamVjdCogaW1wb3J0RnVu
Y3Rpb24odW5zaWduZWQgaWR4KSB7IFJFTEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVtSW1wb3J0RnVu
Y3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9ucygpW2lkeF0uZ2V0KCk7IH0KLQorICAgIAor
ICAgIFdhc206Okluc3RhbmNlJiBpbnN0YW5jZSgpIHsgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7
IH0KKyAgICBXYXNtOjpDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fdm0tPndh
c21Db250ZXh0OyB9CiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFj
ZU9iamVjdCgpIHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0LmdldCgpOyB9CisgICAg
SlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KKyAg
ICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIHdlYkFzc2VtYmx5VG9KU0NhbGxlZSgpIHsgcmV0dXJu
IG1fY2FsbGVlLmdldCgpOyB9CiAKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkoKSB7
IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQotICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1lbW9yeSogdmFsdWUpIHsgQVNTRVJUKCFtZW1vcnkoKSk7IG1fbWVtb3J5LnNl
dCh2bSwgdGhpcywgdmFsdWUpOyB9CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFz
c2VtYmx5TWVtb3J5KiB2YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZt
LCB0aGlzLCB2YWx1ZSk7IG1fd2FzbU1lbW9yeSA9ICZtZW1vcnkoKS0+bWVtb3J5KCk7IH0KICAg
ICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUoKSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5
KCkubW9kZSgpOyB9CiAKLSAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyByZXR1cm4g
bV90YWJsZS5nZXQoKTsgfQotCi0gICAgaW50MzJfdCBsb2FkSTMyR2xvYmFsKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQotICAgIGludDY0X3QgbG9hZEk2
NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0K
LSAgICBmbG9hdCBsb2FkRjMyR2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGJpdHdp
c2VfY2FzdDxmbG9hdD4obG9hZEkzMkdsb2JhbChpKSk7IH0KLSAgICBkb3VibGUgbG9hZEY2NEds
b2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihsb2Fk
STY0R2xvYmFsKGkpKTsgfQotICAgIHZvaWQgc2V0R2xvYmFsKHVuc2lnbmVkIGksIGludDY0X3Qg
Yml0cykgeyBtX2dsb2JhbHMuZ2V0KClbaV0gPSBiaXRzOyB9Ci0KLSAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSwgbV9tZW1vcnkpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRh
YmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV90
YWJsZSk7IH0KKyAgICAvLyBUYWlsIGFjY2Vzc29ycy4KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mVGFpbCgpIHsgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YodWludDY0
X3QpPihzaXplb2YoSlNXZWJBc3NlbWJseUluc3RhbmNlKSk7IH0KKyAgICBzdHJ1Y3QgSW1wb3J0
RnVuY3Rpb25JbmZvIHsKKyAgICAgICAgLy8gVGFyZ2V0IGluc3RhbmNlIGFuZCBlbnRyeXBvaW50
IGFyZSBvbmx5IHNldCBmb3Igd2FzbS0+d2FzbSBjYWxscywgYW5kIGFyZSBvdGhlcndpc2UgbnVs
bHB0ci4gVGhlIGVtYmVkZGVyLXNwZWNpZmljIGxvZ2ljIG9jY3VycyB0aHJvdWdoIGltcG9ydCBm
dW5jdGlvbi4KKyAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB0YXJnZXRJbnN0YW5jZSB7
IG51bGxwdHIgfTsKKyAgICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2Fz
bUVudHJ5cG9pbnQgeyBudWxscHRyIH07CisgICAgICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4g
aW1wb3J0RnVuY3Rpb24geyBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCkgfTsKKyAgICB9OworICAg
IEltcG9ydEZ1bmN0aW9uSW5mbyogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVfdCBpbXBvcnRGdW5j
dGlvbk51bSkgeyByZXR1cm4gJmJpdHdpc2VfY2FzdDxJbXBvcnRGdW5jdGlvbkluZm8qPihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZUYWlsKCkpW2ltcG9ydEZ1bmN0aW9uTnVt
XTsgfQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShzaXplX3QgaW1w
b3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25O
dW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRG
dW5jdGlvbkluZm8sIHRhcmdldEluc3RhbmNlKTsgfQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0
T2ZXYXNtRW50cnlwb2ludChzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNl
dE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZv
KSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdhc21FbnRyeXBvaW50KTsg
fQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1wb3J0
RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0g
KiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5j
dGlvbkluZm8sIGltcG9ydEZ1bmN0aW9uKTsgfQorICAgIEpTT2JqZWN0KiBpbXBvcnRGdW5jdGlv
bih1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSkgeyBSRUxFQVNFX0FTU0VSVChpbXBvcnRGdW5j
dGlvbk51bSA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uSW5m
byhpbXBvcnRGdW5jdGlvbk51bSktPmltcG9ydEZ1bmN0aW9uLmdldCgpOyB9CisgICAgCisgICAg
Ly8gRklYTUUgcmVtb3ZlIHRoZXNlIGFmdGVyIHJlZmFjdG9yaW5nIHRoZW0gb3V0LiBodHRwczov
L3dlYmtpdC5vcmcvYi8xNzc0NzIKKyAgICBXYXNtOjpNZW1vcnkmIGludGVybmFsTWVtb3J5KCkg
eyByZXR1cm4gbWVtb3J5KCktPm1lbW9yeSgpOyB9CisgICAgV2FzbTo6Q29kZUJsb2NrJiB3YXNt
Q29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gKm1faW5zdGFuY2UtPmNvZGVCbG9jaygpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZldhc21UYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fd2FzbVRhYmxlKTsgfQogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWxsZWUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlLCBtX2NhbGxlZSk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5z
dGFuY2UsIG1fZ2xvYmFscyk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVk0oKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3ZtKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlLCBtX2NvZGVCbG9jayk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mV2FzbUNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFz
c2VtYmx5SW5zdGFuY2UsIG1fd2FzbUNvZGVCbG9jayk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dl
YkFzc2VtYmx5SW5zdGFuY2UsIG1fY2FjaGVkU3RhY2tMaW1pdCk7IH0KLSAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPik+KHNpemVvZihKU1dlYkFzc2VtYmx5
SW5zdGFuY2UpKTsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihz
aXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25z
KCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2Vs
bD4pKTsgfQotCi0gICAgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiB3ZWJBc3NlbWJseVRvSlNDYWxs
ZWUoKSB7IHJldHVybiBtX2NhbGxlZS5nZXQoKTsgfQotCi0gICAgdm9pZCogY2FjaGVkU3RhY2tM
aW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsgfQotICAgIHZvaWQgc2V0
Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBsaW1pdCkgeyBtX2NhY2hlZFN0YWNrTGltaXQgPSBsaW1p
dDsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtTWVtb3J5KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93YXNtTWVtb3J5KTsgfQor
ICAgIHZvaWQqIGNhY2hlZFN0YWNrTGltaXQoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJUKG1faW5z
dGFuY2UtPmNhY2hlZFN0YWNrTGltaXQoKSA9PSBtX2NhY2hlZFN0YWNrTGltaXQpOyByZXR1cm4g
bV9jYWNoZWRTdGFja0xpbWl0OyB9CisgICAgdm9pZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZvaWQq
IGxpbWl0KSB7IG1faW5zdGFuY2UtPnNldENhY2hlZFN0YWNrTGltaXQobGltaXQpOyBtX2NhY2hl
ZFN0YWNrTGltaXQgPSBsaW1pdDsgfQorICAgIFdhc206Ok1lbW9yeSogd2FzbU1lbW9yeSgpIHsg
cmV0dXJuIG1fd2FzbU1lbW9yeTsgfQorICAgIFdhc206Ok1vZHVsZSYgd2FzbU1vZHVsZSgpIHsg
cmV0dXJuIG1fd2FzbU1vZHVsZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKTsKKyAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBudW1JbXBv
cnRGdW5jdGlvbnMsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCop
OwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gbnVtSW1wb3J0RnVuY3Rpb25zKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIChvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRl
QmFycmllcjxKU0NlbGw+KSAqIG51bUltcG9ydEZ1bmN0aW9ucykudW5zYWZlR2V0KCk7CisgICAg
ICAgIHJldHVybiAob2Zmc2V0T2ZUYWlsKCkgKyBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSAq
IG51bUltcG9ydEZ1bmN0aW9ucykudW5zYWZlR2V0KCk7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IFZNKiBtX3ZtOwotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9ucygp
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Kj4oYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkpOyB9Ci0gICAgc2l6
ZV90IGdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29uc3Q7CisgICAgSlNXZWJBc3NlbWJseU1vZHVs
ZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KKworICAgIFJlZjxX
YXNtOjpJbnN0YW5jZT4gbV9pbnN0YW5jZTsKIAorICAgIFZNKiBtX3ZtOwogICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNX
ZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlUYWJsZT4gbV90YWJsZTsKICAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlU
b0pTQ2FsbGVlPiBtX2NhbGxlZTsKLSAgICBNYWxsb2NQdHI8dWludDY0X3Q+IG1fZ2xvYmFsczsK
KyAgICAKKyAgICAvLyBGSVhNRSByZW1vdmUgdGhlc2UgYWZ0ZXIgcmVmYWN0b3JpbmcgdGhlbSBv
dXQuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgogICAgIHZvaWQqIG1fY2FjaGVkU3RhY2tM
aW1pdCB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+
OjptYXgoKSkgfTsKKyAgICBXYXNtOjpDb2RlQmxvY2sqIG1fd2FzbUNvZGVCbG9jayB7IG51bGxw
dHIgfTsKKyAgICBXYXNtOjpNb2R1bGUmIG1fd2FzbU1vZHVsZTsKKyAgICBXYXNtOjpNZW1vcnkq
IG1fd2FzbU1lbW9yeSB7IG51bGxwdHIgfTsKKyAgICBXYXNtOjpUYWJsZSogbV93YXNtVGFibGUg
eyBudWxscHRyIH07CisgICAgdWludDY0X3QqIG1fZ2xvYmFscyB7IG51bGxwdHIgfTsKKwogICAg
IHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVuY3Rpb25zOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAppbmRleCAyMjNj
NThiLi5kNjQwYTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcApAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnNfaW5mbyA9IHsgIldl
YkFzc2VtYmx5Lk1lbW9yeSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseU1lbW9yeSkgfTsKIAotSlNXZWJBc3NlbWJseU1l
bW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCitKU1dl
YkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTUwLDEwICs1MCwxNiBAQCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIFN0cnVjdAogICAgIGlmICghZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVFdmFsRXJyb3IoZXhlYywgZ2xvYmFs
T2JqZWN0LT53ZWJBc3NlbWJseURpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKIAotICAgIGF1dG8q
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1lbW9y
eT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSwgV1RGTW92ZSht
ZW1vcnkpKTsKLSAgICBpbnN0YW5jZS0+bV9tZW1vcnktPmNoZWNrKCk7Ci0gICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgYXV0byogbWVt
b3J5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1lbW9yeT4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSk7CisgICAgbWVtb3J5LT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIG1lbW9yeTsKK30KKyAgICAKK3ZvaWQgSlNX
ZWJBc3NlbWJseU1lbW9yeTo6YWRvcHQoUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCit7Cisg
ICAgbV9tZW1vcnkuc3dhcChtZW1vcnkpOworICAgIEFTU0VSVChtX21lbW9yeS0+cmVmQ291bnQo
KSA9PSAxKTsKKyAgICBtX21lbW9yeS0+Y2hlY2soKTsKIH0KIAogU3RydWN0dXJlKiBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTYxLDEzICs2NywxMCBAQCBTdHJ1Y3R1
cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkK
K0pTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fbWVtb3J5
KFdURk1vdmUobWVtb3J5KSkKKyAgICAsIG1fbWVtb3J5KFdhc206Ok1lbW9yeTo6Y3JlYXRlKCku
cmVsZWFzZU5vbk51bGwoKSkKIHsKLSAgICBBU1NFUlQobV9tZW1vcnktPnJlZkNvdW50KCkgPT0g
MSk7Ci0gICAgbV9tZW1vcnlCYXNlID0gbV9tZW1vcnktPm1lbW9yeSgpOwotICAgIG1fbWVtb3J5
U2l6ZSA9IG1fbWVtb3J5LT5zaXplKCk7CiB9CiAKIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBA
IC04NSw1MiArODgsNDUgQEAgSlNBcnJheUJ1ZmZlciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVm
ZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICByZXR1cm4gbV9i
dWZmZXJXcmFwcGVyLmdldCgpOwogfQogCi1XYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1l
bW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVsdGEsIGJvb2wg
c2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNz
ZW1ibHlNZW1vcnk6Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRh
KQogewotICAgIC8vIE5vdGU6IFdlIGNhbiBvbmx5IHVzZSBleGVjIGlmIHNob3VsZFRocm93RXhj
ZXB0aW9uc09uRmFpbHVyZSBpcyB0cnVlLgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCA9IG1l
bW9yeSgpLnNpemVJblBhZ2VzKCk7Ci0KLSAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxp
ZChkZWx0YSkpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkK
KyAgICBhdXRvIGdyb3duID0gbWVtb3J5KCkuZ3JvdyhXYXNtOjpQYWdlQ291bnQoZGVsdGEpKTsK
KyAgICBpZiAoIWdyb3duKSB7CisgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAg
ICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWREZWx0YToKICAg
ICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyBleHBlY3RzIHRo
ZSBkZWx0YSB0byBiZSBhIHZhbGlkIHBhZ2UgY291bnQiKSkpOwotICAgICAgICByZXR1cm4gV2Fz
bTo6UGFnZUNvdW50KCk7Ci0gICAgfQotCi0gICAgV2FzbTo6UGFnZUNvdW50IG5ld1NpemUgPSBv
bGRQYWdlQ291bnQgKyBXYXNtOjpQYWdlQ291bnQoZGVsdGEpOwotICAgIGlmICghbmV3U2l6ZSkg
ewotICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52
YWxpZEdyb3dTaXplOgogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9y
eS5ncm93IGV4cGVjdHMgdGhlIGdyb3duIHNpemUgdG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50Iikp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0Zh
aWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJX
ZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNlZWQgdGhlIG1lbW9yeSdzIGRlY2xhcmVk
IG1heGltdW0gc2l6ZSIpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNt
OjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFdhc206OlBh
Z2VDb3VudCgpOwogICAgIH0KIAotICAgIGlmIChkZWx0YSkgewotICAgICAgICBib29sIHN1Y2Nl
c3MgPSBtZW1vcnkoKS5ncm93KHZtLCBuZXdTaXplKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9tZW1vcnlCYXNlID09IG1lbW9yeSgpLm1lbW9yeSgpKTsK
LSAgICAgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemUgPT0gbWVtb3J5KCkuc2l6ZSgpKTsKLSAg
ICAgICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCi0gICAgICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihleGVjKSk7Ci0gICAgICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9tZW1vcnlCYXNlID0gbWVtb3J5KCkubWVtb3J5KCk7Ci0gICAgICAg
IG1fbWVtb3J5U2l6ZSA9IG1lbW9yeSgpLnNpemUoKTsKLSAgICB9CisgICAgcmV0dXJuIGdyb3du
LnZhbHVlKCk7Cit9CiAKLSAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0aGUgb2xkIGFycmF5
IGJ1ZmZlciBiZWNhdXNlIGl0IG1pZ2h0IG5vdyBiZSBwb2ludGluZwotICAgIC8vIHRvIHN0YWxl
IG1lbW9yeS4KK3ZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3Jvd1N1Y2Nlc3NDYWxsYmFjayhW
TSYgdm0sIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQ
YWdlQ291bnQpCit7CisgICAgLy8gV2UgbmVlZCB0byBjbGVhciBvdXQgdGhlIG9sZCBhcnJheSBi
dWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUgcG9pbnRpbmcgdG8gc3RhbGUgbWVtb3J5Lgog
ICAgIC8vIE5ldXRlciB0aGUgb2xkIGFycmF5LgogICAgIGlmIChtX2J1ZmZlcikgewogICAgICAg
ICBtX2J1ZmZlci0+bmV1dGVyKHZtKTsKICAgICAgICAgbV9idWZmZXIgPSBudWxscHRyOwogICAg
ICAgICBtX2J1ZmZlcldyYXBwZXIuY2xlYXIoKTsKICAgICB9Ci0KKyAgICAKICAgICBtZW1vcnko
KS5jaGVjaygpOwotCi0gICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChXYXNt
OjpQYWdlQ291bnQoZGVsdGEpLmJ5dGVzKCkpOwotICAgIHJldHVybiBvbGRQYWdlQ291bnQ7Cisg
ICAgCisgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdQYWdlQ291bnQu
Ynl0ZXMoKSAtIG9sZFBhZ2VDb3VudC5ieXRlcygpKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKaW5kZXggMWQwNmM0Yy4uNGJiYmNj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuaApAQCAtNDgsMjYgKzQ4LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZ2
bS5lYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKICAgICB9CiAKLSAgICBzdGF0
aWMgSlNXZWJBc3NlbWJseU1lbW9yeSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJl
KiwgUmVmPFdhc206Ok1lbW9yeT4mJik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCisgICAgdm9pZCBhZG9wdChSZWY8V2FzbTo6TWVtb3J5
PiYmKTsKICAgICBXYXNtOjpNZW1vcnkmIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgp
OyB9CiAgICAgSlNBcnJheUJ1ZmZlciogYnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKTsK
LSAgICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhWTSYsIEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRh
LCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7Ci0KLSAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNz
ZW1ibHlNZW1vcnksIG1fbWVtb3J5QmFzZSk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5TWVtb3J5LCBt
X21lbW9yeVNpemUpOyB9CisgICAgV2FzbTo6UGFnZUNvdW50IGdyb3coVk0mLCBFeGVjU3RhdGUq
LCB1aW50MzJfdCBkZWx0YSk7CisgICAgdm9pZCBncm93U3VjY2Vzc0NhbGxiYWNrKFZNJiwgV2Fz
bTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCk7
CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSosIFJl
ZjxXYXNtOjpNZW1vcnk+JiYpOworICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1
cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CiAKLSAgICB2b2lkKiBtX21lbW9yeUJhc2U7Ci0gICAgc2l6ZV90IG1fbWVt
b3J5U2l6ZTsKICAgICBSZWY8V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJp
ZXI8SlNBcnJheUJ1ZmZlcj4gbV9idWZmZXJXcmFwcGVyOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gbV9idWZmZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseVRhYmxlLmNwcAppbmRleCBmZjQ2ZDRkLi5hZGFhNzQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKQEAg
LTI5LDMwICsyOSwyMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseVRhYmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWJsZSIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJs
eVRhYmxlKSB9OwogCi1KU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMy
X3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSkKK0pTV2ViQXNzZW1i
bHlUYWJsZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYgdGFibGUpCiB7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgYXV0byBl
eGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBlcnJvcikgewotICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFz
c2VtYmx5RW5hYmxlZCgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJs
ZWRFcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotCi0g
ICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKQotICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwotCi0gICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0
aWFsKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKKyAgICB9CiAKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2
bSwgc3RydWN0dXJlLCBpbml0aWFsLCBtYXhpbXVtKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpT
V2ViQXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHRhYmxlKSk7CiAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC02
MiwyMyArNTQsMTUgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlUYWJsZTo6
SlNXZWJBc3NlbWJseVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90
IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCitKU1dlYkFzc2VtYmx5
VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBS
ZWY8V2FzbTo6VGFibGU+JiYgdGFibGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAg
LCBtX3RhYmxlKFdURk1vdmUodGFibGUpKQogewotICAgIG1fc2l6ZSA9IGluaXRpYWw7Ci0gICAg
QVNTRVJUKGlzVmFsaWRTaXplKG1fc2l6ZSkpOwotICAgIG1fbWF4aW11bSA9IG1heGltdW07Ci0g
ICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOwotCiAgICAgLy8g
RklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBo
ZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgogICAgIC8vIEJ1dCBmb3Igbm93LCB3
ZSdyZSBub3QgZG9pbmcgdGhhdC4KLSAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpD
YWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAq
IHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxv
Y1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rpb25z
LmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChtX2Z1
bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFs
aWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1fanNG
dW5jdGlvbnMgPSBNYWxsb2NQdHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkp
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgbmV3
ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAg
IH0KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
QEAgLTk5LDcgKzgzLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdGhpc09iamVjdC0+bV9zaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRoaXNPYmplY3QtPnNpemUoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2pzRnVuY3Rpb25zLmdldCgpW2ldKTsKIH0KIApAQCAtMTA3LDQ3ICs5MSw0NCBAQCBi
b29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKIHsKICAgICBpZiAo
ZGVsdGEgPT0gMCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwg
UmVjb3JkT3ZlcmZsb3c+IG5ld1NpemVDaGVja2VkID0gbV9zaXplOwotICAgIG5ld1NpemVDaGVj
a2VkICs9IGRlbHRhOwotICAgIHVpbnQzMl90IG5ld1NpemU7Ci0gICAgaWYgKG5ld1NpemVDaGVj
a2VkLnNhZmVHZXQobmV3U2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+ICptYXhpbXVt
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzVmFsaWRTaXplKG5ld1NpemUp
KQorCisgICAgc2l6ZV90IG9sZFNpemUgPSBzaXplKCk7CisKKyAgICBhdXRvIGdyZXcgPSBtX3Rh
YmxlLT5ncm93KGRlbHRhKTsKKyAgICBpZiAoIWdyZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIG1fZnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24p
ICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5yZWFs
bG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4o
bmV3U2l6ZSkpOworICAgIHNpemVfdCBuZXdTaXplID0gZ3Jldy52YWx1ZSgpOworICAgIG1fanNG
dW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBuZXdTaXpl
KTsKIAotICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkgewot
ICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlv
bigpOworICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQogICAg
ICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
KCk7Ci0gICAgfQotICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorSlNPYmplY3QqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24odWludDMyX3QgaW5k
ZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIHJldHVybiBt
X2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5
VGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoaW5kZXggPCBtX3NpemUpOworICAgIG1fdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5kZXgpOwog
ICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pigp
OwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24o
KTsKLSAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09
IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNv
bXBpbGVkIGNvZGUuCiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihW
TSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbikKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+c2V0RnVu
Y3Rpb24oaW5kZXgsIGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCksIGZ1bmN0aW9uLT5pbnN0
YW5jZSgpKTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1
bmN0aW9uKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbi0+Y2FsbGFi
bGVGdW5jdGlvbigpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24o
Vk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGZ1bmN0
aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX3RhYmxl
LT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgZnVuY3Rp
b24tPmluc3RhbmNlKCkpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNldCh2bSwg
dGhpcywgZnVuY3Rpb24pOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9u
LT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAppbmRleCBk
ZjgzZTk3Li40NDg3NTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw1NyArMjksNDIgQEAKIAogI2luY2x1ZGUgIkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXYXNt
TGltaXRzLmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSA8d3RmL01hbGxvY1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFdh
c20gewotc3RydWN0IENhbGxhYmxlRnVuY3Rpb247Ci19Ci0KIGNsYXNzIEpTV2ViQXNzZW1ibHlU
YWJsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlU
YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlh
bCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisgICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlUYWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206
OlRhYmxlPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsg
fQotICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBXYXNtOjpUYWJsZTo6
aXNWYWxpZFNpemUoc2l6ZSk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVt
KCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+bWF4aW11bSgpOyB9CisgICAgdWludDMyX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUtPnNpemUoKTsgfQogICAgIGJvb2wgZ3Jvdyh1aW50
MzJfdCBkZWx0YSkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIEpTT2JqZWN0KiBnZXRGdW5jdGlv
bih1aW50MzJfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwg
bV9zaXplKTsKLSAgICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgp
OwotICAgIH0KLSAgICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpOwotICAgIHZv
aWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiop
OwotICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24qKTsKLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9zaXplKTsgfQot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KLSAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSlNGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNXZWJBc3NlbWJseVRhYmxlLCBtX2pzRnVuY3Rpb25zKTsgfQorICAgIEpTT2JqZWN0KiBnZXRG
dW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAg
ICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsK
KyAgICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKik7CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKQot
ICAgIHsKLSAgICAgICAgLy8gVGhpcyB0b3BzIG91dCBhdCB+Mzg0IE1CIHdvcnRoIG9mIGRhdGEg
aW4gdGhpcyBjbGFzcy4KLSAgICAgICAgcmV0dXJuIHNpemUgPCAoMSA8PCAyNCk7Ci0gICAgfQor
ICAgIFdhc206OlRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUucHRyKCk7IH0KIAogcHJp
dmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBp
bml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKKyAgICBKU1dlYkFzc2Vt
Ymx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwog
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAot
ICAgIE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICBS
ZWY8V2FzbTo6VGFibGU+IG1fdGFibGU7CiAgICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09i
amVjdD4+IG1fanNGdW5jdGlvbnM7Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhp
bXVtOwotICAgIHVpbnQzMl90IG1fc2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmM5MjA0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgi
CisjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5hdGl2
ZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNs
dWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgor
I2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CisKK3VzaW5nIEpJVCA9IENDYWxsSGVscGVyczsKKworc3RhdGljIHZvaWQgbWF0
ZXJpYWxpemVJbXBvcnRKU0NlbGwoSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIC8vIFdlJ3JlIGNhbGxpbmcgb3V0IG9mIHRoZSBjdXJyZW50IFdl
YkFzc2VtYmx5Lkluc3RhbmNlLiBUaGF0IEluc3RhbmNlIGhhcyBhIGxpc3Qgb2YgYWxsIGl0cyBp
bXBvcnQgZnVuY3Rpb25zLgorICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShyZXN1bHQp
OworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOworfQor
CitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCit7CisgICAgLy8gRklYTUU6
IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5n
IGNvbnZlbnRpb24uCisgICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCisgICAgY29uc3QgV2FzbUNh
bGxpbmdDb252ZW50aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBj
b25zdCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7
CisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7CisgICAgSklUIGppdDsKKworICAgIC8vIE5vdGU6IFdhc21CM0lSR2Vu
ZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVlIHNhdmUu
CisgICAgLy8gSWYgd2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gY2hh
bmdlIFdhc21CM0lSR2VuZXJhdG9yLgorCisgICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0aGF0IHRo
ZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KKyAgICBBU1NF
UlQoIWpzQ0MubV9ncHJBcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKCFqc0NDLm1fZnByQXJncy5z
aXplKCkpOworCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LnN0b3Jl
NjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQorCisgICAgeworICAg
ICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRVc2UgfD0g
c2lnbmF0dXJlLnJldHVyblR5cGUoKSA9PSBJNjQ7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJn
TnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdOdW0pIHsK
KyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwor
ICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFZvaWQ6Cisg
ICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAgY2Fz
ZSBJNjQ6IHsKKyAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGhhc0JhZEk2NFVzZSkgeworICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworCisgICAgICAgICAgICAvLyBTdG9yZSBDYWxsZWUuCisgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BS
MiwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAgICAg
ICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4
ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkgLT4gdm9pZCB7CisgICAgICAgICAgICAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAg
ICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNl
LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJv
ckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0
cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2Vk
IGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOwor
ICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJv
cik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2
bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNo
KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkp
OworCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOworICAg
ICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+
SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBj
YWxsaW5nIGNvbnZlbnRpb24gc2F2ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZl
ZC4gV2UgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lz
dGVycyBzaW5jZSB0aGUgd2FzbSBjYWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KKyAg
ICBSZWdpc3RlclNldCBtaXNzaW5nQ2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVn
aXN0ZXJzOworICAgIG1pc3NpbmdDYWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZl
UmVnaXN0ZXJzKTsKKyAgICBBU1NFUlQobWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7CisK
KyAgICBpZiAoIU9wdGlvbnM6OnVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7
CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZl
ckZvclNpemUoYXJnQ291bnQgKiBzaXplb2YodWludDY0X3QpKTsKKyAgICAgICAgY2hhciogYnVm
ZmVyID0gYXJnQ291bnQgPyBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1
ZmZlcigpKSA6IG51bGxwdHI7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsK
KyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBi
dWZmZXJPZmZzZXQgPSAwOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KTsKKyAgICAgICAgY29uc3QgR1BSUmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7Cisg
ICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSks
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9
IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdU
eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFy
Z1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoK
KyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgIGNhc2UgSTY0OgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjYXNl
IEkzMjogeworICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7CisgICAgICAgICAgICAgICAg
aWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigp
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBh
bHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFi
bGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJn
dW1lbnRHUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAgICAgICAg
ICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcgZnByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBS
cyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcg
PSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFs
bCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisg
ICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJP
ZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwor
ICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEY2NDogeworICAgICAgICAgICAgICAg
IEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2Fz
bUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21D
Qy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3Vt
ZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAg
ICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQg
Kz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6
ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgaWYgKGFyZ0NvdW50KSB7CisgICAgICAgICAgICAvLyBUaGUgR0Mg
c2hvdWxkIG5vdCBsb29rIGF0IHRoaXMgYnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFs
dWVzLgorICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNj
cmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIH0KKworICAgICAgICB1aW50
NjRfdCAoKmNhbGxGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1
aW50NjRfdCopID0KKyAgICAgICAgICAgIFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBj
YWxsZWUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAt
PiB1aW50NjRfdCB7IAorICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
ICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
ICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsK
KyAgICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0g
PSAwOyBhcmdOdW0gPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgeworICAg
ICAgICAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVt
KTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhcmc7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlm
dW5jOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgSTMyOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oYnVmZmVyW2FyZ051bV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEYzMjoKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNl
X2Nhc3Q8ZG91YmxlPihidWZmZXJbYXJnTnVtXSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXJncy5h
cHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKKyAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+
bWV0aG9kVGFibGUoKnZtKS0+Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworICAg
ICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBl
LCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90
IHJlYWxSZXN1bHQ7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlw
ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgICAgIGNhc2Ug
QW55ZnVuYzoKKyAgICAgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAgICAgICAgICAgICAgICByZWFsUmVz
dWx0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQu
dG9JbnQzMihleGVjKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgY2FzZSBG
MzI6IHsKKyAgICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4ocmVzdWx0LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlYWxSZXN1bHQ7CisgICAgICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpJVDo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgICAgICAKKyAgICAg
ICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZkFyZ3Vt
ZW50UmVnaXN0ZXJzID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxvdy4i
KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjphcmd1
bWVudEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4KSwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOworICAgICAgICBhdXRvIGNhbGwgPSBq
aXQuY2FsbCgpOworICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25D
aGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisKKyAg
ICAgICAgLy8gZXhjZXB0aW9uIGhlcmUuCisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJhbWUpOworICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3Rh
dGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAg
ICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0t
PmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byBleGNlcHRpb25D
YWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KTsKKworICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOworICAgICAgICBzd2l0Y2ggKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgICAg
IGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBGMzI6IHsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgaml0LmNvbnZl
cnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgaml0LnJldCgpOworCisgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVt
b3J5KTsKKworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOworICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2FsbCwgZG9VbndpbmRpbmcpOworCisgICAgICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3Jp
cHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSkpOworICAgIH0KKworICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gcGVy
Zm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUgc2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKKyAgICAvLyB3
aWxsIGRvIHRoZSBzdGFjayBjaGVjayBmb3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMgdGhhdCBp
dCBtaWdodCBtYWtlCisgICAgLy8gYSBjYWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1ha2Ugc3Vy
ZSBpdHMgc3RhY2sgY2hlY2sgaW5jbHVkZXMgc3BhY2UKKyAgICAvLyBmb3IgdXMgaGVyZS4KKwor
ICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsgMTsgLy8g
VGhlcmUgaXMgYSAidGhpcyIgYXJndW1lbnQuCisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZS
ZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVyT2ZQ
YXJhbWV0ZXJzOworICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVt
YmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQyk7CisgICAgY29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7Cisg
ICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBKSVQ6OkFkZHJlc3Mg
Y2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKKworICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNo
IG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJ
dCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3CisgICAgCisgICAgLy8gRmlyc3QgZ28g
dGhyb3VnaCB0aGUgaW50ZWdlciBwYXJhbWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lzdGVy
IGZvciB1c2UgYWZ0ZXJ3YXJkcy4KKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRH
UFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1
bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBm
ck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAw
OyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlw
ZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdU
eXBlKSB7CisgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6Cisg
ICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgor
ICAgICAgICAgICAgY2FzZSBJMzI6IHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVnOwor
ICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Muc2l6
ZSgpKQorICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21hcnNo
YWxsZWRHUFJzXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lz
dGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGdwclJl
ZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2
NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZ3By
UmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKKyAg
ICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOyAvLyBD
bGVhciBub24taW50MzIgYW5kIG5vbi10YWcgYml0cy4KKyAgICAgICAgICAgICAgICBqaXQuYm94
SW50MzIoZ3ByUmVnLCBKU1ZhbHVlUmVncyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zm
c2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEYzMjoKKyAgICAgICAgICAgIGNhc2UgRjY0OgorICAg
ICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYmVsb3cuCisgICAgICAgICAgICAgICAg
aWYgKG1hcnNoYWxsZWRGUFJzID49IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAg
ICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
ICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0g
c2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIC8vIEludGVnZXIgcmVnaXN0
ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNwaWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxhYmxlLgor
ICAgICAgICBHUFJSZWcgZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIwOworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsK
KyAgICAgICAgYm9vbCBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBmYWxzZTsK
KyAgICAgICAgYXV0byBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFzTWF0ZXJp
YWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKKyAgICAgICAg
ICAgIGlmICghaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0KSB7CisgICAgICAgICAg
ICAgICAgc3RhdGljX2Fzc2VydChEb3VibGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4LCAiY29k
ZWdlbiBhc3N1bWVzIHRoaXMgYmVsb3ciKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShKSVQ6
OlRydXN0ZWRJbW0zMigxKSwgZGVzdCk7CisgICAgICAgICAgICAgICAgaml0LmxzaGlmdDY0KEpJ
VDo6VHJ1c3RlZEltbTMyKDQ4KSwgZGVzdCk7CisgICAgICAgICAgICAgICAgaGFzTWF0ZXJpYWxp
emVkRG91YmxlRW5jb2RlT2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7CisgICAgICAgIHVuc2lnbmVk
IG1hcnNoYWxsZWRGUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQg
PSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKTsKKyAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJn
TnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJn
TnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBW
b2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgor
ICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICAgICAgICAgIGNhc2UgSTMyOgorICAg
ICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICAgICAg
aWYgKG1hcnNoYWxsZWRHUFJzID49IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAg
ICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
ICsrbWFyc2hhbGxlZEdQUnM7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0g
c2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRjMyOiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAg
ICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnBy
KCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3Zl
IGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWls
YWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjph
cmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7CisgICAg
ICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJSZWcs
IGZwclJlZyk7CisgICAgICAgICAgICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOworICAgICAg
ICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOworICAgICAgICAg
ICAgICAgIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQ
UlJlZyk7CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJl
Zywgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVl
RnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGNh
bGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgKytt
YXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgRjY0OiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAg
ICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUo
KSkKKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFs
bGVkRlBSc10uZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3Rl
cnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcg
PSBGUFJJbmZvOjphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91
YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBm
cHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJl
Zyk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7
CisgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5j
b2RlT2Zmc2V0R1BSUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2Rl
T2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3Jh
dGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaml0LmxvYWRX
YXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxH
UFJSZWcgPSBHUFJJbmZvOjpyZWdUMDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZv
ciBzbG93IHBhdGggYmVsb3cuCisgICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0
ZXJzLmdldChpbXBvcnRKU0NlbGxHUFJSZWcpKTsKKworICAgIG1hdGVyaWFsaXplSW1wb3J0SlND
ZWxsKGppdCwgaW1wb3J0SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7CisKKyAgICBqaXQuc3Rv
cmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAg
IGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7CisgICAgaml0LnN0
b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSBy
ZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4CisKKyAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKCk7CisgICAgY2FsbExpbmtJbmZv
LT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2Vs
bEdQUlJlZyk7CisgICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVQ6
OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUoMCk7CisgICAgSklUOjpKdW1wIHNsb3dQ
YXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGlt
cG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOworICAg
IEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIEpJVDo6SnVtcCBkb25l
ID0gaml0Lmp1bXAoKTsKKyAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIC8vIENhbGxlZSBu
ZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZv
IG5lZWRzIHRvIGJlIGluIHJlZ1QyLgorICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOworICAgIGRvbmUubGluaygmaml0KTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZXhjZXB0aW9uQ2hlY2tzOworCisgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgp
KSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICAvLyBEaXNjYXJkLgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZ1bmM6CisgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAvLyBGb3IgdGhlIEph
dmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2ln
bmF0dXJlIHJldHVybiBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJNjQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
SGFuZGxlZCBhYm92ZS4KKyAgICB9CisgICAgY2FzZSBJMzI6IHsKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOworCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBz
bG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgaml0Lnpl
cm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIHNs
b3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2Fs
bCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0
aW9uKCp2bSkpOworCisgICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsg
CisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYudG9J
bnQzMihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGws
IGNvbnZlcnRUb0kzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRjMyOiB7CisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5j
aElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1
ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwor
ICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisK
KyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAg
ICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGppdC5jb252ZXJ0RG91Ymxl
VG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIp
OworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBub3RBTnVtYmVy
LmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwor
ICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2
bSkpOworCisgICAgICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVl
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKKyAgICAgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHYudG9OdW1iZXIoZXhlYykpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbCwgY29udmVydFRvRjMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5s
aW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGNjQ6IHsKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIg
PSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJ
bnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1Jl
Z2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5zaWduRXh0
ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1v
dmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVl
R1BSMik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUu
YXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAg
ICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlv
bkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAg
ZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91YmxlIHsgCisgICAgICAgICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH07
CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOworICAgICAg
ICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICB9CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7
CisKKyAgICBpZiAoIWV4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CisgICAgICAgIGV4Y2VwdGlv
bkNoZWNrcy5saW5rKCZqaXQpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCp2bSk7CisKKyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUq
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAg
ICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOworICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdG
YWlsdXJlOjpPdXRPZk1lbW9yeSk7CisKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBG
dW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5M
b2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKKyAgICBD
b2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJn
ZXRUb0NoZWNrKSk7CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKKyAgICBjYWxsTGlua0luZm8t
PnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBh
dGhPdGhlcik7CisKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJB
c3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVy
ZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlKQoreworICAgIFZNKiB2bSA9IGluc3RhbmNlLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgeworICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7
CisKKyAgICAgICAgSlNPYmplY3QqIGVycm9yOworICAgICAgICBpZiAodHlwZSA9PSBFeGNlcHRp
b25UeXBlOjpTdGFja092ZXJmbG93KQorICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywgKnZtLCBn
bG9iYWxPYmplY3QtPldlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksIFdhc206OmVy
cm9yTWVzc2FnZUZvckV4Y2VwdGlvblR5cGUodHlwZSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgfQorCisgICAgZ2VuZXJpY1Vud2luZCh2
bSwgZXhlYyk7CisgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NF
UlQoISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhl
IGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKKyAgICAv
LyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhl
IGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAgLy8gdGhpcyBzaW5jZSBpdCBpcyBj
b21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4pIFdlIGNvdWxkIG1ha2UgdGhlIGNh
bGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZy
YW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCisgICAg
Ly8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVt
b3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylb
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2Ut
PndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKKyAgICByZXR1cm4gdm0tPnRhcmdldE1hY2hpbmVQ
Q0ZvclRocm93OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2FzbVRvSlMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyNGFhMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKQEAgLTAs
MCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRl
ICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJX
YXNtRW1iZWRkZXIuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlua0luZm87CitjbGFzcyBW
TTsKKworbmFtZXNwYWNlIFdhc20geworCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYs
IEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlu
a0luZm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOworCit2b2lkKiB3
YXNtVG9KU0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggMGQyNzc2NS4uYzU4NWYwOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIGNv
bnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVt
b3J5IHdlIHRoaW5rIHdlIGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2Ug
ZXhwZWN0LgotICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVCbG9jaygp
LT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7CisgICAg
QVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKS0+
aXNTYWZlVG9SdW4od2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5tZW1vcnkoKS0+bWVtb3J5KCku
bW9kZSgpKSk7CiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZGlzYWxsb3dl
ZCBJNjQgdXNlLgogCkBAIC04MiwxMSArODIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAg
IFRyYWNlU2NvcGUgdHJhY2VTY29wZShXZWJBc3NlbWJseUV4ZWN1dGVTdGFydCwgV2ViQXNzZW1i
bHlFeGVjdXRlRW5kKTsKIAogICAgIFZlY3RvcjxKU1ZhbHVlPiBib3hlZEFyZ3M7Ci0gICAgV2Fz
bTo6Q29udGV4dCogd2FzbUNvbnRleHQgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7Ci0gICAg
Ly8gV2hlbiB3ZSBkb24ndCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBq
cwotICAgIC8vIGVudHJ5IHdyYXBwZXIgZXhwZWN0cyB0aGUgV2FzbUNvbnRleHQqIGFzIHRoZSBm
aXJzdCBhcmd1bWVudC4KLSAgICBpZiAoIVdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0g
ICAgICAgIGJveGVkQXJncy5hcHBlbmQod2FzbUNvbnRleHQpOworICAgIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAgLy8gV2hl
biB3ZSBkb24ndCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBKUworICAg
IC8vIGVudHJ5IHdyYXBwZXIgZXhwZWN0cyB0aGUgaW5zdGFuY2UgYXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50LgorICAgIGlmICghV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBib3hl
ZEFyZ3MuYXBwZW5kKGluc3RhbmNlKTsKIAogICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAw
OyBhcmdJbmRleCA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnSW5kZXgpIHsKICAg
ICAgICAgSlNWYWx1ZSBhcmcgPSBleGVjLT5hcmd1bWVudChhcmdJbmRleCk7CkBAIC0xMjcsNyAr
MTI3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2Vt
Ymx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobnVs
bHB0ciwgd2FzbUZ1bmN0aW9uLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJn
cyk7CiAKICAgICAvLyBGSVhNRSBEbyBhd2F5IHdpdGggdGhpcyBlbnRpcmUgZnVuY3Rpb24sIGFu
ZCBvbmx5IHVzZSB0aGUgZW50cnlwb2ludCBnZW5lcmF0ZWQgYnkgQjMuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0ODYKLSAgICBXYXNtOjpDb250ZXh0KiBwcmV2
V2FzbUNvbnRleHQgPSBXYXNtOjpsb2FkQ29udGV4dCh2bSk7CisgICAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBwcmV2SW5zdGFuY2UgPSB2bS53YXNtQ29udGV4dC5sb2FkKCk7CiAgICAgewogICAg
ICAgICAvLyBXZSBkbyB0aGUgc3RhY2sgY2hlY2sgaGVyZSBmb3IgdGhlIHdyYXBwZXIgZnVuY3Rp
b24gYmVjYXVzZSB3ZSBkb24ndAogICAgICAgICAvLyB3YW50IHRvIGVtaXQgYSBzdGFjayBjaGVj
ayBpbnNpZGUgZXZlcnkgd3JhcHBlciBmdW5jdGlvbi4KQEAgLTEzNywyMiArMTM3LDIyIEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgaWYgKFVOTElLRUxZKChzcCA8IHN0YWNrU3BhY2VV
c2VkKSB8fCAoKHNwIC0gc3RhY2tTcGFjZVVzZWQpIDwgYml0d2lzZV9jYXN0PGludHB0cl90Pih2
bS5zb2Z0U3RhY2tMaW1pdCgpKSkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4
ZWMpKSk7CiAgICAgfQotICAgIFdhc206OnN0b3JlQ29udGV4dCh2bSwgd2FzbUNvbnRleHQpOwor
ICAgIHZtLndhc21Db250ZXh0LnN0b3JlKGluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsK
ICAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKLSAgICBBU1NFUlQod2FzbUZ1
bmN0aW9uLT5pbnN0YW5jZSgpID09IFdhc206OmxvYWRDb250ZXh0KHZtKSk7CisgICAgQVNTRVJU
KHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKSA9PSB2bS53YXNtQ29udGV4dC5sb2FkKCkpOwogICAg
IEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5q
c0VudHJ5cG9pbnQoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwogICAgIC8vIFdlIG5lZWQgdG8g
bWFrZSBzdXJlIHRoaXMgaXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQn
cyBzdG9yZWQgaW4gVmVjdG9yPEpTVmFsdWU+LgogICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qg
c3RyaWN0bHkgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxk
IGtlZXAgdGhlIGluc3RhbmNlCiAgICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4K
LSAgICB3YXNtQ29udGV4dC0+dXNlKCk7Ci0gICAgaWYgKHByZXZXYXNtQ29udGV4dCAhPSB3YXNt
Q29udGV4dCkgeworICAgIGluc3RhbmNlLT51c2UoKTsKKyAgICBpZiAocHJldkluc3RhbmNlICE9
IGluc3RhbmNlKSB7CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRyYSBzYWZl
dHkgaW5zdGVhZCBvZiBsZWF2aW5nIGEgY2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGluIHRoZXJl
LiBJZiB3ZSBldmVyIGZvcmdldCB0byBzZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbAogICAgICAg
ICAvLyBib3VuZHMsIHRoaXMgd2lsbCBmb3JjZSBldmVyeSBzdGFjayBvdmVyZmxvdyBjaGVjayB0
byBpbW1lZGlhdGVseQogICAgICAgICAvLyBmaXJlLgotICAgICAgICB3YXNtQ29udGV4dC0+c2V0
Q2FjaGVkU3RhY2tMaW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludHB0cl90Pjo6bWF4KCkpKTsKKyAgICAgICAgaW5zdGFuY2UtPnNldENhY2hlZFN0YWNrTGlt
aXQoYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1h
eCgpKSk7CiAgICAgfQotICAgIFdhc206OnN0b3JlQ29udGV4dCh2bSwgcHJldldhc21Db250ZXh0
KTsKKyAgICB2bS53YXNtQ29udGV4dC5zdG9yZShwcmV2SW5zdGFuY2UsIHZtLnNvZnRTdGFja0xp
bWl0KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzd2l0
Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
Y3BwCmluZGV4IGE5ZDhmMGQuLjJmZGQ1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcApAQCAtMzIsMTIgKzMyLDE0IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9i
amVjdC5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhl
bHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5o
IgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFu
Y2VQcm90b3R5cGUuaCIKQEAgLTc1LDEwICs3NywxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBl
eAogICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpj
cmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMs
IG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSk7CisgICAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZt
LCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUsIFdhc206Oklu
c3RhbmNlOjpjcmVhdGUoUmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSkpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaW5zdGFuY2UtPmZpbmFs
aXplQ3JlYXRpb24odm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoaW5zdGFu
Y2UtPm1lbW9yeU1vZGUoKSkpOworICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBl
eGVjLCBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFu
Y2UtPm1lbW9yeU1vZGUoKSwgJldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Ondh
c21Ub0pTRXhjZXB0aW9uKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25z
dHJ1Y3Rvci5jcHAKaW5kZXggNjQ5ODliNS4uODZmODE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1
Y3Rvci5jcHAKQEAgLTk2LDEzICs5NiwxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6
TWVtb3J5OjpjcmVhdGUodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOwor
ICAgIGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisKKyAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNy
ZWF0ZShpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LAorICAgICAgICBbJnZtXSAo
KSB7IHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAg
ICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OyB9LAorICAgICAgICBbJnZtLCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291
bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNz
Q2FsbGJhY2sodm0sIG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAgaWYgKCFt
ZW1vcnkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0gICAgYXV0
byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRv
cHRSZWYoKm1lbW9yeS5sZWFrUmVmKCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotCisgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWVt
b3J5KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCmluZGV4IGU5OTRkYzguLjRmY2E4YzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVt
b3J5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAKQEAgLTc3LDggKzc3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRl
KiBleGVjKQogICAgIHVpbnQzMl90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogCi0gICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSB0cnVlOwot
ICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRh
LCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOworICAgIFdhc206OlBhZ2VDb3VudCBy
ZXN1bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApp
bmRleCA5NjEwMjRkLi4xNjYxMDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAt
MTYxLDExICsxNjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eU1vZHVsZUV4cG9ydHMoRXhlY1N0YXRlKiBleGVjKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLCBzdHJ1Y3R1cmUpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1
ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBXVEZNb3ZlKHNv
dXJjZSkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpT
V2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTc1LDE2ICsxNzYsMTYgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1
bGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25z
dHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIldl
YkFzc2VtYmx5Lk1vZHVsZSIpKTsKIH0KIAotSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJ1ZmZlciwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBXZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8dWludDhf
dD4mJiBidWZmZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gc291cmNl
ID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgYXV0byogc3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1
Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0
ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmModm0s
IFdURk1vdmUoc291cmNlKSkpOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVh
dGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2
bS53YXNtQ29udGV4dCwgV1RGTW92ZShidWZmZXIpKSk7CiB9CiAKIFdlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSogdGhpc1By
b3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAppbmRleCA2MDI1Yzk4Li4xM2FjYTNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCkBAIC0zMCw4ICszMCwxMSBAQAogI2luY2x1ZGUgIklu
dGVybmFsRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVs
ZTsKIGNsYXNzIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlOwogCiBjbGFzcyBXZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewpAQCAtNDQsNyAr
NDcsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgSlNWYWx1
ZSBjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBidWZmZXIsIFN0cnVjdHVyZSopOwor
ICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwg
VmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwCmluZGV4IGNiMWZlYzEuLjBhODY2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTkzLDcg
KzkzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4
ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBVTlVTRURfUEFSQU0oc2NvcGUp
OwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
IAotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2Rl
QmxvY2soKTsKKyAgICBXYXNtOjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5pbnN0
YW5jZSgpLmNvZGVCbG9jaygpOwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBt
b2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIFN5
bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IG1vZHVsZS0+ZXhwb3J0U3ltYm9sVGFibGUo
KTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5r
KEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAg
ICAgLy8gUmV0dXJuIFRvSlNWYWx1ZSh2KS4KICAgICAgICAgICAgIHN3aXRjaCAoZ2xvYmFsLnR5
cGUpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGV4cG9y
dGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkSTMyR2xvYmFsKGV4cC5raW5kSW5kZXgp
KTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+aW5z
dGFuY2UoKS5sb2FkSTMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CkBAIC0xNjAsMTEgKzE2MCwxMSBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNX
ZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9
IEpTVmFsdWUoaW5zdGFuY2UtPmxvYWRGMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOworICAgICAg
ICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5jZSgpLmxv
YWRGMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVl
ID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7CisgICAg
ICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmluc3RhbmNlKCku
bG9hZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTcsMTIgKzIxNywxMiBAQCBKU1ZhbHVlIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5tb2R1bGUo
KTsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5j
b2RlQmxvY2soKTsKLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5m
b3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgV2FzbTo6TW9kdWxl
JiBtb2R1bGUgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLm1vZHVsZSgpOworICAgIFdhc206OkNv
ZGVCbG9jayogY29kZUJsb2NrID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKTsK
KyAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBt
b2R1bGUubW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxl
ID0gbV9pbnN0YW5jZS0+dGFibGUoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50
OjpQdHI+JiBkYXRhID0gbV9pbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCku
ZGF0YTsKKyAgICBjb25zdCBWZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9IG1vZHVs
ZUluZm9ybWF0aW9uLmRhdGE7CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBt
X2luc3RhbmNlLT5tZW1vcnkoKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8SlNWYWx1ZT4gZXhjZXB0
aW9uOwpAQCAtMjM5LDcgKzIzOSw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleCA9IGVsZW1lbnQub2Zmc2V0LmlzR2xvYmFs
SW1wb3J0KCkKLSAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3Rh
bmNlLT5sb2FkSTMyR2xvYmFsKGVsZW1lbnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQor
ICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmluc3Rh
bmNlKCkubG9hZEkzMkdsb2JhbChlbGVtZW50Lm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkK
ICAgICAgICAgICAgICAgICA6IGVsZW1lbnQub2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAg
ICAgICAgZm4oZWxlbWVudCwgdGFibGVJbmRleCk7CkBAIC0yNTUsNyArMjU1LDcgQEAgSlNWYWx1
ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiAg
ICAgICAgIGZvciAoY29uc3QgV2FzbTo6U2VnbWVudDo6UHRyJiBzZWdtZW50IDogZGF0YSkgewog
ICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0LmlzR2xvYmFsSW1w
b3J0KCkKLSAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNl
LT5sb2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkKKyAg
ICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5pbnN0YW5j
ZSgpLmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQog
ICAgICAgICAgICAgICAgIDogc2VnbWVudC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAg
ICAgICAgZm4obWVtb3J5LCBzaXplSW5CeXRlcywgc2VnbWVudCwgb2Zmc2V0KTsKQEAgLTI5Myw3
ICsyOTMsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAvLyBmb3IgdGhlIGltcG9ydC4KICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAgICAg
ICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tp
XTsKLSAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9k
dWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7
CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVs
ZS5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAg
ICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRD
b3VudCgpKSB7CiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganND
YXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkp
OwogICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5j
dGlvbkltcG9ydCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAppbmRleCBlOWE2MzRhLi4xZmI5NDNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5
cGUuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIK
KyNpbmNsdWRlICJKU1RvV2FzbS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseU1vZHVsZS5oIgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgIlByb21pc2VEZWZlcnJl
ZFRpbWVyLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21CQlFQ
bGFuLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCkBAIC05NCw3ICs5Niw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0
YXRlKiBleGVjKQogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdhc206
Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyh2bSwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRU
YXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0XSAo
Vk0mIHZtLCBXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUg
eworICAgICAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBX
VEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5
cGU+KFtwcm9taXNlLCBnbG9iYWxPYmplY3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFsaWRhdGlv
blJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB2bS5wcm9taXNlRGVmZXJy
ZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0
LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksICZ2bV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICAgICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMTM1
LDcgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiB7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVu
dGlhbGx5IHJlY29tcGlsaW5nIGEgbW9kdWxlLiBXZSBmaXJzdCBnYXRoZXIgYWxsIHRoZSBpbXBv
cnQvbWVtb3J5IGluZm9ybWF0aW9uIHByaW9yIHRvIGNvbXBpbGluZyBjb2RlLgotICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0
ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4
ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8
V2FzbTo6TW9kdWxlPihtb2R1bGUtPm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSkpOwogCiAgICAgVmVjdG9yPFN0
cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CkBAIC0xNDMsMTMgKzE0NSwxMyBAQCBzdGF0aWMg
dm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJy
ZWQqIHByb21pc2UsIEpTVwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4o
dm0sIGluc3RhbmNlKSk7CiAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQ
cm9taXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CiAgICAgLy8gTm90ZTogVGhp
cyBjb21wbGV0aW9uIHRhc2sgbWF5IG9yIG1heSBub3QgZ2V0IGNhbGxlZCBpbW1lZGlhdGVseS4K
LSAgICBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVBc3luYyh2bSwgaW5zdGFuY2UtPm1lbW9yeU1v
ZGUoKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDb2RlQmxvY2s6OkNhbGxiYWNrVHlwZT4oW3By
b21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kXSAoVk0mIHZtLCBSZWY8V2FzbTo6
Q29kZUJsb2NrPiYmIHJlZkNvZGVCbG9jaykgbXV0YWJsZSB7CisgICAgbW9kdWxlLT5tb2R1bGUo
KS5jb21waWxlQXN5bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBj
cmVhdGVTaGFyZWRUYXNrPFdhc206OkNvZGVCbG9jazo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwg
aW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmQsICZ2bV0gKFJlZjxXYXNtOjpDb2RlQmxvY2s+
JiYgcmVmQ29kZUJsb2NrKSBtdXRhYmxlIHsKICAgICAgICAgUmVmUHRyPFdhc206OkNvZGVCbG9j
az4gY29kZUJsb2NrID0gV1RGTW92ZShyZWZDb2RlQmxvY2spOwogICAgICAgICB2bS5wcm9taXNl
RGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW5zdGFu
Y2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmQsICZ2bSwgY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxv
Y2spXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNl
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICAgICAgcmVzb2x2ZSh2bSwg
ZXhlYywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgY29kZUJsb2NrLnJlbGVhc2VOb25OdWxs
KCksIHJlc29sdmVLaW5kKTsKICAgICAgICAgfSk7Ci0gICAgfSkpOworICAgIH0pLCAmV2FzbTo6
Y3JlYXRlSlNUb1dhc21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pOwogfQogCiBz
dGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmplY3QqIGlt
cG9ydE9iamVjdCkKQEAgLTE2NSw3ICsxNjcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5z
dGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcgog
ICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUo
dm0sIGV4ZWMsIGJ1ZmZlcik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0
KGV4ZWMsIHNjb3BlLCBwcm9taXNlKSk7CiAKLSAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5
bmModm0sIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNh
bGxiYWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0XSAoVk0mIHZt
LCBXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAg
IFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291
cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21p
c2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlk
YXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICB2bS5wcm9taXNlRGVmZXJy
ZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW1wb3J0T2JqZWN0
LCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXSAoKSBtdXRhYmxl
IHsKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAg
ICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpA
QCAtMjEzLDcgKzIxNSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdl
YkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3QgYnl0ZVNp
emU7CiAgICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4oJnZtLCBi
YXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRv
bnRGaW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBiYXNlICsg
Ynl0ZU9mZnNldCwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5h
bGl6ZSgpKTsKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB0aHJvdyBhbiBPT00gZXhj
ZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRoYXQgc29tZXRoaW5nIHdpbGwgT09NLgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTUKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUo
KSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlUYWJsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMTE4NjVmNS4uY2QwYWY4ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCkBAIC05MCw4ICs5MCwxNCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICB9CiAgICAgfQogCisgICAgUmVmUHRyPFdhc206OlRhYmxlPiB3
YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6Y3JlYXRlKGluaXRpYWwsIG1heGltdW0pOworICAgIGlm
ICghd2FzbVRhYmxlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiY291bGRuJ3QgY3JlYXRlIFRhYmxlIikpKSk7CisKICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlU
YWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgaW5pdGlhbCwgbWF4aW11bSkpOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdh
c21UYWJsZS5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwCmluZGV4IDAyMWM2MTguLjY4ZTk1OWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE8KICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHModm0sIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uOjppbmZvKCkpLCAiV2Ugc2hvdWxkIG5ldmVyIGRvdWJsZSB3cmFwIGEg
d3JhcHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9ICIiOwogICAgIE5hdGl2ZUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0
b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgeyBz
aWduYXR1cmVJbmRleCwgaW5zdGFuY2UtPmNvZGVCbG9jaygpLT53YXNtVG9Kc0NhbGxTdHViRm9y
SW1wb3J0KGltcG9ydEluZGV4KSB9KTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiog
cmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCks
IFdhc206OkNhbGxhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgaW5zdGFuY2UtPndhc21D
b2RlQmxvY2soKS53YXNtVG9KU0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSB9ICk7CiAg
ICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtLCBleGVjdXRhYmxlLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlv
biwgaW5zdGFuY2UpOwogICAgIHJldHVybiByZXN1bHQ7Ci0tIAoyLjkuMwoK
</data>
<flag name="review"
          id="341730"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321790</attachid>
            <date>2017-09-25 21:56:28 -0700</date>
            <delta_ts>2017-09-25 23:28:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>418438</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA4MTY2NjE1YTlkNmRkYzY0NGM3Y2Y4MzQ2NjEwMGRiNjU4Yzg1NjI1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NDcgKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDgyICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTEgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDEyICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NyAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1NSArKystLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgMzMgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAgICAgICAgICAgfCAgMjcgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaCAgICAgICAgICAgIHwgIDE2
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8
ICAgMyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwICAgICAg
ICAgfCAgMjEgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmggICAg
ICAgICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50
LmggICAgICAgICB8ICAgNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
Y3BwICAgICAgICAgICAgfCAgMzUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmggICAgICAgICAgICAgIHwgIDI1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2lnbmF0dXJlLmNwcCAgICAgICB8ICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNpZ25hdHVyZS5oICAgICAgICAgfCAgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UYWJsZS5jcHAgICAgICAgICAgIHwgMTI2ICsrKysKIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UYWJsZS5oICAgICAgICAgICAgIHwgIDc2ICsrKwogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAgICAgICAgICAgfCAgNTkgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCAgICAgICAgICAgIHwgICA1ICsKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAgICAgICAgIHwgICA3ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaCAgICAgICAgICB8ICAx
MCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwICAgICAgICAg
fCAyMjcgKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaCAg
ICAgICAgICAgfCAgNDggKysKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4ganN9L0pTV2Vi
QXNzZW1ibHkuY3BwIHwgICAwCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dl
YkFzc2VtYmx5LmggICB8ICA1MCArLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHAgICAgICAgICAgICAgfCAgMTMgKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaCAgICAgICAgICAgICAgIHwgIDQ2ICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwICAgICAgICAgICAgICB8IDExOCArKy0tCiAuLi4vSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCB8ICA4NSArKy0KIC4uLi9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIHwgIDc2ICsrLQogLi4uL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oICAgfCAgMTMgKy0KIC4uLi9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAgIHwgIDc1ICstLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmggfCAgNDMg
Ky0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcCAgICAgICAgIHwg
NjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4uL3dhc20vanMvV2ViQXNz
ZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0KIC4uLi93YXNtL2pzL1dl
YkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAzICstCiAuLi4vd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICAxOSArLQogLi4uL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAgICAgfCAgIDUgKy0KIC4u
Li93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAgICAgICAgIHwgIDIyICst
CiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAgICAgICAgICAgICB8ICAx
NCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcCAgICAgICAg
fCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAgICAg
ICAgIHwgICAyICstCiAxMDUgZmlsZXMgY2hhbmdlZCwgMjkyOSBpbnNlcnRpb25zKCspLCAxNzE3
IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaAogcmVuYW1lIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4ganN9L0pTV2ViQXNzZW1ibHkuY3BwICgxMDAl
KQogcmVuYW1lIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4ganN9L0pTV2ViQXNzZW1i
bHkuaCAoNjIlKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dhc21Ub0pTLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dhc21Ub0pTLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgyZWYxNmQuLjZiNjc2N2UgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTctMDktMjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdl
YkFzc2VtYmx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRXhjZWVk
aW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVy
CisgICAgICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdlOiBp
dCB1c2VkIHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRoZSBjb3JyZXNwb25k
aW5nIHRlc3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qczoKKyAgICAg
ICAgKGFzc2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAg
KGFzc2VydC50aHJvd3MpOgorCiAyMDE3LTA5LTIzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxs
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBpbmZpbml0ZSBsb29waW5nIHRlc3QyNjIgdGVz
dApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pTVGVz
dHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uN2ZlNmIxMyAxMDA2
NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rlc3Rz
L3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0IGJ1
ZmZlciBvZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQq
MTAyNCk7CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5jZSBp
dCBmYWlscy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVycm9y
LCAiT3V0IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3co
MTAwMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNlZWQg
dGhlIG1lbW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOyAKICAgICBhc3NlcnRFcShidWZm
ZXIuYnl0ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnkuYnVmZmVyLCBi
dWZmZXIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0ZCAxMDA2NDQK
LS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMt
YXBpL3RhYmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJ
bXBvcnQodGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBo
YXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRo
YW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0
cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVy
IHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0
aWFsOiAyKiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdl
IGNvdW50IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUncyBp
bml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAor
ICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQgLyAy
NzogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBt
YXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3Vu
dCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0s
CiAgICAgXTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCmluZGV4IDIxZDJkNmMuLjc4OTA5M2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDQ1MCBAQAorMjAxNy0wOS0yNSAgSkYgQmFzdGllbiAgPGpmYmFz
dGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lv
biBvZiBldmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZW50YWlscyBjbGVhbmluZyB1cCBhbmQg
c3BsaXR0aW5nIGEgYnVuY2ggb2YgY29kZSB3aGljaCB3ZSBoYWQKKyAgICAgICAgaW50ZXJ0d2lu
ZWQgYmV0d2VlbiBDKysgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgSlMgb2JqZWN0cywgYW5kIHB1
cmUgQysrCisgICAgICAgIGltcGxlbWVudGF0aW9uIG9iamVjdHMuIFRoaXMgc3BlY2lmaWMgY2hh
bmdlIGdvZXMgbW9zdCBvZiB0aGUgd2F5IHRvd2FyZHMKKyAgICAgICAgYWxsb3dpbmcgSlNDJ3Mg
V2ViQXNzZW1ibHkgdG8gd29yayB3aXRob3V0IFZNIC8gSlMsIHVwIHRvIGJ1dCBleGNsdWRpbmcK
KyAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlICh0aGVyZSdzIFdhc206Okluc3RhbmNlLCBi
dXQgaXQncyBub3QgKnRoZSogdGhpbmcKKyAgICAgICAgeWV0KS4gQmVjYXVzZSBvZiB0aGlzIHdl
IHN0aWxsIGhhdmUgYSBmZXcgRklYTUUgaWRlbnRpZnlpbmcgcGxhY2VzIHRoYXQgbmVlZCB0bwor
ICAgICAgICBjaGFuZ2UuIEEgZm9sbG93LXVwIGNoYW5nZSB3aWxsIGdvIHRoZSByZXN0IG9mIHRo
ZSB3YXkuCisKKyAgICAgICAgSSB3ZW50IGFib3V0IHRoaXMgY2hhbmdlIGluIHRoZSBzaW1wbGVz
dCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3dhc20gZGly
ZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNsdWRlIHRoZSAvanMv
CisgICAgICAgIHN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1lbnRh
dGlvbiBvZiBXZWJBc3NlbWJseSkuCisKKyAgICAgICAgTm9uZSBvZiB0aGlzIGNoYW5nZSByZW1v
dmVzIHRoZSBuZWVkIGZvciBhIEpJVCBlbnRpdGxlbWVudCB0byBiZSBhYmxlIHRvIHVzZQorICAg
ICAgICBXZWJBc3NlbWJseS4gV2UgZG9uJ3QgaGF2ZSBhbiBpbnRlcnByZXRlciwgdGhlIHByb2Nl
c3MgdGhlcmVmb3JlIHN0aWxsIG5lZWRzIHRvCisgICAgICAgIGJlIGFsbG93ZWQgdG8gSklUIHRv
IHVzZSB0aGVzZSBwdXJlLUMrKyBBUElzLgorCisgICAgICAgIEludGVyZXN0aW5nIHRoaW5ncyB0
byBub3RlOgorCisgICAgICAgICAgLSBSZW1vdmUgVk0gZnJvbSBQbGFuIGFuZCBhc3NvY2lhdGVk
IHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KKyAgICAgICAgICAgIHRo
ZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCisgICAgICAgICAgLSBXYXNtOjpNZW1v
cnkgc2hvdWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdD
IHRvCisgICAgICAgICAgICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFz
IGF0IGNvbnN0cnVjdGlvbiB0aW1lIGZvciB0aGlzCisgICAgICAgICAgICBwdXJwb3NlOiBvbmUg
dG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCisg
ICAgICAgICAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgYWxsb3dzIHdo
b2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCisgICAgICAgICAgICBkaWN0YXRlIGhvdyB0byBy
ZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1iZWRkaW5nIHRoYXQncyB0
bworICAgICAgICAgICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3RpdmVseSku
CisgICAgICAgICAgLSBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRv
IFdhc206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCisgICAgICAgICAgICB0aGVyZSwgd2l0
aCBhbiBlbnVtIGNsYXNzIGZvciBmYWlsdXJlIHR5cGVzLgorICAgICAgICAgIC0gRXhjZWVkaW5n
IG1heCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNw
ZWMuIFRoaXMKKyAgICAgICAgICAgIGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTog
aXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVwZGF0ZSB0aGUKKyAgICAgICAgICAgIGNvcnJl
c3BvbmRpbmcgdGVzdC4KKyAgICAgICAgICAtIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3Jvd19tZW1v
cnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCisgICAgICAgICAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgorICAgICAgICAgIC0g
SlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJl
LCBiZWNhdXNlIGl0J3Mgb25seQorICAgICAgICAgICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90
IGZyb20gZ3Jvd19tZW1vcnkgYXMgYmVmb3JlKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9yeSBu
b3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpT
CisgICAgICAgICAgICB3cmFwcGVycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdoZW4gZ3Jvd3Ro
IHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CisgICAgICAgICAgICBrbm93bmluZyBhbnl0
aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxpc3Qgb2YgY2FsbGJh
Y2tzCisgICAgICAgICAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xsIHdh
bnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAorICAgICAgICAgICAgdW5kZXIgYSBsb2Nr
KS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291
cmNlIG9mIHRydXRoIGFib3V0IGFkZHJlc3MgLyBzaXplLAorICAgICAgICAgICAgdXNlZCBkaXJl
Y3RseSBieSBnZW5lcmF0ZWQgY29kZSBpbnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCisg
ICAgICAgICAgLSBNb3ZlIHdhc21Ub0pTIGZyb20gdGhlIGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVh
ZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCisgICAgICAgICAgICB3YXNtL2pzLiBJdCdzIG9u
bHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwLCBhbmQgdXNlcyBW
TSwKKyAgICAgICAgICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3NlbWJseS4K
KyAgICAgICAgICAtIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0
cnVjdCBob2xkaW5nIGEKKyAgICAgICAgICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cp
IGluc3RlYWQgb2YgYW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcworICAgICAgICAgICAg
ZG9lc24ndCBhZGQgYW55dGhpbmcgdG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdo
YXQgYWN0dWFsbHkgZ2V0cworICAgICAgICAgICAgcGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAo
ZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAgICAg
IHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVudGlyZSBwdXJwb3NlIG9mIHRo
aXMgY2hhbmdlIGlzIHRvCisgICAgICAgICAgICBhbGxvdyBwYXNzaW5nIFdhc206OkNvbnRleHQg
YXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZNCisgICAgICAg
ICAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKKyAgICAgICAgICAgIHRoaXMgc2V0dXAgYSBub24tSlMg
ZW1iZWRkaW5nIGlzIG11Y2ggYmV0dGVyIG9mZi4KKyAgICAgICAgICAtIE1vdmUgSlNXZWJBc3Nl
bWJseSBpbnRvIHRoZSBKUyBmb2xkZXIuCisgICAgICAgICAgLSBPTUdQbGFuOiB1c2UgV2FzbTo6
Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KKyAg
ICAgICAgICAtIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24gV2FzbTo6Q29kZUJsb2NrJ3MgdGFp
bCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKKyAgICAgICAgICAgIGJlaW5nIG9uIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5FbWJlZGRlcgorICAg
ICAgICAgICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJBc3Nl
bWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCisgICAgICAgICAgICBjYWxsZWQgd2FzbS0+SlMg
c3R1Yi4gVGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0
aW5nCisgICAgICAgICAgICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0
dWJzIHRvIGNhbGwgYmFjayBpbnRvIHRoZQorICAgICAgICAgICAgZW1iZWRkZXIuIFRoaXMgaXNu
J3QgYWRkaW5nIGFueSBpbmRpcmVjdGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQor
ICAgICAgICAgICAgdGhlIEIzIElSIGdlbmVyYXRvciBub3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29k
ZUJsb2NrIGluc3RlYWQgb2YKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suCisg
ICAgICAgICAgLSBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24gY29tcGxl
dGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KKyAgICAgICAgICAgIGF0b21pYzxib29sPiBm
bGFnIGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2Nr
LCBhbmQKKyAgICAgICAgICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2Uu
anMgYmVjYXVzZSBiZWZvcmUgbXkgY2hhbmdlcworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayBkaWQgaXRzIG93biBjb21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQor
ICAgICAgICAgICAgV2FzbTo6Q29kZUJsb2NrLCB3aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5v
dyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxvY2sg
YW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2VyLCB0aGUgbG9jayB3YXMgYmVp
bmcKKyAgICAgICAgICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2VydGlvbi4KKyAg
ICAgICAgICAtIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKKyAgICAgICAgICAgIGluIGF0IGNvbXBpbGF0
aW9uIHRpbWUsIGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3Jh
cHBlci4KKyAgICAgICAgICAtIFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQg
ZmF1bHQgaGFuZGxpbmcgdGh1bmtzLiBPbmx5IHRoZSBJUgorICAgICAgICAgICAgZ2VuZXJhdG9y
IHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhy
b3dpbmcKKyAgICAgICAgICAgIHRodW5rIGlzIGdlbmVyYXRlZCBpZiBhbnkgbWVtb3J5IGlzIHBy
ZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5vdAorICAgICAgICAgICAgYWxsIG9m
IHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KKyAgICAgICAgICAtIE1ha2UgZXhj
ZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNvZGVk
CisgICAgICAgICAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMr
KyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKKyAgICAgICAgICAgIGNvZGUgd2hlbiBh
IFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRl
ciB0byBnZXQKKyAgICAgICAgICAgIGNhbGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9j
ZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5nbGUgb2YgdGhlc2UKKyAgICAgICAgICAgIGZ1bmN0aW9u
cyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJvY2VzcykgYmVjYXVzZSB0aGUgdHJhcCBo
YW5kbGVyIGlzIGEKKyAgICAgICAgICAgIHNpbmdsZXRvbi4gVGhhdCBjYW4gYmUgZml4ZWQgaW4g
aW4gIzE3NzQ3NS4KKyAgICAgICAgICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVyZSBhbGwg
ZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgorICAgICAgICAgIC0gU3BsaXQgdXAgSlNXZWJB
c3NlbWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKKyAgICAgICAgICAgIHJlZmNv
dW50ZWQuIEpTV2ViQXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rp
b25zIGluIHRoZQorICAgICAgICAgICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3Mg
dXNlZCBieSB0aGUgSklUIGNvZGUgdG8gbG9va3VwIHdoZXJlIHRvCisgICAgICAgICAgICBjYWxs
IGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZvciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhh
dCB0aGlzIGNyZWF0ZXMKKyAgICAgICAgICAgIGFuIGV4dHJhIGFsbG9jYXRpb24gZm9yIGFsbCB0
aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhjaGFuZ2UKKyAgICAgICAgICAg
IHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUgaW5zdGFuY2Ug
dXNlZCB0byBiZSBvYnRhaW5lZAorICAgICAgICAgICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKKyAgICAgICAg
ICAgIGluc3RhbmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIg
cG9pbnRlciB0byB0aGUKKyAgICAgICAgICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhl
cndpc2Ugd291bGQgY2F1c2UgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICAgICAgICAtIEFkZCBXYXNt
SW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVjaCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCisgICAg
ICAgICAgLSBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBkb2Vzbid0IGp1c3QgY29udGFpbiB0
aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCisgICAgICAgICAgICBKU09iamVjdHMsIGl0IGFsc28g
aGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3YXNtCisgICAgICAg
ICAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIgaW5z
dGFuY2UncyBpbXBvcnRlZAorICAgICAgICAgICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRu
J3QgYmUgdGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAorICAgICAg
ICAgICAgY3JlYXRlcyBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2ll
ciB0byBkaXNhc3NvY2lhdGUKKyAgICAgICAgICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBm
cm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhpbmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKKyAgICAgICAg
ICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBnZW5lcmF0b3Igb25seSBuZWVkcyBvZmZz
ZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgorICAgICAgICAgICAgdGhlIGNhbGwgb3Bjb2RlICh3aGVu
IHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdoZXRoZXIgdGhlCisgICAg
ICAgICAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhpcyBpc24n
dCBrbm93biBhdCBjb21waWxlLXRpbWUKKyAgICAgICAgICAgIGJlY2F1c2UgaXQncyBkZXBlbmRl
bnQgb24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgor
ICAgICAgICAgICAgdGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0
IGluc3RhbmNlIChvbmx5IHdhc20tPndhc20KKyAgICAgICAgICAgIGRvZXMpOyB0aGUgb3RoZXIg
cGxhY2UgaXMgd2FzbUJpbmRpbmcgd2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRv
CisgICAgICAgICAgICBmaWd1cmUgb3V0IHRoZSB3YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwg
YW5kIHRoZW4gZ2V0cworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZX
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwKKyAgICAgICAgICAgIGNhbGwu
IFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5zdGFuY2UgY2Fu
IGJlCisgICAgICAgICAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKKyAgICAgICAgICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlz
IGFscmVhZHkgZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKKyAgICAgICAg
ICAgIGNhbiBtb3ZlIHRoaXMgdGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3Rh
bmNlIHRvIFdhc206Okluc3RhbmNlLAorICAgICAgICAgICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0
aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVyIHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAor
ICAgICAgICAgICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdyaXRlQmFycmllcjxKU09iamVjdD4u
CisgICAgICAgICAgLSBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJhbWUsIGFuZCBpbiBt
YW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAorICAgICAgICAgICAgYXJvdW5kIGluc3Rl
YWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1lcyB3
aGljaAorICAgICAgICAgICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0
ZWFkIHN0b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYworICAgICAgICAgICAgbG9jYXRpb24u
IFRoYXQgY2hhbmdlIHdvbid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBj
aHVybiwgYnV0CisgICAgICAgICAgICB3aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21l
IG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMgbWFubmVyIHdpdGhvdXQKKyAgICAgICAgICAgIGhhdmlu
ZyBhIFZNLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1p
dEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIu
Y3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
dW53aW5kRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0p
OgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogZGZnL0RG
R09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpj
b21waWxlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQp
OgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckVu
dHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAg
KiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxl
U3R1Yik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5z
YWZlQ2FsbGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
RXhlY1N0YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUgY29uc3QpOgorICAgICAg
ICAqIGludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAgICAoSlNDOjpOYXRpdmVDYWxs
RnJhbWVUcmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6CisgICAgICAgIChKU0M6Ok5hdGl2
ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVz
dG9yZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjp+
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAgICAqIGludGVycHJldGVy
L0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3Io
KSBjb25zdCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IpOgorICAgICAgICAoSlND
OjpTdGFja1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0
b3I6OnJlYWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZy
YW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaDoK
KyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVySXNFbnRyeUZyYW1lIGNv
bnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmg6CisgICAgICAgIChK
U0M6OlZNRW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6Vk1F
bnRyeVJlY29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAoSlNDOjpFbnRy
eUZyYW1lOjp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2
ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJ
bnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1w
bCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
Ojpjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRFbnRlck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29w
X2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKToKKyAgICAgICAg
KiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9T
TE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAg
ICAoSlNDOjp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OkZyYW1lV2Fsa2Vy
KToKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VUb1BhcmVudEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNl
cyk6CisgICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6VGhy
b3dTY29wZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAg
ICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50
aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KToKKyAgICAg
ICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjppc1NhbmVGcmFtZSk6Cisg
ICAgICAgIChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAgICAg
ICAoSlNDOjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2spOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGls
ZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20v
V2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAg
IChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQ
bGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2Fz
bUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAg
KiB3YXNtL1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9j
azo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpzZXRDb21w
aWxhdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFN0dWJzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6Oldh
c206OkNvZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yik6CisgICAg
ICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRpb25GaW5pc2hlZCk6CisgICAg
ICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9p
bnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250
ZXh0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUyk6CisgICAg
ICAgIChKU0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpDb250ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAgICAg
ICAqIHdhc20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206
Okluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6CisgICAgICAgICogd2FzbS9X
YXNtSW5zdGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbik6Cisg
ICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om1l
bW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0YWJsZSk6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Oklu
c3RhbmNlOjpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFu
Y2U6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZFN0YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkU3Rh
Y2tMaW1pdCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRDYWNoZWRT
dGFja0xpbWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgIChKU0M6
Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdp
c3RlckluZm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6CisgICAg
ICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9TYXZlIGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlVmFsaWRh
dGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJz
ZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFuKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6T01HUGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFn
ZUNvdW50Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46
OnJ1bkNvbXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmFkZENvbXBs
ZXRpb25UYXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFu
ZENhbmNlbElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlND
OjpXYXNtOjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVy
ZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgICogd2FzbS9X
YXNtVGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWJsZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Z3Jvdyk6CisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxl
OjpvZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZGdW5j
dGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAqIHdhc20v
V2FzbVRodW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdh
c21UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBU
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c2V0VGhyb3dXYXNt
RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtzOjp0aHJvd1dhc21FeGNlcHRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdhc20vV2FzbVdv
cmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFuc0Zv
ckNvbnRleHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0Lmg6CisgICAgICAgICogd2Fz
bS9qcy9KU1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1Rv
V2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaC4KKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vSlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5
LmguCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbnN0YW5jZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29udGV4dCBjb25zdCk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0NhbGxlZSk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVybmFsTWVtb3J5KToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29kZUJsb2NrIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21UYWJsZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscyk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNhY2hlZFN0YWNrTGltaXQgY29u
c3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldENhY2hlZFN0YWNr
TGltaXQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21NZW1vcnkp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21Nb2R1bGUpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFsbG9jYXRpb25TaXplKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUgY29uc3QpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6
OmFkb3B0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJs
eU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKToKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJs
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2Vt
Ymx5VGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseVRhYmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZSk6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5j
cHAuCisgICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KU0V4
Y2VwdGlvbik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJseUZ1
bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eU1vZHVsZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNy
ZWF0ZU1vZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21w
aWxlRnVuYyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29t
cGlsZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1
bmMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTctMDktMjUgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIEF0dHJp
YnV0ZSBhbiBlbnVtIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU3NjJm
NjguLmM0YjVkNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDgyLDcgKzEw
ODIsNyBAQAogCQk3OUM0QjE1RTFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDRkM2
RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcg
LyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlENUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OURB
RTI3QTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZB
QSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovOyB9OworCQk3OURBRTI3QTFFMDNDODIyMDBCNTI2
QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9u
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5REZDQkRCMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURGQ0JEQTFEODhDNTk2
MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBW
YXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5
RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUZENDgy
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ2MCw3ICsx
NDYwLDYgQEAKIAkJQUQyRkNDMjAxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVD
b25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFEMkZDQzE0MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlQ29uc3Ry
dWN0b3IubHV0LmggKi87IH07CiAJCUFEMkZDQzIxMURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3Nl
bWJseVRhYmxlUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQyRkNDMTUxREI1OUM1OTAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFi
bGVQcm90b3R5cGUubHV0LmggKi87IH07CiAJCUFEMkZDQzJEMURCODM4RkQwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90
eXBlLmggKi87IH07Ci0JCUFEMkZDQzMxMURCODNENDkwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0My
RjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovOyB9OwogCQlBRDQxMkIzNDFF
N0IyRTlFMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDEyQjMyMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29u
dGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUFENDI1MjUxMUU1RDBFMTQwMDlEMkE5NyAvKiBGdWxsQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0MjUyNTAxRTVEMERFQjAwOUQy
QTk3IC8qIEZ1bGxDb2RlT3JpZ2luLmggKi87IH07CiAJCUFENDkzN0M0MUREQkU2MTQwMDc3Qzgw
NyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3QzIxRERCRTYwQTAwNzdDODA3IC8qIEFic3RyYWN0TW9k
dWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTE0NjgsNiArMTQ2NywxMiBAQAogCQlBRDQ5MzdENDFEREQyN0RFMDA3N0M4MDcgLyog
V2ViQXNzZW1ibHlGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rp
b24uaCAqLzsgfTsKIAkJQUQ0QjFERkExREYyNDRFMjAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDRCMURGODFE
RjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCAqLzsgfTsKIAkJQUQ1QjQxNkYxRUJBRkI3
NzAwOEVGQTQzIC8qIFdhc21OYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDVCNDE2RTFFQkFGQjY1MDA4RUZBNDMgLyogV2FzbU5hbWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZERDFG
Njg4QjY1MDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZEQzFGNjg4QjVGMDAwQkNBQUYgLyogV2FzbUVt
YmVkZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQUQ1QzM2RTIxRjY5OUVDMDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2REYxRjY5OUVCNjAwMEJD
QUFGIC8qIFdhc21JbnN0YW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUFENUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUMzNkU0MUY2
OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFQTFGNzVBRDZBMDAwQkNBQUYgLyogSlNUb1dh
c20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOERE
NkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBK
U1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBREQwOUFGMzFGNjI0ODJFMDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkVDMUY3NUFE
N0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ3NDM4QzAx
RTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNt
U2lnbmF0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEODZBOTNEMUFBNEQ4
N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ4RkYzOTgxRUI1QkRCMjAwODdGRjgyIC8qIFdh
c21JbmRleE9yTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MTU2LDkgKzQx
NjEsMjUgQEAKIAkJQUQyRkNDMTUxREI1OUM1OTAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
MkZDQzI2MURCODM4QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVByb3RvdHlwZS5jcHA7
IHBhdGggPSBqcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFEMkZDQzI3MURCODM4QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVByb3RvdHlw
ZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQUQyRkNDMkUxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJBc3NlbWJseS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vi
QXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMzIxREM0MDQ1
MzAwQjNFNzM2IC8qIFdhc21Gb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFE
M0YxRTQ3MUY0QkE3ODYwMDY2OTkxMiAvKiBXQUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FCYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTRBMUY0REU2OEMwMDY2OTkx
MiAvKiBXQUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBSW5zdGFuY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNEIxRjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0FUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDNGMUU0QzFGNERFNjhDMDA2Njk5MTIgLyogV0FNZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0FNZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTIxRjRGNEFF
NTAwNjY5OTEyIC8qIFdBTWVtb3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTWVtb3J5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTMxRjRGNEFFNTAwNjY5OTEy
IC8qIFdBTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTW9kdWxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTQxRjRGNEFFNTAwNjY5OTEyIC8qIFdBSW5z
dGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FJbnN0YW5jZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTU1MUY0RjRBRTUwMDY2OTkxMiAvKiBXQVRhYmxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDNGMUU2NDFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNjUxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdBRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NjgxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXQU1lbW9yeURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDNGMUU2OTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdBTWVtb3J5RGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDNGMUU2QTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0FJbXBvcnRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQUQzRjFFNkIxRjU0N0NCODAwNjY5OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdBVGFibGVEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUFEM0YxRTZDMUY1NDdDQjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXQUltcG9ydE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFEM0YxRTZEMUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXQVRhYmxlRGVzY3JpcHRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUFEM0YxRTcwMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdBRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQUQzRjFFNzExRjU0QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0FGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
NDEyQjMxMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFENDEyQjMyMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBRDQxMkIzNTFFN0I1N0MwMDA4QUYxNTcgLyogQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQxNzMsMTUgKzQxOTQsMjYgQEAKIAkJQUQ0QjFERjcxREYyNDRENzAwNzFB
RTMyIC8qIFdhc21CaW5kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21CaW5kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0QjFE
RjgxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21CaW5kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFENUI0MTZFMUVCQUZCNjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDVDMzZEQzFGNjg4QjVGMDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21FbWJlZGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZE
RTFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21JbnN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRG
MUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUlu
c3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkUzMUY2OUVDOEIw
MDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVRhYmxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFG
IC8qIFdhc21UYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGFibGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1
cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVNpZ25hdHVy
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENzQzOEJGMUUwNDU3OTIwMEZE
MEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21TaWduYXR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4NkE5M0Qx
QUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vha0dDTWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDhERDZDRjFGNjcwODlGMDAwNEVCNTIgLyogSlNUb1dhc20uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSlNUb1dhc20uaDsgcGF0aCA9IGpzL0pTVG9XYXNtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUFEOERENkQwMUY2NzA4QTMwMDA0RUI1MiAvKiBKU1RvV2FzbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBKU1RvV2FzbS5jcHA7IHBhdGggPSBqcy9KU1RvV2FzbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBX
YXNtSW5kZXhPck5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUlu
ZGV4T3JOYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEOEZGMzk2MUVCNUJE
ODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbUluZGV4T3JOYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREI2RjY3QzFFMTVENzUwMDA4MkYzODQgLyogV2FzbVBhZ2VDb3Vu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtUGFnZUNvdW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURCQzU0RDIxREY4RUEwMDAwNUJG
NzM4IC8qIFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVRvSlNDYWxsZWUuY3BwOyBwYXRoID0ganMvV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURCQzU0
RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5VG9KU0NhbGxlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
REQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Fz
bVRvSlMuaDsgcGF0aCA9IGpzL1dhc21Ub0pTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUFERDA5QUVGMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXYXNtVG9KUy5jcHA7IHBhdGggPSBqcy9XYXNtVG9KUy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUYyMUY2MjQ4MjkwMDEzMTNDMiAvKiBKU1dlYkFzc2Vt
Ymx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHkuY3BwOyBwYXRoID0ganMv
SlNXZWJBc3NlbWJseS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUYz
MUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2Vi
QXNzZW1ibHkuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25Q
YXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDQxRUIzMDc3MTAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MTkxLDYgKzQyMjMsOCBAQAogCQlBREU4MDI5
NjFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JQ
cm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5NzFFMDhGMUM5MDA1OERFNzgg
LyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFERTgwMjlEMUUwOEYyMjYwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0
cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2Vt
Ymx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJy
b3JDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY3
MUY0N0E3QjgwMDY0NTFEMyAvKiBXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3Nl
bWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREZDMzBGOTFGNDdBOEMwMDA2
NDUxRDMgLyogV0FNb2R1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FNb2R1bGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU5Rjg5MzcxODkxQUQzMzAwRDVDQ0RDIC8qIFVubGlua2Vk
SW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5s
aW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
NTlGODkzODE4OTFBREI1MDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0aW9u
U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMjFCRjIxMzY5MDBD
MzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2Nv
bmZpZzsgcGF0aCA9IFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTY0NSw2ICs1Njc5LDI2IEBACiAJCQkJODZGM0VFQjYxNjg1NUE1QjAwNzdC
OTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8sCiAJCQkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5
MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLywKIAkJCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkx
RjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLywKKwkJCQlBRDNGMUU0NzFGNEJBNzg2MDA2Njk5MTIg
LyogV0FCYXNlLmggKi8sCisJCQkJQUQzRjFFNjUxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0
aW9uLmNwcCAqLywKKwkJCQlBRDNGMUU2NDFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24u
aCAqLywKKwkJCQlBRDNGMUU3MTFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5jcHAgKi8s
CisJCQkJQUQzRjFFNzAxRjU0QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uaCAqLywKKwkJCQlB
RDNGMUU2QzFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuY3BwICovLAorCQkJCUFE
M0YxRTZBMUY1NDdDQjYwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5oICovLAorCQkJCUFEM0Yx
RTU0MUY0RjRBRTUwMDY2OTkxMiAvKiBXQUluc3RhbmNlLmNwcCAqLywKKwkJCQlBRDNGMUU0QTFG
NERFNjhDMDA2Njk5MTIgLyogV0FJbnN0YW5jZS5oICovLAorCQkJCUFEM0YxRTUyMUY0RjRBRTUw
MDY2OTkxMiAvKiBXQU1lbW9yeS5jcHAgKi8sCisJCQkJQUQzRjFFNEMxRjRERTY4QzAwNjY5OTEy
IC8qIFdBTWVtb3J5LmggKi8sCisJCQkJQUQzRjFFNjgxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVt
b3J5RGVzY3JpcHRvci5jcHAgKi8sCisJCQkJQUQzRjFFNjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdB
TWVtb3J5RGVzY3JpcHRvci5oICovLAorCQkJCUFEM0YxRTUzMUY0RjRBRTUwMDY2OTkxMiAvKiBX
QU1vZHVsZS5jcHAgKi8sCisJCQkJQURGQzMwRjkxRjQ3QThDMDAwNjQ1MUQzIC8qIFdBTW9kdWxl
LmggKi8sCisJCQkJQUQzRjFFNTUxRjRGNEFFNTAwNjY5OTEyIC8qIFdBVGFibGUuY3BwICovLAor
CQkJCUFEM0YxRTRCMUY0REU2OEMwMDY2OTkxMiAvKiBXQVRhYmxlLmggKi8sCisJCQkJQUQzRjFF
NkQxRjU0N0NCODAwNjY5OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9yLmNwcCAqLywKKwkJCQlBRDNG
MUU2QjFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuaCAqLywKKwkJCQlBREZD
MzBGNzFGNDdBN0I4MDA2NDUxRDMgLyogV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1REUzRDBGNDBE
RDhEREZCMDA0Njg3MTQgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8sCiAJCQkpOwogCQkJcGF0
aCA9IEFQSTsKQEAgLTU5NzksOCArNjAzMyw2IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLywKLQkJCQlB
RDJGQ0MyRTFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8sCi0JCQkJQUQy
RkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1M0Y0MEU4
RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuY3BwICovLAogCQkJCTUzRjQw
RTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5oICovLAogCQkJCTUzQ0E3
MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8sCkBAIC01OTk2LDYgKzYw
NDgsNyBAQAogCQkJCTUyNkFDNEI1MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmgg
Ki8sCiAJCQkJQUQ0MTJCMzExRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmNwcCAqLywK
IAkJCQlBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCAqLywKKwkJCQlB
RDVDMzZEQzFGNjg4QjVGMDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggKi8sCiAJCQkJNzlEQUUy
NzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi8sCiAJCQkJNTM4MUI5
MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovLAogCQkJ
CTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmggKi8s
CkBAIC02MDA0LDYgKzYwNTcsOCBAQAogCQkJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBX
YXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyog
V2FzbUluZGV4T3JOYW1lLmNwcCAqLywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyog
V2FzbUluZGV4T3JOYW1lLmggKi8sCisJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdh
c21JbnN0YW5jZS5jcHAgKi8sCisJCQkJQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21J
bnN0YW5jZS5oICovLAogCQkJCUFEMDA2NTlEMUVDQUM3RkUwMDBDQTkyNiAvKiBXYXNtTGltaXRz
LmggKi8sCiAJCQkJNTNFOUUwQTkxRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFk
cy5jcHAgKi8sCiAJCQkJNTNFOUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhy
ZWFkcy5oICovLApAQCAtNjAzMiw2ICs2MDg3LDggQEAKIAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5
OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJB
IC8qIFdhc21TaWduYXR1cmUuY3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAv
KiBXYXNtU2lnbmF0dXJlLmggKi8sCisJCQkJQUQ1QzM2RTMxRjY5RUM4QjAwMEJDQUFGIC8qIFdh
c21UYWJsZS5jcHAgKi8sCisJCQkJQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJs
ZS5oICovLAogCQkJCTUyNTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAq
LywKIAkJCQk1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovLAogCQkJ
CTUzRTlFMEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLywKQEAgLTc2
MzIsNiArNzY4OSwxMCBAQAogCQlBRDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFEOERENkQwMUY2NzA4
QTMwMDA0RUI1MiAvKiBKU1RvV2FzbS5jcHAgKi8sCisJCQkJQUQ4REQ2Q0YxRjY3MDg5RjAwMDRF
QjUyIC8qIEpTVG9XYXNtLmggKi8sCisJCQkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpT
V2ViQXNzZW1ibHkuY3BwICovLAorCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dl
YkFzc2VtYmx5LmggKi8sCiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suY3BwICovLAogCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi8sCiAJCQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVB
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8sCkBAIC03NjUxLDYgKzc3
MTIsOCBAQAogCQkJCUFEMkZDQkFEMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yLmggKi8sCiAJCQkJQUQyRkNCQUUxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAgKi8sCiAJCQkJQUQyRkNCQUYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2Vi
QXNzZW1ibHlUYWJsZS5oICovLAorCQkJCUFERDA5QUVGMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNt
VG9KUy5jcHAgKi8sCisJCQkJQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmgg
Ki8sCiAJCQkJQUQyRkNCQjAxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVy
cm9yQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUFEMkZDQkIxMURCNThEQTQwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJQUQyRkNCQjIxREI1
OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcCAqLywK
QEAgLTc5MjYsNiArNzk4OSw3IEBACiAJCQkJMEZFQzg1QkIxQkUxNDYyRjAwODBGRjc0IC8qIEIz
SW5zZXJ0aW9uU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDIxRDlDNkQy
NzAwMUI5ODI1IC8qIEIzS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3
NDAwQjVBRjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBRDVDMzZFQzFGNzVBRDdDMDAwQkNBQUYgLyogV2FzbVRvSlMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzE5REEwNDFDMUJFNDBEMDAxRDI2MEIgLyogQjNMb3dlck1hY3Jvc0FmdGVy
T3B0aW1pemF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE2LDYgKzgwODAsNyBA
QAogCQkJCUUzMjhEQUVCMUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRlY29kZVJld3JpdGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVV
c2VEZWYuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBK
U1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJB
NDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUI4MzkyRTFCQUNBRDM2MDA0
NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUMzQzYwMUYz
NzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCBpbiBIZWFkZXJzICovLApAQCAtODIx
OSw2ICs4Mjg0LDcgQEAKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdO
dWxsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTcxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCUFENUMzNkREMUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhERjgyMDAyQjJB
RDcgLyogREZHT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkYxQzkwQzU1
QjAwNDgwMTUxIC8qIERGR09wSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzI5LDggKzgzOTUs
MTAgQEAKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Np
b25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkVBMUY3NUFENkEwMDBCQ0FB
RiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNTcxRjMzQTQ1MzAwRjU5
QjZDIC8qIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0E4QUYzODE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0MzE3RUE5RjU5MDBBQkIyMTcgLyogRlBSSW5m
by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM0RURCRjcxREI1RkZDOTAwREM4N0E1IC8qIEZyYW1l
VHJhY2Vycy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzMxLDcgKzg3OTksNiBAQAogCQkJCUE3NDgy
QjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1Nl
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQUQyRkNDMzExREI4M0Q0OTAwQjNFNzM2IC8qIEpTV2Vi
QXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAv
KiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVGRDQ4NDFF
QkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNv
bXBpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTI0LDYgKzg5OTEsNyBAQAogCQkJCUJD
RDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0MzOUZCMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkI0MTExQzdCMjM1MDA3QTUzMTUgLyogUmVnRXhwS2V5
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QjBFMTZGNUNEMDBCMzQ0NjAgLyogUmVn
RXhwT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGRDFDOEY2NTk1MDA0ODAxNTEg
LyogUmVnRXhwT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzQwRTE3
MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKaW5kZXggZmQ1MjZiMi4uMzhkMDMxZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dApAQCAtOTI2LDcgKzkyNiw2IEBAIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5
cGUuY3BwCiB0b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNwZWN0b3Iu
Y3BwCiAKLXdhc20vSlNXZWJBc3NlbWJseS5jcHAKIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CiB3YXNtL1dhc21CQlFQbGFuLmNwcAogd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTkzNCw5ICs5
MzMsMTIgQEAgd2FzbS9XYXNtQ2FsbGVlLmNwcAogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwCiB3YXNtL1dhc21Db2RlQmxvY2suY3BwCiB3YXNtL1dhc21Db250ZXh0LmNwcAord2FzbS9X
YXNtRW1iZWRkZXIuaAogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAogd2FzbS9XYXNt
Rm9ybWF0LmNwcAogd2FzbS9XYXNtSW5kZXhPck5hbWUuY3BwCit3YXNtL1dhc21JbnN0YW5jZS5j
cHAKK3dhc20vV2FzbUluc3RhbmNlLmgKIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcAogd2Fz
bS9XYXNtTWVtb3J5LmNwcAogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC05NDks
MTAgKzk1MSwxNSBAQCB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291
bnQuY3BwCiB3YXNtL1dhc21QbGFuLmNwcAogd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAord2FzbS9X
YXNtVGFibGUuY3BwCit3YXNtL1dhc21UYWJsZS5oCiB3YXNtL1dhc21UaHVua3MuY3BwCiB3YXNt
L1dhc21WYWxpZGF0ZS5jcHAKIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCit3YXNtL2pzL0pTVG9X
YXNtLmNwcAord2FzbS9qcy9KU1RvV2FzbS5oCit3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5j
cHAKQEAgLTk2Miw2ICs5NjksOCBAQCB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKK3dhc20vanMvV2Fz
bVRvSlMuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmgKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA0
MjI4MGM1Li42ZGY0NDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTE3OSw3ICsxNzksNyBAQCBDYWxsU2l0ZUlu
ZGV4IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6b3JpZ2luYWxDYWxsU2l0ZUluZGV4KCkgY29uc3Qg
eyByZXR1cm4gc3R1Ygogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4
Y2VwdGlvbkhhbmRsZXIoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7Ci0gICAgaml0LT5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0pOworICAgIGpp
dC0+Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJm1fdm0udG9w
RW50cnlGcmFtZSk7CiAgICAgaWYgKG5lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24o
KSkgewogICAgICAgICAvLyBUbyB0aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4
Y2VwdGlvbiBoYW5kbGluZwogICAgICAgICAvLyBjYWxsIHNpdGUsIHRoZXkgd2lsbCBleHBlY3Qg
dGhlIE9TUiBleGl0IHRvIGJlIGFycml2ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXIuY3BwCmluZGV4IDM0OGM2OGMuLjc3MTZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKICAqCkBAIC02NTIsOCArNjUyLDggQEAgdm9pZCBEZWJ1Z2dlcjo6c3RlcE91
dE9mRnVuY3Rpb24oKQogICAgIGlmICghbV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsK
LSAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRD
YWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSkgOiBudWxscHRyOworICAgIEVu
dHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgbV9wYXVz
ZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKSA6IG51bGxwdHI7CiAgICAgbV9wYXVzZU9uU3RlcE91
dCA9IHRydWU7CiAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAg
IG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKQEAgLTgzMSw4ICs4MzEsOCBA
QCB2b2lkIERlYnVnZ2VyOjpyZXR1cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBp
ZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZy
YW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVu
dHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5
RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIGNh
bGwsIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdl
IGFyZSByZXR1cm5pbmcgdG8uCiAgICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQg
PSB0cnVlOwpAQCAtODU2LDggKzg1Niw4IEBAIHZvaWQgRGVidWdnZXI6OnVud2luZEV2ZW50KENh
bGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9w
Vk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxs
RnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9w
RW50cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAog
ICAgIC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYW4gZXhjZXB0aW9uIGxvY2F0aW9uIGxpa2UgYSBz
dGVwLW91dC4KICAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFt
ZSkKQEAgLTg4Niw4ICs4ODYsOCBAQCB2b2lkIERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRv
cFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2Fs
bEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRv
cEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAK
ICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIHByb2dyYW0sIGNvdWxkIGJlIGV2YWwoKSwgdGhlcmUg
d2FzIGF0IGxlYXN0IG9uZSBleHByZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVy
bmluZyB0by4KICAgICBtX3Bhc3RGaXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9IHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGQxOWRk
YjcuLmZmOTc4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2Vw
dGlvbkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJv
bGxiYWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1l
Um9sbGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAg
ICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3
byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpAQCAt
MTYwLDcgKzE2MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
cygpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhj
ZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAog
ICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRz
LCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNTgzYmY5OC4uMDIxZWFhYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTcsNyAr
MzE3LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICBSZWdpc3RlclNldCBkb250U2F2
ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBS
ZWdpc3RlclNldDo6YWxsRlBScygpKTsKIAogICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBy
ZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsKLSAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQg
PSB2bUVudHJ5UmVjb3JkKHZtLT50b3BWTUVudHJ5RnJhbWUpOworICAgIFZNRW50cnlSZWNvcmQq
IHJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgUmVnaXN0ZXJB
dE9mZnNldCBjdXJyZW50RW50cnkgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpOwogICAg
ICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWcoKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAzNDMzMDhjLi5jNzdlMDA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg1LDcg
KzE4NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7
CiAgICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNh
dXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgogICAgICAgICAgICAgLy8g
U28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAg
ICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoKnZtKTsKKyAgICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAg
ICBqaXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIGppdC5hZGRQdHIoCkBAIC01
MzcsNyArNTM3LDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGpp
dCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGppdC5lbWl0TWF0ZXJp
YWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5k
bGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCZ2bS50b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIERvIGFsbCBkYXRh
IGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2su
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCBiNzMyN2YzLi5l
ZDBhZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC0xMzUs
NyArMTM1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50cnlK
dW1wRGVzdGluYXRpb24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0
LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50
b3BFbnRyeUZyYW1lKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMo
KTsKIAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCmluZGV4IGZmMmNlNTYuLjAzZjAyZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgY29t
cGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiAK
ICAgICAvLyBFbWl0IHRoZSBleGNlcHRpb24gaGFuZGxlci4KICAgICAqc3RhdGUuZXhjZXB0aW9u
SGFuZGxlciA9IGppdC5sYWJlbCgpOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggN2MwMTgxZC4uYWFjODY4MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Myw3ICsxNDMsNyBA
QCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2Vw
dGlvbiA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKLSAg
ICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKTsKKyAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigmdm0udG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
ICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29r
dXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAxY2ViYzAxLi5l
MGU1OTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCkBAIC0yNjQsNyArMjY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBqaXQu
c3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5
RnJhbWUpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcAppbmRleCA4ZTA4MWQ3Li5jZWZjYWQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg2LDcg
KzE4Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIC8vIFRoZSBmaXJzdCB0aGlu
ZyB3ZSBuZWVkIHRvIGRvIGlzIHJlc3RhYmxpc2ggb3VyIGZyYW1lIGluIHRoZSBjYXNlIG9mIGFu
IGV4Y2VwdGlvbi4KICAgICBpZiAoZXhpdC5pc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkpIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoKTsgLy8gVGhlIGZpcnN0
IHRpbWUgd2UgaGl0IHRoaXMgZXhpdCwgbGlrZSBhdCBhbGwgb3RoZXIgdGltZXMsIHRoaXMgZmll
bGQgc2hvdWxkIGJlIG5vbi1udWxsLgotICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgIGppdC5yZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlG
cmFtZSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRj
aCgpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CkBAIC00MTIsOCArNDEyLDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJl
Z2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhh
bmRsZXIoKSkgewotICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcFZNRW50cnlGcmFtZSwgR1BS
SW5mbzo6cmVnVDEpOwotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BS
SW5mbzo6cmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcEVudHJ5RnJhbWUsIEdQ
UkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJ
bmZvOjpyZWdUMSk7CiAgICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyBy
ZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggOWZhMjlkMC4uYmU2MWE0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTQs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZy
YW1lLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNj
b3BlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJp
bnRTdHJlYW0uaD4KQEAgLTIxNyw3ICsyMTgsNyBAQCBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1l
Ojp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAgICAgaWYgKCFjYWxsZWUoKS5pc1dhc20oKSkKICAgICAgICAgcmV0dXJuIGxleGlj
YWxHbG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gV2FzbTo6bG9hZENvbnRleHQodm0pLT5nbG9i
YWxPYmplY3QoKTsKKyAgICByZXR1cm4gdm0ud2FzbUNvbnRleHQubG9hZCgpLT5nbG9iYWxPYmpl
Y3QoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICByZXR1cm4gbGV4aWNhbEds
b2JhbE9iamVjdCgpOwpAQCAtMjM3LDI0ICsyMzgsMjQgQEAgYm9vbCBDYWxsRnJhbWU6OmlzQW55
V2FzbUNhbGxlZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1DYWxsRnJhbWUqIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFtZSkKK0NhbGxGcmFt
ZSogQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYgY3VyckVudHJ5RnJhbWUpCiB7
Ci0gICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJyVk1FbnRyeUZyYW1l
KSB7Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRyeVJl
Y29yZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAgY3VyclZNRW50cnlGcmFtZSA9IGN1cnJW
TUVudHJ5UmVjb3JkLT5wcmV2VG9wVk1FbnRyeUZyYW1lKCk7CisgICAgaWYgKGNhbGxlckZyYW1l
T3JFbnRyeUZyYW1lKCkgPT0gY3VyckVudHJ5RnJhbWUpIHsKKyAgICAgICAgVk1FbnRyeVJlY29y
ZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAg
ICAgICAgY3VyckVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcEVudHJ5RnJh
bWUoKTsKICAgICAgICAgcmV0dXJuIGN1cnJWTUVudHJ5UmVjb3JkLT5wcmV2VG9wQ2FsbEZyYW1l
KCk7CiAgICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFt
ZU9yVk1FbnRyeUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihj
YWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsKIH0KIAotU1VQUFJFU1NfQVNBTiBDYWxsRnJhbWUq
IENhbGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlG
cmFtZSkKK1NVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2FmZUNhbGxlckZy
YW1lKEVudHJ5RnJhbWUqJiBjdXJyRW50cnlGcmFtZSkKIHsKLSAgICBpZiAodW5zYWZlQ2FsbGVy
RnJhbWVPclZNRW50cnlGcmFtZSgpID09IGN1cnJWTUVudHJ5RnJhbWUpIHsKLSAgICAgICAgVk1F
bnRyeVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJWTUVudHJ5
RnJhbWUpOwotICAgICAgICBjdXJyVk1FbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnVu
c2FmZVByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAgICBpZiAodW5zYWZlQ2FsbGVyRnJhbWVPckVu
dHJ5RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAgICAgICBWTUVudHJ5UmVjb3JkKiBj
dXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyckVudHJ5RnJhbWUpOworICAgICAg
ICBjdXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wRW50cnlG
cmFtZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQtPnVuc2FmZVByZXZUb3BD
YWxsRnJhbWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KHVu
c2FmZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENhbGxGcmFtZSo+KHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCiBTb3Vy
Y2VPcmlnaW4gQ2FsbEZyYW1lOjpjYWxsZXJTb3VyY2VPcmlnaW4oKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDYyMzA5YTAuLjZkNWQ3MjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAg
LTE0MSwxMiArMTQxLDEyIEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBDYWxsRnJhbWUm
IG9wZXJhdG9yPShjb25zdCBSZWdpc3RlciYgcikgeyAqc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0
aGlzKSA9IHI7IHJldHVybiAqdGhpczsgfQogCi0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9y
Vk1FbnRyeUZyYW1lKCkpOyB9Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lT3JWTUVudHJ5RnJh
bWUoKSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KLSAg
ICAgICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1l
KCkgY29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9
CisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsgfQorICAgICAgICB2
b2lkKiBjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZyYW1l
QW5kUEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVuc2Fm
ZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJh
bWVBbmRQQygpLmNhbGxlckZyYW1lOyB9CiAKLSAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxs
ZXJGcmFtZShWTUVudHJ5RnJhbWUqJik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxG
cmFtZSogY2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYpOworICAgICAgICBDYWxsRnJhbWUqIHVu
c2FmZUNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IENhbGxGcmFtZSogY2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKIAogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBTb3VyY2VPcmlnaW4gY2FsbGVyU291cmNlT3JpZ2luKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAppbmRleCBjNWI2
YjgzLi43NmFjZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvRnJhbWVUcmFjZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ZyYW1lVHJhY2Vycy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVj
dCBWTUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIAogY2xhc3MgU3VzcGVuZEV4Y2Vw
dGlvblNjb3BlIHsKIHB1YmxpYzoKQEAgLTc0LDMzICs3NCwzMyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAgICAg
QVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9j
YXN0PHZvaWQqPih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgICAgIEFTU0VSVChyZWludGVy
cHJldF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0t
PnRvcEVudHJ5RnJhbWUpKTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsK
ICAgICB9CiB9OwogCiBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB7CiBw
dWJsaWM6Ci0gICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9y
ZShWTSogdm0sIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKKyAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKFZN
KiB2bSwgRW50cnlGcmFtZSogRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAg
ICAgIDogbV92bSh2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFTU0VS
VChjYWxsRnJhbWUpOwotICAgICAgICBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZN
RW50cnlGcmFtZTsKKyAgICAgICAgbV9zYXZlZFRvcEVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlG
cmFtZTsKICAgICAgICAgbV9zYXZlZFRvcENhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7Ci0g
ICAgICAgIHZtLT50b3BWTUVudHJ5RnJhbWUgPSB2bUVudHJ5RnJhbWU7CisgICAgICAgIHZtLT50
b3BFbnRyeUZyYW1lID0gRW50cnlGcmFtZTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNh
bGxGcmFtZTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5OYXRpdmVDYWxsRnJhbWVUcmFj
ZXJXaXRoUmVzdG9yZSgpCiAgICAgewotICAgICAgICBtX3ZtLT50b3BWTUVudHJ5RnJhbWUgPSBt
X3NhdmVkVG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX3ZtLT50b3BFbnRyeUZyYW1lID0gbV9z
YXZlZFRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1fdm0tPnRvcENhbGxGcmFtZSA9IG1fc2F2ZWRU
b3BDYWxsRnJhbWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwotICAgIFZNRW50
cnlGcmFtZSogbV9zYXZlZFRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBtX3NhdmVk
VG9wRW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIG1fc2F2ZWRUb3BDYWxsRnJhbWU7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAppbmRleCAxMzUzZTEwLi5hNTEzZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTY1Myw5ICs2NTMsOSBAQCBwdWJsaWM6
CiAKICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7
CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2aXNpdG9yKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodmlzaXRvcik7CiAKLSAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53aW5kaW5nID0g
dmlzaXRvci0+Y2FsbGVySXNWTUVudHJ5RnJhbWUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRTdG9w
VW53aW5kaW5nID0gdmlzaXRvci0+Y2FsbGVySXNFbnRyeUZyYW1lKCk7CiAgICAgICAgIGlmIChz
aG91bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9u
ZTsKIApAQCAtNjYzLDcgKzY2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
dm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNr
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAgICB7
CiAjaWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAw
CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSB2aXNp
dG9yLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC02NzYsNyArNjc2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgaW50cHRyX3QqIGZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdCo+KG1f
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3Vu
dCA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+c2l6ZSgpOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiBy
ZWNvcmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgVk1F
bnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRvcEVudHJ5RnJhbWUpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAg
ICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IGN1cnJlbnRDYWxsZWVT
YXZlcy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGN1cnJl
bnRFbnRyeS5yZWcoKSkpCkBAIC03MDIsNyArNzAyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJ
bmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBF
eGMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBpZiAo
dW53aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIGlmIChjYWxs
RnJhbWUtPmNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUp
CisgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gdm0u
dG9wRW50cnlGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGNh
bGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggODVkMTQ3YS4uMWRh
OTNjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxOCArNDQsMTggQEAgU3RhY2tWaXNpdG9y
OjpTdGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0pCiAgICAgQ2FsbEZy
YW1lKiB0b3BGcmFtZTsKICAgICBpZiAoc3RhcnRGcmFtZSkgewogICAgICAgICBBU1NFUlQodm0p
OwotICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsK
KyAgICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKICAgICAg
ICAgdG9wRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgICAgICAKLSAgICAgICAgaWYgKHRv
cEZyYW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKSA9PSBz
dGF0aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7Ci0gICAgICAgICAgICB0b3BGcmFtZSA9IHZt
RW50cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsK
LSAgICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJh
bWUubV9WTUVudHJ5RnJhbWUpLT5tX3ByZXZUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIGlmICh0
b3BGcmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFtZS5tX2VudHJ5RnJhbWUpID09IHN0
YXRpY19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKKyAgICAgICAgICAgIHRvcEZyYW1lID0gdm1F
bnRyeVJlY29yZChtX2ZyYW1lLm1fZW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKKyAg
ICAgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1f
ZW50cnlGcmFtZSktPm1fcHJldlRvcEVudHJ5RnJhbWU7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gMDsKKyAgICAgICAgbV9mcmFtZS5t
X2VudHJ5RnJhbWUgPSAwOwogICAgICAgICB0b3BGcmFtZSA9IDA7CiAgICAgfQotICAgIG1fZnJh
bWUubV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IGZhbHNlOworICAgIG1fZnJhbWUubV9jYWxsZXJJ
c0VudHJ5RnJhbWUgPSBmYWxzZTsKICAgICByZWFkRnJhbWUodG9wRnJhbWUpOwogCiAgICAgLy8g
RmluZCB0aGUgZnJhbWUgdGhlIGNhbGxlciB3YW50cyB0byBzdGFydCB1bndpbmRpbmcgZnJvbS4K
QEAgLTc1LDE0ICs3NSwxNCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSgpCiAg
ICAgICAgICAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCAmaW5s
aW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIpOwogICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZSA9IG1fZnJhbWUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFt
ZTsKKyAgICAgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlckVu
dHJ5RnJhbWU7CiAgICAgICAgICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUuY2Fs
bEZyYW1lKCksIGNhbGxlckNvZGVPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2Zy
YW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9m
cmFtZS5tX0NhbGxlckVudHJ5RnJhbWU7CiAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVyRnJh
bWUoKSk7CiB9CiAKQEAgLTE1Miw5ICsxNTIsOSBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5v
bklubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaQog
ewogICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgbV9mcmFtZS5tX2Fy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpOwotICAgIG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1f
Vk1FbnRyeUZyYW1lOwotICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUobV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSk7Ci0gICAgbV9mcmFtZS5tX2Nh
bGxlcklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSAhPSBtX2Zy
YW1lLm1fVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lID0gbV9m
cmFtZS5tX2VudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX2NhbGxlckZyYW1lID0gY2FsbEZyYW1l
LT5jYWxsZXJGcmFtZShtX2ZyYW1lLm1fQ2FsbGVyRW50cnlGcmFtZSk7CisgICAgbV9mcmFtZS5t
X2NhbGxlcklzRW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lICE9IG1fZnJh
bWUubV9lbnRyeUZyYW1lOwogICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwogCiAg
ICAgQ2FsbGVlQml0cyBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwpAQCAtNTAwLDcgKzUw
MCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBJ
bmRlbnRlciBpbmRlbnQsIHN0ZDo6ZnVuY3Rpb248CiAKICAgICAgICAgICAgIGluZGVudC0tOwog
ICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludChpbmRlbnQsICJ2bUVudHJ5RnJhbWU6ICIsIFJh
d1BvaW50ZXIodm1FbnRyeUZyYW1lKCkpLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KGluZGVu
dCwgIkVudHJ5RnJhbWU6ICIsIFJhd1BvaW50ZXIobV9lbnRyeUZyYW1lKSwgIlxuIik7CiAgICAg
ICAgIGluZGVudC0tOwogICAgIH0KICAgICBvdXQucHJpbnQoaW5kZW50LCAifVxuIik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5kZXgg
OGFkMDk0MC4uNzA3OWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAg
ICAgICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAg
c2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpczsgfQotICAgICAgICBib29sIGNhbGxlcklzVk1FbnRyeUZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc1ZNRW50cnlGcmFtZTsgfQorICAgICAgICBi
b29sIGNhbGxlcklzRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNFbnRyeUZy
YW1lOyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxlckZyYW1lOyB9CiAgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsZWU7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jazsgfQpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgQ2xv
bmVkQXJndW1lbnRzKiBjcmVhdGVBcmd1bWVudHMoKTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2
bUVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX1ZNRW50cnlGcmFtZTsgfQogICAgICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBJbmRlbnRlciA9IEluZGVudGVy
KCkpIGNvbnN0OwpAQCAtMTE0LDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICNlbmRpZgogICAgICAgICBDYWxsRnJhbWUqIG1f
Y2FsbEZyYW1lOwotICAgICAgICBWTUVudHJ5RnJhbWUqIG1fVk1FbnRyeUZyYW1lOwotICAgICAg
ICBWTUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICBFbnRyeUZyYW1l
KiBtX2VudHJ5RnJhbWU7CisgICAgICAgIEVudHJ5RnJhbWUqIG1fQ2FsbGVyRW50cnlGcmFtZTsK
ICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwogICAgICAgICBDYWxsZWVCaXRzIG1f
Y2FsbGVlOwogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtMTIzLDcgKzEyMiw3
IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CiAgICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIFdhc206OkluZGV4
T3JOYW1lIG1fd2FzbUZ1bmN0aW9uSW5kZXhPck5hbWU7Ci0gICAgICAgIGJvb2wgbV9jYWxsZXJJ
c1ZNRW50cnlGcmFtZSA6IDE7CisgICAgICAgIGJvb2wgbV9jYWxsZXJJc0VudHJ5RnJhbWUgOiAx
OwogICAgICAgICBib29sIG1faXNXYXNtRnJhbWUgOiAxOwogCiAgICAgICAgIGZyaWVuZCBjbGFz
cyBTdGFja1Zpc2l0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvVk1FbnRyeVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1ZNRW50cnlSZWNvcmQuaAppbmRleCBmMzZjMmJlLi4wMTAzYTc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyAr
MjksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFZNRW50cnlGcmFtZTsKK3N0cnVj
dCBFbnRyeUZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKQEAgLTQwLDcgKzQw
LDcgQEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgICAqLwogICAgIFZNKiBtX3ZtOwogICAg
IEV4ZWNTdGF0ZSogbV9wcmV2VG9wQ2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFtZSogbV9wcmV2
VG9wVk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fcHJldlRvcEVudHJ5RnJhbWU7CiAK
ICNpZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAK
ICAgICBpbnRwdHJfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW05VTUJFUl9PRl9DQUxMRUVf
U0FWRVNfUkVHSVNURVJTXTsKQEAgLTQ5LDIwICs0OSwyMCBAQCBzdHJ1Y3QgVk1FbnRyeVJlY29y
ZCB7CiAgICAgRXhlY1N0YXRlKiBwcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9w
Q2FsbEZyYW1lOyB9CiAgICAgU1VQUFJFU1NfQVNBTiBFeGVjU3RhdGUqIHVuc2FmZVByZXZUb3BD
YWxsRnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BDYWxsRnJhbWU7IH0KIAotICAgIFZNRW50cnlG
cmFtZSogcHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcFZNRW50cnlGcmFt
ZTsgfQotICAgIFNVUFBSRVNTX0FTQU4gVk1FbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wVk1FbnRy
eUZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wVk1FbnRyeUZyYW1lOyB9CisgICAgRW50cnlGcmFt
ZSogcHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BFbnRyeUZyYW1lOyB9Cisg
ICAgU1VQUFJFU1NfQVNBTiBFbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wRW50cnlGcmFtZSgpIHsg
cmV0dXJuIG1fcHJldlRvcEVudHJ5RnJhbWU7IH0KIH07CiAKLWV4dGVybiAiQyIgVk1FbnRyeVJl
Y29yZCogdm1FbnRyeVJlY29yZChWTUVudHJ5RnJhbWUqKTsKK2V4dGVybiAiQyIgVk1FbnRyeVJl
Y29yZCogdm1FbnRyeVJlY29yZChFbnRyeUZyYW1lKik7CiAKLXN0cnVjdCBWTUVudHJ5RnJhbWUg
eworc3RydWN0IEVudHJ5RnJhbWUgewogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9DQUxM
RUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgdm1FbnRyeVJlY29y
ZE9mZnNldCgpCiAgICAgewotICAgICAgICBWTUVudHJ5RnJhbWUqIGZha2VWTUVudHJ5RnJhbWUg
PSByZWludGVycHJldF9jYXN0PFZNRW50cnlGcmFtZSo+KDB4MTAwMCk7Ci0gICAgICAgIFZNRW50
cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZVZNRW50cnlGcmFtZSk7CisgICAg
ICAgIEVudHJ5RnJhbWUqIGZha2VFbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxFbnRyeUZy
YW1lKj4oMHgxMDAwKTsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJl
Y29yZChmYWtlRW50cnlGcmFtZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZha2VWTUVudHJ5RnJhbWUpKTsKKyAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYWtl
RW50cnlGcmFtZSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlU2F2ZVJl
Z2lzdGVyc0J1ZmZlck9mZnNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAKaW5kZXggOGQzMWY3YS4uMzcxOWJhNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNTgyLDcgKzU4Miw3IEBAIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoVk0mIHZtLCBHUFJSZWcgc2NyYXRj
aDAsIEdQUlJlZyBzY3JhdGNoMSwKIH0KICNlbmRpZgogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2
bSkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqKiB0b3BFbnRyeUZyYW1lKQogewogI2lmIE5V
TUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRz
KCk7CkBAIC02MDUsOCArNjA1LDggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0KICAgICB9CiAg
ICAgQVNTRVJUKHNjcmF0Y2ggIT0gSW52YWxpZEdQUlJlZyk7CiAKLSAgICBsb2FkUHRyKCZ2bS50
b3BWTUVudHJ5RnJhbWUsIHNjcmF0Y2gpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRy
eUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAg
ICBsb2FkUHRyKHRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRj
aCk7CiAKICAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMgZXhjZXB0IGZvciB0aGUgc2Ny
YXRjaC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7
CkBAIC03NzgsNDEgKzc3OCw0MSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRW
YWx1ZVRvQm9vbGVhbihWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZQogfQogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4
dChHUFJSZWcgZHN0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3Rh
bmNlKEdQUlJlZyBkc3QpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2Fz
bTo6dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VG
YXN0VExTKCkpIHsKICAgICAgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRMU09mZnNldEZvcktleShX
VEZfV0FTTV9DT05URVhUX0tFWSksIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYKLSAgICBtb3ZlKFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRQ
b2ludGVyLCBkc3QpOworICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53
YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgZHN0KTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBl
cnM6OnN0b3JlV2FzbUNvbnRleHQoR1BSUmVnIHNyYykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYykKIHsKICNpZiBFTkFCTEUoRkFTVF9U
TFNfSklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYg
KFdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBzdG9yZVRvVExTUHRyKHNy
YywgZmFzdFRMU09mZnNldEZvcktleShXVEZfV0FTTV9DT05URVhUX0tFWSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVy
SW5mbzo6Z2V0KCkud2FzbUNvbnRleHRQb2ludGVyKTsKKyAgICBtb3ZlKHNyYywgV2FzbTo6UGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiB9CiAK
LWJvb2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJl
Z2lzdGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5l
ZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0g
ICAgaWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIGxvYWRGcm9tVExTUHRyTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IEFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0
ZXIoKQorYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAg
aWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6
OnVzZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIHN0b3JlVG9UTFNQdHJOZWVkc01hY3JvU2Ny
YXRjaFJlZ2lzdGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CkBAIC04NzUsMTAgKzg3
NSwxMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKFZNJiB2bSwgVl9EZWJ1Z09w
ZXJhdGlvbl9FUFAgZnVuY3Rpb24sIHZvaWQqIGFyZwogICAgIH0KIH0KIAotdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJ
bXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxl
ZVNhdmVzQnVmZmVyKQogewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4g
MAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0
ZXJzQnVmZmVyT2Zmc2V0KCkpLCBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBj
YWxsZWVTYXZlc0J1ZmZlcik7CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVl
U2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lz
dGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhNjhj
MzY5Li5jYzcwYTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKQEAgLTM2MCwyOCArMzYwLDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSKQogICAgIHsK
ICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHZtR1BSLCBWTTo6dG9wVk1FbnRyeUZyYW1lT2Zmc2V0KCkpLCB2bUdQUik7Ci0g
ICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KHZtR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBWTTo6dG9wRW50cnlGcmFt
ZU9mZnNldCgpKSwgdm1HUFIpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwodm1HUFIpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFN
KHZtR1BSKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
IH0pCisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihFbnRyeUZyYW1lKiogdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkK
ICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAg
IEdQUlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9h
ZFB0cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAgICAgICAgbG9h
ZFB0cih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVT
RURfUEFSQU0odm0pOwogICAgICAgICBVTlVTRURfUEFSQU0odXNlZFJlZ2lzdGVycyk7CiAjZW5k
aWYKICAgICB9CiAKLSAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihWTSYpOworICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiopOwogCi0gICAgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCisgICAgdm9pZCBjb3B5Q2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
RW50cnlGcmFtZSoqIHRvcEVudHJ5RnJhbWUsIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAg
ICAgewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBH
UFJSZWcgdGVtcDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoMCk7CkBAIC0zOTIsOCArMzky
LDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogCiAgICAgICAgIC8v
IENvcHkgc2F2ZWQgY2FsbGVlU2F2ZXMgb24gc3RhY2sgb3IgdW5zYXZlZCBjYWxsZWVTYXZlcyBp
biByZWdpc3RlciB0byB2bSBjYWxsZWVTYXZlIGJ1ZmZlcgotICAgICAgICBsb2FkUHRyKCZ2bS50
b3BWTUVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVu
dHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHRlbXAxKTsKKyAg
ICAgICAgbG9hZFB0cih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwg
dGVtcDEpOwogCiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9
IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwpAQCAtNDAxLDEyICs0MDEsMTIgQEAgcHVibGljOgogICAgICAgICB1bnNp
Z25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAg
ICBSZWdpc3RlckF0T2Zmc2V0IHZtRW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAg
ICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KHZtRW50cnkucmVnKCkpKQorICAgICAg
ICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKKyAg
ICAgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogY3VycmVu
dEZyYW1lRW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmZpbmQodm1FbnRyeS5yZWcoKSk7Cisg
ICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRD
YWxsZWVTYXZlcy0+ZmluZChlbnRyeS5yZWcoKSk7CiAKLSAgICAgICAgICAgIGlmICh2bUVudHJ5
LnJlZygpLmlzR1BSKCkpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKSB7
CiAgICAgICAgICAgICAgICAgR1BSUmVnIHJlZ1RvU3RvcmU7CiAgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnRGcmFtZUVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgY2FsbGVl
U2F2ZSBmcm9tIHN0YWNrIGludG8gdGVtcCByZWdpc3RlcgpAQCAtNDE0LDkgKzQxNCw5IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyYW1lUG9pbnRlclJl
Z2lzdGVyLCBjdXJyZW50RnJhbWVFbnRyeS0+b2Zmc2V0KCkpLCByZWdUb1N0b3JlKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBzdG9yZSBjYWxs
ZWUgc2F2ZSBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICByZWdUb1N0b3JlID0gdm1FbnRy
eS5yZWcoKS5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnVG9TdG9yZSA9IGVudHJ5LnJl
ZygpLmdwcigpOwogCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVz
cyh0ZW1wMSwgdm1FbnRyeS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJl
Z1RvU3RvcmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvU3RvcmU7CiAgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnRGcmFtZUVudHJ5KSB7CkBAIC00MjUsOSArNDI1LDkgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIGZwUmVnVG9TdG9yZSk7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3Qgc3RvcmUgY2Fs
bGVlIHNhdmUgZGlyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gdm1F
bnRyeS5yZWcoKS5mcHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gZW50
cnkucmVnKCkuZnByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1RvU3Rv
cmUsIEFkZHJlc3ModGVtcDEsIHZtRW50cnkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBz
dG9yZURvdWJsZShmcFJlZ1RvU3RvcmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBAIC0xNjQ0LDE0ICsxNjQ0LDE0IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHZvaWQgbG9h
ZFdhc21Db250ZXh0KEdQUlJlZyBkc3QpOwotICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dChHUFJS
ZWcgc3JjKTsKLSAgICBzdGF0aWMgYm9vbCBsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCk7Ci0gICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9T
Y3JhdGNoUmVnaXN0ZXIoKTsKKyAgICB2b2lkIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJl
ZyBkc3QpOworICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBzcmMpOwor
ICAgIHN0YXRpYyBib29sIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hS
ZWdpc3RlcigpOworICAgIHN0YXRpYyBib29sIHN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcg
Y2FsbGVlU2F2ZXNCdWZmZXIpOworICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CiAKICAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9iYXNlbGluZUNvZGVCbG9j
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA1ZWNmM2E2Li43Yzk0Y2JhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBKSVQ6OmVt
aXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5j
aEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZK
SVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CiAK
LSAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdp
c3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsK
IAogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQp
OwogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1
ZUdQUikpOwpAQCAtODg1LDcgKzg4NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2Vw
dGlvbkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJv
bGxiYWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1l
Um9sbGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAg
ICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3
byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KIApAQCAt
OTA1LDcgKzkwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KCkKICAgICAgICAgbV9leGNlcHRpb25IYW5kbGVyID0gbGFiZWwoKTsKICAgICAgICAgbV9leGNl
cHRpb25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAg
ICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMs
IHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggY2EyZGI4Yy4uZjIwMThjYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTYsOCArNTYsOCBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxG
cmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgCiAgICAgRXhlY1N0YXRlKiBzaGFk
b3dDaGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVu
d2luZEZyb21DYWxsZXJGcmFtZSkgewotICAgICAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlG
cmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFt
ZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgRW50
cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgICAgICBzaGFk
b3dDaGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUp
OwogICAgIH0KICAgICB2bS0+c2hhZG93Q2hpY2tlbigpLmxvZygqdm0sIHNoYWRvd0NoaWNrZW5U
b3BGcmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aHJvd1BhY2tldCgpKTsKICAgICAKQEAg
LTg0LDcgKzg0LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxs
RnJhbWUsIFVud2luZFN0YXJ0IHVud2luZFN0YXJ0KQogICAgIH0gZWxzZQogICAgICAgICBjYXRj
aFJvdXRpbmUgPSBMTEludDo6Z2V0Q29kZVB0cihoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbik7CiAg
ICAgCi0gICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgQVNTRVJUKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2bS0+dG9wRW50cnlGcmFtZSkpOwogCiAgICAgdm0tPmNhbGxGcmFtZUZvckNhdGNoID0gY2Fs
bEZyYW1lOwogICAgIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyA9IGNhdGNoUm91dGluZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDliNDE2NmEuLmNi
NjRiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNDU1
LDcgKzQ1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAg
IGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOwor
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50
b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
KnZtKCkpOwpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgcmVzdG9y
ZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50
cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBs
b2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxs
RnJhbWVSZWdpc3Rlcik7CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2xvb3BfaGludChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGkKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNG
cm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRv
cEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUs
IG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFu
Y2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBhMTIyOGQzLi42MDdhNDg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0
ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03NjUsNyArNzY1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAg
ICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9w
RW50cnlGcmFtZSk7CiAgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2
bSgpKTsKQEAgLTgyNiw3ICs4MjYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fc3RyaW5n
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigq
dm0oKSk7CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92
bSksIHJlZ1QzKTsKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUg
Zm9yIHRoZSBoYW5kbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKaW5kZXggYzA0Y2RjNC4uZTYzOTkzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xMDMsMTQgKzEwMywxNCBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBD
b2RlQmxvY2sqCiAgICAgVk0qIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlG
cmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9
IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlG
cmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7CiAg
ICAgICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0tPnRv
cFZNRW50cnlGcmFtZTsKKyAgICAgICAgZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOwog
ICAgIH0KIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwg
dm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0
aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgdGhyb3dT
dGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKIH0KIApAQCAtMTIwLDEwICsx
MjAsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93RGl2aWRlRXJyb3IoRXhl
Y1N0YXRlKiBleGVjKQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlG
cmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9
IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlG
cmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBj
YWxsZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAg
ICB0aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZy
YW1lLCBBU0NJSUxpdGVyYWwoIkRpdmlzaW9uIGJ5IHplcm8gb3IgZGl2aXNpb24gb3ZlcmZsb3cu
IikpKTsKIH0KQEAgLTEzMywxMCArMTMzLDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UaHJvd091dE9mQm91bmRzQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJh
bWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50
cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1l
OworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZy
YW1lKTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwg
dm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0
aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgRXJyb3JI
YW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0aHJvd0V4Y2VwdGlvbihjYWxsZXJG
cmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1lLCBBU0NJSUxpdGVyYWwoIk91dC1v
Zi1ib3VuZHMgYWNjZXNzLiIpKSk7CiB9CkBAIC0xNDksOSArMTQ5LDkgQEAgaW50MzJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhlYykKIAogICAg
IGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9y
KGV4ZWMsICp2bSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAwKSB7
Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFt
ZTsKLSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZt
RW50cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRy
YWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUq
IGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZy
YW1lKTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3Bl
KTsKICAgICB9CiAKQEAgLTE2NSw5ICsxNjUsOSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICBpbnQzMl90
IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAq
dm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAwKSB7Ci0g
ICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsK
LSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50
cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNl
cih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1l
KTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAppbmRleCA5MmU0MmIxLi5lNDM5NjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC02Niw3ICs2Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZtKQogICAg
IC8vIGV2ZW4gdGhvdWdoIHdlIHdvbid0IHVzZSBpdC4KICAgICBqaXQucHJlc2VydmVSZXR1cm5B
ZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAKLSAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0p
OworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigm
dm0tPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgaml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihs
b29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMzYyLDcg
KzM2Miw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9y
KFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBrCiAgICAgLy8gSGFuZGxlIGFuIGV4Y2Vw
dGlvbgogICAgIGV4Y2VwdGlvbkhhbmRsZXIubGluaygmaml0KTsKIAotICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlG
cmFtZSk7CiAgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgJnZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82
NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZTlhMGQyYS4uMzUwMzVkYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKQEAgLTE4NzIsOCArMTg3Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25QcmludFN0ZEVycihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHByaW50CiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBWTUVudHJ5RnJhbWUq
IHRvcFZNRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBFeGVjU3RhdGUqIGNh
bGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRy
eUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKKyAgICBFeGVjU3RhdGUq
IGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgaWYg
KGNhbGxlckZyYW1lKQogICAgICAgICB2bS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFtZShjYWxs
ZXJGcmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDcz
NWU3MWIuLjM2NjRlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcApAQCAtNDgxLDEzICs0ODEsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c3RhY2tfY2hlY2spCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRy
eUZyYW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBleGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVu
dHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBleGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1l
KSB7CiAgICAgICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0g
dm0udG9wVk1FbnRyeUZyYW1lOworICAgICAgICB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlG
cmFtZTsKICAgICB9Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2Vy
KCZ2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyV2l0aFJlc3RvcmUgdHJhY2VyKCZ2bSwgdG9wRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwog
CiAgICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCAzNmY2NDg2Li41Mjk2N2UzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyAr
MTE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvTmF0aXZlKHZvaWQqIGV4ZWN1dGFibGVB
ZGRyZXNzLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAotZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3Jk
KFZNRW50cnlGcmFtZSogZW50cnlGcmFtZSkKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29yZCogdm1F
bnRyeVJlY29yZChFbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQogewogICAgIC8vIFRoZSBDIExvb3Ag
ZG9lc24ndCBoYXZlIGFueSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMsIHNvIHRoZSBWTUVudHJ5UmVj
b3JkIGlzIGFsbG9jYXRlZCBhdCB0aGUgYmFzZSBvZiB0aGUgZnJhbWUuCiAgICAgaW50cHRyX3Qg
c3RhY2tBbGlnbm1lbnQgPSBzdGFja0FsaWdubWVudEJ5dGVzKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggNWRkZTY2
NC4uN2JmMWVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQpAQCAtNjU5LDcgKzY1OSw3IEBAIGVuZAogCiBtYWNybyBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLCB0ZW1wKQogICAg
IGlmIEFSTTY0IG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCi0gICAgICAgIGxvYWRwIFZNOjp0b3BW
TUVudHJ5RnJhbWVbdm1dLCB0ZW1wCisgICAgICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3Zt
XSwgdGVtcAogICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAsIHRlbXApCiAgICAgICAgIGxlYXAg
Vk1FbnRyeVJlY29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlclt0ZW1wXSwgdGVtcAogICAg
ICAgICBpZiBBUk02NApAQCAtNzAxLDcgKzcwMSw3IEBAIGVuZAogCiBtYWNybyByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAgICAg
aWYgQVJNNjQgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRvcFZN
RW50cnlGcmFtZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1d
LCB0ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBW
TUVudHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAgICAg
ICAgIGlmIEFSTTY0CkBAIC0xMTQ0LDcgKzExNDQsNyBAQCBpZiBub3QgQ19MT09QCiAgICAgICAg
IHN0b3JlcCBhZGRyZXNzLCBWTTo6bV9sYXN0U3RhY2tUb3Bbdm1dCiAgICAgICAgIHJldAogICAg
IAotICAgICMgVk1FbnRyeVJlY29yZCogdm1FbnRyeVJlY29yZChjb25zdCBWTUVudHJ5RnJhbWUq
IGVudHJ5RnJhbWUpCisgICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0IEVu
dHJ5RnJhbWUqIGVudHJ5RnJhbWUpCiAgICAgZ2xvYmFsIF92bUVudHJ5UmVjb3JkCiAgICAgX3Zt
RW50cnlSZWNvcmQ6CiAgICAgICAgIGlmIFg4NiBvciBYODZfV0lOCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmlu
ZGV4IDExNGE5NzguLjMzMDkwZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMjUsOCArMTI1LDgg
QEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29y
ZDo6bV92bVtzcF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9y
ZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBW
TTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6
Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2
bV0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1l
W3NwXQogCiAgICAgIyBBbGlnbiBzdGFjayBwb2ludGVyCiAgICAgaWYgWDg2X1dJTiBvciBNSVBT
CkBAIC0xODksOCArMTg5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRw
IFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1f
cHJldlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9wQ2FsbEZyYW1l
W3Q1XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0s
IHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0b3JlcCB0NCwg
Vk06OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNmciwg
Q2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTI0MSw3ICsyNDEsNyBAQCBtYWNybyBkb1ZN
RW50cnkobWFrZUNhbGwpCiAKIC5jb3B5QXJnc0RvbmU6CiAgICAgc3RvcmVwIHNwLCBWTTo6dG9w
Q2FsbEZyYW1lW3ZtXQotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisg
ICAgc3RvcmVwIGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBtYWtlQ2FsbChlbnRy
eSwgdDMsIHQ0KQogCkBAIC0yNTUsOCArMjU1LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxs
KQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50
cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6
dG9wQ2FsbEZyYW1lW3Q1XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50
cnlGcmFtZVtzcF0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQor
ICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAg
IHN0b3JlcCB0NCwgVk06OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAg
ICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTMyNCw4ICszMjQsOCBA
QCBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92
bVtzcF0sIHQzCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3Nw
XSwgdDUKICAgICBzdG9yZXAgdDUsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDUKLSAgICBzdG9yZXAgdDUs
IFZNOjp0b3BWTUVudHJ5RnJhbWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2
VG9wRW50cnlGcmFtZVtzcF0sIHQ1CisgICAgc3RvcmVwIHQ1LCBWTTo6dG9wRW50cnlGcmFtZVt0
M10KIAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVT
aXplLCB0MwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQppbmRleCBlMzdhMGY2Li45NTkwOTMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAt
MTI5LDggKzEyOSw4IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBzdG9yZXAgdm0s
IFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdCiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2bV0s
IHQ0CiAgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3Bd
Ci0gICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBW
TUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdCisgICAgbG9hZHAgVk06OnRv
cEVudHJ5RnJhbWVbdm1dLCB0NAorICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2
VG9wRW50cnlGcmFtZVtzcF0KIAogICAgIGxvYWRpIFByb3RvQ2FsbEZyYW1lOjpwYWRkZWRBcmdD
b3VudFtwcm90b0NhbGxGcmFtZV0sIHQ0CiAgICAgYWRkcCBDYWxsRnJhbWVIZWFkZXJTbG90cywg
dDQsIHQ0CkBAIC0xNzEsOCArMTcxLDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAg
IGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bdDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNv
cmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0NF0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRy
YVRlbXBSZWcsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6
bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJh
VGVtcFJlZywgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3Jk
OjptX3ByZXZUb3BFbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJh
VGVtcFJlZywgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVn
aXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjIwLDcgKzIyMCw3IEBAIG1hY3JvIGRvVk1FbnRyeSht
YWtlQ2FsbCkKICAgICBlbHNlCiAgICAgICAgIHN0b3JlcCBzcCwgVk06OnRvcENhbGxGcmFtZVt2
bV0KICAgICBlbmQKLSAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAg
IHN0b3JlcCBjZnIsIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXQogCiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoZXh0cmFUZW1wUmVnLCAweGJhZDBkYzAyKQogCkBAIC0yMzYsOCArMjM2LDgg
QEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1f
dm1bdDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0
NF0sIHQyCiAgICAgc3RvcmVwIHQyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQotICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0NF0sIHQyCi0gICAgc3RvcmVwIHQy
LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJl
dlRvcEVudHJ5RnJhbWVbdDRdLCB0MgorICAgIHN0b3JlcCB0MiwgVk06OnRvcEVudHJ5RnJhbWVb
dm1dCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjc2
LDcgKzI3Niw2IEBAIG1hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1wKQogICAg
IGVuZAogZW5kCiAKLQogX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIENhbGxl
ZVtjZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwpAQCAtMjkxLDggKzI5MCw4
IEBAIF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjpt
X3ZtW3QyXSwgdDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVb
dDJdLCBleHRyYVRlbXBSZWcKICAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wQ2FsbEZy
YW1lW3QzXQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0
Ml0sIGV4dHJhVGVtcFJlZwotICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BWTUVudHJ5
RnJhbWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0
Ml0sIGV4dHJhVGVtcFJlZworICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BFbnRyeUZy
YW1lW3QzXQogCiAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHNwCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYTVhNTNjNi4uMmEy
YmJkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQw
Niw3ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAg
ICAgICAgT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSA9IGZhbHNlOwogCiAgICAgaWYgKCFPcHRp
b25zOjp1c2VXZWJBc3NlbWJseSgpKQotICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZh
c3RUTFMoKSA9IGZhbHNlOworICAgICAgICBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRl
eHQoKSA9IGZhbHNlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKQog
ICAgICAgICB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDNjZWM1NTIuLjg0NzVjMjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ2Nyw4ICs0NjcsNyBAQCB0eXBlZGVm
IGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZh
c3RNZW1vcnlSZWR6b25lUGFnZXMsIDEyOCwgTm9ybWFsLCAiV2ViQXNzZW1ibHkgZmFzdCBtZW1v
cmllcyB1c2UgNEdpQiB2aXJ0dWFsIGFsbG9jYXRpb25zLCBwbHVzIGEgcmVkem9uZSAoY291bnRl
ZCBhcyBtdWx0aXBsZSBvZiA2NEtpQiBXZWJBc3NlbWJseSBwYWdlcykgYXQgdGhlIGVuZCB0byBj
YXRjaCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZCAzMi1iaXQsIGFueXRoaW5nIGJleW9u
ZCB0aGUgcmVkem9uZSBpcyBleHBsaWNpdGx5IGJvdW5kcy1jaGVja2VkIikgXAogICAgIHYoYm9v
bCwgY3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0
cnVlLCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9yeSBmb3Igd2Fz
bS4iKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4TnVtV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMsIDQs
IE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0
cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9j
YWwgc3RvcmFnZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikgXAotICAg
IHYoYm9vbCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVl
IChhbmQgZmFzdCBUTFMgaXMgZW5hYmxlZCksIHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0
IFRMUy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAorICAgIHYo
Ym9vbCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3
ZSB3aWxsIHN0b3JlIGNvbnRleHQgaW4gZmFzdCBUTFMuIElmIGZhbHNlLCB3ZSB3aWxsIHBpbiBp
dCB0byBhIHJlZ2lzdGVyLiIpIFwKICAgICB2KGJvb2wsIHVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJs
eVRvSlNDYWxscywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgQ2FsbExpbmtJ
bmZvIHRvIGlubGluZSBjYWNoZSBXYXNtIHRvIEpTIGNhbGxzLiIpIFwKICAgICB2KGJvb2wsIHVz
ZU9iamVjdFJlc3RTcHJlYWQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZW5hYmxl
IE9iamVjdCBSZXN0L1NwcmVhZCBmZWF0dXJlLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxs
b2NhdGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3Vy
IG5vcm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0
aW9uIHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4
IGE0YmU5NWIuLjNiY2Y2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBG
cmFtZVdhbGtlcihWTSYgdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBjb25zdCBBYnN0cmFjdExv
Y2tlciYgY29kZUJsb2NrU2V0TG9ja2VyLCBjb25zdCBBYnN0cmFjdExvY2tlciYgbWFjaGluZVRo
cmVhZHNMb2NrZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX2NhbGxGcmFtZShj
YWxsRnJhbWUpCi0gICAgICAgICwgbV92bUVudHJ5RnJhbWUodm0udG9wVk1FbnRyeUZyYW1lKQor
ICAgICAgICAsIG1fZW50cnlGcmFtZSh2bS50b3BFbnRyeUZyYW1lKQogICAgICAgICAsIG1fY29k
ZUJsb2NrU2V0TG9ja2VyKGNvZGVCbG9ja1NldExvY2tlcikKICAgICAgICAgLCBtX21hY2hpbmVU
aHJlYWRzTG9ja2VyKG1hY2hpbmVUaHJlYWRzTG9ja2VyKQogICAgIHsKQEAgLTEzMCw3ICsxMzAs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgU1VQUFJFU1NfQVNBTgogICAgIHZvaWQgYWR2YW5jZVRvUGFy
ZW50RnJhbWUoKQogICAgIHsKLSAgICAgICAgbV9jYWxsRnJhbWUgPSBtX2NhbGxGcmFtZS0+dW5z
YWZlQ2FsbGVyRnJhbWUobV92bUVudHJ5RnJhbWUpOworICAgICAgICBtX2NhbGxGcmFtZSA9IG1f
Y2FsbEZyYW1lLT51bnNhZmVDYWxsZXJGcmFtZShtX2VudHJ5RnJhbWUpOwogICAgIH0KIAogICAg
IGJvb2wgaXNBdFRvcCgpIGNvbnN0CkBAIC0xODgsNyArMTg4LDcgQEAgcHJvdGVjdGVkOgogCiAg
ICAgVk0mIG1fdm07CiAgICAgRXhlY1N0YXRlKiBtX2NhbGxGcmFtZTsKLSAgICBWTUVudHJ5RnJh
bWUqIG1fdm1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fZW50cnlGcmFtZTsKICAgICBj
b25zdCBBYnN0cmFjdExvY2tlciYgbV9jb2RlQmxvY2tTZXRMb2NrZXI7CiAgICAgY29uc3QgQWJz
dHJhY3RMb2NrZXImIG1fbWFjaGluZVRocmVhZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxpbmdP
dXQgeyBmYWxzZSB9OwpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgLy8gV2UgcmV1
c2UgTExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0byBj
aGVjayBmb3IgYm90aCBqaXQgdHlwZXMuCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBh
bHNvIGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZl
biB0aG91Z2gKICAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUgcmVh
c29uIHRoYXQgdGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZHIGZy
YW1lLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBw
YXN0IGEgVk1FbnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAgICAg
ICAgICAvLyBhbmQgd2UgZW5kIHVwIGhhdmluZyB0byB1bndpbmQgcGFzdCBhbiBFbnRyeUZyYW1l
LCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhl
IExMSW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2Fp
bnN0IHRoaXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKaW5kZXggMDZlOTMwMy4uNGM2NWQ2MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDEzIEBA
IFRocm93U2NvcGU6On5UaHJvd1Njb3BlKCkKIAogICAgIGJvb2wgd2lsbEJlSGFuZGxlQnlMTElu
dE9ySklUID0gZmFsc2U7CiAgICAgdm9pZCogcHJldmlvdXNTY29wZSA9IG1fcHJldmlvdXNTY29w
ZTsKLSAgICB2b2lkKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKKyAg
ICB2b2lkKiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOwogCi0gICAgLy8gSWYg
dGhlIHRvcFZNRW50cnlGcmFtZSB3YXMgcHVzaGVkIG9uIHRoZSBzdGFjayBhZnRlciB0aGUgcHJl
dmlvdXNTY29wZSB3YXMgaW5zdGFudGlhdGVkLAorICAgIC8vIElmIHRoZSB0b3BFbnRyeUZyYW1l
IHdhcyBwdXNoZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBpbnN0
YW50aWF0ZWQsCiAgICAgLy8gdGhlbiB0aGlzIHRocm93U2NvcGUgd2lsbCBiZSByZXR1cm5pbmcg
dG8gTExJTlQgb3IgSklUIGNvZGUgdGhhdCBhbHdheXMgZG8gYW4gZXhjZXB0aW9uCiAgICAgLy8g
Y2hlY2suIEluIHRoYXQgY2FzZSwgc2tpcCB0aGUgc2ltdWxhdGVkIHRocm93IGJlY2F1c2UgdGhl
IExMSW50IGFuZCBKSVQgd2lsbCBiZQogICAgIC8vIGNoZWNraW5nIGZvciB0aGUgZXhjZXB0aW9u
IHRoZWlyIG93biB3YXkgaW5zdGVhZCBvZiBjYWxsaW5nIFRocm93U2NvcGU6OmV4Y2VwdGlvbigp
LgotICAgIGlmICh0b3BWTUVudHJ5RnJhbWUgJiYgcHJldmlvdXNTY29wZSA+IHRvcFZNRW50cnlG
cmFtZSkKKyAgICBpZiAodG9wRW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wRW50cnlG
cmFtZSkKICAgICAgICAgd2lsbEJlSGFuZGxlQnlMTEludE9ySklUID0gdHJ1ZTsKICAgICAKICAg
ICBpZiAoIXdpbGxCZUhhbmRsZUJ5TExJbnRPckpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAppbmRleCAxODFlM2I3Li4zZWU1MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlKQogI2VuZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50
RGF0YSgwKQotICAgICwgdG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCisgICAgLCB0b3BFbnRyeUZy
YW1lKG51bGxwdHIpCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQog
ICAgICwgcHJvbWlzZURlZmVycmVkVGltZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJy
ZWRUaW1lcj4oKnRoaXMpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVm
YXVsdCA/IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkgOiBuZXcgQXRvbWlj
U3RyaW5nVGFibGUpCkBAIC0zNjgsNyArMzY4LDcgQEAgVk06On5WTSgpCiAgICAgcHJvbWlzZURl
ZmVycmVkVGltZXItPnN0b3BSdW5uaW5nVGFza3MoKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAgICAgaWYgKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSkKLSAgICAgICAgV2FzbTo6
ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JWTSgqdGhpcyk7CisgICAgICAgIFdhc206
OmVuc3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yQ29udGV4dCh3YXNtQ29udGV4dCk7CiAj
ZW5kaWYKICAgICBpZiAoVU5MSUtFTFkobV93YXRjaGRvZykpCiAgICAgICAgIG1fd2F0Y2hkb2ct
PndpbGxEZXN0cm95Vk0odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5
NTU4NTk0Li45Mjc3MTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU1LDYg
KzU1LDcgQEAKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRl
ICJWTUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIldhc21D
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9p
bnRlckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgpAQCAt
MzI5LDE0ICszMzAsMTMgQEAgcHVibGljOgogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGll
bnREYXRhKiBjbGllbnREYXRhOwotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOwor
ICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWU7CiAgICAgLy8gTk9URTogV2hlbiB0aHJvd2lu
ZyBhbiBleGNlcHRpb24gd2hpbGUgcm9sbGluZyBiYWNrIHRoZSBjYWxsIGZyYW1lLCB0aGlzIG1h
eSBiZSBlcXVhbCB0bwotICAgIC8vIHRvcFZNRW50cnlGcmFtZS4KKyAgICAvLyB0b3BFbnRyeUZy
YW1lLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHZvaWQqLCBiZWNhdXNlIGl0IG1p
Z2h0IG5vdCBwb2ludCB0byBhIENhbGxGcmFtZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNDQxCiAgICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWUg
eyBudWxscHRyIH07Ci0gICAgLy8gRklYTUU6IFNhdmUgdGhpcyBzdGF0ZSBlbHNld2hlcmUgdG8g
YWxsb3cgUElDLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5Nzcz
Ci0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCB7IG51bGxwdHIgfTsKKyAg
ICBXYXNtOjpDb250ZXh0IHdhc21Db250ZXh0OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVj
dHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVSYXJlRGF0YVN0
cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JT
dHJ1Y3R1cmU7CkBAIC01MDEsOSArNTAxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFZNLCB0YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiAgICAgfQogCi0gICAg
c3RhdGljIHB0cmRpZmZfdCB0b3BWTUVudHJ5RnJhbWVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJk
aWZmX3QgdG9wRW50cnlGcmFtZU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFZNLCB0b3BWTUVudHJ5RnJhbWUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFZNLCB0b3BFbnRyeUZyYW1lKTsKICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2
aW91c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0
aW9uKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFw
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCBk
ZWFhNDQ5Li44NzNkMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcApAQCAtODksNyArODksNyBAQCBpbmxpbmUgQ2FsbEZyYW1lKiBzYW5pdGl6ZWRUb3BDYWxs
RnJhbWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUpCiAgICAgcmV0dXJuIHRvcENhbGxGcmFtZTsK
IH0KIAotc3RhdGljIGJvb2wgaXNTYW5lRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSwgQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgVk1FbnRyeUZyYW1lKiBlbnRyeUZyYW1lLCBTdGFja0JvdW5kcyBzdGFj
a0JvdW5kcykKK3N0YXRpYyBib29sIGlzU2FuZUZyYW1lKENhbGxGcmFtZSogZnJhbWUsIENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0
YWNrQm91bmRzKQogewogICAgIGlmIChyZWludGVycHJldF9jYXN0PHZvaWQqPihmcmFtZSkgPj0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW50cnlGcmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTEyMSwxOCArMTIxLDE4IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVh
a3BvaW50cyhTaWduYWxDb250ZXh0JiBjb250ZXh0LCBTdGFja0JvdW5kcyBzdGFjCiAgICAgfQog
CiAgICAgQ29kZUJsb2NrKiBmb3VuZENvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgVk1FbnRyeUZy
YW1lKiB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSog
ZW50cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJhbWU7CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIGEg
Y2FsbGVlIHRvIHN0YXJ0IHdpdGguIFNvLCB1c2UgdGhlIGVuZCBvZiB0aGUgc3RhY2sgdG8ga2Vl
cCB0aGUKICAgICAvLyBpc1NhbmVGcmFtZSgpIGNoZWNrZXIgYmVsb3cgaGFwcHkgZm9yIHRoZSBm
aXJzdCBpdGVyYXRpb24uIEl0IHdpbGwgc3RpbGwgY2hlY2sKICAgICAvLyB0byBlbnN1cmUgdGhh
dCB0aGUgYWRkcmVzcyBpcyBpbiB0aGUgc3RhY2tCb3VuZHMuCiAgICAgQ2FsbEZyYW1lKiBjYWxs
ZWVGcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4oc3RhY2tCb3VuZHMuZW5kKCkp
OwogCi0gICAgaWYgKCF2bUVudHJ5RnJhbWUgfHwgIWNhbGxGcmFtZSkKKyAgICBpZiAoIWVudHJ5
RnJhbWUgfHwgIWNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOyAvLyBOb3QgcnVubmluZyBKUyBj
b2RlLiBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICBkbyB7Ci0g
ICAgICAgIGlmICghaXNTYW5lRnJhbWUoY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgdm1FbnRyeUZy
YW1lLCBzdGFja0JvdW5kcykpCisgICAgICAgIGlmICghaXNTYW5lRnJhbWUoY2FsbEZyYW1lLCBj
YWxsZWVGcmFtZSwgZW50cnlGcmFtZSwgc3RhY2tCb3VuZHMpKQogICAgICAgICAgICAgcmV0dXJu
OyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICAgICAgQ29k
ZUJsb2NrKiBjYW5kaWRhdGVDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAt
MTQyLDkgKzE0Miw5IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhT
aWduYWxDb250ZXh0JiBjb250ZXh0LCBTdGFja0JvdW5kcyBzdGFjCiAgICAgICAgIH0KIAogICAg
ICAgICBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZTsKLSAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgICAgICBjYWxsRnJhbWUgPSBjYWxs
RnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogCi0gICAgfSB3aGlsZSAoY2FsbEZyYW1l
ICYmIHZtRW50cnlGcmFtZSk7CisgICAgfSB3aGlsZSAoY2FsbEZyYW1lICYmIGVudHJ5RnJhbWUp
OwogCiAgICAgaWYgKCFmb3VuZENvZGVCbG9jaykgewogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBq
dXN0IGVudGVyZWQgdGhlIGZyYW1lIGFuZCB0aGUgY29kZUJsb2NrIHBvaW50ZXIgaXMgbm90CkBA
IC0xODEsMTcgKzE4MSwxNyBAQCB2b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25T
dGFjayhMb2NrZXI8TG9jaz4mLCBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZQogCiAgICAgbV9uZWVk
VG9JbnZhbGlkYXRlZENvZGVCbG9ja3MgPSBmYWxzZTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1F
bnRyeUZyYW1lID0gdm0oKS50b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50cnlG
cmFtZSA9IHZtKCkudG9wRW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHRv
cENhbGxGcmFtZTsKIAotICAgIGlmICghdm1FbnRyeUZyYW1lKQorICAgIGlmICghZW50cnlGcmFt
ZSkKICAgICAgICAgcmV0dXJuOyAvLyBOb3QgcnVubmluZyBKUyBjb2RlLiBOb3RoaW5nIHRvIGlu
dmFsaWRhdGUuCiAKICAgICB3aGlsZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgaWYgKGNvZGVCbG9j
ayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAg
ICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJh
cHMpOwotICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50cnlG
cmFtZSk7CisgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlG
cmFtZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKaW5kZXggYWQ3ZDYyMS4uYWY2Y2ZlOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNDksOCArNDks
NiBAQAogI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAi
SlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3IuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKQEAg
LTE3OCw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FS
R1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24q
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50Kik7CisgICAgQjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVu
Y3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21w
aWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dX
YXNtRXhjZXB0aW9uKTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC0yNDcsNyArMjQ1LDcgQEAg
cHJpdmF0ZToKIAogICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBs
dXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CiAKLSAgICB2b2lkIHJlc3RvcmVX
YXNtQ29udGV4dChQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgVmFsdWUqKTsKKyAgICB2b2lkIHJl
c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSop
OwogICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5m
b3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKIAog
ICAgIE9yaWdpbiBvcmlnaW4oKTsKQEAgLTI2Nyw3ICsyNjUsNyBAQCBwcml2YXRlOgogICAgIElu
c2VydGlvblNldCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzOwogICAgIEdQUlJlZyBtX21lbW9y
eUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7
IEludmFsaWRHUFJSZWcgfTsKLSAgICBHUFJSZWcgbV93YXNtQ29udGV4dEdQUiB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OwogICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2UgfTsKIAogICAgIFZhbHVlKiBt
X2luc3RhbmNlVmFsdWUgeyBudWxscHRyIH07IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJl
bG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNl
ZC4KQEAgLTI5MSwzNyArMjg5LDM3IEBAIGludDMyX3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2lu
dGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZzCiAgICAgcmV0
dXJuIG9mZnNldDsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHQo
UHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVmFsdWUqIGFyZykKK3ZvaWQgQjNJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBC
YXNpY0Jsb2NrKiBibG9jaywgVmFsdWUqIGFyZykKIHsKLSAgICBpZiAodXNlRmFzdFRMU0ZvckNv
bnRleHQoKSkgeworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7Ci0gICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6
OnN0b3JlV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCisgICAgICAgIGlm
IChDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNo
UmVnaXN0ZXIoKSkKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiAgICAgICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwg
Q0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rlcigp
KTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dChwYXJhbXNbMF0uZ3ByKCkp
OworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93
U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNN
YWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlKHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBj
bG9iYmVycyB3YXNtQ29udGV4dCByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2Ug
bmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBGSVhNRTogQmVj
YXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3Rl
ciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBj
YWxsZXIgc2lkZS4KICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRS
ZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZh
bHVlPihwcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOwogICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgZWZm
ZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwogICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBlZmZlY3RzOwotICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1f
d2FzbUNvbnRleHRHUFIpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNl
dChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5z
dGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKLSAgICBHUFJSZWcgd2FzbUNv
bnRleHRHUFIgPSBtX3dhc21Db250ZXh0R1BSOworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3Rh
bmNlR1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtKSB7Ci0gICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29u
dGV4dEdQUik7CisgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dElu
c3RhbmNlR1BSKTsKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVy
bmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9k
ZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0
aWVyVXApCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGls
YXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwg
dW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9t
b2RlKG1vZGUpCiAgICAgLCBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCkBAIC0z
MzksOSArMzM3LDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICBtX21lbW9yeUJhc2VH
UFIgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwogICAgIG1fcHJvYy5waW5SZWdpc3Rl
cihtX21lbW9yeUJhc2VHUFIpOwogCi0gICAgbV93YXNtQ29udGV4dEdQUiA9IHBpbm5lZFJlZ3Mu
d2FzbUNvbnRleHRQb2ludGVyOwotICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAg
ICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRHUFIpOworICAgIG1fd2FzbUNv
bnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7
CisgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIG1fcHJvYy5waW5SZWdp
c3RlcihtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogCiAgICAgaWYgKG1vZGUgIT0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nKSB7CiAgICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5zaXplUmVnaXN0
ZXJzWzBdLnNpemVPZmZzZXQpOwpAQCAtMzUwLDYgKzM0OCw5IEBAIEIzSVJHZW5lcmF0b3I6OkIz
SVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJv
Y2VkdXJlCiAgICAgICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0
ZXIpOwogICAgIH0KIAorICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCisgICAgICAgIFRodW5r
czo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7
CisKICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHND
aGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7
CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CkBAIC0zNjMsNiArMzY0LDE2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNl
cHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAgIH0pOworCisgICAg
ICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmc6CisgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2Rl
IGRvbid0IGRvIGFuIGV4cGxpY2l0IGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNlIHRoZXkgY2FuIHJl
bHkgb24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIEZh
dWx0U2lnbmFsSGFuZGxlciBub25ldGhlbGVzcyBuZWVkcyB0aGUgdGh1bmsgdG8gZXhpc3Qgc28g
dGhhdCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2Vu
ZXJhdG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFt
ZUluUHJvbG9ndWUoJmNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywgT3Jp
Z2luKCksIG1fY3VycmVudEJsb2NrKTsKQEAgLTM3MywxMiArMzg0LDEyIEBAIEIzSVJHZW5lcmF0
b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVy
ZSYgcHJvY2VkdXJlCiAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVj
azsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQ
b2ludGVyKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0
OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNv
bnRleHQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxs
IGNsb2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3
ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgICAgICBpZiAoIUNv
bnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2Fz
bVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRv
ZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNp
ZGUuCiAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRS
ZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgICAg
ICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOwog
ICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZh
bHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7CisgICAgICAgICAgICBzdGFja092ZXJmbG93
Q2hlY2stPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0
YW5jZUdQUik7CiAgICAgICAgIH0KICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnMgPSAyOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKQEAgLTQwMSw3ICs0MTIsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2Nl
ZHVyZQogICAgICAgICAgICAgYm9vbCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKICAgICAg
ICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFt
ZVNpemUgPj0gbWluaW11bVBhcmVudENoZWNrU2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CiAK
LSAgICAgICAgICAgIEdQUlJlZyBjb250ZXh0ID0gdXNlRmFzdFRMU0ZvckNvbnRleHQoKSA/IHBh
cmFtc1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRHUFI7CisgICAgICAgICAgICBHUFJSZWcgY29u
dGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gcGFyYW1zWzBdLmdwcigpIDog
bV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogCiAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBs
ZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUg
aXMgd2l0aGluCiAgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxs
ZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgpAQCAtNDExLDEwICs0MjIsMTAg
QEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aDEgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7CiAKLSAgICAgICAgICAgICAgICBpZiAodXNlRmFzdFRM
U0ZvckNvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAg
ICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3Rh
bmNlKTsKIAotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhjb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gy
KTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29u
dGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tM
aW1pdCgpKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIGZwLCBzY3JhdGNoMSk7CiAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShuZWVkVW5kZXJmbG93Q2hlY2spKQpAQCAtNDIzLDEwICs0MzQsMTAgQEAg
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
W292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2lu
Z2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV91
c2VzSW5zdGFuY2VWYWx1ZSAmJiB1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygp
KSB7CiAgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQg
dGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgotICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQs
IENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rlcigp
KTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGNvbnRleHQpOworICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChq
aXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5j
ZShjb250ZXh0SW5zdGFuY2UpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVl
ZCB0byBiZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRp
dmVseSBzYWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHBy
ZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCiAgICAgICAgICAgICB9CkBAIC00MzgsNyAr
NDQ5LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKIAogdm9pZCBCM0lSR2VuZXJhdG9yOjpy
ZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVt
b3J5LCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2sp
CiB7Ci0gICAgcmVzdG9yZVdhc21Db250ZXh0KHByb2MsIGJsb2NrLCBpbnN0YW5jZSk7CisgICAg
cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKIAogICAg
IGlmICghIW1lbW9yeSkgewogICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5l
ZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAgLTQ1OCwxMiArNDY5LDEyIEBA
IHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3Qg
TWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yCiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkg
PSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKLSAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAg
ICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwogICAg
ICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKICAgICAgICAgICAgIEFTU0VS
VCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVz
IHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMg
cmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNp
emVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnko
KSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNp
emVSZWdzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNp
emVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfSk7CkBAIC01
NDEsMjQgKzU1MiwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4g
UGFydGlhbFJlc3VsdAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVz
c2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKLSAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkgKENvbnRleHQqLCBpbnQzMl90KSA9IFtdIChD
b250ZXh0KiB3YXNtQ29udGV4dCwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7Ci0gICAgICAg
IFZNJiB2bSA9ICp3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHdhc21N
ZW1vcnkgPSB3YXNtQ29udGV4dC0+bWVtb3J5KCk7Ci0KKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9y
eSkoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7CiAgICAgICAgIGlm
IChkZWx0YSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgYm9vbCBzaG91
bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSBmYWxzZTsKLSAgICAgICAgLy8gZ3JvdygpIGRv
ZXMgbm90IHJlcXVpcmUgRXhlY1N0YXRlKiBpZiBpdCBkb2Vzbid0IHRocm93IGV4Y2VwdGlvbnMu
Ci0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG51bGxwdHI7Ci0gICAgICAgIFBhZ2VDb3VudCBy
ZXN1bHQgPSB3YXNtTWVtb3J5LT5ncm93KHZtLCBleGVjLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
ZGVsdGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwotICAgICAgICBzY29wZS5y
ZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+aW50ZXJuYWxN
ZW1vcnkoKS5ncm93KFBhZ2VDb3VudChkZWx0YSkpOworICAgICAgICBpZiAoIWdyb3duKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTWVt
b3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgorICAgICAgICAgICAgY2FzZSBNZW1v
cnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CisgICAgICAgICAgICBjYXNlIE1l
bW9yeTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToKKyAgICAgICAgICAgIGNh
c2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5wYWdlQ291bnQoKTsKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50
KCk7CiAgICAgfTsKIAogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCkBAIC01NzIsMTMgKzU4MSwxMyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1l
bW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFs
dWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwg
c2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgp
KSk7CisgICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3Rh
bmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZldhc21NZW1vcnkoKSkpOwogCi0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUo
c3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4obnVsbHB0ciktPm1lbW9yeSgpLT5t
ZW1vcnkoKS5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24g
dGhpcyBzaXplIik7Ci0gICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0
LCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSkp
OworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHN0YXRpY19jYXN0PFdhc206Ok1l
bW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiBy
ZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVt
b3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgp
KSk7CiAgICAgCiAgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKLSAgICBz
dGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMSA8PCBzaGlmdFZhbHVlLCAiVGhp
cyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgc3Rh
dGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRo
aXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOwogICAgIFZh
bHVlKiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
WlNociwgb3JpZ2luKCksCiAgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKQEAgLTEwNjks
MTQgKzEwNzgsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBtX21heE51bUpT
Q2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIAogICAgICAgICAvLyBGSVhNRSBpbXBvcnRz
IGNhbiBiZSBsaW5rZWQgaGVyZSwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwg
YmVjYXVzZSBhbGwgaW1wb3J0IHN0dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0
aW9uIHN0YXJ0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2
MgotICAgICAgICBWYWx1ZSogZnVuY3Rpb25JbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBp
bnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSog
anNUeXBlT2ZJbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQ4Wiwgb3JpZ2luKCksIGZ1bmN0aW9uSW1wb3J0LCBzYWZlQ2FzdDxpbnQzMl90
PihKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSk7Ci0gICAgICAgIFZhbHVlKiBpc1dhc21D
YWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3Jp
Z2luKCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKyAgICAg
ICAgVmFsdWUqIHRhcmdldEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VW
YWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
VGFyZ2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFsdWUqIGlzV2FzbUNh
bGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBv
cmlnaW4oKSwgdGFyZ2V0SW5zdGFuY2UsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogaXNX
YXNtQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgQmFzaWNCbG9jayogaXNKU0Js
b2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJC
bG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBG
cmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNKU0Jsb2NrKSk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBC
Mzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJs
b2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlzRW1iZWRkZXJCbG9jaykpOwogCiAgICAgICAgIFZhbHVl
KiB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3By
b2MsIGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAg
ICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTA5Nywx
NSArMTEwNSwxNSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIFVwc2lsb25WYWx1
ZSogd2FzbUNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6
IGlzV2FzbUJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3
YXNtQ2FsbFJlc3VsdCk7CiAgICAgICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIAotICAgICAgICAvLyBG
SVhNRTogTGV0cyByZW1vdmUgdGhpcyBpbmRpcmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmll
bmRseSBJQworICAgICAgICAvLyBGSVhNRTogTGV0J3MgcmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24g
YnkgY3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkgSUMKICAgICAgICAgLy8gZm9yIGNhbGxzIG91dCB0
byBKUy4gVGhpcyBzaG91bGRuJ3QgYmUgdGhhdCBoYXJkIHRvIGRvLiBXZSBjb3VsZCBwcm9iYWJs
eQogICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIElDIHRvIGJlIG92ZXIgV2FzbTo6Q29udGV4dCou
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAz
NzUKLSAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpKTsKLSAgICAgICAgVmFsdWUqIGp1bXBEZXN0aW5hdGlv
biA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAg
ICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY29kZUJsb2NrLCBzYWZlQ2FzdDxpbnQz
Ml90PihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1Yihm
dW5jdGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSoganNDYWxsUmVzdWx0ID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNKU0Jsb2NrLCBvcmlnaW4oKSwgYXJn
cywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIFZhbHVlKiBjb2RlQmxvY2sgPSBpc0Vt
YmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21Db2RlQmxvY2soKSkp
OworICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9uID0gaXNFbWJlZGRlckJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKKyAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIHNhZmVDYXN0PGludDMyX3Q+KENvZGVCbG9jazo6b2Zm
c2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAg
VmFsdWUqIGVtYmVkZGVyQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVw
Q2FsbChtX3Byb2MsIGlzRW1iZWRkZXJCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJl
dHVyblR5cGUpLAogICAgICAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQp
IHsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRy
dWU7CkBAIC0xMTE5LDggKzExMjcsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAg
ICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0u
Z3ByKCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIFVw
c2lsb25WYWx1ZSoganNDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51
bGxwdHIgOiBpc0pTQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIGpzQ2FsbFJlc3VsdCk7Ci0gICAgICAgIGlzSlNCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFVwc2ls
b25WYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/
IG51bGxwdHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJCbG9j
ay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVh
dGlvbik7CiAKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CiAKQEAgLTEx
MjksNyArMTEzNyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICByZXN1bHQgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBQaGksIHRvQjNUeXBlKHJldHVyblR5cGUpLCBvcmlnaW4oKSk7CiAgICAgICAgICAgICB3YXNt
Q2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOwotICAgICAgICAgICAganNDYWxsUmVz
dWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7CisgICAgICAgICAgICBlbWJlZGRlckNhbGxSZXN1
bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBj
YWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQg
LyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCkBAIC0xMTY1LDE3ICsxMTczLDE3
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMg
PSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGFyZ3Muc2l6ZSgpKSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVm
ZmVyOwotICAgIEV4cHJlc3Npb25UeXBlIGpzRnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lv
blR5cGUgaW5zdGFuY2VzQnVmZmVyOwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXJTaXplOwogICAgIHsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSkpOworICAgICAg
ICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mV2FzbVRhYmxlKCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1
ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8
aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7Ci0gICAg
ICAgIGpzRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAg
dGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1
bmN0aW9ucygpKSk7CisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbTo6
VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsKKyAgICAgICAgaW5zdGFuY2VzQnVmZmVyID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90
PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVD
YXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAg
ICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZTaXpl
KCkpKTsKICAgICB9CiAKICAgICAvLyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9y
IGlzIHZhbGlkLgpAQCAtMTE5NSw2ICsxMjAzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8K
ICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVm
ZmVyLCBvZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBp
cyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVy
ZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KKyAgICAvLyBGSVhNRTogd2hl
biB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJl
Y2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENhbGxh
YmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDMyX3QpLCAiTG9hZCBj
b2RlZ2VuIGFzc3VtZXMgaTMyIik7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJl
SW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIEludDMyLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4o
T0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZUluZGV4KSkpOwogICAg
IHsKQEAgLTEyMjMsMTkgKzEyMzIsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5k
aXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICB7
CiAgICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIE11bCwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KSwKLSAg
ICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+KSkpOwotICAgICAgICBWYWx1ZSoganNPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBB
ZGQsIG9yaWdpbigpLCBqc0Z1bmN0aW9uQnVmZmVyLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGNv
bnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXYXNtOjpJbnN0YW5jZSopKSk7CisgICAgICAg
IFZhbHVlKiBuZXdDb250ZXh0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdp
bigpLCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkpOwogCiAgICAgICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBkb0Nv
bnRleHRTd2l0Y2ggPSBtX3Byb2MuYWRkQmxvY2soKTsKIAotICAgICAgICBWYWx1ZSogbmV3Q29u
dGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBqc09iamVjdCwgc2FmZUNh
c3Q8aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mSW5zdGFuY2UoKSkp
OwotICAgICAgICBWYWx1ZSogaXNTYW1lQ29udGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAotICAgICAgICAgICAgbmV3Q29udGV4
dCwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgVmFsdWUqIGlzU2FtZUNvbnRleHRJbnN0YW5j
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdp
bigpLAorICAgICAgICAgICAgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOwog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6
OkJyYW5jaCwgb3JpZ2luKCksCi0gICAgICAgICAgICBpc1NhbWVDb250ZXh0LCBGcmVxdWVudGVk
QmxvY2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOwor
ICAgICAgICAgICAgaXNTYW1lQ29udGV4dEluc3RhbmNlLCBGcmVxdWVudGVkQmxvY2soY29udGlu
dWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOwogCiAgICAgICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0xMjQzLDI2ICsxMjUwLDI2
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRu
J3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcyMTgxCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwot
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29udGV4dCwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0SW5zdGFuY2UsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFu
Y2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgR1BSUmVnIG5ld0Nv
bnRleHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dCA9
IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2Ug
PSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNl
ID0gcGFyYW1zWzFdLmdwcigpOwogICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZv
JiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICAgICAgICAgIGNv
bnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOwogICAgICAgICAg
ICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotICAg
ICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHQgIT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dCwgQ29udGV4dDo6b2Zm
c2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5z
dG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dCwgQ29u
dGV4dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKLSAgICAgICAgICAgIGppdC5zdG9y
ZVdhc21Db250ZXh0KG5ld0NvbnRleHQpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgICAgICAgICBBU1NFUlQo
bmV3Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhu
ZXdDb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRT
dGFja0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2Uo
bmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICAg
ICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBBU1NFUlQo
c2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0KTsKKyAgICAgICAgICAg
IEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsK
ICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3Nl
bWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAv
LyBNZW1vcnkgc2l6ZS4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwg
YmFzZU1lbW9yeSk7IC8vIFdhc21NZW1vcnk6OnZvaWQqLgorICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0
T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBX
YXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVt
b3J5Ojp2b2lkKi4KICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29udGV4dFN3aXRjaC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAK
QEAgLTEzMzksMTk0ICsxMzQ2LDYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3MKICAgICBkYXRh
TG9nTG4oKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiog
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBN
ZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCi17Ci0gICAgQ0NhbGxIZWxw
ZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKLQotICAgIGF1
dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwotICAgIGpp
dC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotCi0gICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFz
IGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUz
MjEKLSAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92
ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxp
bmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2Vk
Q2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOwot
ICAgIH0pOwotCi0gICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKLSAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRS
ZWdzLnRvU2F2ZShtb2RlKTsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCB0
b1NhdmVTaXplID0gdG9TYXZlLm51bWJlck9mU2V0R1BScygpOwotICAgIC8vIFRoZXkgc2hvdWxk
IGFsbCBiZSBjYWxsZWUgc2F2ZXMuCi0gICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygp
ID09IHRvU2F2ZVNpemUpOwotI2VuZGlmCi0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdp
c3RlcnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBl
OjpGcmFtZVBvaW50ZXJCYXNlZCk7Ci0gICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwotCi0gICAgdW5zaWduZWQgdG90YWxGcmFtZVNp
emUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7Ci0gICAgdG90YWxG
cmFtZVNpemUgKz0gV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwot
ICAgIHRvdGFsRnJhbWVTaXplIC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICB1bnNp
Z25lZCBudW1HUFJzID0gMDsKLSAgICB1bnNpZ25lZCBudW1GUFJzID0gMDsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAg
ICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6
STY0OgotICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgIGlmIChudW1HUFJzID49
IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVtR1BS
czsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAg
Y2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVT
aXplICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0b3RhbEZyYW1lU2l6ZSA9IFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVT
aXplKTsKLSAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxG
cmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAg
Ly8gV2Ugc2F2ZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVt
b3J5IG9yIG5vdC4KLSAgICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVz
ZSBhcyBhIHNjcmF0Y2guIFRoYXQgc2FpZCwKLSAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBw
cm9ncmFtcyB1c2UgbWVtb3J5LCBzbyBpdCdzIG5vdCByZWFsbHkKLSAgICAvLyB3b3J0aCBvcHRp
bWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHRoZXkgZG9uJ3QuCi0gICAgZm9yIChjb25zdCBSZWdp
c3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAg
R1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwotICAgICAgICBwdHJkaWZmX3Qg
b2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihyZWcs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
KSk7Ci0gICAgfQotCi0gICAgR1BSUmVnIHdhc21Db250ZXh0R1BSID0gcGlubmVkUmVncy53YXNt
Q29udGV4dFBvaW50ZXI7Ci0KLSAgICB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBj
YWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpOwotICAgICAgICBudW1HUFJzID0gMDsKLSAgICAgICAgbnVtRlBScyA9IDA7Ci0g
ICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHNldCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0
aGlzLiBTbwotICAgICAgICAvLyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cg
c2luY2Ugd2Ugc2F2ZWQgaXQgYWJvdmUuCi0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcGlu
bmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKLQotICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQg
PSBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwot
Ci0gICAgICAgIC8vIHZtRW50cnlUb1dhc20gcGFzc2VzIFdhc206OkNvbnRleHQqIGFzIHRoZSBm
aXJzdCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCi0gICAgICAgIC8vIG5vdCB1c2luZyBmYXN0IFRM
UyB0byBob2xkIHRoZSBXYXNtOjpDb250ZXh0Ki4KLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9y
Q29udGV4dCgpKSB7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNvbnRleHRHUFIp
OwotICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewotICAgICAgICAgICAgY2FzZSBXYXNtOjpJ
MzI6Ci0gICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKLSAgICAgICAgICAgICAgICBpZiAobnVt
R1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1l
LndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53
aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9
PSBXYXNtOjpJMzIpCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK251bUdQUnM7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgICAgIGNhc2UgV2Fz
bTo6RjY0OgotICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVu
dGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25h
dHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0
LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBq
aXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1f
ZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoISFpbmZvLm1lbW9yeSkgewot
ICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7
Ci0KLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0R1BSLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGJhc2VNZW1vcnkpOwotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAg
ICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsK
LSAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7Ci0gICAgICAgICAgICBB
U1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNz
dW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0
ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkp
LCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGppdC5hZGQ2
NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNp
emVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVt
b3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7
Ci0gICAgfQotCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBh
dGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVu
Y3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgIEFTU0VSVChmdW5j
dGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0
LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRl
eFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21U
b1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCks
IGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsKLSAgICB9KTsKLQotCi0gICAgZm9yIChjb25zdCBSZWdp
c3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAg
R1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwotICAgICAgICBBU1NFUlQocmVn
ICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9
IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7Ci0gICAg
fQotCi0gICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBXYXNt
OjpGMzI6Ci0gICAgICAgIGppdC5tb3ZlRmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2Fz
bTo6RjY0OgotICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogYXV0byBCM0lS
R2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KIHsKICAgICBPcGNvZGVPcmlnaW4gb3JpZ2lu
KG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRp
bmdPZmZzZXQoKSk7CkBAIC0xNTM0LDcgKzEzNTMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9y
aWdpbigpIC0+IE9yaWdpbgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4p
OwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmlu
Zz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0
LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
TWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQorRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxh
dGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25T
dGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRp
b25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAg
ICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApA
QCAtMTU1OCwxMSArMTM3NywxMSBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/
IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6IE9w
dGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lSR2Vu
ZXJhdG9yIGNvbnRleHQoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJV
cCk7Ci0gICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOworICAgIEIzSVJH
ZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgs
IHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2Vu
ZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3Ro
LCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2Vy
LnBhcnNlKCkpOwogCi0gICAgY29udGV4dC5pbnNlcnRDb25zdGFudHMoKTsKKyAgICBpckdlbmVy
YXRvci5pbnNlcnRDb25zdGFudHMoKTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0
eSgpOwogICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggZTJjNmFkYi4uNjliZTQ0OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkIzT3BhcXVl
Qnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21F
bWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxl
SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKQEAgLTU0LDkgKzU1
LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIz
OjpPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7CiB9OwogCi1FeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKLQotc3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQm
LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgp
OworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90
LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0
aW9uID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAyMmVkZDE2Li5kMGVhZmEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yOSw4
ICsyOSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxh
dGlvbi5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRp
bmcuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCkBAIC01MywyMSArNTEsMjEgQEAgbmFtZXNw
YWNlIFdhc21CQlFQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogfQogCi1CQlFQbGFuOjpCQlFQbGFuKFZNKiB2bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9u
PiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQmFz
ZSh2bSwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29u
dGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29y
aywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVF
bWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisg
ICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIFdURk1vdmUo
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9zdGF0
ZShTdGF0ZTo6VmFsaWRhdGVkKQogICAgICwgbV9hc3luY1dvcmsod29yaykKIHsKIH0KIAotQkJR
UGxhbjo6QkJRUGxhbihWTSogdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3Jr
IHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJCUVBsYW4odm0sIGFkb3B0UmVm
KCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUo
dGFzaykpCitCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90
PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQorICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikK
IHsKICAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4o
Vk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5j
V29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKHZtLCBzb3VyY2Us
IHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCog
Y29udGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3lu
Y1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBz
b3VyY2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKICAgICAsIG1fc3RhdGUoU3RhdGU6
OkluaXRpYWwpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewpAQCAtMjY5LDcgKzI2Nyw3IEBA
IHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGll
clVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVu
Y3Rpb25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3Vs
dCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0s
IGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOwor
ICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2Nv
bXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9u
TGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRl
eF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAog
ICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTI4NSw3ICsyODMsNyBAQCB2
b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
CiAgICAgICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9u
SW5kZXgpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0g
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQo
ZnVuY3Rpb25JbmRleCwgY3JlYXRlSlNUb1dhc21XcmFwcGVyKG1fY29tcGlsYXRpb25Db250ZXh0
c1tmdW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tm
dW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlv
bkluZGV4KSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRl
cm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIo
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIApAQCAtMzE0LDE0ICszMTIs
MTQgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2Vy
KQogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXBy
b2R1Y3RzKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChhdXRvIGpzVG9XYXNt
SW50ZXJuYWxGdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rp
b25JbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxG
dW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25J
bmRleCkpIHsKICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQu
anNFbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQg
b2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBT
dHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAganNUb1dhc21JbnRlcm5h
bEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6
Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBp
bGF0aW9uPigKICAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAo
IkphdmFTY3JpcHQtPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRl
eCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuanNF
bnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKaW5kZXggMzU5ZjEzYi4uYzZlYTQ5NyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJX
YXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUg
Ildhc21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYv
RnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQxLDgg
KzQxLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWxsTGlua0luZm87Ci1jbGFzcyBK
U0dsb2JhbE9iamVjdDsKLWNsYXNzIEpTUHJvbWlzZURlZmVycmVkOwogCiBuYW1lc3BhY2UgV2Fz
bSB7CiAKQEAgLTUwLDEyICs0OCwxMyBAQCBjbGFzcyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBs
YW4gewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQbGFuOwogICAgIGVudW0gQXN5bmNXb3Jr
IDogdWludDhfdCB7IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9uIH07CisKICAgICAvLyBOb3RlOiBD
b21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3Ro
ZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgQkJRUGxhbihWTSos
IFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3lu
Y1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
QkJRUGxhbihDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlv
blRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAg
ICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBh
cmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlv
biB0ZXN0cwogICAgIC8vIEZJWE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMg
d2Ugc2hvdWxkIHJlbW92ZSBBc3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBBc3lu
Y1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4o
Q29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRh
c2smJik7CiAKICAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIApAQCAtMTQxLDcg
KzE0MCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93
YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3Qs
IHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0g
ICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0
eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2pzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7Cisg
ICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0
eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlv
bnM7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRz
OwogICAgIFZlY3RvcjxUaWVyVXBDb3VudD4gbV90aWVyVXBDb3VudHM7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKaW5kZXggMWI4YjU2Zi4u
NDQ0NzkwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBs
YW5JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5J
bmxpbmVzLmgKQEAgLTM5LDEwICszOSwxMCBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxs
ZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogICAgIEFTU0VSVCghZmFpbGVkKCkpOwogICAg
IGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlv
bkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rp
b25JbmRleCkgewogCi0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGpzRW50cnlwb2ludENh
bGxlZTsKLSAgICAgICAgaWYgKGF1dG8ganNUb1dhc21GdW5jdGlvbiA9IG1fanNUb1dhc21JbnRl
cm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAg
anNFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShqc1RvV2Fz
bUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIoanNUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVC
aXRzOjpib3hXYXNtKGpzRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOworICAgICAgICBSZWZQdHI8
V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CisgICAgICAgIGlmIChhdXRv
IGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlv
bnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgIGVtYmVkZGVyRW50
cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dh
c21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwg
Q2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKQEAgLTUwLDcgKzUw
LDcgQEAgdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxs
YmFjaykKICAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBX
YXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi5nZXQoZnVuY3Rp
b25JbmRleFNwYWNlKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihm
dW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRy
eXBvaW50Q2FsbGVlLnB0cigpKSk7CiAKLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlv
bkluZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9p
bnRDYWxsZWUpKTsKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZN
b3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxs
ZWUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmNwcAppbmRleCA2N2NjZjVlLi40OTEwYzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJpbmRpbmcuY3BwCkBAIC0yOSw1OTYgKzI5LDE0IEBACiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFj
ZXJzLmgiCi0jaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlRo
dW5rR2VuZXJhdG9ycy5oIgotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgotI2lu
Y2x1ZGUgIldhc21Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgSklUID0gQ0NhbGxIZWxw
ZXJzOwogCi1zdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5z
aWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCi17Ci0gICAgLy8gV2UncmUgY2FsbGlu
ZyBvdXQgb2YgdGhlIGN1cnJlbnQgV2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFuY2Ug
aGFzIGEgbGlzdCBvZiBhbGwgaXRzIGltcG9ydCBmdW5jdGlvbnMuCi0gICAgaml0LmxvYWRXYXNt
Q29udGV4dChyZXN1bHQpOwotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkp
LCByZXN1bHQpOwotfQotCi1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdG
YWlsdXJlPiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9z
LCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCi17
Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBh
d2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCi0gICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRv
IGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCi0g
ICAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKTsKLSAgICBjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxp
bmdDb252ZW50aW9uKCk7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICB1bnNpZ25lZCBhcmdDb3Vu
dCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7Ci0gICAgSklUIGppdDsKLQotICAgIC8vIE5v
dGU6IFdhc21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFz
IGEgY2FsbGVlIHNhdmUuCi0gICAgLy8gSWYgd2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBh
bHNvIG5lZWQgdG8gY2hhbmdlIFdhc21CM0lSR2VuZXJhdG9yLgotCi0gICAgLy8gQmVsb3csIHdl
IGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBz
dGFjay4KLSAgICBBU1NFUlQoIWpzQ0MubV9ncHJBcmdzLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFq
c0NDLm1fZnByQXJncy5zaXplKCkpOwotCi0gICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
Ci0gICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMg
Y29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMy
MQotCi0gICAgewotICAgICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOwotICAgICAgICBo
YXNCYWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJldHVyblR5cGUoKSA9PSBJNjQ7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVz
ZTsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1
bWVudChhcmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAg
ICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFu
eWZ1bmM6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQot
ICAgICAgICAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkgewotICAgICAgICAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAg
ICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwotICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOwotCi0gICAgICAgICAgICAvLyBTdG9yZSBDYWxsZWUuCi0gICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjIpOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSklU
OjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAgICAgICAg
IGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9u
SGFuZGxlcigqdm0pOwotCi0gICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0
ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAg
ICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0
LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJv
ckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0
cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2Vk
IGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOwot
ICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJv
cik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2
bSwgZXhlYyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNo
KTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkp
OwotCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOwotICAg
ICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+
SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBj
YWxsaW5nIGNvbnZlbnRpb24gc2F2ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZl
ZC4gV2UgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lz
dGVycyBzaW5jZSB0aGUgd2FzbSBjYWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KLSAg
ICBSZWdpc3RlclNldCBtaXNzaW5nQ2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVn
aXN0ZXJzOwotICAgIG1pc3NpbmdDYWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZl
UmVnaXN0ZXJzKTsKLSAgICBBU1NFUlQobWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7Ci0K
LSAgICBpZiAoIU9wdGlvbnM6OnVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7
Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZl
ckZvclNpemUoYXJnQ291bnQgKiBzaXplb2YodWludDY0X3QpKTsKLSAgICAgICAgY2hhciogYnVm
ZmVyID0gYXJnQ291bnQgPyBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1
ZmZlcigpKSA6IG51bGxwdHI7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsK
LSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBi
dWZmZXJPZmZzZXQgPSAwOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KTsKLSAgICAgICAgY29uc3QgR1BSUmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7Ci0g
ICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSks
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9
IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdU
eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFy
Z1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoK
LSAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjYXNl
IEkzMjogewotICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7Ci0gICAgICAgICAgICAgICAg
aWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBh
bHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFi
bGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJn
dW1lbnRHUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOwotICAgICAgICAg
ICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcp
OwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zm
c2V0KTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAg
ICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBS
cyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcg
PSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFs
bCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0g
ICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJP
ZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKLSAgICAgICAg
ICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwot
ICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgICAg
IEZQUlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2Fz
bUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21D
Qy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3Vt
ZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAg
ICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQg
Kz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAg
aml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAg
ICAgICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6
ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgfQotICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgaWYgKGFyZ0NvdW50KSB7Ci0gICAgICAgICAgICAvLyBUaGUgR0Mg
c2hvdWxkIG5vdCBsb29rIGF0IHRoaXMgYnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFs
dWVzLgotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNj
cmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50
NjRfdCAoKmNhbGxGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1
aW50NjRfdCopID0KLSAgICAgICAgICAgIFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBj
YWxsZWUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAt
PiB1aW50NjRfdCB7IAotICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
ICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
ICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsK
LSAgICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0g
PSAwOyBhcmdOdW0gPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgewotICAg
ICAgICAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVt
KTsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhcmc7Ci0gICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlm
dW5jOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSTMyOgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oYnVmZmVyW2FyZ051bV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNl
X2Nhc3Q8ZG91YmxlPihidWZmZXJbYXJnTnVtXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJncy5h
cHBlbmQoYXJnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+
bWV0aG9kVGFibGUoKnZtKS0+Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAg
ICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBl
LCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90
IHJlYWxSZXN1bHQ7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlw
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgICAgIGNhc2Ug
QW55ZnVuYzoKLSAgICAgICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgICAgICByZWFsUmVz
dWx0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQu
dG9JbnQzMihleGVjKSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBG
MzI6IHsKLSAgICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4ocmVzdWx0LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHJlYWxSZXN1bHQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICAgICAgCi0gICAgICAgIG1hdGVy
aWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lz
dGVycyA+PSA0LCAiV2UgcmVseSBvbiB0aGlzIHdpdGggdGhlIGNhbGwgYmVsb3cuIik7Ci0gICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmVJbmRleCksIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihidWZmZXIpKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwo
KTsKLSAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZt
LCBBc3NlbWJseUhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwotCi0gICAgICAgIC8v
IGV4Y2VwdGlvbiBoZXJlLgotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgdm9pZCAoKmRv
VW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewot
ICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQo
dm0sIGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsK
LSAgICAgICAgfTsKLSAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoKTsKLSAg
ICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAgICBub0V4Y2Vw
dGlvbi5saW5rKCZqaXQpOwotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkp
IHsKLSAgICAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAg
IGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUklu
Zm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAg
ICAgaml0LnJldCgpOwotCi0gICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQotICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhj
ZXB0aW9uQ2FsbCwgZG9VbndpbmRpbmcpOwotCi0gICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGlt
cG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOwotICAgIH0K
LQotICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhl
cmUgc2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKLSAgICAvLyB3aWxsIGRvIHRoZSBzdGFjayBjaGVj
ayBmb3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMgdGhhdCBpdCBtaWdodCBtYWtlCi0gICAgLy8g
YSBjYWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1ha2Ugc3VyZSBpdHMgc3RhY2sgY2hlY2sgaW5j
bHVkZXMgc3BhY2UKLSAgICAvLyBmb3IgdXMgaGVyZS4KLQotICAgIGNvbnN0IHVuc2lnbmVkIG51
bWJlck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsgMTsgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJn
dW1lbnQuCi0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgIGNvbnN0
IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNp
emVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgY29uc3QgdW5z
aWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0gICAgaml0LnN1YlB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLSAgICBKSVQ6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLQotICAgIC8v
IEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVy
ZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVn
ZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1NTQ3Ci0gICAgCi0gICAgLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUgaW50ZWdlciBw
YXJhbWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lzdGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4K
LSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5z
aWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9m
ZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsg
KythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVu
dChhcmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1
bmM6Ci0gICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6
IHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVnOwotICAgICAgICAgICAgICAgIGlmICht
YXJzaGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAg
ICAgICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFk
eSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFz
IHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZ3ByUmVnKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKLSAgICAgICAgICAgICAgICBqaXQuemVy
b0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOyAvLyBDbGVhciBub24taW50MzIgYW5kIG5v
bi10YWcgYml0cy4KLSAgICAgICAgICAgICAgICBqaXQuYm94SW50MzIoZ3ByUmVnLCBKU1ZhbHVl
UmVncyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNl
dCkpOwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rl
cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXNlIEYzMjoKLSAgICAgICAgICAgIGNhc2UgRjY0OgotICAgICAgICAgICAgICAgIC8vIFNraXBw
ZWQ6IGhhbmRsZWQgYmVsb3cuCi0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzID49
IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCAr
PSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0g
ICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICB7Ci0gICAgICAgIC8vIEludGVnZXIgcmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVu
IHNwaWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxhYmxlLgotICAgICAgICBHUFJSZWcgZG91Ymxl
RW5jb2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgYm9vbCBoYXNNYXRl
cmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBmYWxzZTsKLSAgICAgICAgYXV0byBtYXRlcmlh
bGl6ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zm
c2V0LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKLSAgICAgICAgICAgIGlmICghaGFzTWF0ZXJpYWxp
emVkRG91YmxlRW5jb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChE
b3VibGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4LCAiY29kZWdlbiBhc3N1bWVzIHRoaXMgYmVs
b3ciKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW0zMigxKSwgZGVz
dCk7Ci0gICAgICAgICAgICAgICAgaml0LmxzaGlmdDY0KEpJVDo6VHJ1c3RlZEltbTMyKDQ4KSwg
ZGVzdCk7Ci0gICAgICAgICAgICAgICAgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB1bnNpZ25lZCBt
YXJzaGFsbGVkR1BScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsK
LSAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJz
dEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAg
dW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
YXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBU
eXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3
aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2Fz
ZSBGdW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6
Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxl
ZCBhYm92ZS4KLSAgICAgICAgICAgIGNhc2UgSTMyOgotICAgICAgICAgICAgICAgIC8vIFNraXBw
ZWQ6IGhhbmRsZWQgYWJvdmUuCi0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzID49
IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCAr
PSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0g
ICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgICAg
ICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMg
PCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0g
d2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwg
YXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAg
ICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zm
c2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJSZWcsIGZwclJlZyk7Ci0gICAgICAgICAg
ICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91
YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91
YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyk7Ci0gICAgICAgICAgICAg
ICAgaml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7Ci0gICAgICAg
ICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxs
ZWVGcmFtZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNp
emVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7
Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFy
c2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
c3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBz
Y3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAg
ICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAgICAgICAg
aml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgbWF0
ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAg
ICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNo
KTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVP
ZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRG
UFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjph
cmd1bWVudEdQUjApOwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUo
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7
Ci0KLSAgICBHUFJSZWcgaW1wb3J0SlNDZWxsR1BSUmVnID0gR1BSSW5mbzo6cmVnVDA7IC8vIENh
bGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBmb3Igc2xvdyBwYXRoIGJlbG93LgotICAgIEFTU0VS
VCghd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQoaW1wb3J0SlNDZWxsR1BSUmVnKSk7
Ci0KLSAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQsIGltcG9ydEluZGV4LCBpbXBvcnRK
U0NlbGxHUFJSZWcpOwotCi0gICAgaml0LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0z
MihudW1iZXJPZlBhcmFtZXRlcnMpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsg
UGF5bG9hZE9mZnNldCkpOwotICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KFZhbHVl
VW5kZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAvLyBG
SVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVn
aXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTQ4OAotCi0gICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBjYWxsTGlua0lu
Zm9zLmFkZCgpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgQ29kZU9yaWdpbigpLCBpbXBvcnRKU0NlbGxHUFJSZWcpOwotICAgIEpJVDo6RGF0YUxhYmVs
UHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZh
bHVlKDApOwotICAgIEpJVDo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2go
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBpbXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hl
Y2ssIGluaXRpYWxSaWdodFZhbHVlKTsKLSAgICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVh
ckNhbGwoKTsKLSAgICBKSVQ6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7Ci0gICAgc2xvd1BhdGgu
bGluaygmaml0KTsKLSAgICAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBH
UFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMi4KLSAgICBK
SVQ6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKLSAgICBkb25lLmxpbmsoJmppdCk7
Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKLQotICAgIHN3
aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewotICAgIGNhc2UgVm9pZDoKLSAgICAgICAg
Ly8gRGlzY2FyZC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jOgotICAgIGNhc2UgQW55
ZnVuYzoKLSAgICAgICAgLy8gRm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3
aXRoIHRoZXNlIHR5cGVzIGluIHRoZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1i
bHkuTW9kdWxlIHZhbGlkYXRpb24gZXJyb3IuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSTY0OiB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAgfQotICAgIGNh
c2UgSTMyOiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKLQotICAgICAgICBzbG93UGF0aC5hcHBl
bmQoaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhh
dmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5v
dEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFn
UmVnaXN0ZXJzKSk7Ci0gICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBkb25lLmFwcGVu
ZChqaXQuanVtcCgpKTsKLQotICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
LSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBpbnQzMl90
ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICAgICAgICAgIHJldHVybiB2LnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9JMzIpOwotICAgICAgICB9KTsK
LQotICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIEYzMjogewotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAg
IGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgYXV0byBpc0RvdWJsZSA9
IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKLSAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAg
IGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7
Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5tb3ZlNjRU
b0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIp
OwotICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1
bXAoKSk7Ci0KLSAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwotICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAg
ICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVu
ZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBmbG9hdCAoKmNvbnZl
cnRUb0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHYpIC0+IGZsb2F0IHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAg
ICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9u
ZTsKLSAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICBhdXRv
IGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBXZSdyZSBh
biBpbnQzMgotICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2
NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
Uik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91Ymxl
LmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVO
dW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAg
IGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAg
ICBub3RBTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBq
aXQuY2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElm
RXhjZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0
YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJs
ZSB7IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIHJldHVybiB2
LnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
Y2FsbCwgY29udmVydFRvRjY0KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZq
aXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAgaWYgKCFleGNlcHRpb25DaGVja3Mu
ZW1wdHkoKSkgewotICAgICAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKLSAgICAgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsK
LSAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGpp
dC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICAgICAgdm9pZCAoKmRvVW53aW5k
aW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAg
ICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4
ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAg
ICAgfTsKLQotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOwot
ICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChVTkxJS0VMWShw
YXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xv
d0NhbGwpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIu
bG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSk7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90
UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKLSAg
ICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQ
YXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7Ci0KLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0
SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Ci19Ci0KIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5z
aWduZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5u
ZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAgLTYzMywyNCArNTEsMjMgQEAg
RXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2Fz
bSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lz
dGVyICE9IHNjcmF0Y2gpOwogICAgIEdQUlJlZyBzaXplUmVnQXNTY3JhdGNoID0gc2l6ZVJlZ3Nb
MF0uc2l6ZVJlZ2lzdGVyOwogCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8Q29udGV4
dCwgSlNXZWJBc3NlbWJseUluc3RhbmNlPjo6dmFsdWUsICJUaGlzIGlzIGFzc3VtZWQgaW4gdGhl
IGNvZGUgYmVsb3cuIik7CiAgICAgLy8gQjMncyBjYWxsIGNvZGVnZW4gZW5zdXJlcyB0aGF0IHRo
ZSBKU0NlbGwgaXMgYSBXZWJBc3NlbWJseUZ1bmN0aW9uLgotICAgIGppdC5sb2FkV2FzbUNvbnRl
eHQoc2l6ZVJlZ0FzU2NyYXRjaCk7IC8vIE9sZCBJbnN0YW5jZSoKLSAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOwotCi0gICAgLy8gR2V0
IHRoZSBjYWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250
ZXh0LiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3Rh
bmNlLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1
bmN0aW9uOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2UqLgot
ICAgIGppdC5zdG9yZVdhc21Db250ZXh0KGJhc2VNZW1vcnkpOworICAgIGppdC5sb2FkV2FzbUNv
bnRleHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgorICAgIC8v
IEdldCB0aGUgY2FsbGVlJ3MgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYW5kIHNldCBpdCBhcyBXYXNt
Q29udGV4dCdzIGluc3RhbmNlLiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3Rvcmlu
ZyBpdHMgb3duIEluc3RhbmNlLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVn
QXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2Uo
aW1wb3J0SW5kZXgpKSwgYmFzZU1lbW9yeSk7IC8vIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSouCisg
ICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUg
d2FzbSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCisgICAgaml0
LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludChpbXBvcnRJbmRleCkpLCBzY3JhdGNoKTsgLy8g
V2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24uCisgICAgaml0LnN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKIAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhz
aXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRjaCk7CiAgICAgaml0LnN0b3JlUHRyKHNpemVSZWdB
c1NjcmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CiAKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93
aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXZWJBc3NlbWJseS5JbnN0YW5jZSBoYXZlIHRoZSBz
YW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0
ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgotICAgIGppdC5sb2FkUHRy
KEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgaml0
LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAg
ICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUg
YXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVn
aXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsgLy8gV2FzbU1lbW9yeTo6dm9pZCouCisgICAgaml0LmxvYWRQdHIoSklUOjpB
ZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVn
c1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFz
ZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6dm9pZCouCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tp
XS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tp
XS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CkBAIC02NTgsNyArNzUsNiBAQCBFeHBlY3RlZDxN
YWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVk
IGltcG9ydEluZGV4KQogICAgIH0KIAogICAgIC8vIFRhaWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUg
V2ViQXNzZW1ibHkgZnVuY3Rpb24uCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0
Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRp
b24oKSksIHNjcmF0Y2gpOwogICAgIGppdC5sb2FkUHRyKHNjcmF0Y2gsIHNjcmF0Y2gpOwogICAg
IGppdC5qdW1wKHNjcmF0Y2gpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQmluZGluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRp
bmcuaAppbmRleCA0ZTI2MmJhLi5mZWM2YmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjgsOSArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAog
I2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldh
c21Gb3JtYXQuaCIKLSNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDQsNyArNDIsNiBAQCBlbnVtIGNsYXNzIEJpbmRp
bmdGYWlsdXJlIHsKIH07CiAKIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpOwotRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSnMoVk0qLCBCYWc8Q2Fs
bExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9y
dEluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAppbmRleCA3MGZlZmIwLi45ODA0MzgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcApAQCAtMzUs
MTYgKzM1LDI2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLUNvZGVC
bG9jazo6Q29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVs
ZUluZm9ybWF0aW9uKQorUmVmPENvZGVCbG9jaz4gQ29kZUJsb2NrOjpjcmVhdGUoQ29udGV4dCog
Y29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBzaXplX3QgaW1wb3J0
RnVuY3Rpb25Db3VudCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsK
KyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYWxsb2NhdGlvblNp
emUoaW1wb3J0RnVuY3Rpb25Db3VudCkpKSBDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgbW9kdWxl
SW5mb3JtYXRpb24sIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhj
ZXB0aW9uKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcG9ydEZ1bmN0aW9uQ291bnQ7
ICsraSkKKyAgICAgICAgcmVzdWx0LT5pbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaSkgPSBudWxs
cHRyOworICAgIHJldHVybiBhZG9wdFJlZigqcmVzdWx0KTsKK30KKworQ29kZUJsb2NrOjpDb2Rl
QmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlv
biYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6
IG1fY2FsbGVlQ291bnQobW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkp
CiAgICAgLCBtX21vZGUobW9kZSkKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRU
aGlzID0gdGhpczsKLSAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4obnVsbHB0ciwg
bWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46OkZ1bGxDb21waWxlLCBjcmVhdGVT
aGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZN
b3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0qLCBQbGFuJikgeworCisgICAgbV9wbGFuID0gYWRvcHRS
ZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQ
bGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CiAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgaWYgKG1fcGxh
bi0+ZmFpbGVkKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5lcnJv
ck1lc3NhZ2UoKTsKLSAgICAgICAgICAgIG1fcGxhbiA9IG51bGxwdHI7CisgICAgICAgICAgICBz
ZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApAQCAtNjYsMTAgKzc2LDEwIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKE1lbW9yeU1vZGUgbW9k
ZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQogICAgICAgICBtX3dhc21U
b1dhc21DYWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7CiAgICAg
ICAgIG1fdGllclVwQ291bnRzID0gbV9wbGFuLT50YWtlVGllclVwQ291bnRzKCk7CiAKLSAgICAg
ICAgbV9wbGFuID0gbnVsbHB0cjsKLSAgICB9KSkpOwotCisgICAgICAgIHNldENvbXBpbGF0aW9u
RmluaXNoZWQoKTsKKyAgICB9KSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJv
d1dhc21FeGNlcHRpb24pKTsKICAgICBtX3BsYW4tPnNldE1vZGUobW9kZSk7CisKICAgICBhdXRv
JiB3b3JrbGlzdCA9IFdhc206OmVuc3VyZVdvcmtsaXN0KCk7CiAgICAgLy8gTm90ZSwgaW1tZWRp
YXRlbHkgYWZ0ZXIgd2UgZW5xdWV1ZSB0aGUgcGxhbiwgdGhlcmUgaXMgYSBjaGFuY2UgdGhlIGFi
b3ZlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLgogICAgIHdvcmtsaXN0LmVucXVldWUobWFrZVJl
ZigqbV9wbGFuLmdldCgpKSk7CkBAIC05Miw3ICsxMDIsNyBAQCB2b2lkIENvZGVCbG9jazo6d2Fp
dFVudGlsRmluaXNoZWQoKQogICAgIC8vIGVsc2UsIGlmIHdlIGRvbid0IGhhdmUgYSBwbGFuLCB3
ZSdyZSBhbHJlYWR5IGNvbXBpbGVkLgogfQogCi12b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5j
KFZNJiB2bSwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKK3ZvaWQgQ29kZUJsb2Nr
Ojpjb21waWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNr
JiYgdGFzaykKIHsKICAgICBSZWZQdHI8UGxhbj4gcGxhbjsKICAgICB7CkBAIC0xMDQsMTIgKzEx
NCwxMSBAQCB2b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgQXN5bmNDb21waWxh
dGlvbkNhbGxiYWNrJiYgdGFzaykKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBrZWVwIGEg
UmVmUHRyIG9uIHRoZSBQbGFuIGJlY2F1c2UgdGhlIHdvcmtsaXN0IHdpbGwga2VlcAogICAgICAg
ICAvLyBhIFJlZlB0ciBvbiB0aGUgUGxhbiB1bnRpbCB0aGUgcGxhbiBmaW5pc2hlcyBub3RpZnlp
bmcgYWxsIG9mIGl0cyBjYWxsYmFja3MuCiAgICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb3Rl
Y3RlZFRoaXMgPSB0aGlzOwotICAgICAgICBwbGFuLT5hZGRDb21wbGV0aW9uVGFzayh2bSwgY3Jl
YXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92ZSh0
YXNrKSwgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChWTSogdm0sIFBs
YW4mKSB7Ci0gICAgICAgICAgICBBU1NFUlQodm0pOwotICAgICAgICAgICAgdGFzay0+cnVuKCp2
bSwgbWFrZVJlZigqdGhpcykpOworICAgICAgICBwbGFuLT5hZGRDb21wbGV0aW9uVGFzayhjb250
ZXh0LCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHRhc2sgPSBX
VEZNb3ZlKHRhc2spLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBs
YW4mKSB7CisgICAgICAgICAgICB0YXNrLT5ydW4obWFrZVJlZigqdGhpcykpOwogICAgICAgICB9
KSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHRhc2stPnJ1bih2bSwgbWFrZVJlZigqdGhpcykpOwor
ICAgICAgICB0YXNrLT5ydW4obWFrZVJlZigqdGhpcykpOwogfQogCiBib29sIENvZGVCbG9jazo6
aXNTYWZlVG9SdW4oTWVtb3J5TW9kZSBtZW1vcnlNb2RlKQpAQCAtMTMwLDYgKzEzOSwxMyBAQCBi
b29sIENvZGVCbG9jazo6aXNTYWZlVG9SdW4oTWVtb3J5TW9kZSBtZW1vcnlNb2RlKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorCit2b2lkIENvZGVCbG9jazo6c2V0Q29tcGlsYXRpb25GaW5pc2hl
ZCgpCit7CisgICAgbV9wbGFuID0gbnVsbHB0cjsKKyAgICBtX2NvbXBpbGF0aW9uRmluaXNoZWQu
c3RvcmUodHJ1ZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29k
ZUJsb2NrLmgKaW5kZXggMmRiZjdlNC4uZTM2MWUwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Db2RlQmxvY2suaApAQCAtMjgsNiArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUg
Ildhc21FbWJlZGRlci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNt
VGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KQEAgLTM3LDExICszOSwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07
Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgQ2FsbGVlOworc3RydWN0IENvbnRleHQ7CiBj
bGFzcyBCQlFQbGFuOwogY2xhc3MgT01HUGxhbjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsK
QEAgLTUxLDIwICs1Miw0MiBAQCBlbnVtIGNsYXNzIE1lbW9yeU1vZGUgOiB1aW50OF90OwogICAg
IAogY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9j
az4gewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0mLCBSZWY8Q29k
ZUJsb2NrPiYmKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFJlZjxDb2RlQmxvY2s+
JiYpOwogICAgIHVzaW5nIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayA9IFJlZlB0cjxXVEY6OlNo
YXJlZFRhc2s8Q2FsbGJhY2tUeXBlPj47Ci0gICAgc3RhdGljIFJlZjxDb2RlQmxvY2s+IGNyZWF0
ZShNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikK
KyAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlKENvbnRleHQqLCBNZW1vcnlNb2RlLCBN
b2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNl
cHRpb24pOworCisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydFN0dWJzKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4o
c2l6ZW9mKENvZGVCbG9jaykpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlv
blNpemUoQ2hlY2tlZDxzaXplX3Q+IGZ1bmN0aW9uSW1wb3J0Q291bnQpCisgICAgeworICAgICAg
ICByZXR1cm4gKG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBmdW5jdGlv
bkltcG9ydENvdW50KS51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICB2b2lkKiYgaW1wb3J0V2Fz
bVRvRW1iZWRkZXJTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ29kZUJsb2NrKG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uKSk7Cisg
ICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZvaWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0
aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGltcG9ydEluZGV4KSk7Cisg
ICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVy
U3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXRP
ZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogaW1wb3J0SW5kZXg7CisgICAgfQorCisg
ICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbVRvSlNDYWxsU3R1YkZvcklt
cG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChydW5uYWJs
ZSgpKTsKKyAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5k
ZXgpOwogICAgIH0KIAogICAgIHZvaWQgd2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICB2b2lkIGNv
bXBpbGVBc3luYyhWTSYsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsKKyAgICB2b2lkIGNv
bXBpbGVBc3luYyhDb250ZXh0KiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAg
Ym9vbCBjb21waWxhdGlvbkZpbmlzaGVkKCkKICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuICFtX3BsYW47CisgICAgICAgIHJldHVy
biBtX2NvbXBpbGF0aW9uRmluaXNoZWQubG9hZCgpOwogICAgIH0KICAgICBib29sIHJ1bm5hYmxl
KCkgeyByZXR1cm4gY29tcGlsYXRpb25GaW5pc2hlZCgpICYmICFtX2Vycm9yTWVzc2FnZTsgfQog
CkBAIC03OCw5ICsxMDEsMTIgQEAgcHVibGljOgogICAgIH0KIAogICAgIHVuc2lnbmVkIGZ1bmN0
aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6
ZSgpOyB9CisgICAgCisgICAgLy8gVGhlc2UgdHdvIGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5IHZh
bGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVsYXRlZC4KIAogICAgIENhbGxlZSYg
anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50
KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAt
IGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKIApAQCAtOTAsNiArMTE2LDcgQEAgcHVibGljOgogICAg
IH0KICAgICBDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBBU1NFUlQocnVu
bmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBm
dW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1
bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICAgICAgaWYgKG1f
b3B0aW1pemVkQ2FsbGVlc1tjYWxsZWVJbmRleF0pCkBAIC0xMTcsNyArMTQ0LDggQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKIAotICAgIENvZGVCbG9jayhN
ZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYpOworICAgIENvZGVCbG9jayhDb250ZXh0Kiwg
TWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwg
VGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICB2b2lkIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsK
ICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50OwogICAgIE1lbW9yeU1vZGUgbV9tb2RlOwogICAg
IFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9jYWxsZWVzOwpAQCAtMTI4LDYgKzE1Niw3IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNt
VG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2Fz
bVRvV2FzbUV4aXRTdHViczsKICAgICBSZWZQdHI8QkJRUGxhbj4gbV9wbGFuOworICAgIHN0ZDo6
YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5pc2hlZCB7IGZhbHNlIH07CiAgICAgU3RyaW5n
IG1fZXJyb3JNZXNzYWdlOwogICAgIExvY2sgbV9sb2NrOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAppbmRleCBmZWExNmRlLi5lMDU5ZmMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwCkBAIC0yOCwzMCArMjgsNDEg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCiAjaW5j
bHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIAotQ29udGV4dCogbG9hZENvbnRleHQoVk0mIHZtKQorYm9vbCBD
b250ZXh0Ojp1c2VGYXN0VExTKCkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIHJl
dHVybiBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQoKTsKKyNlbHNlCisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCit9CisKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogQ29udGV4dDo6
bG9hZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAodXNlRmFz
dFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb250ZXh0Kj4o
X3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZKSk7CisgICAg
aWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqPihfcHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVY
VF9LRVkpKTsKICNlbmRpZgotICAgIHJldHVybiB2bS53YXNtQ29udGV4dDsKKyAgICByZXR1cm4g
aW5zdGFuY2U7CiB9CiAKLXZvaWQgc3RvcmVDb250ZXh0KFZNJiB2bSwgQ29udGV4dCogY29udGV4
dCkKK3ZvaWQgQ29udGV4dDo6c3RvcmUoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpLCB2b2lkKiBz
b2Z0U3RhY2tMaW1pdCkKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmICh1c2VG
YXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3Qo
V1RGX1dBU01fQ09OVEVYVF9LRVksIGJpdHdpc2VfY2FzdDx2b2lkKj4oY29udGV4dCkpOworICAg
IGlmICh1c2VGYXN0VExTKCkpCisgICAgICAgIF9wdGhyZWFkX3NldHNwZWNpZmljX2RpcmVjdChX
VEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9jYXN0PHZvaWQqPihpKSk7CiAjZW5kaWYKLSAg
ICB2bS53YXNtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgaWYgKGNvbnRleHQpCi0gICAgICAgIGNv
bnRleHQtPnNldENhY2hlZFN0YWNrTGltaXQodm0uc29mdFN0YWNrTGltaXQoKSk7CisgICAgaW5z
dGFuY2UgPSBpOworICAgIGlmIChpbnN0YW5jZSkKKyAgICAgICAgaW5zdGFuY2UtPnNldENhY2hl
ZFN0YWNrTGltaXQoc29mdFN0YWNrTGltaXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKaW5kZXggM2NmNjVm
Yi4uYzJiNTFkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
bnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCkBA
IC0yNywzNyArMjcsMjAgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLQogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIFZNOworY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOwogCiBu
YW1lc3BhY2UgV2FzbSB7CiAKLS8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRoaXMgdG8gYmUgc29t
ZXRoaW5nIGVsc2UgYXQgc29tZSBwb2ludDoKLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzAyNjAKLXVzaW5nIENvbnRleHQgPSBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U7Ci0KLWlubGluZSBib29sIHVzZUZhc3RUTFMoKQotewotI2lmIEVOQUJMRShGQVNUX1RMU19K
SVQpCi0gICAgcmV0dXJuIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdFRMUygpOwotI2Vsc2UK
LSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KK3N0cnVjdCBDb250ZXh0IHsKKyAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlIHsgbnVsbHB0ciB9OwogCi1pbmxpbmUgYm9vbCB1
c2VGYXN0VExTRm9yQ29udGV4dCgpCi17Ci0gICAgaWYgKHVzZUZhc3RUTFMoKSkKLSAgICAgICAg
cmV0dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGxvYWQoKSBjb25zdDsKKyAgICB2
b2lkIHN0b3JlKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHZvaWQqIHNvZnRTdGFja0xpbWl0KTsK
IAotQ29udGV4dCogbG9hZENvbnRleHQoVk0mKTsKLXZvaWQgc3RvcmVDb250ZXh0KFZNJiwgQ29u
dGV4dCopOworICAgIHN0YXRpYyBib29sIHVzZUZhc3RUTFMoKTsKK307CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21FbWJlZGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4Nzk0ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldh
c21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKKyNpbmNsdWRlIDxtZW1v
cnk+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hvdWxkIGJlIFdhc206Okluc3RhbmNlLCBz
byBzaG91bGQgdXNlIGJlbG93LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKKworbmFtZXNw
YWNlIFdhc20geworCitzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Oworc3RydWN0IEludGVybmFs
RnVuY3Rpb247CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CitjbGFzcyBTaWduYXR1cmU7Citz
dHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsKKworLy8gQ3JlYXRlIHdyYXBwZXIgY29kZSB0
byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNzZW1ibHkuCit1c2luZyBDcmVhdGVFbWJlZGRl
cldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVp
bnQzMl90KT47CisKKy8vIENhbGxlZCBhcyBzb29uIGFzIGFuIGV4Y2VwdGlvbiBpcyBkZXRlY3Rl
ZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMgdG8gY29udGludWUgYXQuCit1c2luZyBUaHJv
d1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlw
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4IDJiMWQ4Mjgu
LmNjMWU3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
YXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkV4
ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgotI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNt
TWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAppbmRleCAzODEyODM2
Li5lNWUwN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZh
dWx0U2lnbmFsSGFuZGxlci5oCkBAIC0yNyw4ICsyNyw2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCiB2b2lkIHJlZ2lzdGVyQ29kZSh2b2lk
KiBzdGFydCwgdm9pZCogZW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aAppbmRleCBiMjIyMjE3Li5lN2IzZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCkBAIC00NCwxNCArNDQsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IEpTRnVuY3Rpb247Ci0KIG5hbWVzcGFjZSBCMyB7CiBjbGFzcyBDb21waWxhdGlvbjsKIH0KIAog
bmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Oworc3RydWN0IE1v
ZHVsZUluZm9ybWF0aW9uOworCiBpbmxpbmUgYm9vbCBpc1ZhbHVlVHlwZShUeXBlIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlu
c3RhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGJlMGU3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNl
LmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5o
IgorCisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRp
b24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIHsKK3NpemVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZShN
b2R1bGUmIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gbW9kdWxlLm1vZHVsZUluZm9ybWF0aW9uKCku
Z2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworfQorfQorCitJbnN0YW5jZTo6SW5z
dGFuY2UoUmVmPE1vZHVsZT4mJiBtb2R1bGUpCisgICAgOiBtX21vZHVsZShXVEZNb3ZlKG1vZHVs
ZSkpCisgICAgLCBtX2dsb2JhbHMoTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGdsb2JhbE1l
bW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdldCgpKSkpCit7Cit9CisKK0luc3RhbmNlOjp+SW5zdGFu
Y2UoKSB7IH0KKworc2l6ZV90IEluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGdsb2JhbE1lbW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdldCgpKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5j
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3OGE3NAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCkBAIC0wLDAgKzEsODcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
KyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1
ZGUgIldhc21UYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2Ns
YXNzIEluc3RhbmNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEluc3RhbmNlPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxJbnN0YW5jZT4gY3JlYXRlKFJlZjxNb2R1bGU+JiYgbW9k
dWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zdGFuY2UoV1RGTW92
ZShtb2R1bGUpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluYWxpemVDcmVhdGlvbihSZWY8
Q29kZUJsb2NrPiYmIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIG1fY29kZUJsb2NrID0gV1RG
TW92ZShjb2RlQmxvY2spOworICAgIH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5JbnN0YW5j
ZSgpOworCisgICAgc2l6ZV90IGV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3Q7CisKKyAgICBN
b2R1bGUmIG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQorICAgIE1lbW9yeSog
bWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KKyAgICBUYWJsZSogdGFibGUoKSB7
IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisKKyAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CisgICAgaW50NjRf
dCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQo
KVtpXTsgfQorICAgIGZsb2F0IGxvYWRGMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMyR2xvYmFsKGkpKTsgfQorICAgIGRvdWJsZSBs
b2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3Vi
bGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9CisgICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwg
aW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQoKVtpXSA9IGJpdHM7IH0KKworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZFN0YWNrTGltaXQpOyB9CisgICAgdm9pZCogY2FjaGVk
U3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZv
aWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBsaW1pdCkgeyBtX2NhY2hlZFN0YWNrTGltaXQg
PSBsaW1pdDsgfQorCisgICAgZnJpZW5kIGNsYXNzIEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
OyAvLyBGSVhNRSByZW1vdmUgdGhpcyBvbmNlIHJlZmFjdG9yZWQgaHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTc3NDcyLgorCitwcml2YXRlOgorICAgIEluc3RhbmNlKFJlZjxNb2R1bGU+JiYpOworICAg
IAorICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fY29k
ZUJsb2NrOworICAgIFJlZlB0cjxNZW1vcnk+IG1fbWVtb3J5OworICAgIFJlZlB0cjxUYWJsZT4g
bV90YWJsZTsKKyAgICBNYWxsb2NQdHI8dWludDY0X3Q+IG1fZ2xvYmFsczsKKyAgICB2b2lkKiBt
X2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludHB0cl90Pjo6bWF4KCkpIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBjNWY0OGU5Li4zMzhiNzI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjgsMTMgKzI4LDE5IEBACiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIldhc21U
aHVua3MuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
ICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1
ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KICNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNs
dWRlIDx3dGYvUkFNU2l6ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUg
PGNzdHJpbmc+CisjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKQEAgLTUxLDE5ICs1NywxOSBAQCBORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKSB7IENSQQogc3Ry
dWN0IE1lbW9yeVJlc3VsdCB7CiAgICAgZW51bSBLaW5kIHsKICAgICAgICAgU3VjY2VzcywKLSAg
ICAgICAgU3VjY2Vzc0FuZEFzeW5jR0MsCi0gICAgICAgIFN5bmNHQ0FuZFJldHJ5CisgICAgICAg
IFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZSwKKyAgICAgICAgU3luY1RyeVRvUmVjbGFp
bU1lbW9yeQogICAgIH07Ci0gICAgCisKICAgICBzdGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmco
S2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2Ug
U3VjY2VzczoKICAgICAgICAgICAgIHJldHVybiAiU3VjY2VzcyI7Ci0gICAgICAgIGNhc2UgU3Vj
Y2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICByZXR1cm4gIlN1Y2Nlc3NBbmRBc3luY0dDIjsK
LSAgICAgICAgY2FzZSBTeW5jR0NBbmRSZXRyeToKLSAgICAgICAgICAgIHJldHVybiAiU3luY0dD
QW5kUmV0cnkiOworICAgICAgICBjYXNlIFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZToK
KyAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlIjsKKyAg
ICAgICAgY2FzZSBTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OgorICAgICAgICAgICAgcmV0dXJuICJT
eW5jVHJ5VG9SZWNsYWltTWVtb3J5IjsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk4LDE3ICsxMDQs
MTcgQEAgcHVibGljOgogICAgICAgICBNZW1vcnlSZXN1bHQgcmVzdWx0ID0gWyZdIHsKICAgICAg
ICAgICAgIGF1dG8gaG9sZGVyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgICAgIGlmICht
X21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50KQotICAgICAgICAgICAgICAgIHJldHVybiBN
ZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5
bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB2b2lkKiBy
ZXN1bHQgPSBHaWdhY2FnZTo6dHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlByaW1p
dGl2ZSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJl
c3VsdDo6U3luY0dDQW5kUmV0cnkpOworICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1
bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5KTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9tZW1vcmllcy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdCgKICAgICAgICAgICAgICAgICBy
ZXN1bHQsCi0gICAgICAgICAgICAgICAgbV9tZW1vcmllcy5zaXplKCkgPj0gbV9tYXhDb3VudCAv
IDIgPyBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3NBbmRBc3luY0dDIDogTWVtb3J5UmVzdWx0OjpTdWNj
ZXNzKTsKKyAgICAgICAgICAgICAgICBtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50IC8g
MiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlIDogTWVtb3J5
UmVzdWx0OjpTdWNjZXNzKTsKICAgICAgICAgfSgpOwogICAgICAgICAKICAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ1dlYkFzc2VtYmx5TWVtb3J5KCkpCkBAIC0xNTMsMTIgKzE1OSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdDo6S2luZCByZXN1bHQgPSBbJl0gewogICAgICAgICAg
ICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICAgICAgaWYgKG1fcGh5
c2ljYWxCeXRlcyArIGJ5dGVzID4gbWVtb3J5TGltaXQoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
TWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX3BoeXNpY2FsQnl0ZXMgKz0gYnl0ZXM7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChtX3BoeXNpY2FsQnl0ZXMgPj0gbWVtb3J5TGltaXQoKSAvIDIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJl
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNz
OwogICAgICAgICB9KCk7CkBAIC0yMDUsNyArMjExLDcgQEAgc3RhdGljIE1lbW9yeU1hbmFnZXIm
IG1lbW9yeU1hbmFnZXIoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotYm9vbCB0cnlB
bmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9jYXRlKQorYm9vbCB0cnlBbGxvY2F0ZShjb25z
dCBGdW5jJiBhbGxvY2F0ZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiBub3RpZnlNZW1v
cnlQcmVzc3VyZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiBzeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5KQogewogICAgIHVuc2lnbmVkIG51bVRyaWVzID0gMjsKICAgICBib29sIGRvbmUgPSBm
YWxzZTsKQEAgLTIxNCwxNCArMjIwLDE2IEBAIGJvb2wgdHJ5QW5kR0MoVk0mIHZtLCBjb25zdCBG
dW5jJiBhbGxvY2F0ZSkKICAgICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M6CiAgICAg
ICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1l
bW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICB2bS5oZWFwLmNvbGxl
Y3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICBjYXNlIE1lbW9yeVJlc3Vs
dDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAgICAgaWYgKG5vdGlm
eU1lbW9yeVByZXNzdXJlKQorICAgICAgICAgICAgICAgIG5vdGlmeU1lbW9yeVByZXNzdXJlKCk7
CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnk6CisgICAgICAgIGNhc2UgTWVtb3J5UmVz
dWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OgogICAgICAgICAgICAgaWYgKGkgKyAxID09IG51
bVRyaWVzKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgdm0uaGVhcC5jb2xs
ZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICAgICAgaWYgKHN5bmNUcnlU
b1JlY2xhaW1NZW1vcnkpCisgICAgICAgICAgICAgICAgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDAsMjIgKzI0OCwz
MiBAQCBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkKICAgICByZXR1cm4g
IiI7CiB9CiAKLU1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSkKK01lbW9yeTo6TWVtb3J5KCkKK3sKK30KKworTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBGdW5jdGlvbjx2b2lkKCk+JiYgbm90aWZ5TWVt
b3J5UHJlc3N1cmUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBX
VEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2Fs
bGJhY2spCiAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVt
KQorICAgICwgbV9ub3RpZnlNZW1vcnlQcmVzc3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlv
bjx2b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xh
aW1NZW1vcnkoc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVj
bGFpbU1lbW9yeSkpCisgICAgLCBtX2dyb3dTdWNjZXNzQ2FsbGJhY2soc3RkOjpmb3J3YXJkPFdU
Rjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxi
YWNrKSkKIHsKICAgICBBU1NFUlQoIWluaXRpYWwuYnl0ZXMoKSk7CiAgICAgQVNTRVJUKG1fbW9k
ZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwogfQogCi1NZW1vcnk6Ok1l
bW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
c2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUpCitNZW1vcnk6Ok1lbW9yeSh2
b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90
IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBub3Rp
ZnlNZW1vcnlQcmVzc3VyZSwgRnVuY3Rpb248dm9pZCgpPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1v
cnksIFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nl
c3NDYWxsYmFjaykKICAgICA6IG1fbWVtb3J5KG1lbW9yeSkKICAgICAsIG1fc2l6ZShpbml0aWFs
LmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhp
bXVtKQogICAgICwgbV9tYXBwZWRDYXBhY2l0eShtYXBwZWRDYXBhY2l0eSkKICAgICAsIG1fbW9k
ZShtb2RlKQorICAgICwgbV9ub3RpZnlNZW1vcnlQcmVzc3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpG
dW5jdGlvbjx2b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSkpCisgICAgLCBtX3N5bmNUcnlU
b1JlY2xhaW1NZW1vcnkoc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1Ry
eVRvUmVjbGFpbU1lbW9yeSkpCisgICAgLCBtX2dyb3dTdWNjZXNzQ2FsbGJhY2soc3RkOjpmb3J3
YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vz
c0NhbGxiYWNrKSkKIHsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkg
YWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CkBAIC0yNzUsNyArMjkzLDEyIEBAIHN0YXRpYyB2b2lk
IGNvbW1pdFplcm9QYWdlcyh2b2lkKiBzdGFydEFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykK
ICNlbmRpZgogfQogCi1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6
Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeSgpKTsKK30KKyAgICAK
K1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgRnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBGdW5j
dGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lk
KFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKQogewogICAgIEFT
U0VSVChpbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49
IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCkBA
IC0yODMsMzMgKzMwNiwyNyBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0s
IFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICBjb25zdCBzaXplX3Qg
aW5pdGlhbEJ5dGVzID0gaW5pdGlhbC5ieXRlcygpOwogICAgIGNvbnN0IHNpemVfdCBtYXhpbXVt
Qnl0ZXMgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogMDsKIAotICAgIC8vIFdlIG5lZWQg
dG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCi0gICAgaWYg
KFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgaWYgKG1h
eGltdW0gJiYgIW1heGltdW1CeXRlcykgewogICAgICAgICAvLyBVc2VyIHNwZWNpZmllZCBhIHpl
cm8gbWF4aW11bSwgaW5pdGlhbCBzaXplIG11c3QgYWxzbyBiZSB6ZXJvLgogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
ZW1vcnkoaW5pdGlhbCwgbWF4aW11bSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1l
bW9yeShpbml0aWFsLCBtYXhpbXVtLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+
Pihub3RpZnlNZW1vcnlQcmVzc3VyZSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4+KHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2
b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKSk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgZG9uZSA9IHRyeUFuZEdDKAotICAgICAgICB2bSwKKyAgICBib29s
IGRvbmUgPSB0cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2lu
ZCB7CiAgICAgICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlUGh5c2lj
YWxCeXRlcyhpbml0aWFsQnl0ZXMpOwotICAgICAgICB9KTsKKyAgICAgICAgfSwgbm90aWZ5TWVt
b3J5UHJlc3N1cmUsIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgIGlmICghZG9uZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIGNoYXIqIGZhc3RNZW1vcnkgPSBu
dWxscHRyOwogICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSkgewot
ICAgICAgICB0cnlBbmRHQygKLSAgICAgICAgICAgIHZtLAorICAgICAgICB0cnlBbGxvY2F0ZSgK
ICAgICAgICAgICAgIFsmXSAoKSAtPiBNZW1vcnlSZXN1bHQ6OktpbmQgewogICAgICAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gbWVtb3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlVmlydHVhbFBhZ2Vz
KCk7CiAgICAgICAgICAgICAgICAgZmFzdE1lbW9yeSA9IGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVz
dWx0LmJhc2VQdHIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQua2luZDsKLSAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSwgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIHN5bmNUcnlU
b1JlY2xhaW1NZW1vcnkpOwogICAgIH0KICAgICAKICAgICBpZiAoZmFzdE1lbW9yeSkgewpAQCAt
MzIwLDE1ICszMzcsMTUgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQ
YWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiAgICAgICAgIH0KIAogICAgICAg
ICBjb21taXRaZXJvUGFnZXMoZmFzdE1lbW9yeSwgaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgCi0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGZhc3RNZW1vcnksIGluaXRpYWwsIG1h
eGltdW0sIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIE1lbW9yeU1vZGU6OlNpZ25hbGluZykp
OworCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGZhc3RNZW1vcnksIGluaXRp
YWwsIG1heGltdW0sIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIE1lbW9yeU1vZGU6OlNpZ25h
bGluZywgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJl
c3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNs
YWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBh
Z2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogICAgIH0KICAgICAKICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnkoKSkpCiAg
ICAgICAgIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKTsKIAogICAgIGlmICghaW5p
dGlhbEJ5dGVzKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBt
YXhpbXVtKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1h
eGltdW0sIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVBy
ZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVj
bGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQ
YWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKICAgICAKICAgICB2b2lkKiBzbG93
TWVtb3J5ID0gR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
V1RGOjpwYWdlU2l6ZSgpLCBpbml0aWFsQnl0ZXMpOwogICAgIGlmICghc2xvd01lbW9yeSkgewpA
QCAtMzM2LDcgKzM1Myw3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgbWVtc2V0KHNsb3dNZW1vcnksIDAsIGluaXRpYWxCeXRlcyk7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xvd01lbW9yeSwgaW5pdGlhbCwgbWF4aW11
bSwgaW5pdGlhbEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTWVtb3J5KHNsb3dNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIGluaXRp
YWxCeXRlcywgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcsIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6
RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxX
VEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxs
YmFjaykpKTsKIH0KIAogTWVtb3J5Ojp+TWVtb3J5KCkKQEAgLTM0NSw3ICszNjIsMTAgQEAgTWVt
b3J5Ojp+TWVtb3J5KCkKICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVQaHlzaWNhbEJ5dGVz
KG1fc2l6ZSk7CiAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CiAgICAgICAgIGNhc2UgTWVtb3J5
TW9kZTo6U2lnbmFsaW5nOgotICAgICAgICAgICAgbXByb3RlY3QobV9tZW1vcnksIE1lbW9yeTo6
ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgICAgICAgICAg
aWYgKG1wcm90ZWN0KG1fbWVtb3J5LCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIm1wcm90ZWN0IGZh
aWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWVtb3J5
TWFuYWdlcigpLmZyZWVWaXJ0dWFsUGFnZXMobV9tZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CkBAIC0zNzEsMzQgKzM5
MSw1MCBAQCBib29sIE1lbW9yeTo6YWRkcmVzc0lzSW5BY3RpdmVGYXN0TWVtb3J5KHZvaWQqIGFk
ZHJlc3MpCiAgICAgcmV0dXJuIG1lbW9yeU1hbmFnZXIoKS5jb250YWluc0FkZHJlc3MoYWRkcmVz
cyk7CiB9CiAKLWJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCitF
eHBlY3RlZDxQYWdlQ291bnQsIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb24+IE1lbW9yeTo6Z3JvdyhQ
YWdlQ291bnQgZGVsdGEpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3Vu
dDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOworICAgIGNvbnN0IFdhc206OlBhZ2VDb3VudCBvbGRQYWdl
Q291bnQgPSBzaXplSW5QYWdlcygpOwogCi0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9y
eTo6Z3JvdyB0byAiLCBuZXdTaXplLCAiIGZyb20gIiwgKnRoaXMpOworICAgIGlmICghZGVsdGEu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246
OkludmFsaWREZWx0YSk7CisgICAgCisgICAgY29uc3QgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VD
b3VudCA9IG9sZFBhZ2VDb3VudCArIGRlbHRhOworICAgIGlmICghbmV3UGFnZUNvdW50KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6
ZSk7CiAKLSAgICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiBtYXhpbXVtKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBbJl0gKCkgeworICAgICAgICBtX2dy
b3dTdWNjZXNzQ2FsbGJhY2sob2xkUGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOworICAgICAgICBy
ZXR1cm4gb2xkUGFnZUNvdW50OworICAgIH07CiAKLSAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBu
ZXdTaXplLmJ5dGVzKCk7CisgICAgaWYgKGRlbHRhLnBhZ2VDb3VudCgpID09IDApCisgICAgICAg
IHJldHVybiBzdWNjZXNzKCk7CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpn
cm93KCIsIGRlbHRhLCAiKSB0byAiLCBuZXdQYWdlQ291bnQsICIgZnJvbSAiLCAqdGhpcyk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobmV3UGFnZUNvdW50ID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9z
aXplKSk7CisKKyAgICBpZiAobWF4aW11bSgpICYmIG5ld1BhZ2VDb3VudCA+IG1heGltdW0oKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2Vl
ZE1heGltdW0pOworCisgICAgc2l6ZV90IGRlc2lyZWRTaXplID0gbmV3UGFnZUNvdW50LmJ5dGVz
KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZGVzaXJlZFNpemUgPiBtX3NpemUpOwogICAgIHNpemVf
dCBleHRyYUJ5dGVzID0gZGVzaXJlZFNpemUgLSBtX3NpemU7CiAgICAgUkVMRUFTRV9BU1NFUlQo
ZXh0cmFCeXRlcyk7Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ5QW5kR0MoCi0gICAgICAgIHZtLAor
ICAgIGJvb2wgYWxsb2NhdGlvblN1Y2Nlc3MgPSB0cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgp
IC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdl
cigpLnRyeUFsbG9jYXRlUGh5c2ljYWxCeXRlcyhleHRyYUJ5dGVzKTsKLSAgICAgICAgfSk7Ci0g
ICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorICAgICAg
ICB9LCBtX25vdGlmeU1lbW9yeVByZXNzdXJlLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwor
ICAgIGlmICghYWxsb2NhdGlvblN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkpOworCiAgICAgc3dpdGNoIChtb2RlKCkpIHsK
ICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1heGltdW0oKS5ieXRlcygpICE9IDApOwotICAgICAgICAKKwogICAgICAgICB2b2lk
KiBuZXdNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0
aXZlLCBXVEY6OnBhZ2VTaXplKCksIGRlc2lyZWRTaXplKTsKICAgICAgICAgaWYgKCFuZXdNZW1v
cnkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5KTsKKwogICAgICAgICBtZW1jcHko
bmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsKICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0
PGNoYXIqPihuZXdNZW1vcnkpICsgbV9zaXplLCAwLCBkZXNpcmVkU2l6ZSAtIG1fc2l6ZSk7CiAg
ICAgICAgIGlmIChtX21lbW9yeSkKQEAgLTQwNiw3ICs0NDIsNyBAQCBib29sIE1lbW9yeTo6Z3Jv
dyhWTSYgdm0sIFBhZ2VDb3VudCBuZXdTaXplKQogICAgICAgICBtX21lbW9yeSA9IG5ld01lbW9y
eTsKICAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXplOwogICAgICAgICBtX3Np
emUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBz
dWNjZXNzKCk7CiAgICAgfQogICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fbWVtb3J5KTsKQEAgLTQxNSwxNiArNDUxLDE3IEBAIGJvb2wg
TWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCiAgICAgICAgIAogICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWFya2luZyBXZWJBc3NlbWJseSBtZW1vcnkncyAiLCBS
YXdQb2ludGVyKG1fbWVtb3J5KSwgIiBhcyByZWFkK3dyaXRlIGluIHJhbmdlIFsiLCBSYXdQb2lu
dGVyKHN0YXJ0QWRkcmVzcyksICIsICIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFC
eXRlcyksICIpIik7CiAgICAgICAgIGlmIChtcHJvdGVjdChzdGFydEFkZHJlc3MsIGV4dHJhQnl0
ZXMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiTWVtb3J5Ojpncm93IGluLXBsYWNlIGZhaWxlZCAiLCAqdGhpcyk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBkYXRhTG9nKCJtcHJvdGVjdCBmYWlsZWQ6
ICIsIHN0cmVycm9yKGVycm5vKSwgIlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIGNvbW1pdFplcm9QYWdlcyhzdGFydEFk
ZHJlc3MsIGV4dHJhQnl0ZXMpOwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfSB9Ci0gICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7
CisgICAgfQorICAgIH0KKwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAKIHZvaWQgTWVtb3J5
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5LmgKaW5kZXggNjBhOWJiNy4uOTBlZTdmNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnkuaApAQCAtMjksNiArMjksOCBAQAogCiAjaW5jbHVkZSAiV2FzbVBh
Z2VDb3VudC5oIgogCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKQEAgLTM4LDggKzQwLDYgQEAgY2xhc3MgUHJpbnRTdHJlYW07CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCiAvLyBGSVhNRTogV2Ug
c2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MjY5MwpAQCAtNTcsOCArNTcsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9Ci0gICAgCi0gICAgc3RhdGljIFJl
ZlB0cjxNZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSk7CisKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKCk7CisgICAgc3RhdGlj
IFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZv
aWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCiAgICAg
fk1lbW9yeSgpOwogCkBAIC03NSwyMiArNzYsMzQgQEAgcHVibGljOgogCiAgICAgTWVtb3J5TW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKLSAgICAvLyBncm93KCkgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIEpTV2ViQXNzZW1ibHlNZW1vcnkgb2JqZWN0IHNpbmNl
IHRoYXQgb2JqZWN0IG5lZWRzIHRvIHVwZGF0ZSBpbnRlcm5hbAotICAgIC8vIHBvaW50ZXJzIHdp
dGggdGhlIGN1cnJlbnQgYmFzZSBhbmQgc2l6ZS4KLSAgICBib29sIGdyb3coVk0mLCBQYWdlQ291
bnQpOworICAgIGVudW0gY2xhc3MgR3Jvd0ZhaWxSZWFzb24geworICAgICAgICBJbnZhbGlkRGVs
dGEsCisgICAgICAgIEludmFsaWRHcm93U2l6ZSwKKyAgICAgICAgV291bGRFeGNlZWRNYXhpbXVt
LAorICAgICAgICBPdXRPZk1lbW9yeSwKKyAgICB9OworICAgIEV4cGVjdGVkPFBhZ2VDb3VudCwg
R3Jvd0ZhaWxSZWFzb24+IGdyb3coUGFnZUNvdW50KTsKIAogICAgIHZvaWQgY2hlY2soKSB7ICBB
U1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX21lbW9yeSk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0KKwogcHJpdmF0ZToKLSAgICBNZW1vcnkodm9pZCog
bWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBw
ZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7Ci0gICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSk7CisgICAgTWVtb3J5KCk7CisgICAgTWVtb3J5KHZvaWQqIG1lbW9y
eSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2Fw
YWNpdHksIE1lbW9yeU1vZGUsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVBy
ZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBX
VEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2Fs
bGJhY2spOworICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQo
UGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCi0gICAgLy8g
RklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoZXNlIHRvIHRoZSBpbnN0YW5jZSB0byBhdm9pZCBhIGxv
YWQgb24gaW5zdGFuY2UtPmluc3RhbmNlIGNhbGxzLgorICAgIC8vIEZJWE1FOiB3ZSBjYWNoZSB0
aGVzZSBvbiB0aGUgaW5zdGFuY2VzIHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5zdGFu
Y2UgY2FsbHMuIFRoaXMgd2lsbCByZXF1aXJlIHVwZGF0aW5nIGFsbCB0aGUgaW5zdGFuY2VzIHdo
ZW4gZ3JvdyBpcyBjYWxsZWQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzczMDUKICAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9z
aXplIHsgMCB9OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7CiAgICAgUGFnZUNvdW50IG1fbWF4
aW11bTsKICAgICBzaXplX3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKICAgICBNZW1vcnlNb2Rl
IG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IG1fbm90aWZ5TWVtb3J5UHJlc3N1cmU7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeTsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFn
ZUNvdW50LCBQYWdlQ291bnQpPiBtX2dyb3dTdWNjZXNzQ2FsbGJhY2s7CiB9OwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKaW5kZXggYmY1NjVmMC4uYjVjMzRiZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
Y3BwCkBAIC01Nyw3ICs1Nyw3IEBAIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgUGlubmVkUmVn
aXN0ZXJJbmZvOjpnZXQoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1Bpbm5lZFJlZ2lzdGVy
SW5mb0ZsYWcsIFtdICgpIHsKICAgICAgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+
IHNpemVSZWdpc3RlcnM7CiAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciA9IEludmFs
aWRHUFJSZWc7Ci0gICAgICAgIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50ZXIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgPSBJbnZhbGlk
R1BSUmVnOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4g
b25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyLCBhbmQgd2Ugc2hvdWxkIGFsbG93IGRpZmZlcmVudAog
ICAgICAgICAvLyAgICAgICAgV2ViQXNzZW1ibHkuSW5zdGFuY2UgdG8gaGF2ZSBkaWZmZXJlbnQg
cGlucy4gUmlnaHQgbm93IHdlIHRha2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9uZSBlbnRyeS4KQEAg
LTY1LDI3ICs2NSwyNyBAQCBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVy
SW5mbzo6Z2V0KCkKICAgICAgICAgLy8gICAgICAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5l
ZFNpemVzID0geyAwIH07CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGlubmVkUmVnaXN0ZXJz
ID0gcGlubmVkU2l6ZXMuc2l6ZSgpICsgMTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29u
dGV4dCgpKQorICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgICAg
ICsrbnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnM7CiAgICAgICAgIFZlY3RvcjxHUFJSZWc+IHBpbm5l
ZFJlZ3MgPSBnZXRQaW5uZWRSZWdpc3RlcnMobnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnMpOwogCiAg
ICAgICAgIGJhc2VNZW1vcnlQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOwotICAgICAg
ICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgICAgICB3YXNtQ29udGV4dFBv
aW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CisgICAgICAgIGlmICghQ29udGV4dDo6dXNl
RmFzdFRMUygpKQorICAgICAgICAgICAgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgPSBwaW5u
ZWRSZWdzLnRha2VMYXN0KCk7CiAKICAgICAgICAgQVNTRVJUKHBpbm5lZFNpemVzLnNpemUoKSA9
PSBwaW5uZWRSZWdzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
aW5uZWRTaXplcy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIHNpemVSZWdpc3RlcnMuYXBwZW5k
KHsgcGlubmVkUmVnc1tpXSwgcGlubmVkU2l6ZXNbaV0gfSk7Ci0gICAgICAgIHN0YXRpY1Bpbm5l
ZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9y
eVBvaW50ZXIsIHdhc21Db250ZXh0UG9pbnRlcik7CisgICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lz
dGVySW5mby5jb25zdHJ1Y3QoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50
ZXIsIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKICAgICB9KTsKIAogICAgIHJldHVybiBz
dGF0aWNQaW5uZWRSZWdpc3RlckluZm8uZ2V0KCk7CiB9CiAKLVBpbm5lZFJlZ2lzdGVySW5mbzo6
UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVS
ZWdpc3RlcnMsIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BSUmVnIHdhc21Db250ZXh0UG9p
bnRlcikKK1Bpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5u
ZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBiYXNlTWVtb3J5UG9p
bnRlciwgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKQogICAgIDogc2l6ZVJlZ2lz
dGVycyhXVEZNb3ZlKHNpemVSZWdpc3RlcnMpKQogICAgICwgYmFzZU1lbW9yeVBvaW50ZXIoYmFz
ZU1lbW9yeVBvaW50ZXIpCi0gICAgLCB3YXNtQ29udGV4dFBvaW50ZXIod2FzbUNvbnRleHRQb2lu
dGVyKQorICAgICwgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIod2FzbUNvbnRleHRJbnN0YW5j
ZVBvaW50ZXIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmgKaW5kZXggNDIzN2JhYy4uMjMzMjllYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyAr
NDQsNyBAQCBzdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7CiBzdHJ1Y3QgUGlubmVkUmVn
aXN0ZXJJbmZvIHsKICAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lz
dGVyczsKICAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgR1BSUmVnIHdhc21Db250
ZXh0UG9pbnRlcjsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CiAgICAg
c3RhdGljIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgZ2V0KCk7CiAgICAgUGlubmVkUmVnaXN0
ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmLCBHUFJSZWcsIEdQUlJlZyk7
CiAKQEAgLTUyLDggKzUyLDggQEAgc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7CiAgICAgewog
ICAgICAgICBSZWdpc3RlclNldCByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5zZXQoYmFzZU1lbW9y
eVBvaW50ZXIpOwotICAgICAgICBpZiAod2FzbUNvbnRleHRQb2ludGVyICE9IEludmFsaWRHUFJS
ZWcpCi0gICAgICAgICAgICByZXN1bHQuc2V0KHdhc21Db250ZXh0UG9pbnRlcik7CisgICAgICAg
IGlmICh3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgcmVzdWx0LnNldCh3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgICAgIGlm
IChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewogICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBpbmZvIDogc2l6ZVJlZ2lzdGVycykKICAgICAgICAgICAgICAgICByZXN1bHQuc2V0
KGluZm8uc2l6ZVJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZS5jcHAKaW5kZXggOGUzNjZmNC4uOTkyZTNkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZS5jcHAKQEAgLTU2LDI3ICs1NiwyNiBAQCBzdGF0aWMgTW9kdWxlOjpWYWxp
ZGF0aW9uUmVzdWx0IG1ha2VWYWxpZGF0aW9uUmVzdWx0KEJCUVBsYW4mIHBsYW4pCiAKIHN0YXRp
YyBQbGFuOjpDb21wbGV0aW9uVGFzayBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKE1vZHVsZTo6QXN5
bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICByZXR1cm4gY3JlYXRlU2hh
cmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XSAoVk0qIHZtLCBQbGFuJiBwbGFuKSB7CisgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxh
bjo6Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFBsYW4mIHBs
YW4pIHsKICAgICAgICAgQVNTRVJUKCFwbGFuLmhhc1dvcmsoKSk7Ci0gICAgICAgIEFTU0VSVCh2
bSk7Ci0gICAgICAgIGNhbGxiYWNrLT5ydW4oKnZtLCBtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0
aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKKyAgICAgICAgY2FsbGJhY2stPnJ1bihtYWtlVmFs
aWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKICAgICB9KTsKIH0K
IAotTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKFZNJiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKQorTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVs
ZTo6dmFsaWRhdGVTeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJj
ZSkKIHsKLSAgICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbigmdm0s
IFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXpl
KCkpKTsKKyAgICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250
ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5h
bGl6ZSgpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZSgpOwogICAgIHJldHVybiBtYWtlVmFsaWRhdGlvblJlc3VsdChwbGFuLmdldCgpKTsKIH0K
IAotdm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMoVk0mIHZtLCBWZWN0b3I8dWludDhfdD4mJiBz
b3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQg
TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYm
IHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewot
ICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKCZ2bSwgV1RGTW92ZShz
b3VyY2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKFdURk1v
dmUoY2FsbGJhY2spKSkpOworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQ
bGFuKGNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZh
bGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSksIG51bGxwdHIsIG51bGxwdHIpKTsK
ICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAK
LVJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBt
b2RlKQorUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0
KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0
ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikK
IHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOwpAQCAtODcsMjMgKzg2LDIzIEBAIFJlZjxDb2RlQmxvY2s+IE1vZHVs
ZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlKQogICAgIC8vIEZJWE1FOiBX
ZSBtaWdodCB3YW50IHRvIGJhY2sgb2ZmIHJldHJ5aW5nIGF0IHNvbWUgcG9pbnQ6CiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYwNwogICAgIGlmICgh
Y29kZUJsb2NrIHx8IChjb2RlQmxvY2stPmNvbXBpbGF0aW9uRmluaXNoZWQoKSAmJiAhY29kZUJs
b2NrLT5ydW5uYWJsZSgpKSkgewotICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0
ZShtb2RlLCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24o
KSkpOworICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZShjb250ZXh0LCBtb2Rl
LCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24oKSksIFdU
Rk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICAg
ICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXSA9IGNvZGVCbG9jazsK
ICAgICB9CiAgICAgcmV0dXJuIGNvZGVCbG9jay5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1SZWY8
Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKE1lbW9yeU1vZGUgbW9kZSkKK1JlZjxDb2Rl
QmxvY2s+IE1vZHVsZTo6Y29tcGlsZVN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBt
b2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4g
Y29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2sobW9kZSk7CisgICAgUmVmPENvZGVCbG9j
az4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgV1RGTW92
ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIGNvZGVC
bG9jay0+d2FpdFVudGlsRmluaXNoZWQoKTsKICAgICByZXR1cm4gY29kZUJsb2NrOwogfQogCi12
b2lkIE1vZHVsZTo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgTWVtb3J5TW9kZSBtb2RlLCBDb2RlQmxv
Y2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCit2b2lkIE1vZHVsZTo6Y29tcGls
ZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3lu
Y0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVh
dGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24p
CiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2so
bW9kZSk7Ci0gICAgY29kZUJsb2NrLT5jb21waWxlQXN5bmModm0sIFdURk1vdmUodGFzaykpOwor
ICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRl
eHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0
aW9uKTsKKyAgICBjb2RlQmxvY2stPmNvbXBpbGVBc3luYyhjb250ZXh0LCBXVEZNb3ZlKHRhc2sp
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGUuaAppbmRleCBhMWFmNzU4Li5hNmFlMjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21F
bWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0
ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtMzYsMTkgKzM3LDIwIEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKK3N0cnVjdCBDb250ZXh0Owogc3RydWN0IE1v
ZHVsZUluZm9ybWF0aW9uOwogY2xhc3MgUGxhbjsKIAogdXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1
aW50MzJfdDsKLSAgICAKKwogY2xhc3MgTW9kdWxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPE1vZHVsZT4gewogcHVibGljOgogICAgIHVzaW5nIFZhbGlkYXRpb25SZXN1bHQgPSBXVEY6
OkV4cGVjdGVkPFJlZlB0cjxNb2R1bGU+LCBTdHJpbmc+OwotICAgIHR5cGVkZWYgdm9pZCBDYWxs
YmFja1R5cGUoVk0mLCBWYWxpZGF0aW9uUmVzdWx0JiYpOworICAgIHR5cGVkZWYgdm9pZCBDYWxs
YmFja1R5cGUoVmFsaWRhdGlvblJlc3VsdCYmKTsKICAgICB1c2luZyBBc3luY1ZhbGlkYXRpb25D
YWxsYmFjayA9IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwogCi0gICAgc3RhdGlj
IFZhbGlkYXRpb25SZXN1bHQgdmFsaWRhdGVTeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291
cmNlKTsKLSAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+
JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOworICAgIHN0YXRp
YyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlU3luYyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+
JiYgc291cmNlKTsKKyAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKENvbnRleHQqLCBWZWN0
b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJik7
CiAKICAgICBzdGF0aWMgUmVmPE1vZHVsZT4gY3JlYXRlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4m
JiBtb2R1bGVJbmZvcm1hdGlvbikKICAgICB7CkBAIC01OCwxNCArNjAsMTQgQEAgcHVibGljOgog
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OwogICAgIGNvbnN0IFdhc206
Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KIAotICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVT
eW5jKE1lbW9yeU1vZGUpOwotICAgIHZvaWQgY29tcGlsZUFzeW5jKFZNJiwgTWVtb3J5TW9kZSwg
Q29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CisgICAgUmVmPENvZGVCbG9j
az4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBl
ciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQq
LCBNZW1vcnlNb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmLCBDcmVh
dGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIH5Nb2R1bGUoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yKE1lbW9y
eU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1v
ZGUpXS5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNv
ZGVCbG9jayhNZW1vcnlNb2RlKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVC
bG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CiAKICAgICBNb2R1bGUoUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmKTsK
ICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDZjOTQ4
YjUuLjZkNDRhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
CiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
VGFibGUuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJX
YXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCkBAIC0yNjUsNyAr
MjY0LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9y
dCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNp
emFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7CiAgICAgaWYgKFVOTElLRUxZKCFsaW1pdHMp
KQogICAgICAgICByZXR1cm4gbGltaXRzLmdldFVuZXhwZWN0ZWQoKTsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRTaXplKGluaXRpYWwpLCAiVGFi
bGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7Cisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4VGFibGVFbnRyaWVzLCAiVGFibGUn
cyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyB0b28gYmlnLCBtYXhpbXVt
ICIsIG1heFRhYmxlRW50cmllcyk7CiAKICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0g
Pj0gaW5pdGlhbCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAppbmRleCA3NGNmNjUzLi5jY2RmNzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uY3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1ZGUgIkIzQ29tcGlsYXRp
b24uaCIKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJX
YXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJX
YXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKQEAgLTUxLDEwICs1MiwxMCBAQCBuYW1lc3BhY2UgV2FzbU9NR1BsYW5J
bnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLU9NR1Bs
YW46Ok9NR1BsYW4oUmVmPE1vZHVsZT4gbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2UobnVsbHB0
ciwgbWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpKSksIFdURk1vdmUodGFzaykpCi0gICAgLCBtX21vZHVsZShtb2R1bGUuY29w
eVJlZigpKQotICAgICwgbV9jb2RlQmxvY2soKm1vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQor
T01HUGxhbjo6T01HUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCisgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZv
cm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQor
ICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQorICAgICwgbV9jb2RlQmxvY2soKm1fbW9k
dWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25J
bmRleCkKIHsKICAgICBzZXRNb2RlKG1vZGUpOwpAQCAtMTYyLDEzICsxNjMsMTMgQEAgdm9pZCBP
TUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1f
bG9jaykpOwogfQogCi12b2lkIHJ1bk9NR1BsYW5Gb3JJbmRleChDb250ZXh0KiBjb250ZXh0LCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4KQordm9pZCBPTUdQbGFuOjpydW5Gb3JJbmRleChKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogewotICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvbnRleHQtPmNvZGVCbG9jaygp
OwotICAgIEFTU0VSVChjb250ZXh0LT5tZW1vcnlNb2RlKCkgPT0gY29kZUJsb2NrLT5tX2NvZGVC
bG9jay0+bW9kZSgpKTsKKyAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jayA9IGluc3RhbmNl
LT53YXNtQ29kZUJsb2NrKCk7CisgICAgQVNTRVJUKGluc3RhbmNlLT53YXNtTWVtb3J5KCktPm1v
ZGUoKSA9PSBjb2RlQmxvY2subW9kZSgpKTsKIAotICAgIGlmIChjb2RlQmxvY2stPm1fY29kZUJs
b2NrLT50aWVyVXBDb3VudChmdW5jdGlvbkluZGV4KS5zaG91bGRTdGFydFRpZXJVcCgpKSB7Ci0g
ICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKGNvbnRleHQtPm1v
ZHVsZSgpLT5tb2R1bGUoKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+
bW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAgIGlmIChjb2RlQmxvY2sudGllclVw
Q291bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAoKSkgeworICAgICAgICBSZWY8
UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBS
ZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+d2FzbU1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwg
Y29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAgZW5zdXJl
V29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCmlu
ZGV4IDcxNjRhOWUuLmI4MDgyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R1BsYW4uaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0j
aW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21N
b2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgpAQCAtNDEsMTcgKzQwLDIwIEBAIG5hbWVz
cGFjZSBXYXNtIHsKIGNsYXNzIE9NR1BsYW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CiBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47Ci0gICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hv
dWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxs
IGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR1BsYW4oUmVmPE1vZHVsZT4sIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgYm9v
bCBoYXNXb3JrKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fY29tcGxldGVkOyB9CiAgICAg
dm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKICAgICBib29sIG11bHRpVGhy
ZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgc3RhdGljIHZv
aWQgcnVuRm9ySW5kZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCk7CisKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9l
c24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KICAgICB1c2luZyBCYXNlOjptX2xvY2s7
CiAKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVu
Y2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUu
CisgICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CisKICAgICBib29sIGlzQ29tcGxl
dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbXBsZXRlZDsgfQogICAgIHZvaWQgY29t
cGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikgb3ZlcnJpZGUKICAgICB7CkBAIC02
NSw4ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwogfTsK
IAotdm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCosIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpOwotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBh
Z2VDb3VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCmlu
ZGV4IGU0Mzg0N2MuLmVmMDVmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QYWdlQ291bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGFnZUNvdW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CiAgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNWYWxpZChtX3BhZ2VDb3VudCk7Cisg
ICAgfQogCiAgICAgc3RhdGljIFBhZ2VDb3VudCBmcm9tQnl0ZXModWludDY0X3QgYnl0ZXMpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGJhMjdjZjku
LmQwNjNjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOCAr
MjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRp
b24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtNTEsMjAgKzQ5LDI3IEBAIG5hbWVzcGFj
ZSBXYXNtUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IH0KIAotUGxhbjo6UGxhbihWTSogdm0sIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQ29t
cGxldGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9k
dWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKGluZm8p
KQorICAgICwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoV1RGTW92ZShjcmVhdGVFbWJlZGRlcldy
YXBwZXIpKQorICAgICwgbV90aHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKQog
ICAgICwgbV9zb3VyY2UobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkKICAgICAs
IG1fc291cmNlTGVuZ3RoKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkpCiB7Ci0g
ICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHZtLCBXVEZNb3ZlKHRh
c2spKSk7CisgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRl
eHQsIFdURk1vdmUodGFzaykpKTsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQ29tcGxldGlvblRhc2smJiB0YXNrKQor
UGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8s
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4oY29udGV4dCwgV1RGTW92ZShpbmZv
KSwgV1RGTW92ZSh0YXNrKSwgbnVsbHB0ciwgbnVsbHB0cikKK3sKK30KKworUGxhbjo6UGxhbihD
b250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5n
dGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRv
cHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQogICAgICwg
bV9zb3VyY2Uoc291cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQogewot
ICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih2bSwgV1RGTW92ZSh0
YXNrKSkpOworICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250
ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKIHZvaWQgUGxhbjo6cnVuQ29tcGxldGlvblRhc2tz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKQEAgLTcyLDE4ICs3NywxOCBAQCB2b2lkIFBsYW46OnJ1
bkNvbXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgQVNTRVJUKGlzQ29t
cGxldGUoKSAmJiAhaGFzV29yaygpKTsKIAogICAgIGZvciAoYXV0byYgdGFzayA6IG1fY29tcGxl
dGlvblRhc2tzKQotICAgICAgICB0YXNrLnNlY29uZC0+cnVuKHRhc2suZmlyc3QsICp0aGlzKTsK
KyAgICAgICAgdGFzay5zZWNvbmQtPnJ1bigqdGhpcyk7CiAgICAgbV9jb21wbGV0aW9uVGFza3Mu
Y2xlYXIoKTsKICAgICBtX2NvbXBsZXRlZC5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBQbGFuOjph
ZGRDb21wbGV0aW9uVGFzayhWTSYgdm0sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK3ZvaWQgUGxh
bjo6YWRkQ29tcGxldGlvblRhc2soQ29udGV4dCogY29udGV4dCwgQ29tcGxldGlvblRhc2smJiB0
YXNrKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgaWYgKCFpc0NvbXBs
ZXRlKCkpCi0gICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigm
dm0sIFdURk1vdmUodGFzaykpKTsKKyAgICAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKICAgICBlbHNlCi0gICAgICAg
IHRhc2stPnJ1bigmdm0sICp0aGlzKTsKKyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsKIH0KIAog
dm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCkBAIC05NCwxOSArOTksMTkgQEAgdm9pZCBQ
bGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCiAgICAgfQogfQogCi1ib29sIFBsYW46OnRyeVJlbW92
ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJiB2bSkKK2Jvb2wgUGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFu
ZENhbmNlbElmTGFzdChDb250ZXh0JiBjb250ZXh0KQogewogICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CiAKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBXZSBh
bGxvdyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNrIHRvIG5vdCBoYXZlIGEgdm0uCisgICAgICAg
IC8vIFdlIGFsbG93IHRoZSBmaXJzdCBjb21wbGV0aW9uIHRhc2sgdG8gbm90IGhhdmUgYSBDb250
ZXh0LgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9jb21wbGV0aW9uVGFza3Mu
c2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBBU1NFUlQobV9jb21wbGV0aW9uVGFza3NbaV0uZmly
c3QpOwogICAgIH0KIAogICAgIGJvb2wgcmVtb3ZlZEFueVRhc2tzID0gZmFsc2U7Ci0gICAgbV9j
b21wbGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBzdGQ6OnBhaXI8Vk0q
LCBDb21wbGV0aW9uVGFzaz4mIHBhaXIpIHsKLSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmUgPSBw
YWlyLmZpcnN0ID09ICZ2bTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5yZW1vdmVBbGxNYXRjaGlu
ZyhbJl0gKGNvbnN0IHN0ZDo6cGFpcjxDb250ZXh0KiwgQ29tcGxldGlvblRhc2s+JiBwYWlyKSB7
CisgICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFpci5maXJzdCA9PSAmY29udGV4dDsKICAg
ICAgICAgcmVtb3ZlZEFueVRhc2tzIHw9IHNob3VsZFJlbW92ZTsKICAgICAgICAgcmV0dXJuIHNo
b3VsZFJlbW92ZTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmlu
ZGV4IDEwZjhhMWIuLjdhMDdiZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aApAQCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUg
IkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJ
UkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21N
b2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgpAQCAtMzksMjUgKzM5LDI3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgQ2FsbExpbmtJbmZvOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1Byb21pc2VE
ZWZlcnJlZDsKIAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKKwogY2xhc3Mg
UGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiBwdWJsaWM6Ci0gICAg
dHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSosIFBsYW4mKTsKKyAgICB0eXBlZGVmIHZvaWQg
Q2FsbGJhY2tUeXBlKFBsYW4mKTsKICAgICB1c2luZyBDb21wbGV0aW9uVGFzayA9IFJlZlB0cjxT
aGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwotICAgIHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250
RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oVk0q
LCBQbGFuJikgeyB9KTsgfQotICAgIFBsYW4oVk0qLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBD
b21wbGV0aW9uVGFzayYmKTsKKworICAgIHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250RmluYWxp
emUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oUGxhbiYpIHsg
fSk7IH0KKyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0
aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsK
KyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFz
ayYmKTsKIAogICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNl
ZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlkYXRp
b24vZnVuY3Rpb24gdGVzdHMKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgY29uc3Qg
dWludDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgUGxhbihDb250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2sm
Jik7CiAgICAgdmlydHVhbCBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwogCiAgICAgLy8gSWYg
eW91IGd1YXJhbnRlZSB0aGUgb3JkZXJpbmcgaGVyZSwgeW91IGNhbiByZWx5IG9uIEZJRk8gb2Yg
dGhlCiAgICAgLy8gY29tcGxldGlvbiB0YXNrcyBiZWluZyBjYWxsZWQuCi0gICAgdm9pZCBhZGRD
b21wbGV0aW9uVGFzayhWTSYsIENvbXBsZXRpb25UYXNrJiYpOworICAgIHZvaWQgYWRkQ29tcGxl
dGlvblRhc2soQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgdm9pZCBzZXRNb2Rl
KE1lbW9yeU1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CiAgICAgTWVtb3J5TW9kZSBtb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkBAIC03Miw3ICs3NCw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQg
Y2FuY2VsbGVkIHRoZSBwbGFuLgotICAgIGJvb2wgdHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qo
Vk0mKTsKKyAgICBib29sIHRyeVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYp
OwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBydW5Db21wbGV0aW9uVGFza3MoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKTsKQEAgLTgzLDcgKzg1LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKIAotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRhc2tzOworICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiwgMT4gbV9jb21wbGV0aW9uVGFz
a3M7CisKKyAgICBDcmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7
CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9
OwogCiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAgY29uc3Qgc2l6ZV90IG1fc291
cmNlTGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNp
Z25hdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNw
cAppbmRleCA4YjYwMGVkLi42YTQyZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2lnbmF0dXJlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2lnbmF0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJl
LmgKaW5kZXggZTQxM2IyNS4uYWFjZWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TaWduYXR1cmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Myw4ICs0Myw2IEBAIGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgU2ln
bmF0dXJlQXJnQ291bnQgPSB1aW50MzJfdDsKQEAgLTE1Niw3ICsxNTQsNyBAQCB0ZW1wbGF0ZTw+
IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFzaD4gOiBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8SgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi0vLyBT
aWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5IFZNcyB0
byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hl
biB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1v
ZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4KKy8vIFNpZ25hdHVyZSBpbmZv
cm1hdGlvbiBpcyBoZWxkIGdsb2JhbGx5IGFuZCBzaGFyZWQgYnkgdGhlIGVudGlyZSBwcm9jZXNz
IHRvIGFsbG93IGFsbCBzaWduYXR1cmVzIHRvIGJlIHVuaXF1ZS4gVGhpcyBpcyByZXF1aXJlZCB3
aGVuIHdhc20gY2FsbHMgYW5vdGhlciB3YXNtIGluc3RhbmNlLCBhbmQgbXVzdCB3b3JrIHdoZW4g
bW9kdWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgVk1zLgogLy8gTm90ZTogc2lnbmF0
dXJlcyBhcmUgbmV2ZXIgcmVtb3ZlZCBiZWNhdXNlIHRoYXQgd291bGQgcmVxdWlyZSBhY2NvdW50
aW5nIGZvciBhbGwgV2ViQXNzZW1ibHkuTW9kdWxlIGFuZCB3aGljaCBzaWduYXR1cmVzIHRoZXkg
dXNlLiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBpcyBib3VuZGVkLCBhbmQgaXNu
J3Qgd29ydGggdGhlIGNvdW50aW5nIG92ZXJoZWFkLiBXZSBjb3VsZCBjbGVhciBldmVyeXRoaW5n
IHdoZW4gd2UgcmVhY2ggemVybyBvdXRzdGFuZGluZyBXZWJBc3NlbWJseS5Nb2R1bGUuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMzcKIGNsYXNzIFNpZ25hdHVy
ZUluZm9ybWF0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaWduYXR1cmVJbmZvcm1h
dGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGVmYWVjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApAQCAtMCwwICsxLDEyNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworUmVm
UHRyPFRhYmxlPiBUYWJsZTo6Y3JlYXRlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwg
ZmFzdE1hbGxvYyhzaXplb2YoVGFibGUpKSkgVGFibGUoaW5pdGlhbCwgbWF4aW11bSkpOworfQor
CitUYWJsZTo6flRhYmxlKCkKK3sKK30KKworVGFibGU6OlRhYmxlKHVpbnQzMl90IGluaXRpYWws
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgbV9zaXplID0gaW5pdGlh
bDsKKyAgICBtX21heGltdW0gPSBtYXhpbXVtOworICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3Np
emUpKTsKKyAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7CisK
KyAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBt
YXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCisgICAgLy8gQnV0IGZv
ciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgorICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRy
PFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVu
Y3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICBtX2luc3RhbmNlcyA9
IE1hbGxvY1B0cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPjo6bWFsbG9jKHNpemVvZihKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIG5ldyAoJm1fZnVu
Y3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VS
VChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6
OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAg
ICAgICBtX2luc3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKK3sKKyAgICBpZiAo
ZGVsdGEgPT0gMCkKKyAgICAgICAgcmV0dXJuIHNpemUoKTsKKworICAgIHVzaW5nIENoZWNrZWQg
PSBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz47CisgICAgQ2hlY2tlZCBuZXdTaXpl
Q2hlY2tlZCA9IHNpemUoKTsKKyAgICBuZXdTaXplQ2hlY2tlZCArPSBkZWx0YTsKKyAgICB1aW50
MzJfdCBuZXdTaXplOworICAgIGlmIChuZXdTaXplQ2hlY2tlZC5zYWZlR2V0KG5ld1NpemUpID09
IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICB7CisgICAgICAgIENoZWNrZWQgcmVhbGxv
Y0Z1bmN0aW9uc1NpemVDaGVja2VkID0gbmV3U2l6ZUNoZWNrZWQ7CisgICAgICAgIHJlYWxsb2NG
dW5jdGlvbnNTaXplQ2hlY2tlZCAqPSBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbik7CisgICAgICAg
IHVpbnQzMl90IHJlYWxsb2NGdW5jdGlvbnNTaXplOworICAgICAgICBpZiAocmVhbGxvY0Z1bmN0
aW9uc1NpemVDaGVja2VkLnNhZmVHZXQocmVhbGxvY0Z1bmN0aW9uc1NpemUpID09IENoZWNrZWRT
dGF0ZTo6RGlkT3ZlcmZsb3cpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
ICAgICBtX2Z1bmN0aW9ucy5yZWFsbG9jKHJlYWxsb2NGdW5jdGlvbnNTaXplKTsKKyAgICAgICAg
Zm9yICh1aW50MzJfdCBpID0gbV9zaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAg
bmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAg
ICB9CisgICAgCisgICAgeworICAgICAgICBDaGVja2VkIHJlYWxsb2NJbnN0YW5jZXNTaXplQ2hl
Y2tlZCA9IG5ld1NpemVDaGVja2VkOworICAgICAgICByZWFsbG9jSW5zdGFuY2VzU2l6ZUNoZWNr
ZWQgKj0gc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworICAgICAgICB1aW50MzJfdCBy
ZWFsbG9jSW5zdGFuY2VzU2l6ZTsKKyAgICAgICAgaWYgKHJlYWxsb2NJbnN0YW5jZXNTaXplQ2hl
Y2tlZC5zYWZlR2V0KHJlYWxsb2NJbnN0YW5jZXNTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92
ZXJmbG93KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgbV9pbnN0
YW5jZXMucmVhbGxvYyhyZWFsbG9jSW5zdGFuY2VzU2l6ZSk7CisgICAgICAgIGZvciAodWludDMy
X3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgIG1faW5zdGFuY2Vz
LmdldCgpW2ldID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX3NpemUgPSBuZXdTaXplOworCisg
ICAgcmV0dXJuIG5ld1NpemU7Cit9CisKK3ZvaWQgVGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMy
X3QgaW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIG1f
ZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICBB
U1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNp
Z25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNv
ZGUuCisgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXhdID0gbnVsbHB0cjsKK30KKwordm9pZCBU
YWJsZTo6c2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgsIENhbGxhYmxlRnVuY3Rpb24gZnVuY3Rp
b24sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoaW5kZXggPCBzaXplKCkpOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1bmN0
aW9uOworICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IGluc3RhbmNlOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6VGFibGUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjkwOGVjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNt
TGltaXRzLmgiCisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTsgLy8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5zdGFuY2UgaHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTc3NDcyCisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgVGFibGUgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGFibGU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNz
IENyZWF0ZUZhaWwgeworICAgICAgICBJbnZhbGlkU2l6ZSwKKyAgICB9OworICAgIHN0YXRpYyBS
ZWZQdHI8VGFibGU+IGNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBtYXhpbXVtKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UYWJsZSgpOworCisgICAg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11
bTsgfQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIHNldEZ1
bmN0aW9uKHVpbnQzMl90LCBDYWxsYWJsZUZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
KTsgLy8gRklYTUUgbWFrZSB0aGlzIFdhc206Okluc3RhbmNlLiBodHRwczovL3dlYmtpdC5vcmcv
Yi8xNzc0NzIKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFRhYmxlLCBtX3NpemUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkZ1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9mdW5j
dGlvbnMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlcygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9pbnN0YW5jZXMpOyB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBzaXplIDwgbWF4VGFibGVF
bnRyaWVzOyB9CisKK3ByaXZhdGU6CisgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpv
cHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBtX21heGltdW07CisgICAgdWludDMyX3QgbV9zaXplOworICAgIE1hbGxvY1B0cjxDYWxsYWJs
ZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICAvLyBjYWxsX2luZGlyZWN0IG5lZWRzIHRvIGRv
IGFuIEluc3RhbmNlIGNoZWNrIHRvIHBvdGVudGlhbGx5IGNvbnRleHQgc3dpdGNoIHdoZW4gY2Fs
bGluZyBhIGZ1bmN0aW9uIHRvIGFub3RoZXIgaW5zdGFuY2UuIFdlIGNhbiBob2xkIHJhdyBwb2lu
dGVycyB0byBJbnN0YW5jZSBoZXJlIGJlY2F1c2UgdGhlIGVtYmVkZGVyIGVuc3VyZXMgdGhhdCBU
YWJsZSBrZWVwcyBhbGwgdGhlIGluc3RhbmNlcyBhbGl2ZS4gV2UgY291bGRuJ3QgaG9sZCBhIFJl
ZiBoZXJlIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgY3ljbGVzLgorICAgIE1hbGxvY1B0cjxKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqPiBtX2luc3RhbmNlczsgLy8gRklYTUUgbWFrZSB0aGlzIGEgV2Fz
bTo6SW5zdGFuY2UuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKaW5kZXggOTc3YjAxYi4uYzIzNTk4
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTI5LDEx
ICsyOSw5IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiSGVhcENlbGxJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKQEAgLTQ4LDQ2ICs0NiwxOCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0
IEFic3RyYWN0TG9ja2VyJgogCiAgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVyZSBtdXN0
IG1vdmUgRXhjZXB0aW9uVHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYmVmb3JlIGp1bXBpbmcg
aGVyZS4KICAgICAvLyBXZSdyZSBhbGxvd2VkIHRvIHVzZSB0ZW1wIHJlZ2lzdGVycyBoZXJlLiBX
ZSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIGNhbGxlZSBzYXZlcy4KLSAgICBqaXQubG9hZFdhc21D
b250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQ29udGV4dDo6b2Zmc2V0T2ZWTSgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFu
Y2UoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CiAg
ICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGppdC5icmVha3BvaW50
KCk7IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAotICAgIHZvaWQqICgqdGhyb3dXYXNt
RXhjZXB0aW9uKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBXYXNtOjpDb250ZXh0
KikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIFdhc206
OkNvbnRleHQqIHdhc21Db250ZXh0KSAtPiB2b2lkKiB7Ci0gICAgICAgIFZNKiB2bSA9IHdhc21D
b250ZXh0LT52bSgpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKCp2bSk7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotCi0gICAgICAgICAgICBKU09iamVj
dCogZXJyb3I7IAotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3RhY2tP
dmVyZmxvdykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJv
cihleGVjLCBnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVycm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGV4ZWMsICp2bSwgZ2xv
YmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJv
ck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKLSAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdlbmVy
aWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpOwotICAgICAgICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwotICAg
ICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKLSAgICAgICAgLy8gVGhp
cyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRs
ZVVuY2F1Z2h0RXhjZXB0aW9uKQotICAgICAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2Fs
bGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1
aXJlCi0gICAgICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50
IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KLSAgICAg
ICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNh
bGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKLSAgICAgICAgLy8gdG8gdGhlIGV4Y2Vw
dGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmli
bGUgaGFjay4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDQ0MAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtDYWxsRnJh
bWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih3YXNtQ29udGV4dC0+d2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlKCkpOwotICAgICAgICByZXR1cm4gdm0tPnRhcmdldE1hY2hpbmVQ
Q0ZvclRocm93OwotICAgIH07Ci0KKyAgICBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uID0gVGh1bmtzOjpzaW5nbGV0b24oKS50aHJvd1dhc21FeGNlcHRpb24oKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCh0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRo
cm93V2FzbUV4Y2VwdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRy
KHRocm93V2FzbUV4Y2VwdGlvbikpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpKTsKIH0KIApAQCAtMTE5LDggKzg5LDEw
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3Io
Y29uc3QgQWJzdHJhY3RMb2NrZXImKQogI2VuZGlmCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFj
a0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGls
bCwgZXh0cmFQYWRkaW5nQnl0ZXMpOwogCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJ1bk9NR1BsYW5Gb3JJbmRleCkpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpOworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIHR5cGVkZWYgdm9pZCAoKlJ1bikoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiwgdWludDMyX3QpOworICAgIFJ1biBydW4gPSBPTUdQbGFuOjpydW5Gb3JJbmRleDsK
KyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9j
YXN0PHZvaWQqPihydW4pKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuY2FsbChH
UFJJbmZvOjphcmd1bWVudEdQUjIpOwogCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpy
ZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJl
Z2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlv
biwgZXh0cmFQYWRkaW5nQnl0ZXMpOwpAQCAtMTQyLDYgKzExNCwxOSBAQCBUaHVua3MmIFRodW5r
czo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gKnRodW5rczsKIH0KIAordm9pZCBUaHVua3M6OnNl
dFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9u
KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAvLyBUaGUgdGh1
bmtzIGFyZSB1bmlxdWUgZm9yIHRoZSBlbnRpcmUgcHJvY2VzcywgdGhlcmVmb3JlIGNoYW5naW5n
IHRoZSB0aHJvd2luZyBmdW5jdGlvbiBjaGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBvZiBXZWJBc3Nl
bWJseS4KKyAgICBSRUxFQVNFX0FTU0VSVCghbV90aHJvd1dhc21FeGNlcHRpb24gfHwgbV90aHJv
d1dhc21FeGNlcHRpb24gPT0gdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBtX3Rocm93V2FzbUV4
Y2VwdGlvbiA9IHRocm93V2FzbUV4Y2VwdGlvbjsKK30KKworVGhyb3dXYXNtRXhjZXB0aW9uIFRo
dW5rczo6dGhyb3dXYXNtRXhjZXB0aW9uKCkKK3sKKyAgICByZXR1cm4gbV90aHJvd1dhc21FeGNl
cHRpb247Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6OnN0dWIoVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBkZjE0Y2EyLi41Mjk3
NjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTQyLDYgKzQzLDkgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGluaXRpYWxpemUoKTsKICAgICBzdGF0aWMgVGh1bmtzJiBzaW5nbGV0b24oKTsKIAor
ICAgIHZvaWQgc2V0VGhyb3dXYXNtRXhjZXB0aW9uKFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAg
VGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbigpOworCiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHN0dWIoVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBzdHViKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1bmtHZW5lcmF0b3IpOwogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IpOwpAQCAtNTAs
NiArNTQsNyBAQCBwcml2YXRlOgogICAgIFRodW5rcygpID0gZGVmYXVsdDsKIAogICAgIEhhc2hN
YXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9zdHViczsKKyAgICBU
aHJvd1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRyIH07CiAgICAg
TG9jayBtX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmts
aXN0LmNwcAppbmRleCA5YzViNjg0Li4yZmUxMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
V2FzbVdvcmtsaXN0LmgiCiAKQEAgLTE3MiwxMyArMTczLDEzIEBAIHZvaWQgV29ya2xpc3Q6OmNv
bXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYgcGxhbikKICAgICBwbGFuLndhaXRGb3JDb21w
bGV0aW9uKCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkK
K3ZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRleHQoQ29udGV4dCYgY29udGV4dCkK
IHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBWZWN0b3I8UXVldWVFbGVt
ZW50PiBlbGVtZW50czsKICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAg
IFF1ZXVlRWxlbWVudCBlbGVtZW50ID0gbV9xdWV1ZS5kZXF1ZXVlKCk7Ci0gICAgICAgIGJvb2wg
ZGlkQ2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7
CisgICAgICAgIGJvb2wgZGlkQ2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250ZXh0
QW5kQ2FuY2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICBpZiAoIWRpZENhbmNlbCkKICAgICAg
ICAgICAgIGVsZW1lbnRzLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICB9CkBAIC0xODgs
NyArMTg5LDcgQEAgdm9pZCBXb3JrbGlzdDo6c3RvcEFsbFBsYW5zRm9yVk0oVk0mIHZtKQogCiAg
ICAgZm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKICAgICAgICAgaWYgKHRocmVhZC0+
ZWxlbWVudC5wbGFuKSB7Ci0gICAgICAgICAgICBib29sIGRpZENhbmNlbCA9IHRocmVhZC0+ZWxl
bWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7CisgICAgICAgICAgICBi
b29sIGRpZENhbmNlbCA9IHRocmVhZC0+ZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250ZXh0QW5k
Q2FuY2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGRpZENhbmNlbCkgewogICAg
ICAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2Nr
aW5nIHNpbmNlIHRoZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjaGVja2luZyBmb3IgYSBu
ZXcgcGxhbiBhbmQgbXVzdCBob2xkIHRoZSBsb2NrIHRvIGRvIHNvLgogICAgICAgICAgICAgICAg
IHRocmVhZC0+c3luY2hyb25pemUud2FpdCgqbV9sb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVdvcmtsaXN0LmgKaW5kZXggNmI2OTM1Mi4uNzQ4YTllYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTI3LDggKzI3LDYgQEAKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0KICNpbmNsdWRlIDxxdWV1
ZT4KIAogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KQEAgLTM3LDEwICszNSw5IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKLQogbmFtZXNw
YWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIFBsYW47CiAKIGNsYXNzIFdvcmts
aXN0IHsKQEAgLTUwLDEzICs0NywxMCBAQCBwdWJsaWM6CiAgICAgfldvcmtsaXN0KCk7CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGVucXVldWUoUmVmPFBsYW4+KTsKLSAgICB2b2lkIHN0
b3BBbGxQbGFuc0ZvclZNKFZNJik7CisgICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JDb250ZXh0KENv
bnRleHQmKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFuU3luY2hy
b25vdXNseShQbGFuJik7CiAKLSAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VEZWZlcnJl
ZCosIFBsYW4qKTsKLSAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBs
YW4qKTsKLQogICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgewogICAgICAgICBTaHV0ZG93biwKICAg
ICAgICAgU3luY2hyb25vdXMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNzEwOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApA
QCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxh
dGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXgpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRp
b25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKKworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtl
X3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1
ZSgpOworCisgICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKKyAgICBqaXQuc3RvcmU2NChD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVz
dWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOworCisgICAgY29uc3Qg
UGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KTsKKyAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2RlKTsKKwor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCB0b1NhdmVTaXplID0gdG9TYXZlLm51
bWJlck9mU2V0R1BScygpOworICAgIC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUgc2F2ZXMu
CisgICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
KyAgICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUpOworI2Vu
ZGlmCisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRvU2F2ZSwg
UmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCk7
CisgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNU
b1NwaWxsOworCisgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxs
LnNpemUoKSAqIHNpemVvZih2b2lkKik7CisgICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxp
bmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOworICAgIHRvdGFsRnJhbWVTaXplIC09
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICB1bnNpZ25lZCBudW1HUFJzID0gMDsKKyAg
ICB1bnNpZ25lZCBudW1GUFJzID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJl
LmFyZ3VtZW50KGkpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBjYXNlIFdh
c206OkkzMjoKKyAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlv
bigpLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0g
c2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAg
ICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Mu
c2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7
CisgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKKyAgICBqaXQuc3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2Ugc2F2ZSBhbGwgdGhlc2Ug
cmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KKyAgICAvLyBU
aGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2guIFRoYXQg
c2FpZCwKKyAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVtb3J5LCBz
byBpdCdzIG5vdCByZWFsbHkKKyAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0
aGF0IHRoZXkgZG9uJ3QuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9m
ZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zm
c2V0LnJlZygpLmdwcigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQu
b2Zmc2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQorCisgICAgR1BS
UmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFu
Y2VQb2ludGVyOworCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVl
RnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpKTsKKyAgICAgICAgbnVtR1BScyA9IDA7CisgICAgICAgIG51bUZQUnMgPSAwOworICAgICAg
ICAvLyBXZSdyZSBnb2luZyB0byBzZXQgdGhlIHBpbm5lZCByZWdpc3RlcnMgYWZ0ZXIgdGhpcy4g
U28KKyAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGlzIGFzIGEgc2NyYXRjaCBmb3Igbm93IHNpbmNl
IHdlIHNhdmVkIGl0IGFib3ZlLgorICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHBpbm5lZFJl
Z3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0ID0gQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKworICAg
ICAgICAvLyB2bUVudHJ5VG9XYXNtIHBhc3NlcyBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlIGFz
IHRoZSBmaXJzdCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCisgICAgICAgIC8vIG5vdCB1c2luZyBm
YXN0IFRMUyB0byBob2xkIHRoZSBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlLgorICAgICAgICBp
ZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCks
IHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zm
c2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewor
ICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoK
KyAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2dwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJn
dW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNP
ZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2
NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zm
c2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChz
Y3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2
b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVt
R1BSc10uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Nb
bnVtR1BSc10uZ3ByKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251
bUdQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYz
MjoKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1G
UFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09
IFdhc206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91Ymxl
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZz
ZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpz
T2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5l
ZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0
VExTKCkpCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2Fz
bUNvbnRleHRJbnN0YW5jZUdQUiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21N
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGppdC5s
b2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAgICAgIGNv
bnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAg
ICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6
ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0
YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRp
dmUgdG8gMC4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6
ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVn
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5
OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgfQorCisgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAg
dW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0
RnVuY3Rpb25Db3VudCgpOworICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1
bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsK
KyAgICB9KTsKKworCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNl
dCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0
LnJlZygpLmdwcigpOworICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOwor
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7CisgICAgfQorCisgICAgc3dpdGNoIChzaWduYXR1
cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGppdC5tb3Zl
RmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICBqaXQubW92
ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Yjk4ZDEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5o
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9y
LmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNp
bmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJl
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1l
c3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCnNp
bWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9KU1dlYkFzc2VtYmx5LmNwcApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL0pTV2ViQXNzZW1ibHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHkuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAppbmRleCAwZmFmOTc3Li5jNTc4ZGYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCkBAIC0yOCwzMSAr
MjgsMzEgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU09iamVjdC5o
IgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKLSNpbmNsdWRlICJq
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TGlu
a0Vycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIgotI2luY2x1ZGUg
ImpzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVRhYmxlLmgiCi0jaW5jbHVk
ZSAianMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpz
L1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKLSNp
bmNsdWRlICJqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3Nl
bWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlQ
cm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgi
Ci0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJq
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UHJv
dG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rv
ci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCi0j
aW5jbHVkZSAianMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMv
V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VG9K
U0NhbGxlZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGls
ZUVycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFz
c2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUxpbmtFcnJv
ckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUu
aCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCisj
aW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlUYWJsZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VG9KU0NhbGxlZS5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmOTFlNmM3Li4wODI1
MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIldhc21CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMu
aCIKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC00NCw3ICs0NCw3IEBAIGNv
bnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJXZWJBc3Nl
bWJseUNvZGVCbG9jayIsIG51bGxwCiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpjcmVhdGUoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxv
Y2ssIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSkKIHsKICAgICBjb25zdCBXYXNtOjpNb2R1
bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZSgpLm1vZHVs
ZUluZm9ybWF0aW9uKCk7Ci0gICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9k
dWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sodm0sIFdURk1vdmUoY29kZUJsb2NrKSwgbW9kdWxlSW5mb3JtYXRpb24pOworICAgIGF1
dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVC
bG9jayksIG1vZHVsZUluZm9ybWF0aW9uKTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
LCBtb2R1bGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01OCw3ICs1OCw3IEBAIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBSZWY8V2Fz
bTo6Q29kZUJsb2NrPiYmIGNvCiAgICAgbV93YXNtVG9KU0V4aXRTdHVicy5yZXNlcnZlQ2FwYWNp
dHkobV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1w
b3J0Q291bnQoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy5hdChpbXBvcnRJbmRleCk7Ci0gICAgICAgIGF1dG8gYmluZGluZyA9IFdhc206
Ondhc21Ub0pzKCZ2bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0SW5k
ZXgpOworICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9KUygmdm0sIG1fY2FsbExp
bmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKICAgICAgICAgaWYgKFVOTElL
RUxZKCFiaW5kaW5nKSkgewogICAgICAgICAgICAgc3dpdGNoIChiaW5kaW5nLmVycm9yKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgV2FzbTo6QmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5OgpAQCAt
NjgsNyArNjgsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBtX3dhc21Ub0pTRXhp
dFN0dWJzLnVuY2hlY2tlZEFwcGVuZChiaW5kaW5nLnZhbHVlKCkpOwotICAgICAgICBpbXBvcnRX
YXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRJbmRl
eF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5pbXBv
cnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRTdHVic1tp
bXBvcnRJbmRleF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogfQogCkBAIC04
MywxMSArODMsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKS0+
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soKTsKIH0KIAot
Ym9vbCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVt
b3J5KiBtZW1vcnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1NhZmVUb1J1
bihtZW1vcnktPm1lbW9yeSgpLm1vZGUoKSk7Ci19Ci0KIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6Y2xlYXJKU0NhbGxJQ3MoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9j
YWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCmluZGV4IDUy
NzAzZjguLmFiYjhjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTY0LDM5ICs2NCwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAmdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZTsKICAgICB9CiAK
LSAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsgfQotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgV2FzbTo6Q29k
ZUJsb2NrJiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogCi0gICAg
Ym9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CisgICAgSlNXZWJB
c3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0K
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKik7CiAK
LSAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25jZSB0aGUg
Y2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgotCi0gICAgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKLSAgICAgICAgcmV0dXJu
IG1fY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQotICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1
bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFi
bGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQot
Ci0gICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbVRvSnNDYWxsU3R1YkZv
ckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChydW5u
YWJsZSgpKTsKLSAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgp
OwotICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0
dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0T2ZJ
bXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGltcG9ydEluZGV4OwotICAgIH0KLQotICAg
IFdhc206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7
IH0KLQogICAgIHZvaWQgY2xlYXJKU0NhbGxJQ3MoVk0mKTsKIAogICAgIGJvb2wgcnVubmFibGUo
KSBjb25zdCB7IHJldHVybiAhbV9lcnJvck1lc3NhZ2U7IH0KQEAgLTExNCwyMSArODcsNiBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZkltcG9ydFN0dWJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2spKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNr
ZWQ8c2l6ZV90PiBmdW5jdGlvbkltcG9ydENvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIChv
ZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogZnVuY3Rpb25JbXBvcnRDb3Vu
dCkudW5zYWZlR2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZComIGltcG9ydFdhc21Ub0pTU3R1Yih1
bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0
PHZvaWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRv
SlNTdHViKGltcG9ydEluZGV4KSk7Ci0gICAgfQotCiAgICAgY2xhc3MgVW5jb25kaXRpb25hbEZp
bmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewogICAgICAgICB2
b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CiAgICAgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
Y3BwCmluZGV4IGM3N2ZhMDUuLmM1MmVlYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtNDksMTIgKzQ5
LDE3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBu
dW1JbXBvcnRGdW5jdGlvbnMpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1JbXBvcnRG
dW5jdGlvbnMsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSkKKyAgICAsIG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiAgICAgLCBt
X3ZtKCZ2bSkKKyAgICAsIG1fd2FzbU1vZHVsZShtX2luc3RhbmNlLT5tb2R1bGUoKSkKKyAgICAs
IG1fd2FzbVRhYmxlKG1faW5zdGFuY2UtPm1fdGFibGUuZ2V0KCkpCisgICAgLCBtX2dsb2JhbHMo
bV9pbnN0YW5jZS0+bV9nbG9iYWxzLmdldCgpKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMo
bnVtSW1wb3J0RnVuY3Rpb25zKQogewotICAgIG1lbXNldChpbXBvcnRGdW5jdGlvbnMoKSwgMCwg
bV9udW1JbXBvcnRGdW5jdGlvbnMgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUltcG9ydEZ1bmN0aW9uczsgKytpKQor
ICAgICAgICBuZXcgKGltcG9ydEZ1bmN0aW9uSW5mbyhpKSkgSW1wb3J0RnVuY3Rpb25JbmZvKCk7
CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1v
ZHVsZU5hbWVzcGFjZU9iamVjdCkKQEAgLTYzLDEyICs2OCwxMCBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIG1fbW9kdWxl
LnNldCh2bSwgdGhpcywgbW9kdWxlKTsKLSAgICBjb25zdCBzaXplX3QgZXh0cmFNZW1vcnlTaXpl
ID0gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoKTsKLSAgICBtX2dsb2JhbHMgPSBNYWxsb2NQdHI8dWlu
dDY0X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7Ci0KICAgICBtX21vZHVsZU5hbWVzcGFj
ZU9iamVjdC5zZXQodm0sIHRoaXMsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgbV9jYWxs
ZWUuc2V0KHZtLCB0aGlzLCBtb2R1bGUtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBoZWFwKCktPnJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVk
KCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCkBAIC04OCw0MCArOTEsNDQgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUp
OwotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmdsb2Jh
bE1lbW9yeUJ5dGVTaXplKCkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KHRoaXNPYmplY3QtPm1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0aW9uczsg
KytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbnMo
KVtpXSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9u
SW5mbyhpKS0+aW1wb3J0RnVuY3Rpb24pOyAvLyBUaGlzIGFsc28ga2VlcHMgdGhlIGZ1bmN0aW9u
cycgSlNXZWJBc3NlbWJseUluc3RhbmNlIGFsaXZlLgogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgUmVmPFdh
c206OkNvZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrKQogeworICAgIG1faW5zdGFuY2UtPmZpbmFs
aXplQ3JlYXRpb24od2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOworICAgIG1fd2FzbUNvZGVCbG9j
ayA9IHdhc21Db2RlQmxvY2sucHRyKCk7CisKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBpZiAoIXdhc21Db2RlQmxvY2stPnJ1bm5hYmxlKCkpIHsKICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6
OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3Ry
dWN0dXJlKCksIHdhc21Db2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVCh3YXNtQ29kZUJsb2NrLT5pc1NhZmVUb1J1
bihtZW1vcnlNb2RlKCkpKTsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtb2R1bGUoKS0+Y29kZUJsb2NrKG1lbW9yeU1vZGUoKSk7Ci0gICAgaWYgKGNvZGVCbG9jaykg
eworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGpzQ29kZUJsb2NrID0gbV9tb2R1bGUtPmNv
ZGVCbG9jayhtZW1vcnlNb2RlKCkpOworICAgIGlmIChqc0NvZGVCbG9jaykgewogICAgICAgICAv
LyBBIENvZGVCbG9jayBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxlZC4gSWYgc28sIGl0
IG1lYW5zCiAgICAgICAgIC8vIHRoYXQgdGhlIENvZGVCbG9jayB3ZSBhcmUgdHJ5aW5nIHRvIGNv
bXBpbGUgbXVzdCBiZSB0aGUgc2FtZQogICAgICAgICAvLyBiZWNhdXNlIHdlIHdpbGwgbmV2ZXIg
Y29tcGlsZSBhIENvZGVCbG9jayBhZ2FpbiBvbmNlIGl0J3MKICAgICAgICAgLy8gcnVubmFibGUu
Ci0gICAgICAgIEFTU0VSVCgmY29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29kZUJsb2Nr
LnB0cigpKTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwor
ICAgICAgICBBU1NFUlQoJmpzQ29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29kZUJsb2Nr
LnB0cigpKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBqc0NvZGVCbG9jayk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6Y3JlYXRlKHZtLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSwgbV9tb2R1bGUuZ2V0KCkpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAg
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpj
cmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtFcnJvclN0cnVj
dHVyZSgpLCBjb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIGpzQ29kZUJsb2Nr
ID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHdhc21Db2RlQmxv
Y2spLCBtX21vZHVsZS5nZXQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghanNDb2RlQmxvY2st
PnJ1bm5hYmxlKCkpKSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwg
SlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwganNDb2RlQmxvY2stPmVycm9yTWVzc2Fn
ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxv
Y2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgICAgICBtb2R1bGUoKS0+c2V0Q29kZUJs
b2NrKHZtLCBtZW1vcnlNb2RlKCksIGNvZGVCbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLnNl
dCh2bSwgdGhpcywganNDb2RlQmxvY2spOworICAgICAgICBtX21vZHVsZS0+c2V0Q29kZUJsb2Nr
KHZtLCBtZW1vcnlNb2RlKCksIGpzQ29kZUJsb2NrKTsKICAgICB9CiAKICAgICBhdXRvKiBtb2R1
bGVSZWNvcmQgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21vZHVsZU5hbWVz
cGFjZU9iamVjdC0+bW9kdWxlUmVjb3JkKCkpOwotICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVj
LCBtb2R1bGUoKSwgdGhpcyk7CisgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIG1fbW9kdWxl
LmdldCgpLCB0aGlzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
CiAgICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoZXhlYyk7
CkBAIC0xMjksNyArMTM2LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXpl
Q3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjoKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3Ry
dWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUq
IGluc3RhbmNlU3RydWN0dXJlLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYgaW5zdGFuY2UpCiB7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTU4LDggKzE2
NSw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVh
dGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdCogbW9kdWxlTmFtZXNwYWNlID0gbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2Uo
ZXhlYyk7CiAgICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5IGJpZyB3
ZSBzaG91bGQgdHJ5IHRvIHRocm93IE9PTSBoZXJlLgotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5oZWFwLCBh
bGxvY2F0aW9uU2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpKSkg
SlNXZWJBc3NlbWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxlSW5mb3Jt
YXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24odm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOworICAgIGF1dG8qIGpzSW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhl
YXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQo
KSkpKSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBtb2R1bGVJ
bmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCksIFdURk1vdmUoaW5zdGFuY2UpKTsKKyAg
ICBqc0luc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1vZHVsZU5hbWVzcGFj
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKIAogICAg
IC8vIExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlz
dHMgb2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2Jq
ZWN0cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgpAQCAtMTkw
LDE1ICsxOTcsMjEgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIGlmICgh
dmFsdWUuaXNGdW5jdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1w
b3J0LCAiaW1wb3J0IGZ1bmN0aW9uIiwgIm11c3QgYmUgY2FsbGFibGUiKSkpOwogCisgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09i
amVjdCo+KHZhbHVlKTsKKwogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQg
RnVuY3Rpb24gRXhvdGljIE9iamVjdDoKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24q
IHdhc21GdW5jdGlvbjsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3
YXNtV3JhcHBlckZ1bmN0aW9uOwogICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVu
Y3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7
CiAgICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90IG1h
dGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCiAg
ICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRl
eDsKLSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIGlm
ICh3YXNtRnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJ
bmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbGVlSW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAgICAgICAg
ICAgICAgICAgIHdhc21FbnRyeXBvaW50ID0gd2FzbUZ1bmN0aW9uLT53YXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbigpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVy
RnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGIuIExl
dCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCkBAIC0yMTUsNyArMjI4LDEwIEBAIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICAvLyBOb3RlOiBhZGRpbmcgdGhlIEpTQ2VsbCB0
byB0aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBjbG9zdXJlIHJlcXVpcmVtZW50cyBiLiBhYm92
ZSAodGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdpbCBiZSBrZXB0IGFsaXZlKSBhbmQgdi4gYmVs
b3cgKHRoZSBKU0Z1bmN0aW9uKS4KIAogICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEZ1bmN0
aW9ucyA9PSBpbXBvcnQua2luZEluZGV4KTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5pbXBvcnRG
dW5jdGlvbnMoKVtudW1JbXBvcnRGdW5jdGlvbnMrK10uc2V0KHZtLCBpbnN0YW5jZSwgZnVuY3Rp
b24pOworICAgICAgICAgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbmZvID0ganNJbnN0YW5jZS0+
aW1wb3J0RnVuY3Rpb25JbmZvKG51bUltcG9ydEZ1bmN0aW9ucysrKTsKKyAgICAgICAgICAgIGlu
Zm8tPnRhcmdldEluc3RhbmNlID0gY2FsbGVlSW5zdGFuY2U7CisgICAgICAgICAgICBpbmZvLT53
YXNtRW50cnlwb2ludCA9IHdhc21FbnRyeXBvaW50OworICAgICAgICAgICAgaW5mby0+aW1wb3J0
RnVuY3Rpb24uc2V0KHZtLCBqc0luc3RhbmNlLCBmdW5jdGlvbik7CiAgICAgICAgICAgICAvLyB2
LiBBcHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTI0Myw3ICsyNTksOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAg
ICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgogICAgICAgICAgICAgLy8gaWlpLiBBcHBl
bmQgdi5bW1RhYmxlXV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5tX3RhYmxl
LnNldCh2bSwgaW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPm1fdGFi
bGUuc2V0KHZtLCBqc0luc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5t
X3dhc21UYWJsZSA9IHRhYmxlLT50YWJsZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMjczLDggKzI5MCw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICAg
ICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8vIGlpaS4g
QXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgQVNTRVJUKCFpbnN0
YW5jZS0+bV9tZW1vcnkpOwotICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwg
aW5zdGFuY2UsIG1lbW9yeSk7CisgICAgICAgICAgICBBU1NFUlQoIWpzSW5zdGFuY2UtPm1fbWVt
b3J5KTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgbWVtb3J5KTsKICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjkxLDEzICszMDgsMTMgQEAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNT
dGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IGlt
cG9ydC5raW5kSW5kZXgpOwogICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1hdGlvbi5n
bG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6
STMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFs
cysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5p
bnN0YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIHZhbHVlLnRvSW50MzIoZXhl
YykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6
Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyss
IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChleGVjKSkpOworICAgICAgICAg
ICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMr
KywgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAg
ICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0
PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5j
ZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTMxNSwxNCArMzMyLDIxIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNN
ZW1vcnlJbXBvcnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1v
cnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQdHI8V2Fz
bTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0o
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5
LmlzSW1wb3J0KCkpOworCisgICAgICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5X
ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpN
ZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKG1vZHVsZUluZm9ybWF0aW9uLm1l
bW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCksCisgICAg
ICAgICAgICAgICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2Nv
cGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0
U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsmdm0sIGpz
TWVtb3J5XSAoV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5l
d1BhZ2VDb3VudCkgeyBqc01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNv
dW50LCBuZXdQYWdlQ291bnQpOyB9KTsKICAgICAgICAgICAgIGlmICghbWVtb3J5KQogICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7
CiAKLSAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLAotICAg
ICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBtZW1v
cnkucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICAgICAganNNZW1vcnktPmFkb3B0KG1lbW9y
eS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2
bSwganNNZW1vcnkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMzNiwxOSArMzYwLDI0IEBAIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxl
SW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKTsKICAg
ICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRlZmluaXRp
b24uCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJs
eVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2Vi
QXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgIG1vZHVsZUluZm9ybWF0
aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUlu
Zm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6VGFibGU+IHdh
c21UYWJsZSA9IFdhc206OlRhYmxlOjpjcmVhdGUobW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZv
cm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4
aW11bSgpKTsKKyAgICAgICAgICAgIGlmICghd2FzbVRhYmxlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgImNv
dWxkbid0IGNyZWF0ZSBUYWJsZSIpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSog
dGFibGUgPSBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5y
ZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgYmUgYWJs
ZSB0byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlUYWJsZSB3ZSd2ZSBkZWZpbmVkLgogICAgICAg
ICAgICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJlIHRvbyBsYXJnZSwgd2Ugc2hvdWxkIGhhdmUg
dGhyb3duIGEgdmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7Ci0gICAgICAgICAgICBp
bnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBq
c0luc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwgdGFibGUpOworICAgICAgICAg
ICAganNJbnN0YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFibGUoKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgeworICAgIGlmICghanNJ
bnN0YW5jZS0+bWVtb3J5KCkpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1t
eSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3Ig
YSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KLSAg
ICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgMCwgMCku
cmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5X
ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAganNNZW1vcnktPmFkb3B0KFdh
c206Ok1lbW9yeTo6Y3JlYXRlKCkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGpzSW5zdGFu
Y2UtPnNldE1lbW9yeSh2bSwganNNZW1vcnkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIH0KICAgICAKQEAgLTM2MCwyMCArMzg5LDEzIEBA
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRp
YWxpemF0aW9uVHlwZSAhPSBXYXNtOjpHbG9iYWw6OklzSW1wb3J0KTsKICAgICAgICAgICAgIGlm
IChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID09IFdhc206Okdsb2JhbDo6RnJvbUdsb2JhbElt
cG9ydCkgewogICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9y
dE51bWJlciA8IG51bUltcG9ydEdsb2JhbHMpOwotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5z
ZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGluc3RhbmNlLT5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0
aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5z
dGFuY2UoKS5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkubG9h
ZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOwogICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRl
eCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOworICAgICAgICAgICAgICAgIGpz
SW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2JhbEluZGV4LCBnbG9iYWwuaW5pdGlh
bEJpdHNPckltcG9ydE51bWJlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQoIWlu
c3RhbmNlLT5jb2RlQmxvY2soKSk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLXNpemVf
dCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkg
KiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHJldHVybiBqc0luc3RhbmNlOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggM2NmZTU0OS4uZDUyNTUwYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgK
QEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlU
YWJsZS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNl
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw3NSArNDEsOTQgQEAgY2xhc3MgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgV2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlOwogCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDb2RlQmxvY2s7
CitjbGFzcyBUYWJsZTsgLy8gRklYTUUgcmVtb3ZlIHRoaXMgYWZ0ZXIgcmVmYWN0b3JpbmcuIGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfQorCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYg
SlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU09i
amVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwg
SlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYm
KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2Nr
LmdldCgpOyB9CiAgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFZNJiwgRXhlY1N0YXRlKiwgUmVm
PFdhc206OkNvZGVCbG9jaz4mJik7Ci0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUo
KSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotCi0gICAgSlNPYmplY3QqIGltcG9y
dEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkgeyBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251bUltcG9y
dEZ1bmN0aW9ucyk7IHJldHVybiBpbXBvcnRGdW5jdGlvbnMoKVtpZHhdLmdldCgpOyB9Ci0KKyAg
ICAKKyAgICBXYXNtOjpJbnN0YW5jZSYgaW5zdGFuY2UoKSB7IHJldHVybiBtX2luc3RhbmNlLmdl
dCgpOyB9CisgICAgV2FzbTo6Q29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX3Zt
LT53YXNtQ29udGV4dDsgfQogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1l
c3BhY2VPYmplY3QoKSB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5nZXQoKTsgfQor
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9
CisgICAgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiB3ZWJBc3NlbWJseVRvSlNDYWxsZWUoKSB7IHJl
dHVybiBtX2NhbGxlZS5nZXQoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5
KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0s
IEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBtX21lbW9y
eS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgfQorICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1lbW9yeSogdmFsdWUpIHsgQVNTRVJUKCFtZW1vcnkoKSk7IG1fbWVtb3J5LnNl
dCh2bSwgdGhpcywgdmFsdWUpOyBtX3dhc21NZW1vcnkgPSAmbWVtb3J5KCktPm1lbW9yeSgpOyB9
CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5KCktPm1l
bW9yeSgpLm1vZGUoKTsgfQogCi0gICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgpIHsgcmV0
dXJuIG1fdGFibGUuZ2V0KCk7IH0KLQotICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KLSAgICBpbnQ2NF90IGxv
YWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ld
OyB9Ci0gICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBi
aXR3aXNlX2Nhc3Q8ZmxvYXQ+KGxvYWRJMzJHbG9iYWwoaSkpOyB9Ci0gICAgZG91YmxlIGxvYWRG
NjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4o
bG9hZEk2NEdsb2JhbChpKSk7IH0KLSAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2
NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQotCi0gICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFz
c2VtYmx5SW5zdGFuY2UsIG1fbWVtb3J5KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2Us
IG1fdGFibGUpOyB9CisgICAgLy8gVGFpbCBhY2Nlc3NvcnMuCisgICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZlRhaWwoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVp
bnQ2NF90KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9CisgICAgc3RydWN0IElt
cG9ydEZ1bmN0aW9uSW5mbyB7CisgICAgICAgIC8vIFRhcmdldCBpbnN0YW5jZSBhbmQgZW50cnlw
b2ludCBhcmUgb25seSBzZXQgZm9yIHdhc20tPndhc20gY2FsbHMsIGFuZCBhcmUgb3RoZXJ3aXNl
IG51bGxwdHIuIFRoZSBlbWJlZGRlci1zcGVjaWZpYyBsb2dpYyBvY2N1cnMgdGhyb3VnaCBpbXBv
cnQgZnVuY3Rpb24uCisgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogdGFyZ2V0SW5zdGFu
Y2UgeyBudWxscHRyIH07CisgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
IHdhc21FbnRyeXBvaW50IHsgbnVsbHB0ciB9OworICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+IGltcG9ydEZ1bmN0aW9uIHsgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpIH07CisgICAgfTsK
KyAgICBJbXBvcnRGdW5jdGlvbkluZm8qIGltcG9ydEZ1bmN0aW9uSW5mbyhzaXplX3QgaW1wb3J0
RnVuY3Rpb25OdW0pIHsgcmV0dXJuICZiaXR3aXNlX2Nhc3Q8SW1wb3J0RnVuY3Rpb25JbmZvKj4o
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mVGFpbCgpKVtpbXBvcnRGdW5jdGlv
bk51bV07IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mVGFyZ2V0SW5zdGFuY2Uoc2l6ZV90
IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0
aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1w
b3J0RnVuY3Rpb25JbmZvLCB0YXJnZXRJbnN0YW5jZSk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9m
ZnNldE9mV2FzbUVudHJ5cG9pbnQoc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBv
ZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9u
SW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNtRW50cnlwb2lu
dCk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6ZV90IGlt
cG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9u
TnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0
RnVuY3Rpb25JbmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBKU09iamVjdCogaW1wb3J0RnVu
Y3Rpb24odW5zaWduZWQgaW1wb3J0RnVuY3Rpb25OdW0pIHsgUkVMRUFTRV9BU1NFUlQoaW1wb3J0
RnVuY3Rpb25OdW0gPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVybiBpbXBvcnRGdW5jdGlv
bkluZm8oaW1wb3J0RnVuY3Rpb25OdW0pLT5pbXBvcnRGdW5jdGlvbi5nZXQoKTsgfQorICAgIAor
ICAgIC8vIEZJWE1FIHJlbW92ZSB0aGVzZSBhZnRlciByZWZhY3RvcmluZyB0aGVtIG91dC4gaHR0
cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCisgICAgV2FzbTo6TWVtb3J5JiBpbnRlcm5hbE1lbW9y
eSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKTsgfQorICAgIFdhc206OkNvZGVCbG9jayYg
d2FzbUNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RhbmNlLT5jb2RlQmxvY2soKTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtVGFibGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21UYWJsZSk7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jYWxsZWUpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZN
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV92bSk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jb2RlQmxvY2spOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZldhc21Db2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21Db2RlQmxvY2spOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2NhY2hlZFN0YWNrTGltaXQpOyB9Ci0gICAgc3RhdGlj
IHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJuIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pPihzaXplb2YoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKSk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rp
b24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0
aW9ucygpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2Yoc2l6ZW9mKFdyaXRlQmFycmllcjxK
U0NlbGw+KSk7IH0KLQotICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogd2ViQXNzZW1ibHlUb0pT
Q2FsbGVlKCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KLQotICAgIHZvaWQqIGNhY2hlZFN0
YWNrTGltaXQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7IH0KLSAgICB2b2lk
IHNldENhY2hlZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9jYWNoZWRTdGFja0xpbWl0ID0g
bGltaXQ7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbU1lbW9yeSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fd2FzbU1lbW9yeSk7
IH0KKyAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCht
X2luc3RhbmNlLT5jYWNoZWRTdGFja0xpbWl0KCkgPT0gbV9jYWNoZWRTdGFja0xpbWl0KTsgcmV0
dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2
b2lkKiBsaW1pdCkgeyBtX2luc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGxpbWl0KTsgbV9j
YWNoZWRTdGFja0xpbWl0ID0gbGltaXQ7IH0KKyAgICBXYXNtOjpNZW1vcnkqIHdhc21NZW1vcnko
KSB7IHJldHVybiBtX3dhc21NZW1vcnk7IH0KKyAgICBXYXNtOjpNb2R1bGUmIHdhc21Nb2R1bGUo
KSB7IHJldHVybiBtX3dhc21Nb2R1bGU7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyk7
CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbnVt
SW1wb3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBzaXpl
X3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IG51bUltcG9ydEZ1bmN0aW9ucykKICAg
ICB7Ci0gICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIHNpemVvZihX
cml0ZUJhcnJpZXI8SlNDZWxsPikgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdldCgpOwor
ICAgICAgICByZXR1cm4gKG9mZnNldE9mVGFpbCgpICsgc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5m
bykgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdldCgpOwogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBWTSogbV92bTsKLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlv
bnMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+KGJpdHdp
c2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsgfQotICAg
IHNpemVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0OworICAgIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisKKyAgICBS
ZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAKKyAgICBWTSogbV92bTsKICAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVy
PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxK
U01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiAgICAgV3Jp
dGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5VGFibGU+IG1fdGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZT4gbV9jYWxsZWU7Ci0gICAgTWFsbG9jUHRyPHVpbnQ2NF90PiBtX2dsb2Jh
bHM7CisgICAgCisgICAgLy8gRklYTUUgcmVtb3ZlIHRoZXNlIGFmdGVyIHJlZmFjdG9yaW5nIHRo
ZW0gb3V0LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKICAgICB2b2lkKiBtX2NhY2hlZFN0
YWNrTGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0
cl90Pjo6bWF4KCkpIH07CisgICAgV2FzbTo6Q29kZUJsb2NrKiBtX3dhc21Db2RlQmxvY2sgeyBu
dWxscHRyIH07CisgICAgV2FzbTo6TW9kdWxlJiBtX3dhc21Nb2R1bGU7CisgICAgV2FzbTo6TWVt
b3J5KiBtX3dhc21NZW1vcnkgeyBudWxscHRyIH07CisgICAgV2FzbTo6VGFibGUqIG1fd2FzbVRh
YmxlIHsgbnVsbHB0ciB9OworICAgIHVpbnQ2NF90KiBtX2dsb2JhbHMgeyBudWxscHRyIH07CisK
ICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKaW5kZXgg
MjIzYzU4Yi4uZDY0MGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CiAKLUpTV2ViQXNzZW1i
bHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQor
SlNXZWJBc3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC01MCwxMCArNTAsMTYgQEAgSlNXZWJB
c3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgVk0mIHZtLCBTdHJ1Y3QKICAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CiAKLSAgICBh
dXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlN
ZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUsIFdURk1v
dmUobWVtb3J5KSk7Ci0gICAgaW5zdGFuY2UtPm1fbWVtb3J5LT5jaGVjaygpOwotICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOworICAgIGF1dG8q
IG1lbW9yeSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+
KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAgIG1lbW9y
eS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBtZW1vcnk7Cit9CisgICAgCit2b2lk
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQor
eworICAgIG1fbWVtb3J5LnN3YXAobWVtb3J5KTsKKyAgICBBU1NFUlQobV9tZW1vcnktPnJlZkNv
dW50KCkgPT0gMSk7CisgICAgbV9tZW1vcnktPmNoZWNrKCk7CiB9CiAKIFN0cnVjdHVyZSogSlNX
ZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC02MSwxMyArNjcsMTAgQEAgU3Ry
dWN0dXJlKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1v
cnkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1v
cnkpCitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX21l
bW9yeShXVEZNb3ZlKG1lbW9yeSkpCisgICAgLCBtX21lbW9yeShXYXNtOjpNZW1vcnk6OmNyZWF0
ZSgpLnJlbGVhc2VOb25OdWxsKCkpCiB7Ci0gICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgp
ID09IDEpOwotICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVtb3J5LT5tZW1vcnkoKTsKLSAgICBtX21l
bW9yeVNpemUgPSBtX21lbW9yeS0+c2l6ZSgpOwogfQogCiBKU0FycmF5QnVmZmVyKiBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQpAQCAtODUsNTIgKzg4LDQ1IEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6
OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJu
IG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIH0KIAotV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1i
bHlNZW1vcnk6Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhLCBi
b29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKK1dhc206OlBhZ2VDb3VudCBKU1dl
YkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBk
ZWx0YSkKIHsKLSAgICAvLyBOb3RlOiBXZSBjYW4gb25seSB1c2UgZXhlYyBpZiBzaG91bGRUaHJv
d0V4Y2VwdGlvbnNPbkZhaWx1cmUgaXMgdHJ1ZS4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQg
PSBtZW1vcnkoKS5zaXplSW5QYWdlcygpOwotCi0gICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6Omlz
VmFsaWQoZGVsdGEpKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1
cmUpCisgICAgYXV0byBncm93biA9IG1lbW9yeSgpLmdyb3coV2FzbTo6UGFnZUNvdW50KGRlbHRh
KSk7CisgICAgaWYgKCFncm93bikgeworICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsK
KyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6
CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0
cyB0aGUgZGVsdGEgdG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50IikpKTsKLSAgICAgICAgcmV0dXJu
IFdhc206OlBhZ2VDb3VudCgpOwotICAgIH0KLQotICAgIFdhc206OlBhZ2VDb3VudCBuZXdTaXpl
ID0gb2xkUGFnZUNvdW50ICsgV2FzbTo6UGFnZUNvdW50KGRlbHRhKTsKLSAgICBpZiAoIW5ld1Np
emUpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246
OkludmFsaWRHcm93U2l6ZToKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5N
ZW1vcnkuZ3JvdyBleHBlY3RzIHRoZSBncm93biBzaXplIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3Vu
dCIpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdy
b3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgd291bGQgZXhjZWVkIHRoZSBtZW1vcnkncyBkZWNs
YXJlZCBtYXhpbXVtIHNpemUiKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBXYXNt
OjpQYWdlQ291bnQoKTsKICAgICB9CiAKLSAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAgYm9vbCBz
dWNjZXNzID0gbWVtb3J5KCkuZ3Jvdyh2bSwgbmV3U2l6ZSk7Ci0gICAgICAgIGlmICghc3VjY2Vz
cykgewotICAgICAgICAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZSA9PSBtZW1vcnkoKS5tZW1vcnko
KSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplID09IG1lbW9yeSgpLnNpemUoKSk7
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQotICAgICAg
ICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVt
b3J5RXJyb3IoZXhlYykpOwotICAgICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwot
ICAgICAgICB9Ci0gICAgICAgIG1fbWVtb3J5QmFzZSA9IG1lbW9yeSgpLm1lbW9yeSgpOwotICAg
ICAgICBtX21lbW9yeVNpemUgPSBtZW1vcnkoKS5zaXplKCk7Ci0gICAgfQorICAgIHJldHVybiBn
cm93bi52YWx1ZSgpOworfQogCi0gICAgLy8gV2UgbmVlZCB0byBjbGVhciBvdXQgdGhlIG9sZCBh
cnJheSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUgcG9pbnRpbmcKLSAgICAvLyB0byBz
dGFsZSBtZW1vcnkuCit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3dTdWNjZXNzQ2FsbGJh
Y2soVk0mIHZtLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdlQ291bnQg
bmV3UGFnZUNvdW50KQoreworICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgYXJy
YXkgYnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nIHRvIHN0YWxlIG1lbW9y
eS4KICAgICAvLyBOZXV0ZXIgdGhlIG9sZCBhcnJheS4KICAgICBpZiAobV9idWZmZXIpIHsKICAg
ICAgICAgbV9idWZmZXItPm5ldXRlcih2bSk7CiAgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsK
ICAgICAgICAgbV9idWZmZXJXcmFwcGVyLmNsZWFyKCk7CiAgICAgfQotCisgICAgCiAgICAgbWVt
b3J5KCkuY2hlY2soKTsKLQotICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQo
V2FzbTo6UGFnZUNvdW50KGRlbHRhKS5ieXRlcygpKTsKLSAgICByZXR1cm4gb2xkUGFnZUNvdW50
OworICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3UGFnZUNv
dW50LmJ5dGVzKCkgLSBvbGRQYWdlQ291bnQuYnl0ZXMoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3Nl
bWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCmluZGV4IDFkMDZjNGMuLjRi
YmJjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmgKQEAgLTQ4LDI2ICs0OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biAmdm0uZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CiAgICAgfQogCi0gICAg
c3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVj
dHVyZSosIFJlZjxXYXNtOjpNZW1vcnk+JiYpOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVt
b3J5KiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwog
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAorICAgIHZvaWQgYWRvcHQoUmVmPFdhc206Ok1l
bW9yeT4mJik7CiAgICAgV2FzbTo6TWVtb3J5JiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5n
ZXQoKTsgfQogICAgIEpTQXJyYXlCdWZmZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgV2FzbTo6UGFnZUNvdW50IGdyb3coVk0mLCBFeGVjU3RhdGUqLCB1aW50MzJfdCBk
ZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwotCi0gICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dl
YkFzc2VtYmx5TWVtb3J5LCBtX21lbW9yeUJhc2UpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9y
eSwgbV9tZW1vcnlTaXplKTsgfQorICAgIFdhc206OlBhZ2VDb3VudCBncm93KFZNJiwgRXhlY1N0
YXRlKiwgdWludDMyX3QgZGVsdGEpOworICAgIHZvaWQgZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhWTSYs
IFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291
bnQpOwogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUq
LCBSZWY8V2FzbTo6TWVtb3J5PiYmKTsKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3Ry
dWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCogbV9tZW1vcnlCYXNlOwotICAgIHNpemVfdCBt
X21lbW9yeVNpemU7CiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVC
YXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKICAgICBSZWZQdHI8QXJyYXlC
dWZmZXI+IG1fYnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKaW5kZXggZmY0NmQ0ZC4uYWRhYTc0OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3Bw
CkBAIC0yOSwzMCArMjksMjIgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgPHd0Zi9D
aGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZv
IEpTV2ViQXNzZW1ibHlUYWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFibGUiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNz
ZW1ibHlUYWJsZSkgfTsKIAotSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6
OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVp
bnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCitKU1dlYkFz
c2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206OlRhYmxlPiYmIHRhYmxlKQog
ewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1
dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAotICAgIGF1
dG8gZXhjZXB0aW9uID0gWyZdIChKU09iamVjdCogZXJyb3IpIHsKLSAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOworICAgIGlmICghZ2xvYmFsT2JqZWN0LT53
ZWJBc3NlbWJseUVuYWJsZWQoKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBjcmVhdGVFdmFsRXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseURp
c2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfTsK
LQotICAgIGlmICghZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUVuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVFdmFsRXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0LT53ZWJB
c3NlbWJseURpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKLQotICAgIGlmICghaXNWYWxpZFNpemUo
aW5pdGlhbCkpCi0gICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJv
cihleGVjKSk7CisgICAgfQogCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5VGFi
bGUodm0sIHN0cnVjdHVyZSwgaW5pdGlhbCwgbWF4aW11bSk7CisgICAgYXV0byogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhlYXAp
KSBKU1dlYkFzc2VtYmx5VGFibGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZSh0YWJsZSkpOwogICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpA
QCAtNjIsMjMgKzU0LDE1IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5VGFi
bGU6OkpTV2ViQXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50
MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQorSlNXZWJBc3Nl
bWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUmVmPFdhc206OlRhYmxlPiYmIHRhYmxlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICwgbV90YWJsZShXVEZNb3ZlKHRhYmxlKSkKIHsKLSAgICBtX3NpemUgPSBpbml0aWFsOwot
ICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3NpemUpKTsKLSAgICBtX21heGltdW0gPSBtYXhpbXVt
OwotICAgIEFTU0VSVCghbV9tYXhpbXVtIHx8ICptX21heGltdW0gPj0gbV9zaXplKTsKLQogICAg
IC8vIEZJWE1FOiBJdCBtaWdodCBiZSB3b3J0aCB0cnlpbmcgdG8gcHJlLWFsbG9jYXRlIG1heGlt
dW0gaGVyZS4gVGhlIHNwZWMgcmVjb21tZW5kcyBkb2luZyBzby4KICAgICAvLyBCdXQgZm9yIG5v
dywgd2UncmUgbm90IGRvaW5nIHRoYXQuCi0gICAgbV9mdW5jdGlvbnMgPSBNYWxsb2NQdHI8V2Fz
bTo6Q2FsbGFibGVGdW5jdGlvbj46Om1hbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlv
bikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSkpOwotICAgIG1fanNGdW5jdGlvbnMgPSBN
YWxsb2NQdHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSkpOwotICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkgewotICAgICAgICBuZXcgKCZtX2Z1bmN0
aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwotICAgICAgICBBU1NFUlQo
bV9mdW5jdGlvbnMuZ2V0KClbaV0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjpp
bnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KKyAgICBt
X2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+OjptYWxsb2Mo
c2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXpl
KCkpKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCiAgICAgICAg
IG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdyaXRlQmFycmllcjxKU09iamVjdD4oKTsK
LSAgICB9CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCkBAIC05OSw3ICs4Myw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRoaXNPYmplY3QtPm1fc2l6ZTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0aGlzT2JqZWN0LT5zaXplKCk7ICsraSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSk7CiB9CiAKQEAgLTEwNyw0NyArOTEsNDQg
QEAgYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgZGVsdGEpCiB7CiAgICAg
aWYgKGRlbHRhID09IDApCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIENoZWNrZWQ8dWludDMy
X3QsIFJlY29yZE92ZXJmbG93PiBuZXdTaXplQ2hlY2tlZCA9IG1fc2l6ZTsKLSAgICBuZXdTaXpl
Q2hlY2tlZCArPSBkZWx0YTsKLSAgICB1aW50MzJfdCBuZXdTaXplOwotICAgIGlmIChuZXdTaXpl
Q2hlY2tlZC5zYWZlR2V0KG5ld1NpemUpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiAqbWF4
aW11bSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFpc1ZhbGlkU2l6ZShuZXdT
aXplKSkKKworICAgIHNpemVfdCBvbGRTaXplID0gc2l6ZSgpOworCisgICAgYXV0byBncmV3ID0g
bV90YWJsZS0+Z3JvdyhkZWx0YSk7CisgICAgaWYgKCFncmV3KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBtX2Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOwotICAgIG1fanNGdW5jdGlvbnMu
cmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG5ld1NpemUpKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IGdyZXcudmFsdWUoKTsKKyAgICBt
X2pzRnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogbmV3
U2l6ZSk7CiAKLSAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kp
IHsKLSAgICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVu
Y3Rpb24oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7ICsraSkK
ICAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2Jq
ZWN0PigpOwotICAgIH0KLSAgICBtX3NpemUgPSBuZXdTaXplOworCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK0pTT2JqZWN0KiBKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKHVpbnQzMl90
IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1
cm4gbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uZ2V0KCk7Cit9CisKIHZvaWQgSlNXZWJBc3Nl
bWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX3RhYmxlLT5jbGVhckZ1bmN0aW9uKGluZGV4
KTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdyaXRlQmFycmllcjxKU09iamVj
dD4oKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uKCk7Ci0gICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XS5zaWduYXR1cmVJbmRl
eCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBp
biBjb21waWxlZCBjb2RlLgogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rp
b24oVk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24p
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgIG1fdGFibGUtPnNl
dEZ1bmN0aW9uKGluZGV4LCBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpLCBmdW5jdGlvbi0+
aW5zdGFuY2UoKSk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlz
LCBmdW5jdGlvbik7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rpb24tPmNh
bGxhYmxlRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0
aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBm
dW5jdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90
YWJsZS0+c2V0RnVuY3Rpb24oaW5kZXgsIGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCksIGZ1
bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQo
dm0sIHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5j
dGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKaW5k
ZXggZGY4M2U5Ny4uNDQ4NzUzMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNTcgKzI5LDQyIEBACiAKICNpbmNsdWRlICJK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAi
V2FzbUxpbWl0cy5oIgorI2luY2x1ZGUgIldhc21UYWJsZS5oIgogI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgog
I2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFj
ZSBXYXNtIHsKLXN0cnVjdCBDYWxsYWJsZUZ1bmN0aW9uOwotfQotCiBjbGFzcyBKU1dlYkFzc2Vt
Ymx5VGFibGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5
cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5VGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGlu
aXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOworICAgIHN0YXRpYyBKU1dl
YkFzc2VtYmx5VGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSosIFJlZjxX
YXNtOjpUYWJsZT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAg
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGlt
dW07IH0KLSAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
c3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6ZSkgeyByZXR1cm4gV2FzbTo6VGFi
bGU6OmlzVmFsaWRTaXplKHNpemUpOyB9CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4
aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUtPm1heGltdW0oKTsgfQorICAgIHVpbnQzMl90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5zaXplKCk7IH0KICAgICBib29sIGdyb3co
dWludDMyX3QgZGVsdGEpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBKU09iamVjdCogZ2V0RnVu
Y3Rpb24odWludDMyX3QgaW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRl
eCA8IG1fc2l6ZSk7Ci0gICAgICAgIHJldHVybiBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5n
ZXQoKTsKLSAgICB9Ci0gICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KTsKLSAg
ICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rp
b24qKTsKLSAgICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uKik7Ci0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fc2l6ZSk7
IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9mdW5jdGlvbnMpOyB9Ci0gICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkpTRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9qc0Z1bmN0aW9ucyk7IH0KKyAgICBKU09iamVjdCog
Z2V0RnVuY3Rpb24odWludDMyX3QpOworICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCk7
CisgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90LCBXZWJBc3NlbWJseUZ1bmN0aW9u
Kik7CisgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90LCBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiopOwogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6
ZSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgdG9wcyBvdXQgYXQgfjM4NCBNQiB3b3J0aCBvZiBk
YXRhIGluIHRoaXMgY2xhc3MuCi0gICAgICAgIHJldHVybiBzaXplIDwgKDEgPDwgMjQpOwotICAg
IH0KKyAgICBXYXNtOjpUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLnB0cigpOyB9CiAK
IHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJlKiwgdWludDMy
X3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisgICAgSlNXZWJB
c3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAKLSAgICBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7Cisg
ICAgUmVmPFdhc206OlRhYmxlPiBtX3RhYmxlOwogICAgIE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+PiBtX2pzRnVuY3Rpb25zOwotICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1f
bWF4aW11bTsKLSAgICB1aW50MzJfdCBtX3NpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTIwNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCkBAIC0wLDAgKzEsNjU2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkZyYW1lVHJhY2Vy
cy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJO
YXRpdmVFcnJvckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQu
aCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20geworCit1c2luZyBKSVQgPSBDQ2FsbEhlbHBlcnM7CisKK3N0YXRpYyB2b2lk
IG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKEpJVCYgaml0LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICAvLyBXZSdyZSBjYWxsaW5nIG91dCBvZiB0aGUgY3VycmVu
dCBXZWJBc3NlbWJseS5JbnN0YW5jZS4gVGhhdCBJbnN0YW5jZSBoYXMgYSBsaXN0IG9mIGFsbCBp
dHMgaW1wb3J0IGZ1bmN0aW9ucy4KKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UocmVz
dWx0KTsKKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MocmVzdWx0LCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24oaW1wb3J0SW5kZXgpKSwgcmVzdWx0KTsK
K30KKworRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2Fz
bVRvSlMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KQoreworICAgIC8vIEZJ
WE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcHJvcGVybHkgYWJzdHJhY3QgYXdheSB0aGUgY2Fs
bGluZyBjb252ZW50aW9uLgorICAgIC8vIEl0J2QgYmUgc3VwZXIgZWFzeSB0byBkbyBzbzogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwMQorICAgIGNvbnN0IFdh
c21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNDID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7Cisg
ICAgY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzQ0MgPSBqc2NDYWxsaW5nQ29udmVudGlv
bigpOworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgdW5zaWduZWQgYXJnQ291bnQgPSBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpOworICAgIEpJVCBqaXQ7CisKKyAgICAvLyBOb3RlOiBXYXNtQjNJ
UkdlbmVyYXRvciBhc3N1bWVzIHRoYXQgdGhpcyBzdHViIHRyZWF0cyBTUCBhcyBhIGNhbGxlZSBz
YXZlLgorICAgIC8vIElmIHdlIGV2ZXIgY2hhbmdlIHRoaXMsIHdlIHdpbGwgYWxzbyBuZWVkIHRv
IGNoYW5nZSBXYXNtQjNJUkdlbmVyYXRvci4KKworICAgIC8vIEJlbG93LCB3ZSBhc3N1bWUgdGhh
dCB0aGUgSlMgY2FsbGluZyBjb252ZW50aW9uIGlzIGFsd2F5cyBvbiB0aGUgc3RhY2suCisgICAg
QVNTRVJUKCFqc0NDLm1fZ3ByQXJncy5zaXplKCkpOworICAgIEFTU0VSVCghanNDQy5tX2ZwckFy
Z3Muc2l6ZSgpKTsKKworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5z
dG9yZTY0KEpJVDo6VHJ1c3RlZEltbTMyKDApLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3Mu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKKworICAgIHsK
KyAgICAgICAgYm9vbCBoYXNCYWRJNjRVc2UgPSBmYWxzZTsKKyAgICAgICAgaGFzQmFkSTY0VXNl
IHw9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgPT0gSTY0OworICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50ICYmICFoYXNCYWRJNjRVc2U7ICsrYXJnTnVt
KSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVt
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lk
OgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgICAg
IGNhc2UgSTY0OiB7CisgICAgICAgICAgICAgICAgaGFzQmFkSTY0VXNlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChoYXNCYWRJNjRVc2UpIHsKKyAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJhbWUpOworICAgICAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKworICAgICAgICAgICAgLy8gU3RvcmUgQ2FsbGVlLgorICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVu
dEdQUjIsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworCisg
ICAgICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgaml0Lmp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0
KShFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4
ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpIC0+IHZvaWQgeworICAgICAgICAg
ICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7
CisgICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0
YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8qIGVycm9yID0g
RXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsICp2bSwgZ2xvYmFsT2JqZWN0LT50eXBlRXJyb3JD
b25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBBU0NJSUxpdGVyYWwoImk2NCBub3QgYWxs
b3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1bWVudCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIp
KTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
ZXJyb3IpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGdlbmVyaWNVbndp
bmQodm0sIGV4ZWMpOworICAgICAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JD
YXRjaCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVt
b3J5KTsKKworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93QmFkSTY0KTsK
KyAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1i
bHktPkphdmFTY3JpcHQgaW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRl
eCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUg
SlMgY2FsbGluZyBjb252ZW50aW9uIHNhdmVzIGF0IGxlYXN0IGFsbCB0aGUgd2FzbSBjYWxsZWUg
c2F2ZWQuIFdlIHRoZXJlZm9yZSBkb24ndCBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgbW9yZSBy
ZWdpc3RlcnMgc2luY2UgdGhlIHdhc20gY2FsbGVlIGFscmVhZHkgdG9vayBjYXJlIG9mIHRoaXMu
CisgICAgUmVnaXN0ZXJTZXQgbWlzc2luZ0NhbGxlZVNhdmVzID0gd2FzbUNDLm1fY2FsbGVlU2F2
ZVJlZ2lzdGVyczsKKyAgICBtaXNzaW5nQ2FsbGVlU2F2ZXMuZXhjbHVkZShqc0NDLm1fY2FsbGVl
U2F2ZVJlZ2lzdGVycyk7CisgICAgQVNTRVJUKG1pc3NpbmdDYWxsZWVTYXZlcy5pc0VtcHR5KCkp
OworCisgICAgaWYgKCFPcHRpb25zOjp1c2VDYWxsSUNzRm9yV2ViQXNzZW1ibHlUb0pTQ2FsbHMo
KSkgeworICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKGFyZ0NvdW50ICogc2l6ZW9mKHVpbnQ2NF90KSk7CisgICAgICAgIGNoYXIq
IGJ1ZmZlciA9IGFyZ0NvdW50ID8gc3RhdGljX2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXItPmRh
dGFCdWZmZXIoKSkgOiBudWxscHRyOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9
IDA7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKKyAgICAgICAgdW5zaWdu
ZWQgYnVmZmVyT2Zmc2V0ID0gMDsKKyAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSk7CisgICAgICAgIGNvbnN0IEdQUlJlZyBzY3JhdGNoR1BSID0gR1BSSW5mbzo6cmVnQ1Mw
OworICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc2l6ZW9mKFJlZ2lzdGVy
KSkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBqaXQu
c3RvcmVQdHIoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdO
dW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUg
YXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNo
IChhcmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1
bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
Y2FzZSBJMzI6IHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVnOworICAgICAgICAgICAg
ICAgIGlmIChtYXJzaGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAg
ICAgICAgICAgICAgICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5n
cHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Un
dmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZh
aWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZ3ByUmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwclJlZywgZ3By
UmVnKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChncHJSZWcsIGJ1ZmZlciArIGJ1ZmZl
ck9mZnNldCk7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjMyOiB7CisgICAg
ICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxl
ZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnBy
UmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxl
ZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNo
LgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7CisgICAgICAgICAgICAgICAgICAg
IGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJSZWcsIGZwclJlZyk7CisgICAg
ICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgICAg
ICAgICBGUFJSZWcgZnByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8
IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3
YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBh
cmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAg
ICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWREb3VibGUoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zm
c2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7CisgICAg
ICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVmZmVyT2Zmc2V0ICs9
IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgaml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwg
c2NyYXRjaEdQUik7CisgICAgICAgIGlmIChhcmdDb3VudCkgeworICAgICAgICAgICAgLy8gVGhl
IEdDIHNob3VsZCBub3QgbG9vayBhdCB0aGlzIGJ1ZmZlciBhdCBhbGwsIHRoZXNlIGFyZW4ndCBK
U1ZhbHVlcy4KKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKDApLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICB9CisKKyAgICAgICAg
dWludDY0X3QgKCpjYWxsRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTaWduYXR1cmVJbmRl
eCwgdWludDY0X3QqKSA9CisgICAgICAgICAgICBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogY2FsbGVlLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdWludDY0X3QqIGJ1ZmZl
cikgLT4gdWludDY0X3QgeyAKKyAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KyAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CisgICAgICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJn
TnVtID0gMDsgYXJnTnVtIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKythcmdOdW0pIHsK
KyAgICAgICAgICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFy
Z051bSk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgYXJnOworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWb2lkOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
QW55ZnVuYzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEkzMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGpzTnVtYmVyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KGJ1ZmZlclthcmdOdW1dKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBGMzI6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRjY0OgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoYml0
d2lzZV9jYXN0PGRvdWJsZT4oYnVmZmVyW2FyZ051bV0pKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFy
Z3MuYXBwZW5kKGFyZyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CisgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBjYWxs
ZWUtPm1ldGhvZFRhYmxlKCp2bSktPmdldENhbGxEYXRhKGNhbGxlZSwgY2FsbERhdGEpOworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgY2FsbGVlLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpOworICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7CisKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCByZWFsUmVzdWx0OworICAgICAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVy
blR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgICAgICBj
YXNlIEFueWZ1bmM6CisgICAgICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBJMzI6IHsKKyAgICAgICAgICAgICAgICAgICAgcmVh
bFJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmVz
dWx0LnRvSW50MzIoZXhlYykpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgRjY0OgorICAgICAgICAgICAgICAgIGNh
c2UgRjMyOiB7CisgICAgICAgICAgICAgICAgICAgIHJlYWxSZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHJlc3VsdC50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOworICAgICAgICAgICAgICAg
IHJldHVybiByZWFsUmVzdWx0OworICAgICAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGpp
dC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBK
SVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICAgICAgCisg
ICAgICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZB
cmd1bWVudFJlZ2lzdGVycyA+PSA0LCAiV2UgcmVseSBvbiB0aGlzIHdpdGggdGhlIGNhbGwgYmVs
b3cuIik7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmVJbmRleCks
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihidWZmZXIpKTsKKyAgICAgICAgYXV0byBjYWxs
ID0gaml0LmNhbGwoKTsKKyAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5lbWl0RXhjZXB0
aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwor
CisgICAgICAgIC8vIGV4Y2VwdGlvbiBoZXJlLgorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAoRXhl
Y1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
IXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgIH07CisgICAgICAgIGF1dG8gZXhjZXB0
aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVy
KCp2bSk7CisKKyAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsKKyAgICAgICAgc3dpdGNo
IChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRjY0OiB7CisgICAgICAg
ICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86
OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgRjMyOiB7CisgICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGppdC5j
b252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaml0LmVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgIGppdC5yZXQoKTsKKworICAgICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRP
Zk1lbW9yeSk7CisKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNhbGxGdW5jKTsKKyAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkNhbGwsIGRvVW53aW5kaW5nKTsKKworICAg
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZh
U2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpKTsKKyAgICB9CisKKyAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRv
IHBlcmZvcm0gYSBzdGFjayBjaGVjayBoZXJlIHNpbmNlIFdhc21CM0lSR2VuZXJhdG9yCisgICAg
Ly8gd2lsbCBkbyB0aGUgc3RhY2sgY2hlY2sgZm9yIHVzLiBXaGVuZXZlciBpdCBkZXRlY3RzIHRo
YXQgaXQgbWlnaHQgbWFrZQorICAgIC8vIGEgY2FsbCB0byB0aGlzIHRodW5rLCBpdCdsbCBtYWtl
IHN1cmUgaXRzIHN0YWNrIGNoZWNrIGluY2x1ZGVzIHNwYWNlCisgICAgLy8gZm9yIHVzIGhlcmUu
CisKKyAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSBhcmdDb3VudCArIDE7
IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgorICAgIGNvbnN0IHVuc2lnbmVkIG51bWJl
ck9mUmVnc0ZvckNhbGwgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIG51bWJl
ck9mUGFyYW1ldGVyczsKKyAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9
IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpOworICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwp
OworICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja09mZnNl
dCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgSklUOjpBZGRy
ZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSk7CisKKyAgICAvLyBGSVhNRSBtYWtlIHRoZXNlIGxvb3BzIHdoaWNoIHN3
aXRjaCBvbiBTaWduYXR1cmUgaWYgdGhlcmUgYXJlIG1hbnkgYXJndW1lbnRzIG9uIHRoZSBzdGFj
ay4gSXQnbGwgb3RoZXJ3aXNlIGJlIGh1Z2UgZm9yIGh1Z2Ugc2lnbmF0dXJlcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTU0NworICAgIAorICAgIC8vIEZpcnN0
IGdvIHRocm91Z2ggdGhlIGludGVnZXIgcGFyYW1ldGVycywgZnJlZWluZyB1cCB0aGVpciByZWdp
c3RlciBmb3IgdXNlIGFmdGVyd2FyZHMuCisgICAgeworICAgICAgICB1bnNpZ25lZCBtYXJzaGFs
bGVkR1BScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKKyAgICAg
ICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3Vt
ZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgdW5zaWdu
ZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVt
ID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFy
Z1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAo
YXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5j
OgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92
ZS4KKyAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwclJl
ZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdz
LnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1tt
YXJzaGFsbGVkR1BSc10uZ3ByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSBy
ZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBn
cHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5s
b2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCks
IGdwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7
CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwclJlZywgZ3ByUmVnKTsg
Ly8gQ2xlYXIgbm9uLWludDMyIGFuZCBub24tdGFnIGJpdHMuCisgICAgICAgICAgICAgICAgaml0
LmJveEludDMyKGdwclJlZywgSlNWYWx1ZVJlZ3MoZ3ByUmVnKSwgRG9Ob3RIYXZlVGFnUmVnaXN0
ZXJzKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChncHJSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFt
ZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGMzI6CisgICAgICAgICAgICBjYXNlIEY2NDoK
KyAgICAgICAgICAgICAgICAvLyBTa2lwcGVkOiBoYW5kbGVkIGJlbG93LgorICAgICAgICAgICAg
ICAgIGlmIChtYXJzaGFsbGVkRlBScyA+PSB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0
ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgeworICAgICAgICAvLyBJbnRlZ2VyIHJl
Z2lzdGVycyBoYXZlIGFscmVhZHkgYmVlbiBzcGlsbGVkLCB0aGVzZSBhcmUgbm93IGF2YWlsYWJs
ZS4KKyAgICAgICAgR1BSUmVnIGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyA9IEdQUkluZm86OmFy
Z3VtZW50R1BSMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjphcmd1bWVudEdQ
UjE7CisgICAgICAgIGJvb2wgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0gZmFs
c2U7CisgICAgICAgIGF1dG8gbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQgPSBbJmhhc01h
dGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCwgJmppdF0gKEdQUlJlZyBkZXN0KSB7CisgICAg
ICAgICAgICBpZiAoIWhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCkgeworICAgICAg
ICAgICAgICAgIHN0YXRpY19hc3NlcnQoRG91YmxlRW5jb2RlT2Zmc2V0ID09IDFsbCA8PCA0OCwg
ImNvZGVnZW4gYXNzdW1lcyB0aGlzIGJlbG93Iik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUo
SklUOjpUcnVzdGVkSW1tMzIoMSksIGRlc3QpOworICAgICAgICAgICAgICAgIGppdC5sc2hpZnQ2
NChKSVQ6OlRydXN0ZWRJbW0zMig0OCksIGRlc3QpOworICAgICAgICAgICAgICAgIGhhc01hdGVy
aWFsaXplZERvdWJsZUVuY29kZU9mZnNldCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH07CisKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNp
Z25lZCBtYXJzaGFsbGVkRlBScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zm
c2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyAr
K2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50
KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNh
c2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVu
YzoKKyAgICAgICAgICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICBjYXNlIEkzMjoK
KyAgICAgICAgICAgICAgICAvLyBTa2lwcGVkOiBoYW5kbGVkIGFib3ZlLgorICAgICAgICAgICAg
ICAgIGlmIChtYXJzaGFsbGVkR1BScyA+PSB3YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICArK21hcnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0
ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEYzMjogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAg
ICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisgICAg
ICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNd
LmZwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBh
dmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5m
bzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwor
ICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnBy
UmVnLCBmcHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKKyAg
ICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKKyAgICAg
ICAgICAgICAgICBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVPZmZz
ZXRHUFJSZWcpOworICAgICAgICAgICAgICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRH
UFJSZWcsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
ICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEY2NDogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7
CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFy
c2hhbGxlZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVn
aXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnBy
UmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0
KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0LnB1cmlmeU5hTihm
cHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0
Y2gpOworICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJs
ZUVuY29kZU9mZnNldEdQUlJlZyk7CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJsZUVu
Y29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
c2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOworICAg
ICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGppdC5s
b2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAgICBHUFJSZWcgaW1wb3J0SlND
ZWxsR1BSUmVnID0gR1BSSW5mbzo6cmVnVDA7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdU
MCBmb3Igc2xvdyBwYXRoIGJlbG93LgorICAgIEFTU0VSVCghd2FzbUNDLm1fY2FsbGVlU2F2ZVJl
Z2lzdGVycy5nZXQoaW1wb3J0SlNDZWxsR1BSUmVnKSk7CisKKyAgICBtYXRlcmlhbGl6ZUltcG9y
dEpTQ2VsbChqaXQsIGltcG9ydEluZGV4LCBpbXBvcnRKU0NlbGxHUFJSZWcpOworCisgICAgaml0
LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
KyAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLCBj
YWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOworICAgIGpp
dC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSwgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAgICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdh
c20gcmV0dXJuIHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4OAorCisgICAgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9zLmFkZCgpOworICAgIGNhbGxMaW5r
SW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdpbigpLCBpbXBvcnRK
U0NlbGxHUFJSZWcpOworICAgIEpJVDo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAg
SklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlKDApOworICAgIEpJVDo6SnVtcCBz
bG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBpbXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ssIGluaXRpYWxSaWdodFZhbHVlKTsK
KyAgICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBKSVQ6Okp1bXAg
ZG9uZSA9IGppdC5qdW1wKCk7CisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAvLyBDYWxs
ZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsg
aW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMi4KKyAgICBKSVQ6OkNhbGwgc2xvd0NhbGwgPSBqaXQu
bmVhckNhbGwoKTsKKyAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKKworICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5
cGUoKSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgLy8gRGlzY2FyZC4KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGdW5jOgorICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgLy8gRm9yIHRo
ZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5cGVzIGluIHRoZWly
IHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZhbGlkYXRpb24gZXJy
b3IuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSTY0OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgfQorICAgIGNhc2UgSTMyOiB7CisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93UGF0aDsKKworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVy
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIGpp
dC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAg
ICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0
LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4
Y2VwdGlvbigqdm0pKTsKKworICAgICAgICBpbnQzMl90ICgqY29udmVydFRvSTMyKShFeGVjU3Rh
dGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJf
dCB7IAorICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIHJldHVybiB2
LnRvSW50MzIoZXhlYyk7CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBjb252ZXJ0VG9JMzIpOworICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmpp
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEYzMjogeworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5i
cmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVn
aXN0ZXJzKTsKKyAgICAgICAgYXV0byBpc0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpT
VmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJz
KTsKKyAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRv
UHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkp
OworCisgICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5tb3ZlKEpJVDo6
VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwor
ICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBqaXQuY29udmVydERv
dWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVl
RlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90QU51
bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwo
KTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlv
bigqdm0pKTsKKworICAgICAgICBmbG9hdCAoKmNvbnZlcnRUb0YzMikoRXhlY1N0YXRlKiwgSlNW
YWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGZsb2F0IHsgCisgICAg
ICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRv
bmUubGluaygmaml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRjY0OiB7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVt
YmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05v
dEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElm
Tm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVU
YWdSZWdpc3RlcnMpOworICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2ln
bkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOworCisgICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7CisgICAgICAgIGpp
dC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIpOworICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBk
b25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7
CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNl
cHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAg
ICAgIGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7IAorICAgICAgICAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICAgICAgICAgIHJldHVybiB2LnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjY0KTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgfQorCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJl
dCgpOworCisgICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1wdHkoKSkgeworICAgICAgICBleGNl
cHRpb25DaGVja3MubGluaygmaml0KTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0
YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKKyAgICAgICAgICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgIH07CisKKyAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGRvVW53aW5kaW5nKTsKKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAoVU5MSUtFTFkocGF0Y2hCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5k
aW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fs
bCwgRnVuY3Rpb25QdHIodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0
dXJuTG9jYXRpb24ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSk7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yo
dGFyZ2V0VG9DaGVjaykpOworICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlciA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCk7CisgICAgY2FsbExpbmtJ
bmZvLT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1cm5Mb2NhdGlvbiwgaG90UGF0aEJlZ2luLCBo
b3RQYXRoT3RoZXIpOworCisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgi
V2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWdu
YXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOworfQorCit2b2lkKiB3YXNtVG9KU0V4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFdhc206OkV4Y2VwdGlvblR5cGUgdHlwZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKK3sKKyAgICBWTSogdm0gPSBpbnN0YW5jZS0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHsK
KyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVj
dCgpOworCisgICAgICAgIEpTT2JqZWN0KiBlcnJvcjsKKyAgICAgICAgaWYgKHR5cGUgPT0gRXhj
ZXB0aW9uVHlwZTo6U3RhY2tPdmVyZmxvdykKKyAgICAgICAgICAgIGVycm9yID0gY3JlYXRlU3Rh
Y2tPdmVyZmxvd0Vycm9yKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVycm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGV4ZWMsICp2
bSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNt
OjplcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKKyAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOworICAgIH0KKworICAgIGdlbmVyaWNVbndp
bmQodm0sIGV4ZWMpOworICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAg
QVNTRVJUKCEhdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAvLyBGSVhNRTogV2Ug
Y291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlzIGEgdG90YWwgaGFjaywgYnV0
IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24pCisg
ICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4g
KFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgIC8vIHRoaXMgc2luY2UgaXQg
aXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRo
ZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNh
bGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZwor
ICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxk
IHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGV4
ZWMpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGluc3Rh
bmNlLT53ZWJBc3NlbWJseVRvSlNDYWxsZWUoKSk7CisgICAgcmV0dXJuIHZtLT50YXJnZXRNYWNo
aW5lUENGb3JUaHJvdzsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dhc21Ub0pTLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNt
VG9KUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMjRhYTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCkBA
IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiV2FzbUVtYmVkZGVyLmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9F
eHBlY3RlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ2FsbExpbmtJbmZvOworY2xh
c3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKKworRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0qLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2Fs
bExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKKwordm9p
ZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IDBkMjc3NjUuLmM1ODVm
MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhl
IG1lbW9yeSB3ZSB0aGluayB3ZSBhcmUgZ29pbmcgdG8gcnVuIHdpdGggbWF0Y2hlcyB0aGUgb25l
IHdlIGV4cGVjdC4KLSAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5jb2RlQmxv
Y2soKS0+aXNTYWZlVG9SdW4od2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5tZW1vcnkoKSkpOwor
ICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCkuY29kZUJsb2Nr
KCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5KCktPm1lbW9y
eSgpLm1vZGUoKSkpOwogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGRpc2Fs
bG93ZWQgSTY0IHVzZS4KIApAQCAtODIsMTEgKzgyLDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBUcmFjZVNjb3BlIHRyYWNlU2NvcGUoV2ViQXNzZW1ibHlFeGVjdXRlU3RhcnQsIFdlYkFz
c2VtYmx5RXhlY3V0ZUVuZCk7CiAKICAgICBWZWN0b3I8SlNWYWx1ZT4gYm94ZWRBcmdzOwotICAg
IFdhc206OkNvbnRleHQqIHdhc21Db250ZXh0ID0gd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpOwot
ICAgIC8vIFdoZW4gd2UgZG9uJ3QgdXNlIGZhc3QgVExTIHRvIHN0b3JlIHRoZSBjb250ZXh0LCB0
aGUganMKLSAgICAvLyBlbnRyeSB3cmFwcGVyIGV4cGVjdHMgdGhlIFdhc21Db250ZXh0KiBhcyB0
aGUgZmlyc3QgYXJndW1lbnQuCi0gICAgaWYgKCFXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgp
KQotICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKHdhc21Db250ZXh0KTsKKyAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlID0gd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpOworICAgIC8v
IFdoZW4gd2UgZG9uJ3QgdXNlIGZhc3QgVExTIHRvIHN0b3JlIHRoZSBjb250ZXh0LCB0aGUgSlMK
KyAgICAvLyBlbnRyeSB3cmFwcGVyIGV4cGVjdHMgdGhlIGluc3RhbmNlIGFzIHRoZSBmaXJzdCBh
cmd1bWVudC4KKyAgICBpZiAoIVdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAg
Ym94ZWRBcmdzLmFwcGVuZChpbnN0YW5jZSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4
ID0gMDsgYXJnSW5kZXggPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ0luZGV4KSB7
CiAgICAgICAgIEpTVmFsdWUgYXJnID0gZXhlYy0+YXJndW1lbnQoYXJnSW5kZXgpOwpAQCAtMTI3
LDcgKzEyNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJB
c3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICBwcm90b0NhbGxGcmFtZS5pbml0
KG51bGxwdHIsIHdhc21GdW5jdGlvbiwgZmlyc3RBcmd1bWVudCwgYXJnQ291bnQsIHJlbWFpbmlu
Z0FyZ3MpOwogCiAgICAgLy8gRklYTUUgRG8gYXdheSB3aXRoIHRoaXMgZW50aXJlIGZ1bmN0aW9u
LCBhbmQgb25seSB1c2UgdGhlIGVudHJ5cG9pbnQgZ2VuZXJhdGVkIGJ5IEIzLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDg2Ci0gICAgV2FzbTo6Q29udGV4dCog
cHJldldhc21Db250ZXh0ID0gV2FzbTo6bG9hZENvbnRleHQodm0pOworICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogcHJldkluc3RhbmNlID0gdm0ud2FzbUNvbnRleHQubG9hZCgpOwogICAgIHsK
ICAgICAgICAgLy8gV2UgZG8gdGhlIHN0YWNrIGNoZWNrIGhlcmUgZm9yIHRoZSB3cmFwcGVyIGZ1
bmN0aW9uIGJlY2F1c2Ugd2UgZG9uJ3QKICAgICAgICAgLy8gd2FudCB0byBlbWl0IGEgc3RhY2sg
Y2hlY2sgaW5zaWRlIGV2ZXJ5IHdyYXBwZXIgZnVuY3Rpb24uCkBAIC0xMzcsMjIgKzEzNywyMiBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGlmIChVTkxJS0VMWSgoc3AgPCBzdGFja1Nw
YWNlVXNlZCkgfHwgKChzcCAtIHN0YWNrU3BhY2VVc2VkKSA8IGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4odm0uc29mdFN0YWNrTGltaXQoKSkpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJv
cihleGVjKSkpOwogICAgIH0KLSAgICBXYXNtOjpzdG9yZUNvbnRleHQodm0sIHdhc21Db250ZXh0
KTsKKyAgICB2bS53YXNtQ29udGV4dC5zdG9yZShpbnN0YW5jZSwgdm0uc29mdFN0YWNrTGltaXQo
KSk7CiAgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKSk7Ci0gICAgQVNTRVJUKHdh
c21GdW5jdGlvbi0+aW5zdGFuY2UoKSA9PSBXYXNtOjpsb2FkQ29udGV4dCh2bSkpOworICAgIEFT
U0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkgPT0gdm0ud2FzbUNvbnRleHQubG9hZCgpKTsK
ICAgICBFbmNvZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKHdhc21GdW5jdGlv
bi0+anNFbnRyeXBvaW50KCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKICAgICAvLyBXZSBuZWVk
IHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGluIGEgcmVnaXN0ZXIgb3Igb24gdGhlIHN0YWNrIHNpbmNl
IGl0J3Mgc3RvcmVkIGluIFZlY3RvcjxKU1ZhbHVlPi4KICAgICAvLyBUaGlzIHByb2JhYmx5IGlz
bid0IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2UgdGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHNo
b3VsZCBrZWVwIHRoZSBpbnN0YW5jZQogICAgIC8vIGFsaXZlLiBCdXQgaXQncyBnb29kIGh5Z2ll
bmUuCi0gICAgd2FzbUNvbnRleHQtPnVzZSgpOwotICAgIGlmIChwcmV2V2FzbUNvbnRleHQgIT0g
d2FzbUNvbnRleHQpIHsKKyAgICBpbnN0YW5jZS0+dXNlKCk7CisgICAgaWYgKHByZXZJbnN0YW5j
ZSAhPSBpbnN0YW5jZSkgewogICAgICAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIHNvbWUgZXh0cmEg
c2FmZXR5IGluc3RlYWQgb2YgbGVhdmluZyBhIGNhY2hlZAogICAgICAgICAvLyB2YWx1ZSBpbiB0
aGVyZS4gSWYgd2UgZXZlciBmb3JnZXQgdG8gc2V0IHRoZSB2YWx1ZSB0byBiZSBhIHJlYWwKICAg
ICAgICAgLy8gYm91bmRzLCB0aGlzIHdpbGwgZm9yY2UgZXZlcnkgc3RhY2sgb3ZlcmZsb3cgY2hl
Y2sgdG8gaW1tZWRpYXRlbHkKICAgICAgICAgLy8gZmlyZS4KLSAgICAgICAgd2FzbUNvbnRleHQt
PnNldENhY2hlZFN0YWNrTGltaXQoYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnRwdHJfdD46Om1heCgpKSk7CisgICAgICAgIGluc3RhbmNlLT5zZXRDYWNoZWRTdGFj
a0xpbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+
OjptYXgoKSkpOwogICAgIH0KLSAgICBXYXNtOjpzdG9yZUNvbnRleHQodm0sIHByZXZXYXNtQ29u
dGV4dCk7CisgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUocHJldkluc3RhbmNlLCB2bS5zb2Z0U3Rh
Y2tMaW1pdCgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
c3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmNwcAppbmRleCBhOWQ4ZjBkLi4yZmRkNWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHAKQEAgLTMyLDEyICszMiwxNCBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1v
cnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5jbHVkZSAiV2FzbVBs
YW4uaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgog
I2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUlu
c3RhbmNlUHJvdG90eXBlLmgiCkBAIC03NSwxMCArNzcsMTAgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0
ZSogZXgKICAgICBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBl
eGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUpOworICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0
ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlLCBXYXNt
OjpJbnN0YW5jZTo6Y3JlYXRlKFJlZjxXYXNtOjpNb2R1bGU+KG1vZHVsZS0+bW9kdWxlKCkpKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIGluc3RhbmNlLT5m
aW5hbGl6ZUNyZWF0aW9uKHZtLCBleGVjLCBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVTeW5jKGlu
c3RhbmNlLT5tZW1vcnlNb2RlKCkpKTsKKyAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2
bSwgZXhlYywgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlU3luYygmdm0ud2FzbUNvbnRleHQsIGlu
c3RhbmNlLT5tZW1vcnlNb2RlKCksICZXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIsICZXYXNt
Ojp3YXNtVG9KU0V4Y2VwdGlvbikpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpbnN0YW5jZSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
Q29uc3RydWN0b3IuY3BwCmluZGV4IDY0OTg5YjUuLjg2ZjgxN2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29u
c3RydWN0b3IuY3BwCkBAIC05NiwxMyArOTYsMTggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIGV4ZWMK
ICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdh
c206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50
KTsKKyAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVj
LCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVj
dHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworCisgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5
OjpjcmVhdGUoaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwKKyAgICAgICAgWyZ2
bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAor
ICAgICAgICBbJnZtXSAoKSB7IHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpG
dWxsKTsgfSwKKyAgICAgICAgWyZ2bSwganNNZW1vcnldIChXYXNtOjpQYWdlQ291bnQgb2xkUGFn
ZUNvdW50LCBXYXNtOjpQYWdlQ291bnQgbmV3UGFnZUNvdW50KSB7IGpzTWVtb3J5LT5ncm93U3Vj
Y2Vzc0NhbGxiYWNrKHZtLCBvbGRQYWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7IH0pOwogICAgIGlm
ICghbWVtb3J5KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpKTsKIAotICAg
IGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCks
IGFkb3B0UmVmKCptZW1vcnkubGVha1JlZigpKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLQorICAgIGpzTWVtb3J5LT5hZG9wdChtZW1v
cnkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c01lbW9yeSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAppbmRleCBlOTk0ZGM4Li40ZmNh
OGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1lbW9yeVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCkBAIC03Nyw4ICs3Nyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNHcm93KEV4ZWNT
dGF0ZSogZXhlYykKICAgICB1aW50MzJfdCBkZWx0YSA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKIAotICAgIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlID0gdHJ1
ZTsKLSAgICBXYXNtOjpQYWdlQ291bnQgcmVzdWx0ID0gbWVtb3J5LT5ncm93KHZtLCBleGVjLCBk
ZWx0YSwgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKKyAgICBXYXNtOjpQYWdlQ291
bnQgcmVzdWx0ID0gbWVtb3J5LT5ncm93KHZtLCBleGVjLCBkZWx0YSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihyZXN1bHQucGFnZUNvdW50KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5j
cHAKaW5kZXggOTYxMDI0ZC4uMTY2MTA2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAK
QEAgLTE2MSwxMSArMTYxLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlNb2R1bGVFeHBvcnRzKEV4ZWNTdGF0ZSogZXhlYykKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxG
dW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCks
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUo
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBleGVjLT5h
cmd1bWVudCgwKSwgc3RydWN0dXJlKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3Vy
Y2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgV1RGTW92
ZShzb3VyY2UpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE3NSwxNiArMTc2LDE2
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5
TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUs
ICJXZWJBc3NlbWJseS5Nb2R1bGUiKSk7CiB9CiAKLUpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVD
b25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBidWZmZXIs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseU1vZHVsZSogV2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgVmVjdG9yPHVp
bnQ4X3Q+JiYgYnVmZmVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNv
dXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGF1dG8qIHN0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5l
d1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxl
U3RydWN0dXJlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwog
CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
cmVhdGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5j
KHZtLCBXVEZNb3ZlKHNvdXJjZSkpKTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlU3lu
Yygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoYnVmZmVyKSkpOwogfQogCiBXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRo
aXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKaW5kZXggNjAyNWM5OC4uMTNhY2Ez
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaApAQCAtMzAsOCArMzAsMTEgQEAKICNpbmNsdWRl
ICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTV2ViQXNzZW1ibHlN
b2R1bGU7CiBjbGFzcyBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZTsKIAogY2xhc3MgV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKQEAgLTQ0
LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIEpT
VmFsdWUgY3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYnVmZmVyLCBTdHJ1Y3R1cmUq
KTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlTW9kdWxlKEV4ZWNTdGF0
ZSosIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAppbmRleCBjYjFmZWMxLi4wYTg2NmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC05
Myw3ICs5Myw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRl
KiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgVU5VU0VEX1BBUkFNKHNj
b3BlKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+
Y29kZUJsb2NrKCk7CisgICAgV2FzbTo6Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+
aW5zdGFuY2UoKS5jb2RlQmxvY2soKTsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
biYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAg
ICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBtb2R1bGUtPmV4cG9ydFN5bWJvbFRh
YmxlKCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICAg
ICAgICAgIC8vIFJldHVybiBUb0pTVmFsdWUodikuCiAgICAgICAgICAgICBzd2l0Y2ggKGdsb2Jh
bC50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgICAgICBl
eHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEkzMkdsb2JhbChleHAua2luZElu
ZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2Ut
Pmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChleHAua2luZEluZGV4KSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STY0OgpAQCAtMTYwLDExICsxNjAs
MTEgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMs
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFs
dWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkRjMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+aW5zdGFuY2Uo
KS5sb2FkRjMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRW
YWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxvYWRGNjRHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwor
ICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5j
ZSgpLmxvYWRGNjRHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE3LDEyICsyMTcsMTIgQEAgSlNWYWx1ZSBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gbV9pbnN0YW5jZS0+bW9k
dWxlKCk7Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbnN0YW5j
ZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVs
ZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOworICAgIFdhc206Ok1v
ZHVsZSYgbW9kdWxlID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5tb2R1bGUoKTsKKyAgICBXYXNt
OjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuY29kZUJsb2Nr
KCk7CisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
ID0gbW9kdWxlLm1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0
YWJsZSA9IG1faW5zdGFuY2UtPnRhYmxlKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8V2FzbTo6U2Vn
bWVudDo6UHRyPiYgZGF0YSA9IG1faW5zdGFuY2UtPm1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlv
bigpLmRhdGE7CisgICAgY29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4mIGRhdGEgPSBt
b2R1bGVJbmZvcm1hdGlvbi5kYXRhOwogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGpzTWVtb3J5
ID0gbV9pbnN0YW5jZS0+bWVtb3J5KCk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEpTVmFsdWU+IGV4
Y2VwdGlvbjsKQEAgLTIzOSw3ICsyMzksNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXggPSBlbGVtZW50Lm9mZnNldC5pc0ds
b2JhbEltcG9ydCgpCi0gICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9p
bnN0YW5jZS0+bG9hZEkzMkdsb2JhbChlbGVtZW50Lm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgp
KSkKKyAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5p
bnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoZWxlbWVudC5vZmZzZXQuZ2xvYmFsSW1wb3J0SW5kZXgo
KSkpCiAgICAgICAgICAgICAgICAgOiBlbGVtZW50Lm9mZnNldC5jb25zdFZhbHVlKCk7CiAKICAg
ICAgICAgICAgIGZuKGVsZW1lbnQsIHRhYmxlSW5kZXgpOwpAQCAtMjU1LDcgKzI1NSw3IEBAIEpT
VmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykK
IAogICAgICAgICBmb3IgKGNvbnN0IFdhc206OlNlZ21lbnQ6OlB0ciYgc2VnbWVudCA6IGRhdGEp
IHsKICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IHNlZ21lbnQtPm9mZnNldC5pc0dsb2Jh
bEltcG9ydCgpCi0gICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9pbnN0
YW5jZS0+bG9hZEkzMkdsb2JhbChzZWdtZW50LT5vZmZzZXQuZ2xvYmFsSW1wb3J0SW5kZXgoKSkp
CisgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9pbnN0YW5jZS0+aW5z
dGFuY2UoKS5sb2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgp
KSkKICAgICAgICAgICAgICAgICA6IHNlZ21lbnQtPm9mZnNldC5jb25zdFZhbHVlKCk7CiAKICAg
ICAgICAgICAgIGZuKG1lbW9yeSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQsIG9mZnNldCk7CkBAIC0y
OTMsNyArMjkzLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUo
RXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCiAg
ICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gZWxlbWVudC5mdW5jdGlvbkluZGlj
ZXNbaV07Ci0gICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXgpOworICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBt
b2R1bGUuc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgp
OwogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1w
b3J0Q291bnQoKSkgewogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9
IGpzQ2FzdDxKU09iamVjdCo+KG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5k
ZXgpKTsKICAgICAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwg
ZnVuY3Rpb25JbXBvcnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKaW5kZXggZTlhNjM0YS4uMWZiOTQzYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5
cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJv
dG90eXBlLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVk
LmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVy
cy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKQEAgLTQwLDYgKzQxLDcgQEAKICNpbmNsdWRlICJQcm9taXNlRGVm
ZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJXYXNt
QkJRUGxhbi5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0
LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgpAQCAtOTQsNyArOTYsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4
ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOwogICAgIGVsc2UgewotICAgICAgICBX
YXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmModm0sIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hh
cmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGdsb2JhbE9iamVj
dF0gKFZNJiB2bSwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRh
YmxlIHsKKyAgICAgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29udGV4
dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJh
Y2tUeXBlPihbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlk
YXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICAgICAgdm0ucHJvbWlzZURl
ZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGdsb2JhbE9i
amVjdCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCAmdm1dICgpIG11dGFibGUgewogICAgICAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAg
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKQEAg
LTEzNSw3ICsxMzcsNyBAQCBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVwogewogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBw
b3RlbnRpYWxseSByZWNvbXBpbGluZyBhIG1vZHVsZS4gV2UgZmlyc3QgZ2F0aGVyIGFsbCB0aGUg
aW1wb3J0L21lbW9yeSBpbmZvcm1hdGlvbiBwcmlvciB0byBjb21waWxpbmcgY29kZS4KLSAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpj
cmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZt
LCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCksIFdhc206Okluc3RhbmNlOjpjcmVhdGUo
UmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSkpKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpKTsKIAogICAgIFZlY3Rv
cjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwpAQCAtMTQzLDEzICsxNDUsMTMgQEAgc3Rh
dGljIHZvaWQgaW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlLCBKU1cKICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0Nl
bGw+KHZtLCBpbnN0YW5jZSkpOwogICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5k
aW5nUHJvbWlzZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOwogICAgIC8vIE5vdGU6
IFRoaXMgY29tcGxldGlvbiB0YXNrIG1heSBvciBtYXkgbm90IGdldCBjYWxsZWQgaW1tZWRpYXRl
bHkuCi0gICAgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlQXN5bmModm0sIGluc3RhbmNlLT5tZW1v
cnlNb2RlKCksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q29kZUJsb2NrOjpDYWxsYmFja1R5cGU+
KFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZF0gKFZNJiB2bSwgUmVmPFdh
c206OkNvZGVCbG9jaz4mJiByZWZDb2RlQmxvY2spIG11dGFibGUgeworICAgIG1vZHVsZS0+bW9k
dWxlKCkuY29tcGlsZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2UtPm1lbW9yeU1vZGUo
KSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDb2RlQmxvY2s6OkNhbGxiYWNrVHlwZT4oW3Byb21p
c2UsIGluc3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kLCAmdm1dIChSZWY8V2FzbTo6Q29kZUJs
b2NrPiYmIHJlZkNvZGVCbG9jaykgbXV0YWJsZSB7CiAgICAgICAgIFJlZlB0cjxXYXNtOjpDb2Rl
QmxvY2s+IGNvZGVCbG9jayA9IFdURk1vdmUocmVmQ29kZUJsb2NrKTsKICAgICAgICAgdm0ucHJv
bWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGlu
c3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kLCAmdm0sIGNvZGVCbG9jayA9IFdURk1vdmUoY29k
ZUJsb2NrKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBpbnN0
YW5jZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgICAgIHJlc29sdmUo
dm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGNvZGVCbG9jay5yZWxlYXNlTm9u
TnVsbCgpLCByZXNvbHZlS2luZCk7CiAgICAgICAgIH0pOwotICAgIH0pKTsKKyAgICB9KSwgJldh
c206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Ondhc21Ub0pTRXhjZXB0aW9uKTsKIH0K
IAogc3RhdGljIHZvaWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNWYWx1ZSBidWZmZXIsIEpTT2JqZWN0
KiBpbXBvcnRPYmplY3QpCkBAIC0xNjUsNyArMTY3LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZUFu
ZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCog
cHIKICAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZh
bHVlKHZtLCBleGVjLCBidWZmZXIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJl
amVjdChleGVjLCBzY29wZSwgcHJvbWlzZSkpOwogCi0gICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0
ZUFzeW5jKHZtLCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxl
OjpDYWxsYmFja1R5cGU+KFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdF0gKFZN
JiB2bSwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsK
KyAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3Zl
KHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtw
cm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgJnZtXSAoV2FzbTo6TW9kdWxlOjpW
YWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgdm0ucHJvbWlzZURl
ZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGltcG9ydE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksICZ2bV0gKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CiAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKQEAgLTIxMyw3ICsyMTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgc2l6ZV90IGJ5
dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgQkJRUGxhbiBwbGFuKCZ2
bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFu
Ojpkb250RmluYWxpemUoKSk7CisgICAgQkJRUGxhbiBwbGFuKCZ2bS53YXNtQ29udGV4dCwgYmFz
ZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250
RmluYWxpemUoKSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4gT09N
IGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDExODY1ZjUuLjJjNWJjNzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcApAQCAtOTAsOCArOTAsMTUgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKEV4
ZWNTdGF0ZSogZXhlYykKICAgICAgICAgfQogICAgIH0KIAorICAgIFJlZlB0cjxXYXNtOjpUYWJs
ZT4gd2FzbVRhYmxlID0gV2FzbTo6VGFibGU6OmNyZWF0ZShpbml0aWFsLCBtYXhpbXVtKTsKKyAg
ICBpZiAoIXdhc21UYWJsZSkgeworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY291bGRuJ3QgY3JlYXRlIFRhYmxlIikpKSk7CisgICAgfQor
CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIGluaXRpYWwsIG1heGltdW0pKTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUo
ZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0
cnVjdHVyZSgpLCB3YXNtVGFibGUucmVsZWFzZU5vbk51bGwoKSkpOwogfQogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0
ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAppbmRleCAwMjFjNjE4Li42OGU5NTlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCkBAIC02Myw3ICs2Myw3IEBAIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwg
SlNHbG9iYWxPCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzKHZt
LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6aW5mbygpKSwgIldlIHNob3VsZCBuZXZlciBk
b3VibGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7CiAgICAgU3RyaW5nIG5hbWUgPSAiIjsK
ICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNh
bGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rp
b25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3Ry
dWN0dXJlKCksIHsgc2lnbmF0dXJlSW5kZXgsIGluc3RhbmNlLT5jb2RlQmxvY2soKS0+d2FzbVRv
SnNDYWxsU3R1YkZvckltcG9ydChpbXBvcnRJbmRleCkgfSk7CisgICAgV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24o
dm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
blN0cnVjdHVyZSgpLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIGlu
c3RhbmNlLT53YXNtQ29kZUJsb2NrKCkud2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydChpbXBvcnRJ
bmRleCkgfSApOwogICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwg
bmFtZSwgZnVuY3Rpb24sIGluc3RhbmNlKTsKICAgICByZXR1cm4gcmVzdWx0OwotLSAKMi45LjMK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321800</attachid>
            <date>2017-09-25 23:28:28 -0700</date>
            <delta_ts>2017-09-26 09:07:21 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>429281</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA0YmUxNTY4NjgyZmE5YjllYjc1NmI5MGJmZjU3NGQxZjkyNDg3ZDMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NDcgKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDEyICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NyAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgICAgICAgICB8ICAyMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaCAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaCAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCAgICAgICAgICAgfCAxMjYgKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAgICAgICAgfCAgNzYgKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCAgICAgICAgICB8ICA1OSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oICAgICAgICAgICAgfCAg
IDUgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCAgICAgICAg
fCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oICAgICAg
ICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAg
ICAgICAgICB8IDIyNyArKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oICAgICAgICAgICB8ICA0OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgfCAgIDAKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4g
anN9L0pTV2ViQXNzZW1ibHkuaCAgIHwgIDUwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAgICAgICAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTE4ICsrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDg1ICsrLQogLi4uL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgfCAgNzYgKystCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggICB8ICAxMyAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAg
MzIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAg
fCAgMjUgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAgIHwgIDc1ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmggfCAgNDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCAgICAgICAgIHwgNjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8
ICAxOSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAg
ICAgfCAgIDUgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAg
ICAgICAgIHwgIDIyICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgICB8ICAxNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVj
dG9yLmNwcCAgICAgICAgfCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAgICAgICAgIHwgICAyICstCiAxMDkgZmlsZXMgY2hhbmdlZCwgMzA3MyBpbnNl
cnRpb25zKCspLCAxNzQ0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1v
ZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS97
ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAwJSkKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggKDYyJSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCgpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA4MmVm
MTZkLi42YjY3NjdlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE3LTA5LTI1ICBKRiBCYXN0aWVuICA8amZi
YXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbm8gVk0gLyBKUyB2ZXJz
aW9uIG9mIGV2ZXJ5dGhpbmcgYnV0IEluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc0NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAtIEV4Y2VlZGluZyBtYXggb24gbWVtb3J5IGdyb3d0aCBu
b3cgcmV0dXJucyBhIHJhbmdlIGVycm9yIGFzIHBlcgorICAgICAgICBzcGVjLiBUaGlzIGlzIGEg
KHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00KKyAgICAg
ICAgZXJyb3IuIFVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyB0ZXN0LgorCisgICAgICAgICogd2Fz
bS9qcy1hcGkvbWVtb3J5LWdyb3cuanM6CisgICAgICAgIChhc3NlcnRFcSk6CisgICAgICAgICog
d2FzbS9qcy1hcGkvdGFibGUuanM6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKwogMjAxNy0w
OS0yMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBG
aXggaW5maW5pdGUgbG9vcGluZyB0ZXN0MjYyIHRlc3QKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvbWVtb3J5LWdyb3cuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93
LmpzCmluZGV4IGMyODAwMWUuLjdmZTZiMTMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5q
cwpAQCAtNDUsNyArNDUsNyBAQCBmb3IgKGxldCBidWZmZXIgb2YgYnVmZmVycykgewogICAgIGFz
c2VydEVxKGJ1ZmZlci5ieXRlTGVuZ3RoLCAyKjY0KjEwMjQpOwogCiAgICAgLy8gVGhpcyBzaG91
bGRuJ3QgbmV1dGVyIHRoZSBidWZmZXIgc2luY2UgaXQgZmFpbHMuCi0gICAgYXNzZXJ0VGhyb3dz
KCgpID0+IG1lbW9yeS5ncm93KDEwMDApLCBFcnJvciwgIk91dCBvZiBtZW1vcnkiKTsgCisgICAg
YXNzZXJ0VGhyb3dzKCgpID0+IG1lbW9yeS5ncm93KDEwMDApLCBSYW5nZUVycm9yLCAiV2ViQXNz
ZW1ibHkuTWVtb3J5Lmdyb3cgd291bGQgZXhjZWVkIHRoZSBtZW1vcnkncyBkZWNsYXJlZCBtYXhp
bXVtIHNpemUiKTsgCiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQqMTAyNCk7
CiAgICAgYXNzZXJ0RXEobWVtb3J5LmJ1ZmZlciwgYnVmZmVyKTsKIH0KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpz
CmluZGV4IDcyZDQ5NWIuLjQxMzI4NGQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkv
dGFibGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcwpAQCAtMTY2LDggKzE2
Niw4IEBAIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW1wb3J0KHRhYmxlRGVzY3JpcHRpb24sIG1l
c3NhZ2UpIHsKICAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDI5IC8gMzI6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9m
IDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5NjcyOTQg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIiwKICAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDM3IC8gNDM6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5Njcy
OTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMioqMzEsIGVsZW1lbnQ6ICJhbnlm
dW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyNCAvIDI3OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIGlu
dmFsaWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDMyIC8gMzg6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0
ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNv
dW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIg
LyAzODogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmln
LCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgIF07CiAKICAgICBmb3IgKGNvbnN0
IGQgb2YgYmFkRGVzY3JpcHRpb25zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAyMWQy
ZDZjLi43ODkwOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NTAgQEAK
KzIwMTctMDktMjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAg
IFdlYkFzc2VtYmx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFu
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUg
d2hpY2ggd2UgaGFkCisgICAgICAgIGludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hp
Y2ggcmVwcmVzZW50IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKworICAgICAgICBpbXBsZW1lbnRh
dGlvbiBvYmplY3RzLiBUaGlzIHNwZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0
b3dhcmRzCisgICAgICAgIGFsbG93aW5nIEpTQydzIFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91
dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5nCisgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mgbm90ICp0aGUqIHRoaW5nCisg
ICAgICAgIHlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3IEZJWE1FIGlk
ZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KKyAgICAgICAgY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgorCisgICAgICAgIEkgd2VudCBh
Ym91dCB0aGlzIGNoYW5nZSBpbiB0aGUgc2ltcGxlc3Qgd2F5IHBvc3NpYmxlOiBncmVwIHRoZQor
ICAgICAgICBKYXZhU2NyaXB0Q29yZS93YXNtIGRpcmVjdG9yeSBmb3IgIkpTW15DX10iIGFzIHdl
bGwgYXMgIlZNIiBhbmQgZXhjbHVkZSB0aGUgL2pzLworICAgICAgICBzdWItZGlyZWN0b3J5ICh3
aGljaCBjb250YWlucyB0aGUgSlMgaW1wbGVtZW50YXRpb24gb2YgV2ViQXNzZW1ibHkpLgorCisg
ICAgICAgIE5vbmUgb2YgdGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgbmVlZCBmb3IgYSBKSVQgZW50
aXRsZW1lbnQgdG8gYmUgYWJsZSB0byB1c2UKKyAgICAgICAgV2ViQXNzZW1ibHkuIFdlIGRvbid0
IGhhdmUgYW4gaW50ZXJwcmV0ZXIsIHRoZSBwcm9jZXNzIHRoZXJlZm9yZSBzdGlsbCBuZWVkcyB0
bworICAgICAgICBiZSBhbGxvd2VkIHRvIEpJVCB0byB1c2UgdGhlc2UgcHVyZS1DKysgQVBJcy4K
KworICAgICAgICBJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKKworICAgICAgICAgIC0gUmVt
b3ZlIFZNIGZyb20gUGxhbiBhbmQgYXNzb2NpYXRlZCBwbGFjZXMuIEl0IGNhbiBqdXN0IGxpdmUg
YXMgYSBjYXB0dXJlIGluCisgICAgICAgICAgICB0aGUgY2FsbGJhY2sgbGFtYmRhIGlmIGl0J3Mg
bmVlZGVkLgorICAgICAgICAgIC0gV2FzbTo6TWVtb3J5IHNob3VsZG4ndCByZXF1aXJlIGEgVk0u
IEl0IHdhcyBvbmx5IHVzZWQgdG8gYXNrIHRoZSBHQyB0bworICAgICAgICAgICAgY29sbGVjdC4g
V2Ugbm93IGluc3RlYWQgcGFzcyB0d28gbGFtYmRhcyBhdCBjb25zdHJ1Y3Rpb24gdGltZSBmb3Ig
dGhpcworICAgICAgICAgICAgcHVycG9zZTogb25lIHRvIG5vdGlmeSBvZiBtZW1vcnkgcHJlc3N1
cmUsIGFuZCB0aGUgb3RoZXIgdG8gYXNrIGZvcgorICAgICAgICAgICAgc3luY3Job25vdXMgbWVt
b3J5IHJlY2xhbWF0aW9uLiBUaGlzIGFsbG93cyB3aG9ldmVyIGNyZWF0ZXMgdGhlIG1lbW9yeSB0
bworICAgICAgICAgICAgZGljdGF0ZSBob3cgdG8gcmVhY3QgdG8gYm90aCB0aGVzZSBjYXNlcywg
YW5kIGZvciBhIEpTIGVtYmVkZGluZyB0aGF0J3MgdG8KKyAgICAgICAgICAgIGNhbGwgdGhlIEdD
IChhc3luYyBvciBzeW5jLCByZXNwZWN0aXZlbHkpLgorICAgICAgICAgIC0gTW92ZSBncm93IGxv
Z2ljIGZyb20gSlNXZWJBc3NlbWJseU1lbW9yeSB0byBXYXNtOjpNZW1vcnk6Omdyb3cuIFVzZSBF
eHBlY3RlZAorICAgICAgICAgICAgdGhlcmUsIHdpdGggYW4gZW51bSBjbGFzcyBmb3IgZmFpbHVy
ZSB0eXBlcy4KKyAgICAgICAgICAtIEV4Y2VlZGluZyBtYXggb24gbWVtb3J5IGdyb3d0aCBub3cg
cmV0dXJucyBhIHJhbmdlIGVycm9yIGFzIHBlciBzcGVjLiBUaGlzCisgICAgICAgICAgICBpcyBh
ICh2ZXJ5IG1pbm9yKSBicmVha2luZyBjaGFuZ2U6IGl0IHVzZWQgdG8gdGhyb3cgT09NIGVycm9y
LiBVcGRhdGUgdGhlCisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRlc3QuCisgICAgICAgICAg
LSBXaGVuIGdlbmVyYXRpbmcgdGhlIGdyb3dfbWVtb3J5IG9wY29kZSwgbm8gbmVlZCB0byBnZXQg
dGhlIFZNLiBJbnN0ZWFkLAorICAgICAgICAgICAgcmVhY2ggZGlyZWN0bHkgZm9yIFdhc206Ok1l
bW9yeSBhbmQgZ3JvdyBpdC4KKyAgICAgICAgICAtIEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cg
Y2FuIG5vdyBhbHdheXMgdGhyb3cgb24gZmFpbHVyZSwgYmVjYXVzZSBpdCdzIG9ubHkKKyAgICAg
ICAgICAgIGV2ZXIgY2FsbGVkIGZyb20gSlMgKG5vdCBmcm9tIGdyb3dfbWVtb3J5IGFzIGJlZm9y
ZSkuCisgICAgICAgICAgLSBXYXNtOjpNZW1vcnkgbm93IHRha2VzIGEgY2FsbGJhY2sgZm9yIHN1
Y2Nlc3NmdWwgZ3Jvd3RoLiBUaGlzIGFsbG93cyBKUworICAgICAgICAgICAgd3JhcHBlcnMgdG8g
cmVnaXN0ZXIgdGhlbXNlbHZlcyB3aGVuIGdyb3d0aCBzdWNjZWVkcyB3aXRob3V0IFdhc206Ok1l
bW9yeQorICAgICAgICAgICAga25vd25pbmcgYW55dGhpbmcgYWJvdXQgSlMuIEl0J2xsIGFsc28g
YWxsb3cgY3JlYXRpbmcgYSBsaXN0IG9mIGNhbGxiYWNrcworICAgICAgICAgICAgZm9yIHdoZW4g
d2UgYWRkIHRocmVhZCBzdXBwb3J0ICh3ZSdsbCB3YW50IHRvIG5vdGlmeSBtYW55IHdyYXBwZXJz
LCBhbGwKKyAgICAgICAgICAgIHVuZGVyIGEgbG9jaykuCisgICAgICAgICAgLSBXYXNtOjpNZW1v
cnkgaXMgbm93IGJhY2sgdG8gYmVpbmcgdGhlIHNvdXJjZSBvZiB0cnV0aCBhYm91dCBhZGRyZXNz
IC8gc2l6ZSwKKyAgICAgICAgICAgIHVzZWQgZGlyZWN0bHkgYnkgZ2VuZXJhdGVkIGNvZGUgaW5z
dGVhZCBvZiBKU1dlYkFzc2VtYmx5TWVtb3J5LgorICAgICAgICAgIC0gTW92ZSB3YXNtVG9KUyBm
cm9tIHRoZSBnZW5lcmFsIFdhc21CaW5kaW5nIGhlYWRlciB0byBpdHMgb3duIGhlYWRlciB1bmRl
cgorICAgICAgICAgICAgd2FzbS9qcy4gSXQncyBvbmx5IHVzZWQgYnkgd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmNwcCwgYW5kIHVzZXMgVk0sCisgICAgICAgICAgICBhbmQgdGhlcmVm
b3JlIGlzbid0IGdlbmVyYWwgV2ViQXNzZW1ibHkuCisgICAgICAgICAgLSBNYWtlIFdhc206OkNv
bnRleHQgYW4gYWN0dWFsIHR5cGUgKGp1c3QgYSBzdHJ1Y3QgaG9sZGluZyBhCisgICAgICAgICAg
ICBKU1dlYkFzc2VtbHlJbnN0YW5jZSBmb3Igbm93KSBpbnN0ZWFkIG9mIGFuIGFsaWFzIGZvciB0
aGF0LiBOb3RhYmx5IHRoaXMKKyAgICAgICAgICAgIGRvZXNuJ3QgYWRkIGFueXRoaW5nIHRvIHRo
ZSBDb250ZXh0IGFuZCBkb2Vzbid0IGNoYW5nZSB3aGF0IGFjdHVhbGx5IGdldHMKKyAgICAgICAg
ICAgIHBhc3NlZCBhcm91bmQgaW4gSklUIGNvZGUgKGZhc3QgVExTIG9yIHJlZ2lzdGVycykgYmVj
YXVzZSB0aGVzZSBjaGFuZ2VzCisgICAgICAgICAgICBwb3RlbnRpYWxseSBpbXBhY3QgcGVyZm9y
bWFuY2UuIFRoZSBlbnRpcmUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBpcyB0bworICAgICAgICAg
ICAgYWxsb3cgcGFzc2luZyBXYXNtOjpDb250ZXh0IGFyb3VuZCB3aXRob3V0IGhhdmluZyB0byBr
bm93IGFib3V0IFZNLiBTaW5jZSBWTQorICAgICAgICAgICAgY29udGFpbnMgYSBXYXNtOjpDb250
ZXh0IHRoZSBKUyBlbWJlZGRpbmcgaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUsIGJ1dCB3aXRoCisg
ICAgICAgICAgICB0aGlzIHNldHVwIGEgbm9uLUpTIGVtYmVkZGluZyBpcyBtdWNoIGJldHRlciBv
ZmYuCisgICAgICAgICAgLSBNb3ZlIEpTV2ViQXNzZW1ibHkgaW50byB0aGUgSlMgZm9sZGVyLgor
ICAgICAgICAgIC0gT01HUGxhbjogdXNlIFdhc206OkNvZGVCbG9jayBkaXJlY3RseSBpbnN0ZWFk
IG9mIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suCisgICAgICAgICAgLSB3YXNtLT5KUyBzdHVicyBh
cmUgbm93IG9uIFdhc206OkNvZGVCbG9jaydzIHRhaWwgYXMgcmF3IHBvaW50ZXJzLCBpbnN0ZWFk
IG9mCisgICAgICAgICAgICBiZWluZyBvbiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLCBhbmQgYXJl
IG5vdyBjYWxsZWQgd2FzbS0+RW1iZWRkZXIKKyAgICAgICAgICAgIHN0dWJzLiBUaGUgb3duZWQg
cmVmZXJlbmNlIGlzIHN0aWxsIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBpcyBzdGls
bAorICAgICAgICAgICAgY2FsbGVkIHdhc20tPkpTIHN0dWIuIFRoaXMgbW92ZSBtZWFucyB0aGF0
IHRoZSBlbWJlZGRlciBtdXN0LCBhZnRlciBjcmVhdGluZworICAgICAgICAgICAgYSBXYXNtOjpD
b2RlQmxvY2ssIHNvbWVob3cgY3JlYXRlIHRoZSBzdHVicyB0byBjYWxsIGJhY2sgaW50byB0aGUK
KyAgICAgICAgICAgIGVtYmVkZGVyLiBUaGlzIGlzbid0IGFkZGluZyBhbnkgaW5kaXJlY3Rpb24g
dG8gdGhlIGdlbmVyYXRlZCBjb2RlIGJlY2F1c2UKKyAgICAgICAgICAgIHRoZSBCMyBJUiBnZW5l
cmF0b3Igbm93IHJlYWNoZXMgZm9yIFdhc206OkNvZGVCbG9jayBpbnN0ZWFkIG9mCisgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLgorICAgICAgICAgIC0gTW92ZSBtb3JlIENvZGVC
bG9jayB0aGluZ3MuIENvbXBpbGF0aW9uIGNvbXBsZXRpb24gaXMgbm93IG1hcmtlZCBieSBpdHMg
b3duCisgICAgICAgICAgICBhdG9taWM8Ym9vbD4gZmxhZyBpbnN0ZWFkIG9mIGEgbnVsbHB0ciBw
bGFuOiB0aGF0IHJlcXVpcmVkIHVzaW5nIGEgbG9jaywgYW5kCisgICAgICAgICAgICB3YXMgY2F1
c2luZyBhIGRlYWRsb2NrIGluIHN0YWNrLXRyYWNlLmpzIGJlY2F1c2UgYmVmb3JlIG15IGNoYW5n
ZXMKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sgZGlkIGl0cyBvd24gY29tcGxl
dGlvbiBjaGVja2luZyBzZXBhcmF0ZWx5IGZyb20KKyAgICAgICAgICAgIFdhc206OkNvZGVCbG9j
aywgd2l0aG91dCBnZXR0aW5nIHRoZSBsb2NrLiBOb3cgdGhhdCBldmVyeXRoaW5nIHBvaW50cyB0
bworICAgICAgICAgICAgV2FzbTo6Q29kZUJsb2NrIGFuZCB0aGVyZSdzIG5vIGNhY2hlZCBjb21w
bGV0aW9uIG1hcmtlciwgdGhlIGxvY2sgd2FzIGJlaW5nCisgICAgICAgICAgICBhY3F1aXJlZCBp
biBhIHNhbml0eS1jaGVjayBhc3NlcnRpb24uCisgICAgICAgICAgLSBFbWJlZGRlciAtPiBXYXNt
IHdyYXBwZXJzIGFyZSBub3cgZ2VuZXJhdGVkIHRocm91Z2ggYSBmdW5jdGlvbiB0aGF0J3MgcGFz
c2VkCisgICAgICAgICAgICBpbiBhdCBjb21waWxhdGlvbiB0aW1lLCBpbnN0ZWFkIG9mIGJlaW5n
IGhhcmQtY29kZWQgYXMgYSBKUyAtPiBXYXNtIHdyYXBwZXIuCisgICAgICAgICAgLSBXYXNtTWVt
b3J5IGRvZW5zJ3QgbmVlZCB0byBrbm93IGFib3V0IGZhdWx0IGhhbmRsaW5nIHRodW5rcy4gT25s
eSB0aGUgSVIKKyAgICAgICAgICAgIGdlbmVyYXRvciBzaG91bGQga25vdywgYW5kIHNob3VsZCBt
YWtlIHN1cmUgdGhhdCB0aGUgZXhjZXB0aW9uIHRocm93aW5nCisgICAgICAgICAgICB0aHVuayBp
cyBnZW5lcmF0ZWQgaWYgYW55IG1lbW9yeSBpcyBwcmVzZW50IChub3RlOiB3aXRoIHNpZ25hbCBo
YW5kbGluZyBub3QKKyAgICAgICAgICAgIGFsbCBvZiB0aGVtIGdlbmVyYXRlIGFuIGV4Y2VwdGlv
biBjaGVjaykuCisgICAgICAgICAgLSBNYWtlIGV4Y2VwdGlvbiB0aHJvd2luZyBwbHVnZ2FibGU6
IGluc3RlYWQgb2YgaGF2aW5nIGEgaGFyZC1jb2RlZAorICAgICAgICAgICAgSlMtc3BlY2lmaWMg
bGFtYmRhIHdlIG5vdyBoYXZlIGEgcmVndWxhciBDKysgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZy
b20gSklUCisgICAgICAgICAgICBjb2RlIHdoZW4gYSBXZWJBc3NlbWJseSBleGNlcHRpb24gaXMg
dGhyb3duLiBUaGlzIGFsbG93cyBhbnkgZW1iZWRkZXIgdG8gZ2V0CisgICAgICAgICAgICBjYWxs
ZWQgYXMgdGhleSB3aXNoLiBGb3Igbm93IGEgcHJvY2VzcyBjYW4gb25seSBoYXZlIGEgc2luZ2xl
IG9mIHRoZXNlCisgICAgICAgICAgICBmdW5jdGlvbnMgKGkuZS4gb25seSBvbmUgZW1iZWRkZXIg
cGVyIHByb2Nlc3MpIGJlY2F1c2UgdGhlIHRyYXAgaGFuZGxlciBpcyBhCisgICAgICAgICAgICBz
aW5nbGV0b24uIFRoYXQgY2FuIGJlIGZpeGVkIGluIGluICMxNzc0NzUuCisgICAgICAgICAgLSBD
cmVhdGUgV2FzbUVtYmVkZGVyLmggd2hlcmUgYWxsIGVtYmVkZGVyIHBsdWdnaW5nIHdpbGwgbGl2
ZS4KKyAgICAgICAgICAtIFNwbGl0IHVwIEpTV2ViQXNzZW1ibHlUYWJsZSBpbnRvIFdhc206OlRh
YmxlIHdoaWNoIGlzCisgICAgICAgICAgICByZWZjb3VudGVkLiBKU1dlYkFzc2VtYmx5VGFibGUg
bm93IG9ubHkgY29udGFpbnMgdGhlIEpTIGZ1bmN0aW9ucyBpbiB0aGUKKyAgICAgICAgICAgIHRh
YmxlLCBhbmQgV2FzbTo6VGFibGUgaXMgd2hhdCdzIHVzZWQgYnkgdGhlIEpJVCBjb2RlIHRvIGxv
b2t1cCB3aGVyZSB0bworICAgICAgICAgICAgY2FsbCBhbmQgZG8gdGhlIGluc3RhbmNlIGNoZWNr
IChmb3IgY29udGV4dCBzd2l0Y2gpLiBOb3RlIHRoYXQgdGhpcyBjcmVhdGVzCisgICAgICAgICAg
ICBhbiBleHRyYSBhbGxvY2F0aW9uIGZvciBhbGwgdGhlIGluc3RhbmNlcyBpbiBXYXNtOjpUYWJs
ZSwgYW5kIGluIGV4Y2hhbmdlCisgICAgICAgICAgICByZW1vdmVzIGFuIGluZGlyZWN0aW9uIGlu
IEpJVCBjb2RlIGJlY2F1c2UgdGhlIGluc3RhbmNlIHVzZWQgdG8gYmUgb2J0YWluZWQKKyAgICAg
ICAgICAgIG9mZiBvZiB0aGUgSlMgZnVuY3Rpb24uIEFsc28gbm90ZSB0aGF0IGl0J3MgdGhlIGVt
YmVkZGVyIHRoYW4ga2VlcHMgdGhlCisgICAgICAgICAgICBpbnN0YW5jZXMgYWxpdmUsIG5vdCBX
YXNtOjpUYWJsZSAod2hpY2ggaG9sZHMgYSBkdW1iIHBvaW50ZXIgdG8gdGhlCisgICAgICAgICAg
ICBpbnN0YW5jZSksIGJlY2F1c2UgZG9pbmcgb3RoZXJ3aXNlIHdvdWxkIGNhdXNlIHJlZmVyZW5j
ZSBjeWNsZXMuCisgICAgICAgICAgLSBBZGQgV2FzbUluc3RhbmNlLiBJdCBkb2Vzbid0IGRvIG11
Y2ggZm9yIG5vdywgb3ducyBnbG9iYWxzLgorICAgICAgICAgIC0gSlNXZWJBc3NlbWJseSBpbnN0
YW5jZSBub3cgZG9lc24ndCBqdXN0IGNvbnRhaW4gdGhlIGltcG9ydGVkIGZ1bmN0aW9ucyBhcwor
ICAgICAgICAgICAgSlNPYmplY3RzLCBpdCBhbHNvIGhhcyB0aGUgY29ycmVzcG9uZGluZyBpbXBv
cnQncyBpbnN0YW5jZSBhbmQgd2FzbQorICAgICAgICAgICAgZW50cnlwb2ludC4gVGhpcyB0cmlw
bGVzIHRoZSBzcGFjZSBhbGxvY2F0ZWQgcGVyIGluc3RhbmNlJ3MgaW1wb3J0ZWQKKyAgICAgICAg
ICAgIGZ1bmN0aW9uLCBidXQgdGhlcmUgc2hvdWxkbid0IGJlIHRoYXQgbWFueSBpbXBvcnRzLiBU
aGlzIGhhcyB0d28gdXBzaWRlczogaXQKKyAgICAgICAgICAgIGNyZWF0ZXMgc21hbGxlciBhbmQg
ZmFzdGVyIGNvZGUsIGFuZCBtYWtlcyBpcyBlYXNpZXIgdG8gZGlzYXNzb2NpYXRlCisgICAgICAg
ICAgICBlbWJlZGRlci1zcGVjaWZpYyB0aGluZ3MgZnJvbSBlbWJlZGRlci1uZXV0cmFsIHRoaW5n
cy4gVGhlIHNtYWxsIC8gZmFzdGVyCisgICAgICAgICAgICB3aW4gaXMgaW4gdHdvIHBsYWNlczog
QjMgSVIgZ2VuZXJhdG9yIG9ubHkgbmVlZHMgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbiBmb3IKKyAg
ICAgICAgICAgIHRoZSBjYWxsIG9wY29kZSAod2hlbiB0aGUgY2FsbGVkIGluZGV4IGlzIGFuIGlt
cG9ydCkgdG8ga25vdyB3aGV0aGVyIHRoZQorICAgICAgICAgICAgaW1wb3J0IGlzIHdhc20tPndh
c20gb3Igd2FzbS0+ZW1iZWRkZXIgKHRoaXMgaXNuJ3Qga25vd24gYXQgY29tcGlsZS10aW1lCisg
ICAgICAgICAgICBiZWNhdXNlIGl0J3MgZGVwZW5kZW50IG9uIHRoZSBpbXBvcnQgb2JqZWN0KSwg
dGhpcyBpcyBub3cgZG9uZSBieSBzZWVpbmcgaWYKKyAgICAgICAgICAgIHRoYXQgaW1wb3J0IGZ1
bmN0aW9uIGhhcyBhbiBhc3NvY2lhdGVkIHRhcmdldCBpbnN0YW5jZSAob25seSB3YXNtLT53YXNt
CisgICAgICAgICAgICBkb2VzKTsgdGhlIG90aGVyIHBsYWNlIGlzIHdhc21CaW5kaW5nIHdoaWNo
IHVzZXMgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbiB0bworICAgICAgICAgICAgZmlndXJlIG91dCB0
aGUgd2FzbS0+d2FzbSB0YXJnZXQgaW5zdGFuY2UsIGFuZCB0aGVuIGdldHMKKyAgICAgICAgICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24g
dG8gZG8gYSB0YWlsCisgICAgICAgICAgICBjYWxsLiBUaGUgZGlzYXNzb2NpYXRpb24gY29tZXMg
YmVjYXVzZSB0aGUgdGFyZ2V0IGluc3RhbmNlIGNhbiBiZQorICAgICAgICAgICAgV2FzbTo6SW5z
dGFuY2Ugb25jZSB3ZSBjaGFuZ2Ugd2hhdCB0aGUgQ29udGV4dCBpcywgYW5kCisgICAgICAgICAg
ICBXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiBpcyBhbHJlYWR5IGVtYmVkZGVyLWluZGVwZW5k
ZW50LiBBcyBhIG5leHQgc3RlcCBJCisgICAgICAgICAgICBjYW4gbW92ZSB0aGlzIHRhaWwgYWxs
b2NhdGlvbiBmcm9tIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSB0byBXYXNtOjpJbnN0YW5jZSwKKyAg
ICAgICAgICAgIGFuZCBsZWF2ZSBpbXBvcnRGdW5jdGlvbiBpbiBhcyBhbiBvcGFxdWUgcG9pbnRl
ciB3aGljaCBpcyBlbWJlZGRlci1zcGVjaWZpYywKKyAgICAgICAgICAgIGFuZCBpbiBKUyB3aWxs
IHJlbWFpbiBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+LgorICAgICAgICAgIC0gUmVuYW1lIFZNRW50
cnlGcmFtZSB0byBFbnRyeUZyYW1lLCBhbmQgaW4gbWFueSBwbGFjZXMgcGFzcyBhIHBvaW50ZXIg
dG8gaXQKKyAgICAgICAgICAgIGFyb3VuZCBpbnN0ZWFkIG9mIFZNLiBUaGlzIGlzIGEgZmlyc3Qg
c3RlcCBpbiBhbGxvd2luZyBlbnRyeSBmcmFtZXMgd2hpY2gKKyAgICAgICAgICAgIGFyZW4ndCBz
dG9yZWQgb24gVk0sIGJ1dCB3aGljaCBhcmUgaW5zdGVhZCBzdG9yZWQgaW4gYW4gZW1iZWRkZXIt
c3BlY2lmaWMKKyAgICAgICAgICAgIGxvY2F0aW9uLiBUaGF0IGNoYW5nZSB3b24ndCByZWFsbHkg
YWZmZWN0IEpTIGV4Y2VwdCB0aHJvdWdoIGNvZGUgY2h1cm4sIGJ1dAorICAgICAgICAgICAgd2ls
bCBhbGxvdyBXZWJBc3NlbWJseSB0byB1c2Ugc29tZSBtYWNoaW5lcnkgaW4gYSBnZW5lcmljIG1h
bm5lciB3aXRob3V0CisgICAgICAgICAgICBoYXZpbmcgYSBWTS4KKworICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIp
OgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnJldHVybkV2
ZW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnVud2luZEV2ZW50KToKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpOgorICAgICAgICAo
SlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGludGVycHJl
dGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6d2FzbUF3YXJlTGV4
aWNhbEdsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVyRnJhbWUp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxlckZyYW1lKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjYWxs
ZXJGcmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2FsbGVyRnJhbWVPckVu
dHJ5RnJhbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnVuc2FmZUNhbGxlckZy
YW1lT3JFbnRyeUZyYW1lIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9GcmFtZVRyYWNl
cnMuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyOjpOYXRpdmVDYWxsRnJh
bWVUcmFjZXIpOgorICAgICAgICAoSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9y
ZTo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAgICAoSlNDOjpOYXRp
dmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZTo6fk5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhS
ZXN0b3JlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OlVud2luZEZ1bmN0b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpV
bndpbmRGdW5jdG9yOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
ciBjb25zdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp1bndpbmQpOgorICAgICAgICAq
IGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRv
cjo6U3RhY2tWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpnb3RvTmV4dEZy
YW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToK
KyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcCBjb25zdCk6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRv
cjo6RnJhbWU6OmNhbGxlcklzRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvVk1FbnRyeVJlY29yZC5oOgorICAgICAgICAoSlNDOjpWTUVudHJ5UmVjb3JkOjpwcmV2VG9w
RW50cnlGcmFtZSk6CisgICAgICAgIChKU0M6OlZNRW50cnlSZWNvcmQ6OnVuc2FmZVByZXZUb3BF
bnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6RW50cnlGcmFtZTo6dm1FbnRyeVJlY29yZE9mZnNl
dCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bG9hZFdhc21Db250ZXh0
SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bG9hZFdhc21Db250
ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJs
eUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzRnJvbUZyYW1l
T3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6Cisg
ICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53
aW5kKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKiBqaXQvSklU
T3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChK
U0M6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Om5hdGl2ZUZvckdlbmVyYXRvcik6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1
bmN0aW9uRHVtcENhbGxGcmFtZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAq
IGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6dm1FbnRyeVJlY29yZCk6Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAg
IChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAg
IChKU0M6OkZyYW1lV2Fsa2VyOjpGcmFtZVdhbGtlcik6CisgICAgICAgIChKU0M6OkZyYW1lV2Fs
a2VyOjphZHZhbmNlVG9QYXJlbnRGcmFtZSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMpOgorICAgICAgICAqIHJ1bnRpbWUvVGhy
b3dTY29wZS5jcHA6CisgICAgICAgIChKU0M6OlRocm93U2NvcGU6On5UaHJvd1Njb3BlKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAg
KEpTQzo6Vk06On5WTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpW
TTo6dG9wRW50cnlGcmFtZU9mZnNldCk6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoK
KyAgICAgICAgKEpTQzo6aXNTYW5lRnJhbWUpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjp0cnlJ
bnN0YWxsVHJhcEJyZWFrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6aW52YWxpZGF0
ZUNvZGVCbG9ja3NPblN0YWNrKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0
SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2Vt
Ymx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRH
cm93TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVu
dE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhbGwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6QkJRUGxhbjo6QkJRUGxhbik6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBs
YW46OmNvbXBpbGVGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21w
bGV0ZSk6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5oOgorICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW5JbmxpbmVzLmg6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmluaXRpYWxp
emVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRvV2FzbSk6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5oOgorICAg
ICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVC
bG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpDb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyk6CisgICAgICAg
IChKU0M6Oldhc206OkNvZGVCbG9jazo6c2V0Q29tcGlsYXRpb25GaW5pc2hlZCk6CisgICAgICAg
ICogd2FzbS9XYXNtQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6
b2Zmc2V0T2ZJbXBvcnRTdHVicyk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6YWxs
b2NhdGlvblNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmltcG9ydFdhc21U
b0VtYmVkZGVyU3R1Yik6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6b2Zmc2V0T2ZJ
bXBvcnRXYXNtVG9FbWJlZGRlclN0dWIpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6
Ondhc21Ub0pTQ2FsbFN0dWJGb3JJbXBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxv
Y2s6OmNvbXBpbGF0aW9uRmluaXNoZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6
OmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpDb2RlQmxvY2s6Ondhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29udGV4dC5jcHA6CisgICAgICAgIChKU0M6Oldh
c206OkNvbnRleHQ6OnVzZUZhc3RUTFMpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250ZXh0Ojps
b2FkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6c3RvcmUpOgorICAgICAg
ICAqIHdhc20vV2FzbUNvbnRleHQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21FbWJlZGRlci5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oLgorICAg
ICAgICAqIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHA6CisgICAgICAgICogd2FzbS9X
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmg6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6Cisg
ICAgICAgICogd2FzbS9XYXNtSW5zdGFuY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmguCisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp+
SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZXh0cmFNZW1vcnlBbGxv
Y2F0ZWQgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6bW9kdWxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjptZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6bG9hZEkz
Mkdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpsb2FkSTY0R2xv
YmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmxvYWRGMzJHbG9iYWwg
Y29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6bG9hZEY2NEdsb2JhbCBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRHbG9iYWwpOgorICAgICAgICAo
SlNDOjpXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNhY2hlZFN0YWNrTGltaXQgY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpJbnN0YW5jZTo6c2V0Q2FjaGVkU3RhY2tMaW1pdCk6CisgICAgICAgICogd2Fz
bS9XYXNtTWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeTo6fk1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6Cisg
ICAgICAgICogd2FzbS9XYXNtTWVtb3J5Lmg6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
b2Zmc2V0T2ZNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6
ZSk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCk6CisgICAgICAgIChKU0M6Oldhc206
OlBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKToKKyAgICAgICAgKiB3YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQaW5uZWRSZWdp
c3RlckluZm86OnRvU2F2ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVZhbGlkYXRpb25DYWxsYmFjayk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlOjp2YWxpZGF0ZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpnZXRPckNy
ZWF0ZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y29tcGlsZVN5bmMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmNvbXBpbGVBc3luYyk6CisgICAgICAgICog
d2FzbS9XYXNtTW9kdWxlLmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKToKKyAg
ICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxh
bjo6T01HUGxhbik6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OnJ1bkZvckluZGV4KToK
KyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtUGFnZUNv
dW50Lmg6CisgICAgICAgIChKU0M6Oldhc206OlBhZ2VDb3VudDo6aXNWYWxpZCBjb25zdCk6Cisg
ICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlBs
YW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW5Db21wbGV0aW9uVGFza3MpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjphZGRDb21wbGV0aW9uVGFzayk6CisgICAgICAgIChKU0M6
Oldhc206OlBsYW46OnRyeVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QpOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZG9udEZpbmFsaXpl
KToKKyAgICAgICAgKiB3YXNtL1dhc21TaWduYXR1cmUuY3BwOgorICAgICAgICAqIHdhc20vV2Fz
bVNpZ25hdHVyZS5oOgorICAgICAgICAqIHdhc20vV2FzbVRhYmxlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJs
ZTo6flRhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OlRhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VGFibGU6Omdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Y2xl
YXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpzZXRGdW5jdGlvbik6Cisg
ICAgICAgICogd2FzbS9XYXNtVGFibGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmguCisgICAgICAgIChKU0M6Oldhc206OlRh
YmxlOjptYXhpbXVtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OnNpemUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6VGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6
OmlzVmFsaWRTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVua3MuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjp0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpXYXNtOjp0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpXYXNtOjpUaHVua3M6OnNldFRocm93V2FzbUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6
Oldhc206OlRodW5rczo6dGhyb3dXYXNtRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21U
aHVua3MuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OldvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JDb250ZXh0KToKKyAgICAgICAgKiB3YXNt
L1dhc21Xb3JrbGlzdC5oOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3
YXNtL2pzL0pTVG9XYXNtLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmguCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwLgor
ICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseS5oOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oLgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6aW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3ZWJBc3Nl
bWJseVRvSlNDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNl
dE1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZU
YWlsKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbXBvcnRGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFy
Z2V0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mV2FzbUVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjppbnRlcm5hbE1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6d2FzbUNvZGVCbG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6b2Zmc2V0T2ZXYXNtVGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZkdsb2JhbHMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mV2FzbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjYWNoZWRTdGFja0xpbWl0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpzZXRDYWNoZWRTdGFja0xpbWl0KToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp3YXNtTW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUlu
c3RhbmNlOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6bW9kdWxlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjphZG9wdCk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1l
bW9yeTo6Z3Jvd1N1Y2Nlc3NDYWxsYmFjayk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TWVtb3J5Lmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseVRhYmxlOjpncm93KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpn
ZXRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xlYXJGdW5j
dGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24pOgor
ICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmg6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFi
bGU6OnNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnRhYmxl
KToKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDogQ29waWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpt
YXRlcmlhbGl6ZUltcG9ydEpTQ2VsbCk6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub0pTKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20v
anMvV2FzbVRvSlMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuaC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3cpOgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHdhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpldmFsdWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5Q29tcGlsZUZ1bmMpOgorICAgICAgICAoSlNDOjpp
bnN0YW50aWF0ZSk6CisgICAgICAgIChKU0M6OmNvbXBpbGVBbmRJbnN0YW50aWF0ZSk6CisgICAg
ICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlUYWJsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpj
cmVhdGUpOgorCiAyMDE3LTA5LTI1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBBdHRyaWJ1dGUgYW4gZW51bSBjbGFzcwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1NzYyZjY4Li45ZWU1N2VmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTA4Miw3ICsxMDgyLDcgQEAKIAkJNzlDNEIxNUUxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVDMUJBMjE1
OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlDRkM2RjAx
QzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5Q0ZDNkVGMUMzM0IxMDAwMEM3NjhFQSAvKiBMTElu
dFBDUmFuZ2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzlENUNENUIxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU5MUMxMTA2
QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlEQUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdh
c21FeGNlcHRpb25UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OURBRTI3OTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAq
LzsgfTsKKwkJNzlEQUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURBRTI3OTFF
MDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMg
LyogSGFzT3duUHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3OUVFMEMwMDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4
NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyog
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NjAsNyArMTQ2MCw2IEBACiAJCUFEMkZDQzIwMURCNTlD
QjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MxNDFEQjU5QzU5MDBC
M0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oICovOyB9OwogCQlBRDJG
Q0MyMTFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzE1MURC
NTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oICovOyB9Owog
CQlBRDJGQ0MyRDFEQjgzOEZEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzI3MURCODM4
QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oICovOyB9OwotCQlBRDJGQ0MzMTFE
QjgzRDQ5MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2Vi
QXNzZW1ibHkuaCAqLzsgfTsKIAkJQUQ0MTJCMzQxRTdCMkU5RTAwOEFGMTU3IC8qIFdhc21Db250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQx
MkIzMjFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDQyNTI1MTFFNUQwRTE0MDA5RDJBOTcg
LyogRnVsbENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFENDI1MjUwMUU1RDBERUIwMDlEMkE5NyAvKiBGdWxsQ29kZU9yaWdpbi5oICov
OyB9OwogCQlBRDQ5MzdDNDFEREJFNjE0MDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkzN0My
MUREQkU2MEEwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDY4LDYgKzE0NjcsMTMgQEAK
IAkJQUQ0OTM3RDQxREREMjdERTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkzN0NBMURERDI3
MzQwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggKi87IH07CiAJCUFENEIxREZBMURG
MjQ0RTIwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0QjFERjgxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5k
aW5nLmggKi87IH07CiAJCUFENUI0MTZGMUVCQUZCNzcwMDhFRkE0MyAvKiBXYXNtTmFtZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QjQxNkUxRUJB
RkI2NTAwOEVGQTQzIC8qIFdhc21OYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2REQxRjY4OEI2NTAwMEJDQUFGIC8qIFdhc21FbWJl
ZGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1
QzM2REMxRjY4OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FB
RiAvKiBXYXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFENUMzNkRGMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFNjFG
NjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1
QzM2RUExRjc1QUQ2QTAwMEJDQUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDhERDZDRjFGNjcwODlGMDAwNEVCNTIgLyogSlNU
b1dhc20uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlBRDVDMzZFQjFGNzVBRDczMDAwQkNBQUYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREMDlBRjMxRjYyNDgyRTAwMTMx
M0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlBRDVDMzZFQzFGNzVBRDdDMDAwQkNBQUYgLyogV2FzbVRvSlMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUVFMUY1
RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkVGMUY3QTI2M0EwMDBCQ0FBRiAvKiBXYXNtTWVt
b3J5TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ3NDM4QzAxRTA0NTdBNDAw
RkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ4
NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3
RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQUQ4RkYzOTgxRUI1QkRCMjAwODdGRjgyIC8qIFdhc21JbmRleE9y
TmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4
RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MTU2LDkgKzQxNjIsMjUgQEAK
IAkJQUQyRkNDMTUxREI1OUM1OTAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUu
bHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzI2MURC
ODM4QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVByb3RvdHlwZS5jcHA7IHBhdGggPSBq
cy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFEMkZDQzI3MURCODM4QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVByb3RvdHlwZS5oOyBwYXRo
ID0ganMvV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQUQyRkNDMkUxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJBc3NlbWJseS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViQXNzZW1ibHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMzIxREM0MDQ1MzAwQjNFNzM2
IC8qIFdhc21Gb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FzbUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTQ3MUY0
QkE3ODYwMDY2OTkxMiAvKiBXQUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FCYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTRBMUY0REU2OEMwMDY2OTkxMiAvKiBXQUlu
c3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBSW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQUQzRjFFNEIxRjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0
QzFGNERFNjhDMDA2Njk5MTIgLyogV0FNZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FNZW1vcnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTIxRjRGNEFFNTAwNjY5OTEy
IC8qIFdBTWVtb3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTWVtb3J5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTMxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTW9k
dWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTQxRjRGNEFFNTAwNjY5OTEyIC8qIFdBSW5zdGFuY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0FJbnN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFEM0YxRTU1MUY0RjRBRTUwMDY2OTkxMiAvKiBXQVRhYmxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdBVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
RDNGMUU2NDFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0FFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNjUxRjUw
RTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBRXhj
ZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNjgxRjU0N0NC
NjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
QU1lbW9yeURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNG
MUU2OTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdBTWVtb3J5RGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
RDNGMUU2QTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0FJbXBvcnRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NkIxRjU0N0NCODAwNjY5OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdBVGFibGVEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0Yx
RTZDMUY1NDdDQjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXQUltcG9ydE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFE
M0YxRTZEMUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXQVRhYmxlRGVzY3JpcHRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFEM0YxRTcwMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdBRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NzExRjU0QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0FGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENDEyQjMxMUU3
QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXYXNtQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFENDEyQjMyMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBRDQxMkIzNTFFN0I1N0MwMDA4QUYxNTcgLyogQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlSWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQxNzMsMTUgKzQxOTUsMjggQEAKIAkJQUQ0QjFERjcxREYyNDRENzAwNzFBRTMyIC8qIFdh
c21CaW5kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21C
aW5kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0QjFERjgxREYyNDRE
NzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21CaW5kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENUI0MTZF
MUVCQUZCNjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXYXNtTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZE
QzFGNjg4QjVGMDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21F
bWJlZGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZERTFGNjk5RUI2
MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21JbnN0
YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRGMUY2OTlFQjYw
MDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUluc3RhbmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAv
KiBXYXNtVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21U
YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21NZW1vcnlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUFENUMzNkYwMUY3QTI2QkYwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21TaWduYXR1cmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2Fz
bVNpZ25hdHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtU2lnbmF0
dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEODZBOTNEMUFBNEQ4N0MwMDJG
RTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtHQ01hcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ4
REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9XYXNtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTVG9X
YXNtLmg7IHBhdGggPSBqcy9KU1RvV2FzbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDhERDZEMDFGNjcwOEEzMDAwNEVCNTIgLyogSlNUb1dhc20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gSlNUb1dhc20uY3BwOyBwYXRoID0ganMvSlNUb1dhc20uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JO
YW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21JbmRleE9yTmFtZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIg
LyogV2FzbUluZGV4T3JOYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21JbmRleE9yTmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
OUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDsgcGF0
aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBhZ2VDb3VudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEQkM1NEQyMURGOEVBMDAwMDVCRjczOCAvKiBXZWJB
c3NlbWJseVRvSlNDYWxsZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEQkM1NEQzMURGOEVBMDAw
MDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJs
eVRvSlNDYWxsZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRUUxRjVG
NjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdhc21Ub0pTLmg7IHBh
dGggPSBqcy9XYXNtVG9KUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREQwOUFF
RjFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2Fz
bVRvSlMuY3BwOyBwYXRoID0ganMvV2FzbVRvSlMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBREQwOUFGMjFGNjI0ODI5MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5LmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1i
bHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREQwOUFGMzFGNjI0ODJFMDAx
MzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Lmg7
IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAvKiBX
YXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDE5MSw2ICs0MjI2LDggQEAKIAkJQURFODAyOTYxRTA4RjFDOTAw
NThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmNw
cDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTcxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2Vt
Ymx5TGlua0Vycm9yUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxp
bmtFcnJvclByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5
RDFFMDhGMjI2MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJv
ckNvbnN0cnVjdG9yLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREZDMzBGNzFGNDdBN0I4MDA2
NDUxRDMgLyogV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXNzZW1ibHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQURGQzMwRjkxRjQ3QThDMDAwNjQ1MUQzIC8qIFdB
TW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUI1OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9u
U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1
Y3Rpb25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU5Rjg5MzgxODkx
QURCNTAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAv
KiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU2NDUsNiArNTY4MiwyNiBAQAogCQkJCTg2RjNFRUI2MTY4NTVBNUIwMDc3QjkyQSAvKiBPYmpj
UnVudGltZUV4dHJhcy5oICovLAogCQkJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFx
dWVKU1N0cmluZy5jcHAgKi8sCiAJCQkJRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1
ZUpTU3RyaW5nLmggKi8sCisJCQkJQUQzRjFFNDcxRjRCQTc4NjAwNjY5OTEyIC8qIFdBQmFzZS5o
ICovLAorCQkJCUFEM0YxRTY1MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5jcHAgKi8s
CisJCQkJQUQzRjFFNjQxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmggKi8sCisJCQkJ
QUQzRjFFNzExRjU0QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uY3BwICovLAorCQkJCUFEM0Yx
RTcwMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmggKi8sCisJCQkJQUQzRjFFNkMxRjU0
N0NCODAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmNwcCAqLywKKwkJCQlBRDNGMUU2QTFGNTQ3
Q0I2MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuaCAqLywKKwkJCQlBRDNGMUU1NDFGNEY0QUU1
MDA2Njk5MTIgLyogV0FJbnN0YW5jZS5jcHAgKi8sCisJCQkJQUQzRjFFNEExRjRERTY4QzAwNjY5
OTEyIC8qIFdBSW5zdGFuY2UuaCAqLywKKwkJCQlBRDNGMUU1MjFGNEY0QUU1MDA2Njk5MTIgLyog
V0FNZW1vcnkuY3BwICovLAorCQkJCUFEM0YxRTRDMUY0REU2OEMwMDY2OTkxMiAvKiBXQU1lbW9y
eS5oICovLAorCQkJCUFEM0YxRTY4MUY1NDdDQjYwMDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0
b3IuY3BwICovLAorCQkJCUFEM0YxRTY5MUY1NDdDQjYwMDY2OTkxMiAvKiBXQU1lbW9yeURlc2Ny
aXB0b3IuaCAqLywKKwkJCQlBRDNGMUU1MzFGNEY0QUU1MDA2Njk5MTIgLyogV0FNb2R1bGUuY3Bw
ICovLAorCQkJCUFERkMzMEY5MUY0N0E4QzAwMDY0NTFEMyAvKiBXQU1vZHVsZS5oICovLAorCQkJ
CUFEM0YxRTU1MUY0RjRBRTUwMDY2OTkxMiAvKiBXQVRhYmxlLmNwcCAqLywKKwkJCQlBRDNGMUU0
QjFGNERFNjhDMDA2Njk5MTIgLyogV0FUYWJsZS5oICovLAorCQkJCUFEM0YxRTZEMUY1NDdDQjgw
MDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5jcHAgKi8sCisJCQkJQUQzRjFFNkIxRjU0N0NC
ODAwNjY5OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9yLmggKi8sCisJCQkJQURGQzMwRjcxRjQ3QTdC
ODAwNjQ1MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8sCiAJCQkJNURFM0QwRjQwREQ4RERGQjAwNDY4
NzE0IC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBBUEk7CkBA
IC01OTc5LDggKzYwMzYsNiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
IAkJCQlBRDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8sCi0JCQkJQUQyRkNDMkUxREI4
MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuY3BwICovLAotCQkJCUFEMkZDQzJGMURCODM5
RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmggKi8sCiAJCQkJNTNGNDBFOEUxRDU5MDI4MjAw
OTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmNwcCAqLywKIAkJCQk1M0Y0MEU5MjFENUE0QUIz
MDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4
MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICovLApAQCAtNTk5Niw2ICs2MDUxLDcgQEAKIAkJ
CQk1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICovLAogCQkJCUFE
NDEyQjMxMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5jcHAgKi8sCiAJCQkJQUQ0MTJC
MzIxRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi8sCisJCQkJQUQ1QzM2REMxRjY4
OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovLAogCQkJCTc5REFFMjc5MUUwM0M4MjIw
MEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovLAogCQkJCTUzODFCOTM2MUU2MEU5NjYw
MDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLywKIAkJCQk1MzgxQjkzODFF
NjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oICovLApAQCAtNjAwNCw2
ICs2MDYwLDggQEAKIAkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9u
UGFyc2VyLmggKi8sCiAJCQkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9y
TmFtZS5jcHAgKi8sCiAJCQkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9y
TmFtZS5oICovLAorCQkJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2Uu
Y3BwICovLAorCQkJCUFENUMzNkRGMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAq
LywKIAkJCQlBRDAwNjU5RDFFQ0FDN0ZFMDAwQ0E5MjYgLyogV2FzbUxpbWl0cy5oICovLAogCQkJ
CTUzRTlFMEE5MUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuY3BwICovLAog
CQkJCTUzRTlFMEFBMUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuaCAqLywK
QEAgLTYwMTEsNiArNjA2OSw4IEBACiAJCQkJNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdh
c21NZW1vcnkuaCAqLywKIAkJCQk3OUI3NTk3MTFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9y
eUluZm9ybWF0aW9uLmNwcCAqLywKIAkJCQk3OUI3NTk3MjFERkE0QzYwMDA1MjE3NEMgLyogV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmggKi8sCisJCQkJQUQ1QzM2RjAxRjdBMjZCRjAwMEJDQUFGIC8q
IFdhc21NZW1vcnlNb2RlLmNwcCAqLywKKwkJCQlBRDVDMzZFRTFGN0EyNjI5MDAwQkNBQUYgLyog
V2FzbU1lbW9yeU1vZGUuaCAqLywKIAkJCQk3OTAwODEzNjFFOTVBOEVDMDA1MkQ3Q0QgLyogV2Fz
bU1vZHVsZS5jcHAgKi8sCiAJCQkJNzkwMDgxMzcxRTk1QThFQzAwNTJEN0NEIC8qIFdhc21Nb2R1
bGUuaCAqLywKIAkJCQk1M0U3NzdFMTFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmNwcCAqLywKQEAgLTYwMzIsNiArNjA5Miw4IEBACiAJCQkJNTNGNDBFODQxRDU4Rjk3
NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFENzQzOEJFMUUwNDU3OTIwMEZE
MEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBD
MkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAv
KiBXYXNtVGFibGUuY3BwICovLAorCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5j
cHAgKi8sCiAJCQkJNTI1MEQyRDAxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywK
IAkJCQk1M0U5RTBBRTFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggKi8sCkBA
IC03NjMyLDYgKzc2OTQsMTAgQEAKIAkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBRDhERDZEMDFG
NjcwOEEzMDAwNEVCNTIgLyogSlNUb1dhc20uY3BwICovLAorCQkJCUFEOERENkNGMUY2NzA4OUYw
MDA0RUI1MiAvKiBKU1RvV2FzbS5oICovLAorCQkJCUFERDA5QUYyMUY2MjQ4MjkwMDEzMTNDMiAv
KiBKU1dlYkFzc2VtYmx5LmNwcCAqLywKKwkJCQlBREQwOUFGMzFGNjI0ODJFMDAxMzEzQzIgLyog
SlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLywKIAkJCQlBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUg
LyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovLAogCQkJCTc5RUZENDgxMUVCQzA0NUMwMEYz
REZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwICovLApAQCAtNzY1MSw2
ICs3NzE3LDggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvci5oICovLAogCQkJCUFEMkZDQkFFMURCNThEQTQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5VGFibGUuY3BwICovLAogCQkJCUFEMkZDQkFGMURCNThEQTQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5VGFibGUuaCAqLywKKwkJCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyog
V2FzbVRvSlMuY3BwICovLAorCQkJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9K
Uy5oICovLAogCQkJCUFEMkZDQkIwMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3MzYg
LyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUFEMkZDQkIy
MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAg
Ki8sCkBAIC03OTI2LDYgKzc5OTQsNyBAQAogCQkJCTBGRUM4NUJCMUJFMTQ2MkYwMDgwRkY3NCAv
KiBCM0luc2VydGlvblNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREY2N0QyMUQ5
QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNkU1NDUzMUM0
NjhFNzQwMEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVtb3J5T2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdhc21Ub0pTLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjMzOEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NB
ZnRlck9wdGltaXphdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLApAQCAtODAxNiw2ICs4MDg1
LDcgQEAKIAkJCQlFMzI4REFFQjFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVj
b2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFQjFGNzVBRDczMDAwQkNBQUYg
LyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQz
NjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2
MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVycyAqLywKQEAg
LTgyMTksNiArODI4OSw3IEBACiAJCQkJMEZBNTgxQkMxNTBFOTUzMDAwQjlBMkQ5IC8qIERGR05v
ZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQ0VFMjIwRDFDRUJBRjc1MDAwQzIzOTYgLyog
REZHTnVsbEFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0U3MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBRDVDMzZERDFGNjg4QjY1MDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCOUNFOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDAxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZGMUM5
MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtODMyOSw4ICs4
NDAwLDEwIEBACiAJCQkJMEYzQUM3NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHBy
ZXNzaW9uUmFuZ2VJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFQTFGNzVBRDZBMDAw
QkNBQUYgLyogSlNUb1dhc20uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUMzQzU3MUYzM0E0NTMw
MEY1OUI2QyAvKiBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQUQ1QzM2RTIxRjY5OUVDMDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRB
cnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NDMxN0VBOUY1OTAwQUJCMjE3IC8qIEZQ
UkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNEVEQkY3MURCNUZGQzkwMERDODdBNSAvKiBG
cmFtZVRyYWNlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtODczMSw3ICs4ODA0LDYgQEAKIAkJCQlB
NzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dl
YWtTZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUFEMkZDQzMxMURCODNENDkwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUz
OUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlFRkQ0
ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTMxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuaCBpbiBIZWFkZXJzICovLApAQCAtODkyNCw2ICs4OTk2LDcgQEAKIAkJ
CQlCQ0QyMDJENjBFMTcwNzA4MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IubHV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjdDMzlGQjFDOEY2MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4
cEtleS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RTYxRjY5RUM5MTAwMEJDQUFGIC8qIFdh
c21UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUIwRTE2RjVDRDAwQjM0NDYwIC8q
IFJlZ0V4cE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkQxQzhGNjU5NTAwNDgw
MTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkM0
MEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAt
OTA5Myw2ICs5MTY2LDcgQEAKIAkJCQkwRkUwNTAyRDFBQTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zm
c2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmly
dHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJF
NTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFRjFGN0Ey
NjNBMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUy
QUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4
RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGZkNTI2YjIuLjJkMjhlZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKQEAgLTkyNiw3ICs5MjYsNiBAQCB0b29scy9KU0RvbGxhclZN
UHJvdG90eXBlLmNwcAogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKIHRvb2xzL1ZNSW5z
cGVjdG9yLmNwcAogCi13YXNtL0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAogd2FzbS9XYXNtQkJRUGxhbi5jcHAKIHdhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC05
MzQsMTIgKzkzMywxNiBAQCB3YXNtL1dhc21DYWxsZWUuY3BwCiB3YXNtL1dhc21DYWxsaW5nQ29u
dmVudGlvbi5jcHAKIHdhc20vV2FzbUNvZGVCbG9jay5jcHAKIHdhc20vV2FzbUNvbnRleHQuY3Bw
Cit3YXNtL1dhc21FbWJlZGRlci5oCiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCiB3
YXNtL1dhc21Gb3JtYXQuY3BwCiB3YXNtL1dhc21JbmRleE9yTmFtZS5jcHAKK3dhc20vV2FzbUlu
c3RhbmNlLmNwcAord2FzbS9XYXNtSW5zdGFuY2UuaAogd2FzbS9XYXNtTWFjaGluZVRocmVhZHMu
Y3BwCiB3YXNtL1dhc21NZW1vcnkuY3BwCiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAK
K3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwCiB3YXNtL1dhc21Nb2R1bGUuY3BwCiB3YXNtL1dhc21N
b2R1bGVJbmZvcm1hdGlvbi5jcHAKIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTk0OSwx
MCArOTUyLDE1IEBAIHdhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKIHdhc20vV2FzbVBhZ2VDb3Vu
dC5jcHAKIHdhc20vV2FzbVBsYW4uY3BwCiB3YXNtL1dhc21TaWduYXR1cmUuY3BwCit3YXNtL1dh
c21UYWJsZS5jcHAKK3dhc20vV2FzbVRhYmxlLmgKIHdhc20vV2FzbVRodW5rcy5jcHAKIHdhc20v
V2FzbVZhbGlkYXRlLmNwcAogd2FzbS9XYXNtV29ya2xpc3QuY3BwCiAKK3dhc20vanMvSlNUb1dh
c20uY3BwCit3YXNtL2pzL0pTVG9XYXNtLmgKK3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKIHdh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNw
cApAQCAtOTYyLDYgKzk3MCw4IEBAIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKIHdh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvci5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAord2FzbS9qcy9XYXNt
VG9KUy5jcHAKK3dhc20vanMvV2FzbVRvSlMuaAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3Rv
dHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCmluZGV4IDQy
MjgwYzUuLjZkZjQ0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIENhbGxTaXRlSW5k
ZXggQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpvcmlnaW5hbENhbGxTaXRlSW5kZXgoKSBjb25zdCB7
IHJldHVybiBzdHViCiB2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhj
ZXB0aW9uSGFuZGxlcigpCiB7CiAgICAgcmVzdG9yZVNjcmF0Y2goKTsKLSAgICBqaXQtPmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIobV92bSk7CisgICAgaml0
LT5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmbV92bS50b3BF
bnRyeUZyYW1lKTsKICAgICBpZiAobmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbigp
KSB7CiAgICAgICAgIC8vIFRvIHRoZSBKSVQgdGhhdCBwcm9kdWNlcyB0aGUgb3JpZ2luYWwgZXhj
ZXB0aW9uIGhhbmRsaW5nCiAgICAgICAgIC8vIGNhbGwgc2l0ZSwgdGhleSB3aWxsIGV4cGVjdCB0
aGUgT1NSIGV4aXQgdG8gYmUgYXJyaXZlZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAKaW5kZXggMzQ4YzY4Yy4uNzcxNmU4OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQogICoKQEAgLTY1Miw4ICs2NTIsOCBAQCB2b2lkIERlYnVnZ2VyOjpzdGVwT3V0
T2ZGdW5jdGlvbigpCiAgICAgaWYgKCFtX2lzUGF1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOwot
ICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZSA/IG1fY3VycmVudENh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKSA6IG51bGxwdHI7CisgICAgRW50
cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBtX3BhdXNl
T25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJhbWUtPmNh
bGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpIDogbnVsbHB0cjsKICAgICBtX3BhdXNlT25TdGVwT3V0
ID0gdHJ1ZTsKICAgICBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRW5hYmxlZCk7CiAgICAg
bm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygpOwpAQCAtODMxLDggKzgzMSw4IEBA
IHZvaWQgRGVidWdnZXI6OnJldHVybkV2ZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlm
ICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWTUVudHJ5RnJh
bWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50
cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IG1fdm0udG9wRW50cnlG
cmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIFJldHVybmluZyBmcm9tIGEgY2Fs
bCwgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBleHByZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2Ug
YXJlIHJldHVybmluZyB0by4KICAgICBtX3Bhc3RGaXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9
IHRydWU7CkBAIC04NTYsOCArODU2LDggQEAgdm9pZCBEZWJ1Z2dlcjo6dW53aW5kRXZlbnQoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gbV92bS50b3BW
TUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiB0b3BF
bnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwogCiAg
ICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciBhbiBleGNlcHRpb24gbG9jYXRpb24gbGlrZSBhIHN0
ZXAtb3V0LgogICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1l
KQpAQCAtODg2LDggKzg4Niw4IEBAIHZvaWQgRGVidWdnZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9w
Vk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxs
RnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9w
RW50cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAog
ICAgIC8vIFJldHVybmluZyBmcm9tIGEgcHJvZ3JhbSwgY291bGQgYmUgZXZhbCgpLCB0aGVyZSB3
YXMgYXQgbGVhc3Qgb25lIGV4cHJlc3Npb24gb24gdGhlIHN0YXRlbWVudCB3ZSBhcmUgcmV0dXJu
aW5nIHRvLgogICAgIG1fcGFzdEZpcnN0RXhwcmVzc2lvbkluU3RhdGVtZW50ID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggZDE5ZGRi
Ny4uZmY5Nzg3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMoKQogICAgIGlmICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVS
b2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAg
ICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdv
IGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CkBAIC0x
NjAsNyArMTYwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNl
cHRpb25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAg
ICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMs
IHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCA1ODNiZjk4Li4wMjFlYWFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNyw3ICsz
MTcsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbgogICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZl
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJl
Z2lzdGVyU2V0OjphbGxGUFJzKCkpOwogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IHJl
Z2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOwotICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9
IHZtRW50cnlSZWNvcmQodm0tPnRvcFZNRW50cnlGcmFtZSk7CisgICAgVk1FbnRyeVJlY29yZCog
cmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewogICAgICAgICBSZWdpc3RlckF0
T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSk7CiAgICAg
ICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoY3VycmVudEVudHJ5LnJlZygpKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDM0MzMwOGMuLmM3N2UwMDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODUsNyAr
MTg1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JFeGl0KEV4ZWNT
dGF0ZSogZXhlYykKICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpIHsK
ICAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1
c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCiAgICAgICAgICAgICAvLyBT
bywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAg
ICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigqdm0pOworICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgICAg
IGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICAgICAgaml0LmFkZFB0cigKQEAgLTUz
Nyw3ICs1MzcsNyBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0
LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0CiAgICAgaml0LmVtaXRNYXRlcmlh
bGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkKLSAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0pOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoJnZtLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgLy8gRG8gYWxsIGRhdGEg
Zm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCmluZGV4IGI3MzI3ZjMuLmVk
MGFmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTEzNSw3
ICsxMzUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihW
TSogdm0pCiAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdVbnJlYXNvbmFibGVPU1JFbnRyeUp1
bXBEZXN0aW5hdGlvbik7CiAKICAgICBvay5saW5rKCZqaXQpOwotICAgIGppdC5yZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICBqaXQu
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRv
cEVudHJ5RnJhbWUpOwogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OwogCiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKaW5kZXggZmYyY2U1Ni4uMDNmMDJmMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBjb21w
aWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZXN1bHQmIHNhZmVwb2ludFJlc3VsdCkKIAog
ICAgIC8vIEVtaXQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgogICAgICpzdGF0ZS5leGNlcHRpb25I
YW5kbGVyID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0udG9wRW50cnlGcmFtZSk7CiAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAppbmRleCA3YzAxODFkLi5hYWM4NjgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzLDcgKzE0Myw3IEBA
IHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
Y2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbCgpOwogCiAgICAgICAgICAgICBhdXRvIG5vRXhjZXB0
aW9uID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6R3JlYXRlclRoYW5PckVxdWFsLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpOwotICAg
ICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0pOworICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCZ2bS50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwog
ICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBqaXQuY2FsbCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDFjZWJjMDEuLmUw
ZTU5NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKQEAgLTI2NCw3ICsyNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlG
cmFtZSk7CiAKICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCkpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDhlMDgxZDcuLmNlZmNhZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODYsNyAr
MTg2LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgLy8gVGhlIGZpcnN0IHRoaW5n
IHdlIG5lZWQgdG8gZG8gaXMgcmVzdGFibGlzaCBvdXIgZnJhbWUgaW4gdGhlIGNhc2Ugb2YgYW4g
ZXhjZXB0aW9uLgogICAgIGlmIChleGl0LmlzR2VuZXJpY1Vud2luZEhhbmRsZXIoKSkgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOyAvLyBUaGUgZmlyc3Qg
dGltZSB3ZSBoaXQgdGhpcyBleGl0LCBsaWtlIGF0IGFsbCBvdGhlciB0aW1lcywgdGhpcyBmaWVs
ZCBzaG91bGQgYmUgbm9uLW51bGwuCi0gICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICAgICAgaml0LnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZy
YW1lKTsKICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNo
KCksIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJP
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKQEAgLTQxMiw4ICs0MTIsOCBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICBSZWdp
c3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVn
aXN0ZXJPZmZzZXRzKCk7CiAgICAgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlc1RvU2tpcCA9IFJl
Z2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFu
ZGxlcigpKSB7Ci0gICAgICAgIGppdC5sb2FkUHRyKCZ2bS0+dG9wVk1FbnRyeUZyYW1lLCBHUFJJ
bmZvOjpyZWdUMSk7Ci0gICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJ
bmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5sb2FkUHRyKCZ2bS0+dG9wRW50cnlGcmFtZSwgR1BS
SW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUklu
Zm86OnJlZ1QxKTsKICAgICB9CiAKICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJl
ZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAppbmRleCA5ZmEyOWQwLi5iZTYxYTRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMtMjAxNCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJWTUVudHJ5U2Nv
cGUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgpAQCAtMjE3LDcgKzIxOCw3IEBAIEpTR2xvYmFsT2JqZWN0KiBDYWxsRnJhbWU6
Ondhc21Bd2FyZUxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKQogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKICAgICBpZiAoIWNhbGxlZSgpLmlzV2FzbSgpKQogICAgICAgICByZXR1cm4gbGV4aWNh
bEdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBXYXNtOjpsb2FkQ29udGV4dCh2bSktPmdsb2Jh
bE9iamVjdCgpOworICAgIHJldHVybiB2bS53YXNtQ29udGV4dC5sb2FkKCktPmdsb2JhbE9iamVj
dCgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIHJldHVybiBsZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CkBAIC0yMzcsMjQgKzIzOCwyNCBAQCBib29sIENhbGxGcmFtZTo6aXNBbnlX
YXNtQ2FsbGVlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUNhbGxGcmFtZSogQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJiBjdXJyVk1FbnRyeUZyYW1lKQorQ2FsbEZyYW1l
KiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJiBjdXJyRW50cnlGcmFtZSkKIHsK
LSAgICBpZiAoY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpID09IGN1cnJWTUVudHJ5RnJhbWUp
IHsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVj
b3JkKGN1cnJWTUVudHJ5RnJhbWUpOwotICAgICAgICBjdXJyVk1FbnRyeUZyYW1lID0gY3VyclZN
RW50cnlSZWNvcmQtPnByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAgICBpZiAoY2FsbGVyRnJhbWVP
ckVudHJ5RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAgICAgICBWTUVudHJ5UmVjb3Jk
KiBjdXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyckVudHJ5RnJhbWUpOworICAg
ICAgICBjdXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT5wcmV2VG9wRW50cnlGcmFt
ZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQtPnByZXZUb3BDYWxsRnJhbWUo
KTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KGNhbGxlckZyYW1l
T3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KGNh
bGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCi1TVVBQUkVTU19BU0FOIENhbGxGcmFtZSog
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJiBjdXJyVk1FbnRyeUZy
YW1lKQorU1VQUFJFU1NfQVNBTiBDYWxsRnJhbWUqIENhbGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJh
bWUoRW50cnlGcmFtZSomIGN1cnJFbnRyeUZyYW1lKQogewotICAgIGlmICh1bnNhZmVDYWxsZXJG
cmFtZU9yVk1FbnRyeUZyYW1lKCkgPT0gY3VyclZNRW50cnlGcmFtZSkgewotICAgICAgICBWTUVu
dHJ5UmVjb3JkKiBjdXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyclZNRW50cnlG
cmFtZSk7Ci0gICAgICAgIGN1cnJWTUVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+dW5z
YWZlUHJldlRvcFZNRW50cnlGcmFtZSgpOworICAgIGlmICh1bnNhZmVDYWxsZXJGcmFtZU9yRW50
cnlGcmFtZSgpID09IGN1cnJFbnRyeUZyYW1lKSB7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIGN1
cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZChjdXJyRW50cnlGcmFtZSk7CisgICAgICAg
IGN1cnJFbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnVuc2FmZVByZXZUb3BFbnRyeUZy
YW1lKCk7CiAgICAgICAgIHJldHVybiBjdXJyVk1FbnRyeVJlY29yZC0+dW5zYWZlUHJldlRvcENh
bGxGcmFtZSgpOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4odW5z
YWZlQ2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q2FsbEZyYW1lKj4odW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSk7CiB9CiAKIFNvdXJj
ZU9yaWdpbiBDYWxsRnJhbWU6OmNhbGxlclNvdXJjZU9yaWdpbigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggNjIzMDlhMC4uNmQ1ZDcyMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAt
MTQxLDEyICsxNDEsMTIgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAgICAgICAgIENhbGxGcmFtZSYg
b3BlcmF0b3I9KGNvbnN0IFJlZ2lzdGVyJiByKSB7ICpzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRo
aXMpID0gcjsgcmV0dXJuICp0aGlzOyB9CiAKLSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KGNhbGxlckZyYW1lT3JW
TUVudHJ5RnJhbWUoKSk7IH0KLSAgICAgICAgdm9pZCogY2FsbGVyRnJhbWVPclZNRW50cnlGcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZyYW1lQW5kUEMoKS5jYWxsZXJGcmFtZTsgfQotICAg
ICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVuc2FmZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUo
KSBjb25zdCB7IHJldHVybiB1bnNhZmVDYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0K
KyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PENhbGxGcmFtZSo+KGNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOyB9CisgICAgICAgIHZv
aWQqIGNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gY2FsbGVyRnJhbWVB
bmRQQygpLmNhbGxlckZyYW1lOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gdm9pZCogdW5zYWZl
Q2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiB1bnNhZmVDYWxsZXJGcmFt
ZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KIAotICAgICAgICBDYWxsRnJhbWUqIHVuc2FmZUNhbGxl
ckZyYW1lKFZNRW50cnlGcmFtZSomKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbEZy
YW1lKiBjYWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJik7CisgICAgICAgIENhbGxGcmFtZSogdW5z
YWZlQ2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYpOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIFNvdXJjZU9yaWdpbiBjYWxsZXJTb3VyY2VPcmlnaW4oKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oCmluZGV4IGM1YjZi
ODMuLjc2YWNkNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9GcmFtZVRyYWNlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
RnJhbWVUcmFjZXJzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0
IFZNRW50cnlGcmFtZTsKK3N0cnVjdCBFbnRyeUZyYW1lOwogCiBjbGFzcyBTdXNwZW5kRXhjZXB0
aW9uU2NvcGUgewogcHVibGljOgpAQCAtNzQsMzMgKzc0LDMzIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUpOwotICAgICAgICBB
U1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbEZyYW1lKSA8IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHZtLT50b3BWTUVudHJ5RnJhbWUpKTsKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9jYXN0PHZvaWQqPih2bS0+
dG9wRW50cnlGcmFtZSkpOwogICAgICAgICB2bS0+dG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwog
ICAgIH0KIH07CiAKIGNsYXNzIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHsKIHB1
YmxpYzoKLSAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3Jl
KFZNKiB2bSwgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQorICAgIEFMV0FZU19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUoVk0q
IHZtLCBFbnRyeUZyYW1lKiBFbnRyeUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAg
ICAgOiBtX3ZtKHZtKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZtKTsKICAgICAgICAgQVNTRVJU
KGNhbGxGcmFtZSk7Ci0gICAgICAgIG1fc2F2ZWRUb3BWTUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1F
bnRyeUZyYW1lOworICAgICAgICBtX3NhdmVkVG9wRW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZy
YW1lOwogICAgICAgICBtX3NhdmVkVG9wQ2FsbEZyYW1lID0gdm0tPnRvcENhbGxGcmFtZTsKLSAg
ICAgICAgdm0tPnRvcFZNRW50cnlGcmFtZSA9IHZtRW50cnlGcmFtZTsKKyAgICAgICAgdm0tPnRv
cEVudHJ5RnJhbWUgPSBFbnRyeUZyYW1lOwogICAgICAgICB2bS0+dG9wQ2FsbEZyYW1lID0gY2Fs
bEZyYW1lOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgfk5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlKCkKICAgICB7Ci0gICAgICAgIG1fdm0tPnRvcFZNRW50cnlGcmFtZSA9IG1f
c2F2ZWRUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIG1fdm0tPnRvcEVudHJ5RnJhbWUgPSBtX3Nh
dmVkVG9wRW50cnlGcmFtZTsKICAgICAgICAgbV92bS0+dG9wQ2FsbEZyYW1lID0gbV9zYXZlZFRv
cENhbGxGcmFtZTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgVk0qIG1fdm07Ci0gICAgVk1FbnRy
eUZyYW1lKiBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fc2F2ZWRU
b3BFbnRyeUZyYW1lOwogICAgIENhbGxGcmFtZSogbV9zYXZlZFRvcENhbGxGcmFtZTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CmluZGV4IDEzNTNlMTAuLmE1MTNlNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNjUzLDkgKzY1Myw5IEBAIHB1YmxpYzoK
IAogICAgICAgICBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKG1fdm0sIG1fY2FsbEZyYW1lKTsK
IAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZpc2l0b3IpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcih2aXNpdG9yKTsKIAotICAgICAgICBib29sIHNob3VsZFN0b3BVbndpbmRpbmcgPSB2
aXNpdG9yLT5jYWxsZXJJc1ZNRW50cnlGcmFtZSgpOworICAgICAgICBib29sIHNob3VsZFN0b3BV
bndpbmRpbmcgPSB2aXNpdG9yLT5jYWxsZXJJc0VudHJ5RnJhbWUoKTsKICAgICAgICAgaWYgKHNo
b3VsZFN0b3BVbndpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25l
OwogCkBAIC02NjMsNyArNjYzLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2
b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoU3RhY2tW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogICAgIHsK
ICNpZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAK
ICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9IHZpc2l0
b3ItPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKQEAgLTY3Niw3ICs2NzYsNyBAQCBwcml2YXRlOgog
ICAgICAgICBpbnRwdHJfdCogZnJhbWUgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Kj4obV9j
YWxsRnJhbWUtPnJlZ2lzdGVycygpKTsKIAogICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50
ID0gY3VycmVudENhbGxlZVNhdmVzLT5zaXplKCk7Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIHJl
Y29yZCA9IHZtRW50cnlSZWNvcmQobV92bS50b3BWTUVudHJ5RnJhbWUpOworICAgICAgICBWTUVu
dHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0udG9wRW50cnlGcmFtZSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAg
ICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgY3VycmVudEVudHJ5ID0gY3VycmVudENhbGxlZVNh
dmVzLT5hdChpKTsKICAgICAgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoY3VycmVu
dEVudHJ5LnJlZygpKSkKQEAgLTcwMiw3ICs3MDIsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4
YwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGlmICh1
bndpbmRTdGFydCA9PSBVbndpbmRGcm9tQ2FsbGVyRnJhbWUpIHsKLSAgICAgICAgaWYgKGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpID09IHZtLnRvcFZNRW50cnlGcmFtZSkK
KyAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSA9PSB2bS50
b3BFbnRyeUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgY2Fs
bEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA4NWQxNDdhLi4xZGE5
M2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDE4ICs0NCwxOCBAQCBTdGFja1Zpc2l0b3I6
OlN0YWNrVmlzaXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFZNKiB2bSkKICAgICBDYWxsRnJh
bWUqIHRvcEZyYW1lOwogICAgIGlmIChzdGFydEZyYW1lKSB7CiAgICAgICAgIEFTU0VSVCh2bSk7
Ci0gICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwor
ICAgICAgICBtX2ZyYW1lLm1fZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOwogICAgICAg
ICB0b3BGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgICAgIAotICAgICAgICBpZiAodG9w
RnJhbWUgJiYgc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZnJhbWUubV9WTUVudHJ5RnJhbWUpID09IHN0
YXRpY19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKLSAgICAgICAgICAgIHRvcEZyYW1lID0gdm1F
bnRyeVJlY29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKS0+bV9wcmV2VG9wQ2FsbEZyYW1lOwot
ICAgICAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlGcmFtZSA9IHZtRW50cnlSZWNvcmQobV9mcmFt
ZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcFZNRW50cnlGcmFtZTsKKyAgICAgICAgaWYgKHRv
cEZyYW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1fZW50cnlGcmFtZSkgPT0gc3Rh
dGljX2Nhc3Q8dm9pZCo+KHRvcEZyYW1lKSkgeworICAgICAgICAgICAgdG9wRnJhbWUgPSB2bUVu
dHJ5UmVjb3JkKG1fZnJhbWUubV9lbnRyeUZyYW1lKS0+bV9wcmV2VG9wQ2FsbEZyYW1lOworICAg
ICAgICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUubV9l
bnRyeUZyYW1lKS0+bV9wcmV2VG9wRW50cnlGcmFtZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSAwOworICAgICAgICBtX2ZyYW1lLm1f
ZW50cnlGcmFtZSA9IDA7CiAgICAgICAgIHRvcEZyYW1lID0gMDsKICAgICB9Ci0gICAgbV9mcmFt
ZS5tX2NhbGxlcklzVk1FbnRyeUZyYW1lID0gZmFsc2U7CisgICAgbV9mcmFtZS5tX2NhbGxlcklz
RW50cnlGcmFtZSA9IGZhbHNlOwogICAgIHJlYWRGcmFtZSh0b3BGcmFtZSk7CiAKICAgICAvLyBG
aW5kIHRoZSBmcmFtZSB0aGUgY2FsbGVyIHdhbnRzIHRvIHN0YXJ0IHVud2luZGluZyBmcm9tLgpA
QCAtNzUsMTQgKzc1LDE0IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpnb3RvTmV4dEZyYW1lKCkKICAg
ICAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUuY2FsbEZyYW1lKCksICZpbmxp
bmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcik7CiAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZy
YW1lID0gbV9mcmFtZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1l
OworICAgICAgICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fQ2FsbGVyRW50
cnlGcmFtZTsKICAgICAgICAgICAgIHJlYWRGcmFtZShtX2ZyYW1lLmNhbGxlckZyYW1lKCkpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlYWRJbmxpbmVkRnJhbWUobV9mcmFtZS5jYWxs
RnJhbWUoKSwgY2FsbGVyQ29kZU9yaWdpbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgbV9mcmFtZS5tX1ZNRW50cnlGcmFtZSA9IG1fZnJh
bWUubV9DYWxsZXJWTUVudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSBtX2Zy
YW1lLm1fQ2FsbGVyRW50cnlGcmFtZTsKICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFt
ZSgpKTsKIH0KIApAQCAtMTUyLDkgKzE1Miw5IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkTm9u
SW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpCiB7
CiAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICBtX2ZyYW1lLm1fYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCk7Ci0gICAgbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSA9IG1fZnJhbWUubV9W
TUVudHJ5RnJhbWU7Ci0gICAgbV9mcmFtZS5tX2NhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZShtX2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lKTsKLSAgICBtX2ZyYW1lLm1fY2Fs
bGVySXNWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lICE9IG1fZnJh
bWUubV9WTUVudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX0NhbGxlckVudHJ5RnJhbWUgPSBtX2Zy
YW1lLm1fZW50cnlGcmFtZTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUt
PmNhbGxlckZyYW1lKG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lKTsKKyAgICBtX2ZyYW1lLm1f
Y2FsbGVySXNFbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlckVudHJ5RnJhbWUgIT0gbV9mcmFt
ZS5tX2VudHJ5RnJhbWU7CiAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gZmFsc2U7CiAKICAg
ICBDYWxsZWVCaXRzIGNhbGxlZSA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CkBAIC01MDAsNyArNTAw
LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIElu
ZGVudGVyIGluZGVudCwgc3RkOjpmdW5jdGlvbjwKIAogICAgICAgICAgICAgaW5kZW50LS07CiAg
ICAgICAgIH0KLSAgICAgICAgb3V0LnByaW50KGluZGVudCwgInZtRW50cnlGcmFtZTogIiwgUmF3
UG9pbnRlcih2bUVudHJ5RnJhbWUoKSksICJcbiIpOworICAgICAgICBvdXQucHJpbnQoaW5kZW50
LCAiRW50cnlGcmFtZTogIiwgUmF3UG9pbnRlcihtX2VudHJ5RnJhbWUpLCAiXG4iKTsKICAgICAg
ICAgaW5kZW50LS07CiAgICAgfQogICAgIG91dC5wcmludChpbmRlbnQsICJ9XG4iKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAppbmRleCA4
YWQwOTQwLi43MDc5ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAg
ICAgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgICAgICBz
aXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgICAgIGJvb2wgY2FsbGVySXNWTUVudHJ5RnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlcklzVk1FbnRyeUZyYW1lOyB9CisgICAgICAgIGJv
b2wgY2FsbGVySXNFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc0VudHJ5RnJh
bWU7IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVyRnJhbWU7IH0KICAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVy
biBtX2NhbGxlZTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZUJsb2NrOyB9CkBAIC05Nyw3ICs5Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgICAgICBDbG9u
ZWRBcmd1bWVudHMqIGNyZWF0ZUFyZ3VtZW50cygpOwotICAgICAgICBWTUVudHJ5RnJhbWUqIHZt
RW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fVk1FbnRyeUZyYW1lOyB9CiAgICAgICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KICAgICAg
ICAgCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIEluZGVudGVyID0gSW5kZW50ZXIo
KSkgY29uc3Q7CkBAIC0xMTQsOCArMTEzLDggQEAgcHVibGljOgogICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIG1faW5saW5lQ2FsbEZyYW1lOwogI2VuZGlmCiAgICAgICAgIENhbGxGcmFtZSogbV9j
YWxsRnJhbWU7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogbV9WTUVudHJ5RnJhbWU7Ci0gICAgICAg
IFZNRW50cnlGcmFtZSogbV9DYWxsZXJWTUVudHJ5RnJhbWU7CisgICAgICAgIEVudHJ5RnJhbWUq
IG1fZW50cnlGcmFtZTsKKyAgICAgICAgRW50cnlGcmFtZSogbV9DYWxsZXJFbnRyeUZyYW1lOwog
ICAgICAgICBDYWxsRnJhbWUqIG1fY2FsbGVyRnJhbWU7CiAgICAgICAgIENhbGxlZUJpdHMgbV9j
YWxsZWU7CiAgICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC0xMjMsNyArMTIyLDcg
QEAgcHVibGljOgogICAgICAgICBzaXplX3QgbV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
ICAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKICAgICAgICAgV2FzbTo6SW5kZXhP
ck5hbWUgbV93YXNtRnVuY3Rpb25JbmRleE9yTmFtZTsKLSAgICAgICAgYm9vbCBtX2NhbGxlcklz
Vk1FbnRyeUZyYW1lIDogMTsKKyAgICAgICAgYm9vbCBtX2NhbGxlcklzRW50cnlGcmFtZSA6IDE7
CiAgICAgICAgIGJvb2wgbV9pc1dhc21GcmFtZSA6IDE7CiAKICAgICAgICAgZnJpZW5kIGNsYXNz
IFN0YWNrVmlzaXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9WTUVudHJ5UmVjb3JkLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oCmluZGV4IGYzNmMyYmUuLjAxMDNhNzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNRW50cnlSZWNvcmQuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsy
OSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgVk1FbnRyeUZyYW1lOworc3RydWN0
IEVudHJ5RnJhbWU7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBWTTsKIApAQCAtNDAsNyArNDAs
NyBAQCBzdHJ1Y3QgVk1FbnRyeVJlY29yZCB7CiAgICAgICovCiAgICAgVk0qIG1fdm07CiAgICAg
RXhlY1N0YXRlKiBtX3ByZXZUb3BDYWxsRnJhbWU7Ci0gICAgVk1FbnRyeUZyYW1lKiBtX3ByZXZU
b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogbV9wcmV2VG9wRW50cnlGcmFtZTsKIAog
I2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAog
ICAgIGludHB0cl90IGNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJbTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlNdOwpAQCAtNDksMjAgKzQ5LDIwIEBAIHN0cnVjdCBWTUVudHJ5UmVjb3Jk
IHsKICAgICBFeGVjU3RhdGUqIHByZXZUb3BDYWxsRnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BD
YWxsRnJhbWU7IH0KICAgICBTVVBQUkVTU19BU0FOIEV4ZWNTdGF0ZSogdW5zYWZlUHJldlRvcENh
bGxGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcENhbGxGcmFtZTsgfQogCi0gICAgVk1FbnRyeUZy
YW1lKiBwcmV2VG9wVk1FbnRyeUZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wVk1FbnRyeUZyYW1l
OyB9Ci0gICAgU1VQUFJFU1NfQVNBTiBWTUVudHJ5RnJhbWUqIHVuc2FmZVByZXZUb3BWTUVudHJ5
RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BWTUVudHJ5RnJhbWU7IH0KKyAgICBFbnRyeUZyYW1l
KiBwcmV2VG9wRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcEVudHJ5RnJhbWU7IH0KKyAg
ICBTVVBQUkVTU19BU0FOIEVudHJ5RnJhbWUqIHVuc2FmZVByZXZUb3BFbnRyeUZyYW1lKCkgeyBy
ZXR1cm4gbV9wcmV2VG9wRW50cnlGcmFtZTsgfQogfTsKIAotZXh0ZXJuICJDIiBWTUVudHJ5UmVj
b3JkKiB2bUVudHJ5UmVjb3JkKFZNRW50cnlGcmFtZSopOworZXh0ZXJuICJDIiBWTUVudHJ5UmVj
b3JkKiB2bUVudHJ5UmVjb3JkKEVudHJ5RnJhbWUqKTsKIAotc3RydWN0IFZNRW50cnlGcmFtZSB7
CitzdHJ1Y3QgRW50cnlGcmFtZSB7CiAjaWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09GX0NBTExF
RV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgc3RhdGljIHB0cmRpZmZfdCB2bUVudHJ5UmVjb3Jk
T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogZmFrZVZNRW50cnlGcmFtZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Vk1FbnRyeUZyYW1lKj4oMHgxMDAwKTsKLSAgICAgICAgVk1FbnRy
eVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChmYWtlVk1FbnRyeUZyYW1lKTsKKyAgICAg
ICAgRW50cnlGcmFtZSogZmFrZUVudHJ5RnJhbWUgPSByZWludGVycHJldF9jYXN0PEVudHJ5RnJh
bWUqPigweDEwMDApOworICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVj
b3JkKGZha2VFbnRyeUZyYW1lKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWNvcmQpIC0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oZmFrZVZNRW50cnlGcmFtZSkpOworICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZha2VF
bnRyeUZyYW1lKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWxsZWVTYXZlUmVn
aXN0ZXJzQnVmZmVyT2Zmc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAppbmRleCA4ZDMxZjdhLi4zNzE5YmE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC01ODIsNyArNTgyLDcgQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhWTSYgdm0sIEdQUlJlZyBzY3JhdGNo
MCwgR1BSUmVnIHNjcmF0Y2gxLAogfQogI2VuZGlmCiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZt
KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSoqIHRvcEVudHJ5RnJhbWUpCiB7CiAjaWYgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMo
KTsKQEAgLTYwNSw4ICs2MDUsOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bQogICAgIH0KICAg
ICBBU1NFUlQoc2NyYXRjaCAhPSBJbnZhbGlkR1BSUmVnKTsKIAotICAgIGxvYWRQdHIoJnZtLnRv
cFZNRW50cnlGcmFtZSwgc2NyYXRjaCk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVudHJ5
RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGxvYWRQdHIodG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNo
KTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBleGNlcHQgZm9yIHRoZSBzY3Jh
dGNoLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsK
QEAgLTc3OCw0MSArNzc4LDQxIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0Q29udmVydFZh
bHVlVG9Cb29sZWFuKFZNJiB2bSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlCiB9CiAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCi12b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFdhc21Db250ZXh0
KEdQUlJlZyBkc3QpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFu
Y2UoR1BSUmVnIGRzdCkKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmIChXYXNt
Ojp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVzZUZh
c3RUTFMoKSkgewogICAgICAgICBsb2FkRnJvbVRMU1B0cihmYXN0VExTT2Zmc2V0Rm9yS2V5KFdU
Rl9XQVNNX0NPTlRFWFRfS0VZKSwgZHN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZgotICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dFBv
aW50ZXIsIGRzdCk7CisgICAgbW92ZShXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLndh
c21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBkc3QpOwogfQogCi12b2lkIEFzc2VtYmx5SGVscGVy
czo6c3RvcmVXYXNtQ29udGV4dChHUFJSZWcgc3JjKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OnN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZShHUFJSZWcgc3JjKQogewogI2lmIEVOQUJMRShGQVNUX1RM
U19KSVQpCi0gICAgaWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKKyAgICBpZiAo
V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgIHN0b3JlVG9UTFNQdHIoc3Jj
LCBmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9XQVNNX0NPTlRFWFRfS0VZKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtb3ZlKHNyYywgV2FzbTo6UGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKS53YXNtQ29udGV4dFBvaW50ZXIpOworICAgIG1vdmUoc3JjLCBXYXNtOjpQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKIH0KIAot
Ym9vbCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVn
aXN0ZXIoKQorYm9vbCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVl
ZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAg
ICBpZiAoV2FzbTo6dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAgICBpZiAoV2FzbTo6Q29udGV4
dDo6dXNlRmFzdFRMUygpKQogICAgICAgICByZXR1cm4gbG9hZEZyb21UTFNQdHJOZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
QXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rl
cigpCitib29sIEFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNN
YWNyb1NjcmF0Y2hSZWdpc3RlcigpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBp
ZiAoV2FzbTo6dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAgICBpZiAoV2FzbTo6Q29udGV4dDo6
dXNlRmFzdFRMUygpKQogICAgICAgICByZXR1cm4gc3RvcmVUb1RMU1B0ck5lZWRzTWFjcm9TY3Jh
dGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKQEAgLTg3NSwxMCArODc1
LDEwIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwoVk0mIHZtLCBWX0RlYnVnT3Bl
cmF0aW9uX0VQUCBmdW5jdGlvbiwgdm9pZCogYXJnCiAgICAgfQogfQogCi12b2lkIEFzc2VtYmx5
SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcklt
cGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVl
U2F2ZXNCdWZmZXIpCiB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAw
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3Rl
cnNCdWZmZXJPZmZzZXQoKSksIGNhbGxlZVNhdmVzQnVmZmVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIGNh
bGxlZVNhdmVzQnVmZmVyKTsKIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVT
YXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgUmVnaXN0
ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IGE2OGMz
NjkuLmNjNzBhMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaApAQCAtMzYwLDI4ICszNjAsMjggQEAgcHVibGljOgogICAgIHZvaWQgY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIpCiAgICAgewog
I2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotICAgICAgICBsb2FkUHRy
KEFkZHJlc3Modm1HUFIsIFZNOjp0b3BWTUVudHJ5RnJhbWVPZmZzZXQoKSksIHZtR1BSKTsKLSAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwo
dm1HUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Modm1HUFIsIFZNOjp0b3BFbnRyeUZyYW1l
T2Zmc2V0KCkpLCB2bUdQUik7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVySW1wbCh2bUdQUik7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0o
dm1HUFIpOwogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkg
fSkKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KEVudHJ5RnJhbWUqKiB0b3BFbnRyeUZyYW1lLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQog
ICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAg
R1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwotICAgICAgICBsb2Fk
UHRyKCZ2bS50b3BWTUVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAgICAgY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwodGVtcDEpOworICAgICAgICBsb2Fk
UHRyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNF
RF9QQVJBTSh2bSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKICNlbmRp
ZgogICAgIH0KIAotICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKFZNJik7CisgICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqKik7CiAKLSAgICB2b2lkIGNvcHlD
YWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKFZNJiB2bSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKKyAgICB2b2lkIGNvcHlDYWxs
ZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihF
bnRyeUZyYW1lKiogdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAg
ICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQ
UlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKQEAgLTM5Miw4ICszOTIs
OCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAKICAgICAgICAgLy8g
Q29weSBzYXZlZCBjYWxsZWVTYXZlcyBvbiBzdGFjayBvciB1bnNhdmVkIGNhbGxlZVNhdmVzIGlu
IHJlZ2lzdGVyIHRvIHZtIGNhbGxlZVNhdmUgYnVmZmVyCi0gICAgICAgIGxvYWRQdHIoJnZtLnRv
cFZNRW50cnlGcmFtZSwgdGVtcDEpOwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50
cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVtcDEpOworICAg
ICAgICBsb2FkUHRyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0
ZW1wMSk7CiAKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0g
Vk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICAgICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9IGNvZGVCbG9jaygpLT5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CkBAIC00MDEsMTIgKzQwMSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2ln
bmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwogCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXQgdm1FbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAg
ICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQodm1FbnRyeS5yZWcoKSkpCisgICAgICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOworICAg
ICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiBjdXJyZW50
RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+ZmluZCh2bUVudHJ5LnJlZygpKTsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGN1cnJlbnRGcmFtZUVudHJ5ID0gY3VycmVudENh
bGxlZVNhdmVzLT5maW5kKGVudHJ5LnJlZygpKTsKIAotICAgICAgICAgICAgaWYgKHZtRW50cnku
cmVnKCkuaXNHUFIoKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpIHsK
ICAgICAgICAgICAgICAgICBHUFJSZWcgcmVnVG9TdG9yZTsKICAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudEZyYW1lRW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBjYWxsZWVT
YXZlIGZyb20gc3RhY2sgaW50byB0ZW1wIHJlZ2lzdGVyCkBAIC00MTQsOSArNDE0LDkgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIHJlZ1RvU3RvcmUpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHN0b3JlIGNhbGxl
ZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIHJlZ1RvU3RvcmUgPSB2bUVudHJ5
LnJlZygpLmdwcigpOworICAgICAgICAgICAgICAgICAgICByZWdUb1N0b3JlID0gZW50cnkucmVn
KCkuZ3ByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihyZWdUb1N0b3JlLCBBZGRyZXNz
KHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVn
VG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgZW50cnkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwUmVnVG9TdG9yZTsKICAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKQEAgLTQyNSw5ICs0MjUsOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIGxvYWREb3VibGUoQWRkcmVzcyhmcmFtZVBvaW50ZXJSZWdp
c3RlciwgY3VycmVudEZyYW1lRW50cnktPm9mZnNldCgpKSwgZnBSZWdUb1N0b3JlKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBzdG9yZSBjYWxs
ZWUgc2F2ZSBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICBmcFJlZ1RvU3RvcmUgPSB2bUVu
dHJ5LnJlZygpLmZwcigpOworICAgICAgICAgICAgICAgICAgICBmcFJlZ1RvU3RvcmUgPSBlbnRy
eS5yZWcoKS5mcHIoKTsKIAotICAgICAgICAgICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVG9TdG9y
ZSwgQWRkcmVzcyh0ZW1wMSwgdm1FbnRyeS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIHN0
b3JlRG91YmxlKGZwUmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgZW50cnkub2Zmc2V0KCkpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2Vsc2UKQEAgLTE2NDQsMTQgKzE2NDQsMTQgQEAg
cHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgdm9pZCBsb2Fk
V2FzbUNvbnRleHQoR1BSUmVnIGRzdCk7Ci0gICAgdm9pZCBzdG9yZVdhc21Db250ZXh0KEdQUlJl
ZyBzcmMpOwotICAgIHN0YXRpYyBib29sIGxvYWRXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNo
UmVnaXN0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1Nj
cmF0Y2hSZWdpc3RlcigpOworICAgIHZvaWQgbG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVn
IGRzdCk7CisgICAgdm9pZCBzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYyk7Cisg
ICAgc3RhdGljIGJvb2wgbG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJl
Z2lzdGVyKCk7CisgICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNN
YWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBj
YWxsZWVTYXZlc0J1ZmZlcik7CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKTsKIAogICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2Nr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDVlY2YzYTYuLjdjOTRjYmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEpJVDo6ZW1p
dEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNo
QWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3Jl
bWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsKIAot
ICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lz
dGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwog
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7
CiAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVl
R1BSKSk7CkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMoKQogICAgIGlmICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVS
b2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAg
ICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdv
IGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogCkBAIC05
MDUsNyArOTA1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMo
KQogICAgICAgICBtX2V4Y2VwdGlvbkhhbmRsZXIgPSBsYWJlbCgpOwogICAgICAgICBtX2V4Y2Vw
dGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAg
ICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywg
dGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRleCBjYTJkYjhjLi5mMjAxOGNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
Niw4ICs1Niw4IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZy
YW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKICAgICAKICAgICBFeGVjU3RhdGUqIHNoYWRv
d0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZTsKICAgICBpZiAodW53aW5kU3RhcnQgPT0gVW53
aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZy
YW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICAgICAgc2hhZG93Q2hpY2tlblRvcEZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgICAgICBFbnRy
eUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgICAgIHNoYWRv
d0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7
CiAgICAgfQogICAgIHZtLT5zaGFkb3dDaGlja2VuKCkubG9nKCp2bSwgc2hhZG93Q2hpY2tlblRv
cEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93UGFja2V0KCkpOwogICAgIApAQCAt
ODQsNyArODQsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxG
cmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgfSBlbHNlCiAgICAgICAgIGNhdGNo
Um91dGluZSA9IExMSW50OjpnZXRDb2RlUHRyKGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKTsKICAg
ICAKLSAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BWTUVudHJ5RnJhbWUpKTsKKyAgICBBU1NFUlQoYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAKICAgICB2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPSBjYWxs
RnJhbWU7CiAgICAgdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93ID0gY2F0Y2hSb3V0aW5lOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggOWI0MTY2YS4uY2I2
NGIxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC00NTUs
NyArNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAg
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7Cisg
ICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRv
cEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvblRocm93LCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigq
dm0oKSk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICByZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRy
eUZyYW1lKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxv
YWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxG
cmFtZVJlZ2lzdGVyKTsKQEAgLTk1Miw3ICs5NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bG9vcF9oaW50KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aQogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zy
b21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9w
RW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwg
bV9ieXRlY29kZU9mZnNldCk7CiAgICAgICAgIEp1bXAgbm9PcHRpbWl6ZWRFbnRyeSA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGExMjI4ZDMuLjYwN2E0ODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3Rl
cmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc2NSw3ICs3NjUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BF
bnRyeUZyYW1lKTsKICAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblRocm93LCByZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KCkpOwpAQCAtODI2LDcgKzgyNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19zdHJpbmco
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAKIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2
bSgpKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Zt
KSwgcmVnVDMpOwogICAgIC8vIG9wZXJhdGlvblRocm93IHJldHVybnMgdGhlIGNhbGxGcmFtZSBm
b3IgdGhlIGhhbmRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAppbmRleCBjMDRjZGM0Li5lNjM5OTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTEwMywxNCArMTAzLDE0IEBAIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIENv
ZGVCbG9jayoKICAgICBWTSogdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZy
YW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0g
ZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZy
YW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4
ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogICAgIGlmICghY2FsbGVyRnJhbWUpIHsKICAg
ICAgICAgY2FsbGVyRnJhbWUgPSBleGVjOwotICAgICAgICB2bUVudHJ5RnJhbWUgPSB2bS0+dG9w
Vk1FbnRyeUZyYW1lOworICAgICAgICBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAg
ICAgfQogCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2
bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRo
UmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICB0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUpOwogfQogCkBAIC0xMjAsMTAgKzEy
MCwxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dEaXZpZGVFcnJvcihFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZy
YW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0g
ZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZy
YW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4
ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
V2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNh
bGxlckZyYW1lKTsKICAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSgqdm0pOwogICAg
IHRocm93RXhjZXB0aW9uKGNhbGxlckZyYW1lLCBzY29wZSwgY3JlYXRlRXJyb3IoY2FsbGVyRnJh
bWUsIEFTQ0lJTGl0ZXJhbCgiRGl2aXNpb24gYnkgemVybyBvciBkaXZpc2lvbiBvdmVyZmxvdy4i
KSkpOwogfQpAQCAtMTMzLDEwICsxMzMsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRocm93T3V0T2ZCb3VuZHNBY2Nlc3NFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFt
ZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRy
eUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7
CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJh
bWUpOwogCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2
bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRo
UmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICBFcnJvckhh
bmRsaW5nU2NvcGUgZXJyb3JTY29wZSgqdm0pOwogICAgIHRocm93RXhjZXB0aW9uKGNhbGxlckZy
YW1lLCBzY29wZSwgY3JlYXRlRXJyb3IoY2FsbGVyRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiT3V0LW9m
LWJvdW5kcyBhY2Nlc3MuIikpKTsKIH0KQEAgLTE0OSw5ICsxNDksOSBAQCBpbnQzMl90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2soRXhlY1N0YXRlKiBleGVjKQogCiAgICAg
aW50MzJfdCBtaXNzaW5nQXJnQ291bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3Io
ZXhlYywgKnZtLCBDb2RlRm9yQ2FsbCk7CiAgICAgaWYgKG1pc3NpbmdBcmdDb3VudCA8IDApIHsK
LSAgICAgICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1l
OwotICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1F
bnRyeUZyYW1lKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJh
Y2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSog
ZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CisgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJh
bWUpOwogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUp
OwogICAgIH0KIApAQCAtMTY1LDkgKzE2NSw5IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIGludDMyX3Qg
bWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsICp2
bSwgQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgaWYgKG1pc3NpbmdBcmdDb3VudCA8IDApIHsKLSAg
ICAgICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwot
ICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRy
eUZyYW1lKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2Vy
KHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSogZW50
cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CisgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUp
OwogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CmluZGV4IDkyZTQyYjEuLmU0Mzk2MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiAgICAg
Ly8gZXZlbiB0aG91Z2ggd2Ugd29uJ3QgdXNlIGl0LgogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKIAotICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7
CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2
bS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBqaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CkBAIC0zNjIsNyAr
MzYyLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZW5lcmF0b3Io
Vk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGsKICAgICAvLyBIYW5kbGUgYW4gZXhjZXB0
aW9uCiAgICAgZXhjZXB0aW9uSGFuZGxlci5saW5rKCZqaXQpOwogCi0gICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZy
YW1lKTsKICAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVy
LCAmdm0tPnRvcENhbGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxVRTMyXzY0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBlOWEwZDJhLi4zNTAzNWRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcApAQCAtMTg3Miw4ICsxODcyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblByaW50U3RkRXJyKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gcHJpbnQKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFZNRW50cnlGcmFtZSog
dG9wVk1FbnRyeUZyYW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIEV4ZWNTdGF0ZSogY2Fs
bGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5
RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOworICAgIEV4ZWNTdGF0ZSog
Y2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBpZiAo
Y2FsbGVyRnJhbWUpCiAgICAgICAgIHZtLmludGVycHJldGVyLT5kdW1wQ2FsbEZyYW1lKGNhbGxl
ckZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggNzM1
ZTcxYi4uMzY2NGUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCkBAIC00ODEsMTMgKzQ4MSwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
dGFja19jaGVjaykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5
RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9
IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50
cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9
IGV4ZWMtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwogICAgIGlmICghY2FsbGVyRnJhbWUp
IHsKICAgICAgICAgY2FsbGVyRnJhbWUgPSBleGVjOwotICAgICAgICB2bUVudHJ5RnJhbWUgPSB2
bS50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIHRvcEVudHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZy
YW1lOwogICAgIH0KLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIo
JnZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXJXaXRoUmVzdG9yZSB0cmFjZXIoJnZtLCB0b3BFbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAK
ICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRUaHVua3MuY3BwCmluZGV4IDM2ZjY0ODYuLjUyOTY3ZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3ICsx
MTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9OYXRpdmUodm9pZCogZXhlY3V0YWJsZUFk
ZHJlc3MsIFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCi1leHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQo
Vk1FbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQorZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVu
dHJ5UmVjb3JkKEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUpCiB7CiAgICAgLy8gVGhlIEMgTG9vcCBk
b2Vzbid0IGhhdmUgYW55IGNhbGxlZSBzYXZlIHJlZ2lzdGVycywgc28gdGhlIFZNRW50cnlSZWNv
cmQgaXMgYWxsb2NhdGVkIGF0IHRoZSBiYXNlIG9mIHRoZSBmcmFtZS4KICAgICBpbnRwdHJfdCBz
dGFja0FsaWdubWVudCA9IHN0YWNrQWxpZ25tZW50Qnl0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCA1ZGRlNjY0
Li43YmYxZWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC02NTksNyArNjU5LDcgQEAgZW5kCiAKIG1hY3JvIGNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAgICAg
aWYgQVJNNjQgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRvcFZN
RW50cnlGcmFtZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1d
LCB0ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBW
TUVudHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAgICAg
ICAgIGlmIEFSTTY0CkBAIC03MDEsNyArNzAxLDcgQEAgZW5kCiAKIG1hY3JvIHJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKICAgICBp
ZiBBUk02NCBvciBYODZfNjQgb3IgWDg2XzY0X1dJTgotICAgICAgICBsb2FkcCBWTTo6dG9wVk1F
bnRyeUZyYW1lW3ZtXSwgdGVtcAorICAgICAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0s
IHRlbXAKICAgICAgICAgdm1FbnRyeVJlY29yZCh0ZW1wLCB0ZW1wKQogICAgICAgICBsZWFwIFZN
RW50cnlSZWNvcmQ6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJbdGVtcF0sIHRlbXAKICAgICAg
ICAgaWYgQVJNNjQKQEAgLTExNDQsNyArMTE0NCw3IEBAIGlmIG5vdCBDX0xPT1AKICAgICAgICAg
c3RvcmVwIGFkZHJlc3MsIFZNOjptX2xhc3RTdGFja1RvcFt2bV0KICAgICAgICAgcmV0CiAgICAg
Ci0gICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0IFZNRW50cnlGcmFtZSog
ZW50cnlGcmFtZSkKKyAgICAjIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoY29uc3QgRW50
cnlGcmFtZSogZW50cnlGcmFtZSkKICAgICBnbG9iYWwgX3ZtRW50cnlSZWNvcmQKICAgICBfdm1F
bnRyeVJlY29yZDoKICAgICAgICAgaWYgWDg2IG9yIFg4Nl9XSU4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5k
ZXggMTE0YTk3OC4uMzMwOTBlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTEyNSw4ICsxMjUsOCBA
QCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgc3RvcmVwIHZtLCBWTUVudHJ5UmVjb3Jk
OjptX3ZtW3NwXQogICAgIGxvYWRwIFZNOjp0b3BDYWxsRnJhbWVbdm1dLCB0NAogICAgIHN0b3Jl
cCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXQotICAgIGxvYWRwIFZN
Ojp0b3BWTUVudHJ5RnJhbWVbdm1dLCB0NAotICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6
bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXQorICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3Zt
XSwgdDQKKyAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVb
c3BdCiAKICAgICAjIEFsaWduIHN0YWNrIHBvaW50ZXIKICAgICBpZiBYODZfV0lOIG9yIE1JUFMK
QEAgLTE4OSw4ICsxODksOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAg
Vk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQ1CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDQKICAgICBzdG9yZXAgdDQsIFZNOjp0b3BDYWxsRnJhbWVb
dDVdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwg
dDQKLSAgICBzdG9yZXAgdDQsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDVdCisgICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ0CisgICAgc3RvcmVwIHQ0LCBW
TTo6dG9wRW50cnlGcmFtZVt0NV0KIAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBD
YWxsZWVSZWdpc3RlclNhdmVTaXplLCB0NQpAQCAtMjQxLDcgKzI0MSw3IEBAIG1hY3JvIGRvVk1F
bnRyeShtYWtlQ2FsbCkKIAogLmNvcHlBcmdzRG9uZToKICAgICBzdG9yZXAgc3AsIFZNOjp0b3BD
YWxsRnJhbWVbdm1dCi0gICAgc3RvcmVwIGNmciwgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAg
ICBzdG9yZXAgY2ZyLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIG1ha2VDYWxsKGVudHJ5
LCB0MywgdDQpCiAKQEAgLTI1NSw4ICsyNTUsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwp
CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQ1CiAgICAgbG9hZHAgVk1FbnRy
eVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDQKICAgICBzdG9yZXAgdDQsIFZNOjp0
b3BDYWxsRnJhbWVbdDVdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRy
eUZyYW1lW3NwXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDVdCisg
ICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ0CisgICAg
c3RvcmVwIHQ0LCBWTTo6dG9wRW50cnlGcmFtZVt0NV0KIAogICAgIGlmIEFSTXY3CiAgICAgICAg
IHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCB0NQpAQCAtMzI0LDggKzMyNCw4IEBA
IF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3Zt
W3NwXSwgdDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3Bd
LCB0NQogICAgIHN0b3JlcCB0NSwgVk06OnRvcENhbGxGcmFtZVt0M10KLSAgICBsb2FkcCBWTUVu
dHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdLCB0NQotICAgIHN0b3JlcCB0NSwg
Vk06OnRvcFZNRW50cnlGcmFtZVt0M10KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZU
b3BFbnRyeUZyYW1lW3NwXSwgdDUKKyAgICBzdG9yZXAgdDUsIFZNOjp0b3BFbnRyeUZyYW1lW3Qz
XQogCiAgICAgaWYgQVJNdjcKICAgICAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNp
emUsIHQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCmluZGV4IGUzN2EwZjYuLjk1OTA5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0x
MjksOCArMTI5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2bSwg
Vk1FbnRyeVJlY29yZDo6bV92bVtzcF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXSwg
dDQKICAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0K
LSAgICBsb2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZN
RW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6dG9w
RW50cnlGcmFtZVt2bV0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZU
b3BFbnRyeUZyYW1lW3NwXQogCiAgICAgbG9hZGkgUHJvdG9DYWxsRnJhbWU6OnBhZGRlZEFyZ0Nv
dW50W3Byb3RvQ2FsbEZyYW1lXSwgdDQKICAgICBhZGRwIENhbGxGcmFtZUhlYWRlclNsb3RzLCB0
NCwgdDQKQEAgLTE3MSw4ICsxNzEsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAg
bG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVt0NF0sIHZtCiAgICAgbG9hZHAgVk1FbnRyeVJlY29y
ZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCiAgICAgc3RvcmVwIGV4dHJh
VGVtcFJlZywgVk06OnRvcENhbGxGcmFtZVt2bV0KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjpt
X3ByZXZUb3BWTUVudHJ5RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcKLSAgICBzdG9yZXAgZXh0cmFU
ZW1wUmVnLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6
Om1fcHJldlRvcEVudHJ5RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcKKyAgICBzdG9yZXAgZXh0cmFU
ZW1wUmVnLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdp
c3RlclNhdmVTaXplLCBzcAogCkBAIC0yMjAsNyArMjIwLDcgQEAgbWFjcm8gZG9WTUVudHJ5KG1h
a2VDYWxsKQogICAgIGVsc2UKICAgICAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2FsbEZyYW1lW3Zt
XQogICAgIGVuZAotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAg
c3RvcmVwIGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudChleHRyYVRlbXBSZWcsIDB4YmFkMGRjMDIpCiAKQEAgLTIzNiw4ICsyMzYsOCBA
QCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92
bVt0NF0sIHZtCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3Q0
XSwgdDIKICAgICBzdG9yZXAgdDIsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwgdDIKLSAgICBzdG9yZXAgdDIs
IFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2
VG9wRW50cnlGcmFtZVt0NF0sIHQyCisgICAgc3RvcmVwIHQyLCBWTTo6dG9wRW50cnlGcmFtZVt2
bV0KIAogICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCBzcAogCkBAIC0yNzYs
NyArMjc2LDYgQEAgbWFjcm8gbWFrZUhvc3RGdW5jdGlvbkNhbGwoZW50cnksIHRlbXApCiAgICAg
ZW5kCiBlbmQKIAotCiBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgQ2FsbGVl
W2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCkBAIC0yOTEsOCArMjkwLDgg
QEAgX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1f
dm1bdDJdLCB0MwogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0
Ml0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BDYWxsRnJh
bWVbdDNdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3Qy
XSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcFZNRW50cnlG
cmFtZVt0M10KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3Qy
XSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcEVudHJ5RnJh
bWVbdDNdCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCBhNWE1M2M2Li4yYTJi
YmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNDA2
LDcgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAg
ICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseSgpID0gZmFsc2U7CiAKICAgICBpZiAoIU9wdGlv
bnM6OnVzZVdlYkFzc2VtYmx5KCkpCi0gICAgICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFz
dFRMUygpID0gZmFsc2U7CisgICAgICAgIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4
dCgpID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpCiAg
ICAgICAgIHx8IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggM2NlYzU1Mi4uODQ3NWMyMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDY3LDggKzQ2Nyw3IEBAIHR5cGVkZWYg
Y29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFz
dE1lbW9yeVJlZHpvbmVQYWdlcywgMTI4LCBOb3JtYWwsICJXZWJBc3NlbWJseSBmYXN0IG1lbW9y
aWVzIHVzZSA0R2lCIHZpcnR1YWwgYWxsb2NhdGlvbnMsIHBsdXMgYSByZWR6b25lIChjb3VudGVk
IGFzIG11bHRpcGxlIG9mIDY0S2lCIFdlYkFzc2VtYmx5IHBhZ2VzKSBhdCB0aGUgZW5kIHRvIGNh
dGNoIHJlZytpbW0gYWNjZXNzZXMgd2hpY2ggZXhjZWVkIDMyLWJpdCwgYW55dGhpbmcgYmV5b25k
IHRoZSByZWR6b25lIGlzIGV4cGxpY2l0bHkgYm91bmRzLWNoZWNrZWQiKSBcCiAgICAgdihib29s
LCBjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRy
dWUsIHdlIHdpbGwgY3Jhc2ggaWYgd2UgY2FuJ3Qgb2J0YWluIGZhc3QgbWVtb3J5IGZvciB3YXNt
LiIpIFwKICAgICB2KHVuc2lnbmVkLCBtYXhOdW1XZWJBc3NlbWJseUZhc3RNZW1vcmllcywgNCwg
Tm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMsIHRy
dWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1sb2Nh
bCBzdG9yYWdlIGlmIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4iKSBcCi0gICAg
dihib29sLCB1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUg
KGFuZCBmYXN0IFRMUyBpcyBlbmFibGVkKSwgd2Ugd2lsbCBzdG9yZSBjb250ZXh0IGluIGZhc3Qg
VExTLiBJZiBmYWxzZSwgd2Ugd2lsbCBwaW4gaXQgdG8gYSByZWdpc3Rlci4iKSBcCisgICAgdihi
b29sLCB1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdl
IHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0IFRMUy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0
IHRvIGEgcmVnaXN0ZXIuIikgXAogICAgIHYoYm9vbCwgdXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5
VG9KU0NhbGxzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBDYWxsTGlua0lu
Zm8gdG8gaW5saW5lIGNhY2hlIFdhc20gdG8gSlMgY2FsbHMuIikgXAogICAgIHYoYm9vbCwgdXNl
T2JqZWN0UmVzdFNwcmVhZCwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFibGUg
T2JqZWN0IFJlc3QvU3ByZWFkIGZlYXR1cmUuIikgXAogICAgIHYoYm9vbCwgdXNlQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsaW5nLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBvdXIg
bm9ybWFsIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsaW5nLiBJZiBmYWxzZSwgdGhlIGFsbG9jYXRp
b24gcHJvZmlsZSB3aWxsIGFsd2F5cyBjbGFpbSB0byBiZSB1bmRlY2lkZWQuIikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKaW5kZXgg
YTRiZTk1Yi4uM2JjZjZjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIEZy
YW1lV2Fsa2VyKFZNJiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBjb2RlQmxvY2tTZXRMb2NrZXIsIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBtYWNoaW5lVGhy
ZWFkc0xvY2tlcikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fY2FsbEZyYW1lKGNh
bGxGcmFtZSkKLSAgICAgICAgLCBtX3ZtRW50cnlGcmFtZSh2bS50b3BWTUVudHJ5RnJhbWUpCisg
ICAgICAgICwgbV9lbnRyeUZyYW1lKHZtLnRvcEVudHJ5RnJhbWUpCiAgICAgICAgICwgbV9jb2Rl
QmxvY2tTZXRMb2NrZXIoY29kZUJsb2NrU2V0TG9ja2VyKQogICAgICAgICAsIG1fbWFjaGluZVRo
cmVhZHNMb2NrZXIobWFjaGluZVRocmVhZHNMb2NrZXIpCiAgICAgewpAQCAtMTMwLDcgKzEzMCw3
IEBAIHByb3RlY3RlZDoKICAgICBTVVBQUkVTU19BU0FOCiAgICAgdm9pZCBhZHZhbmNlVG9QYXJl
bnRGcmFtZSgpCiAgICAgewotICAgICAgICBtX2NhbGxGcmFtZSA9IG1fY2FsbEZyYW1lLT51bnNh
ZmVDYWxsZXJGcmFtZShtX3ZtRW50cnlGcmFtZSk7CisgICAgICAgIG1fY2FsbEZyYW1lID0gbV9j
YWxsRnJhbWUtPnVuc2FmZUNhbGxlckZyYW1lKG1fZW50cnlGcmFtZSk7CiAgICAgfQogCiAgICAg
Ym9vbCBpc0F0VG9wKCkgY29uc3QKQEAgLTE4OCw3ICsxODgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBWTSYgbV92bTsKICAgICBFeGVjU3RhdGUqIG1fY2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFt
ZSogbV92bUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogbV9lbnRyeUZyYW1lOwogICAgIGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBtX2NvZGVCbG9ja1NldExvY2tlcjsKICAgICBjb25zdCBBYnN0
cmFjdExvY2tlciYgbV9tYWNoaW5lVGhyZWFkc0xvY2tlcjsKICAgICBib29sIG1fYmFpbGluZ091
dCB7IGZhbHNlIH07CkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpw
cm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKICAgICAgICAgICAgICAgICAvLyBXZSByZXVz
ZSBMTEludCBDb2RlQmxvY2tzIGZvciB0aGUgYmFzZWxpbmUgSklULCBzbyB3ZSBuZWVkIHRvIGNo
ZWNrIGZvciBib3RoIGppdCB0eXBlcy4KICAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFs
c28gYmUgZmFsc2UgZm9yIHZhcmlvdXMgcmVhc29ucyAoa25vd24gYW5kIHVua25vd24pLCBldmVu
IHRob3VnaAogICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwZXIgdW5saWtlbHkuIE9uZSByZWFz
b24gdGhhdCB0aGlzIGNhbiBiZSBmYWxzZSBpcyB3aGVuIHdlIHRocm93IGZyb20gYSBERkcgZnJh
bWUsCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBh
c3QgYSBWTUVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZworICAgICAgICAgICAg
ICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGFuIEVudHJ5RnJhbWUs
IHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZwogICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUg
TExJbnQncyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWlu
c3QgdGhpcwogICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UaHJvd1Njb3BlLmNwcAppbmRleCAwNmU5MzAzLi40YzY1ZDYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NywxMyArNTcsMTMgQEAg
VGhyb3dTY29wZTo6flRocm93U2NvcGUoKQogCiAgICAgYm9vbCB3aWxsQmVIYW5kbGVCeUxMSW50
T3JKSVQgPSBmYWxzZTsKICAgICB2b2lkKiBwcmV2aW91c1Njb3BlID0gbV9wcmV2aW91c1Njb3Bl
OwotICAgIHZvaWQqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOworICAg
IHZvaWQqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CiAKLSAgICAvLyBJZiB0
aGUgdG9wVk1FbnRyeUZyYW1lIHdhcyBwdXNoZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBwcmV2
aW91c1Njb3BlIHdhcyBpbnN0YW50aWF0ZWQsCisgICAgLy8gSWYgdGhlIHRvcEVudHJ5RnJhbWUg
d2FzIHB1c2hlZCBvbiB0aGUgc3RhY2sgYWZ0ZXIgdGhlIHByZXZpb3VzU2NvcGUgd2FzIGluc3Rh
bnRpYXRlZCwKICAgICAvLyB0aGVuIHRoaXMgdGhyb3dTY29wZSB3aWxsIGJlIHJldHVybmluZyB0
byBMTElOVCBvciBKSVQgY29kZSB0aGF0IGFsd2F5cyBkbyBhbiBleGNlcHRpb24KICAgICAvLyBj
aGVjay4gSW4gdGhhdCBjYXNlLCBza2lwIHRoZSBzaW11bGF0ZWQgdGhyb3cgYmVjYXVzZSB0aGUg
TExJbnQgYW5kIEpJVCB3aWxsIGJlCiAgICAgLy8gY2hlY2tpbmcgZm9yIHRoZSBleGNlcHRpb24g
dGhlaXIgb3duIHdheSBpbnN0ZWFkIG9mIGNhbGxpbmcgVGhyb3dTY29wZTo6ZXhjZXB0aW9uKCku
Ci0gICAgaWYgKHRvcFZNRW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wVk1FbnRyeUZy
YW1lKQorICAgIGlmICh0b3BFbnRyeUZyYW1lICYmIHByZXZpb3VzU2NvcGUgPiB0b3BFbnRyeUZy
YW1lKQogICAgICAgICB3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQgPSB0cnVlOwogICAgIAogICAg
IGlmICghd2lsbEJlSGFuZGxlQnlMTEludE9ySklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCmluZGV4IDE4MWUzYjcuLjNlZTUxODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAsIHZtVHlwZSh2bVR5cGUpCiAgICAgLCBjbGllbnRE
YXRhKDApCi0gICAgLCB0b3BWTUVudHJ5RnJhbWUobnVsbHB0cikKKyAgICAsIHRvcEVudHJ5RnJh
bWUobnVsbHB0cikKICAgICAsIHRvcENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCiAg
ICAgLCBwcm9taXNlRGVmZXJyZWRUaW1lcihzdGQ6Om1ha2VfdW5pcXVlPFByb21pc2VEZWZlcnJl
ZFRpbWVyPigqdGhpcykpCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlKHZtVHlwZSA9PSBEZWZh
dWx0ID8gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSA6IG5ldyBBdG9taWNT
dHJpbmdUYWJsZSkKQEAgLTM2OCw3ICszNjgsNyBAQCBWTTo6flZNKCkKICAgICBwcm9taXNlRGVm
ZXJyZWRUaW1lci0+c3RvcFJ1bm5pbmdUYXNrcygpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
ICAgICBpZiAoV2FzbTo6ZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpKQotICAgICAgICBXYXNtOjpl
bnN1cmVXb3JrbGlzdCgpLnN0b3BBbGxQbGFuc0ZvclZNKCp0aGlzKTsKKyAgICAgICAgV2FzbTo6
ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JDb250ZXh0KHdhc21Db250ZXh0KTsKICNl
bmRpZgogICAgIGlmIChVTkxJS0VMWShtX3dhdGNoZG9nKSkKICAgICAgICAgbV93YXRjaGRvZy0+
d2lsbERlc3Ryb3lWTSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDk1
NTg1OTQuLjkyNzcxM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNTUsNiAr
NTUsNyBAQAogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUg
IlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCisjaW5jbHVkZSAiV2FzbUNv
bnRleHQuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2lu
dGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CkBAIC0z
MjksMTQgKzMzMCwxMyBAQCBwdWJsaWM6CiAKICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENsaWVu
dERhdGEqIGNsaWVudERhdGE7Ci0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWU7Cisg
ICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZTsKICAgICAvLyBOT1RFOiBXaGVuIHRocm93aW5n
IGFuIGV4Y2VwdGlvbiB3aGlsZSByb2xsaW5nIGJhY2sgdGhlIGNhbGwgZnJhbWUsIHRoaXMgbWF5
IGJlIGVxdWFsIHRvCi0gICAgLy8gdG9wVk1FbnRyeUZyYW1lLgorICAgIC8vIHRvcEVudHJ5RnJh
bWUuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgdm9pZCosIGJlY2F1c2UgaXQgbWln
aHQgbm90IHBvaW50IHRvIGEgQ2FsbEZyYW1lLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA0NDEKICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZSB7
IG51bGxwdHIgfTsKLSAgICAvLyBGSVhNRTogU2F2ZSB0aGlzIHN0YXRlIGVsc2V3aGVyZSB0byBh
bGxvdyBQSUMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3NzMK
LSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0IHsgbnVsbHB0ciB9OworICAg
IFdhc206OkNvbnRleHQgd2FzbUNvbnRleHQ7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0
dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0
cnVjdHVyZTsKQEAgLTUwMSw5ICs1MDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVk0sIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKICAgICB9CiAKLSAgICBz
dGF0aWMgcHRyZGlmZl90IHRvcFZNRW50cnlGcmFtZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRp
ZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoVk0sIHRvcFZNRW50cnlGcmFtZSk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUpOwogICAgIH0KIAogICAgIHZvaWQgcmVzdG9yZVByZXZp
b3VzRXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IHNldEV4Y2VwdGlvbihleGNlcHRp
b24pOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGRl
YWE0NDkuLjg3M2QzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwCkBAIC04OSw3ICs4OSw3IEBAIGlubGluZSBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxG
cmFtZShDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSkKICAgICByZXR1cm4gdG9wQ2FsbEZyYW1lOwog
fQogCi1zdGF0aWMgYm9vbCBpc1NhbmVGcmFtZShDYWxsRnJhbWUqIGZyYW1lLCBDYWxsRnJhbWUq
IGNhbGxlZUZyYW1lLCBWTUVudHJ5RnJhbWUqIGVudHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0YWNr
Qm91bmRzKQorc3RhdGljIGJvb2wgaXNTYW5lRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSwgQ2FsbEZy
YW1lKiBjYWxsZWVGcmFtZSwgRW50cnlGcmFtZSogZW50cnlGcmFtZSwgU3RhY2tCb3VuZHMgc3Rh
Y2tCb3VuZHMpCiB7CiAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZyYW1lKSA+PSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihlbnRyeUZyYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTIxLDE4ICsxMjEsMTggQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFr
cG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMKICAgICB9CiAK
ICAgICBDb2RlQmxvY2sqIGZvdW5kQ29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBWTUVudHJ5RnJh
bWUqIHZtRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBl
bnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKIAogICAgIC8vIFdlIGRvbid0IGhhdmUgYSBj
YWxsZWUgdG8gc3RhcnQgd2l0aC4gU28sIHVzZSB0aGUgZW5kIG9mIHRoZSBzdGFjayB0byBrZWVw
IHRoZQogICAgIC8vIGlzU2FuZUZyYW1lKCkgY2hlY2tlciBiZWxvdyBoYXBweSBmb3IgdGhlIGZp
cnN0IGl0ZXJhdGlvbi4gSXQgd2lsbCBzdGlsbCBjaGVjawogICAgIC8vIHRvIGVuc3VyZSB0aGF0
IHRoZSBhZGRyZXNzIGlzIGluIHRoZSBzdGFja0JvdW5kcy4KICAgICBDYWxsRnJhbWUqIGNhbGxl
ZUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihzdGFja0JvdW5kcy5lbmQoKSk7
CiAKLSAgICBpZiAoIXZtRW50cnlGcmFtZSB8fCAhY2FsbEZyYW1lKQorICAgIGlmICghZW50cnlG
cmFtZSB8fCAhY2FsbEZyYW1lKQogICAgICAgICByZXR1cm47IC8vIE5vdCBydW5uaW5nIEpTIGNv
ZGUuIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAogICAgIGRvIHsKLSAg
ICAgICAgaWYgKCFpc1NhbmVGcmFtZShjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCB2bUVudHJ5RnJh
bWUsIHN0YWNrQm91bmRzKSkKKyAgICAgICAgaWYgKCFpc1NhbmVGcmFtZShjYWxsRnJhbWUsIGNh
bGxlZUZyYW1lLCBlbnRyeUZyYW1lLCBzdGFja0JvdW5kcykpCiAgICAgICAgICAgICByZXR1cm47
IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAogICAgICAgICBDb2Rl
QmxvY2sqIGNhbmRpZGF0ZUNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC0x
NDIsOSArMTQyLDkgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNp
Z25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMKICAgICAgICAgfQogCiAgICAg
ICAgIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lOwotICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAKLSAgICB9IHdoaWxlIChjYWxsRnJhbWUg
JiYgdm1FbnRyeUZyYW1lKTsKKyAgICB9IHdoaWxlIChjYWxsRnJhbWUgJiYgZW50cnlGcmFtZSk7
CiAKICAgICBpZiAoIWZvdW5kQ29kZUJsb2NrKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIGp1
c3QgZW50ZXJlZCB0aGUgZnJhbWUgYW5kIHRoZSBjb2RlQmxvY2sgcG9pbnRlciBpcyBub3QKQEAg
LTE4MSwxNyArMTgxLDE3IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0
YWNrKExvY2tlcjxMb2NrPiYsIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lCiAKICAgICBtX25lZWRU
b0ludmFsaWRhdGVkQ29kZUJsb2NrcyA9IGZhbHNlOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVu
dHJ5RnJhbWUgPSB2bSgpLnRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZy
YW1lID0gdm0oKS50b3BFbnRyeUZyYW1lOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdG9w
Q2FsbEZyYW1lOwogCi0gICAgaWYgKCF2bUVudHJ5RnJhbWUpCisgICAgaWYgKCFlbnRyeUZyYW1l
KQogICAgICAgICByZXR1cm47IC8vIE5vdCBydW5uaW5nIEpTIGNvZGUuIE5vdGhpbmcgdG8gaW52
YWxpZGF0ZS4KIAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBpZiAoY29kZUJsb2Nr
ICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAg
ICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFw
cyk7Ci0gICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodm1FbnRyeUZy
YW1lKTsKKyAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZShlbnRyeUZy
YW1lKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAppbmRleCBhZDdkNjIxLi5hZjZjZmU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC00OSw4ICs0OSw2
IEBACiAjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZp
cnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgpAQCAt
MTc4LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJH
U19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9y
KGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbios
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9u
TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqKTsKKyAgICBCM0lSR2Vu
ZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5j
dGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBp
bGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dh
c21FeGNlcHRpb24pOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
QXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTI0Nyw3ICsyNDUsNyBAQCBw
cml2YXRlOgogCiAgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1
c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKIAotICAgIHZvaWQgcmVzdG9yZVdh
c21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOworICAgIHZvaWQgcmVz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayosIFZhbHVlKik7
CiAgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZv
cm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOwogCiAg
ICAgT3JpZ2luIG9yaWdpbigpOwpAQCAtMjY3LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgSW5z
ZXJ0aW9uU2V0IG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXM7CiAgICAgR1BSUmVnIG1fbWVtb3J5
QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsg
SW52YWxpZEdQUlJlZyB9OwotICAgIEdQUlJlZyBtX3dhc21Db250ZXh0R1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BS
UmVnIH07CiAgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OwogCiAgICAgVmFsdWUqIG1f
aW5zdGFuY2VWYWx1ZSB7IG51bGxwdHIgfTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVs
b3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2Vk
LgpAQCAtMjkxLDM3ICsyODksMzcgQEAgaW50MzJfdCBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50
ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnMKICAgICByZXR1
cm4gb2Zmc2V0OwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dChQ
cm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJnKQordm9pZCBCM0lS
R2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmIHByb2MsIEJh
c2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJnKQogewotICAgIGlmICh1c2VGYXN0VExTRm9yQ29u
dGV4dCgpKSB7CisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKLSAgICAgICAgaWYgKENDYWxsSGVscGVyczo6
c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAgICAgaWYg
KENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hS
ZWdpc3RlcigpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6
bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29u
c3RyYWluZWRWYWx1ZShhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBD
Q2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkp
OwotICAgICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KHBhcmFtc1swXS5ncHIoKSk7
CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dT
Y3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01h
Y3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250
ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNs
b2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBu
ZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgIC8vIEZJWE1FOiBCZWNh
dXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVy
IGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNh
bGxlciBzaWRlLgogICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJl
ZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCiAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CiAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZm
ZWN0czo6bm9uZSgpOwogICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICBlZmZl
Y3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IGVmZmVjdHM7Ci0gICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93
YXNtQ29udGV4dEdQUikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0
KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0
YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAgIEdQUlJlZyB3YXNtQ29u
dGV4dEdQUiA9IG1fd2FzbUNvbnRleHRHUFI7CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFu
Y2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW0pIHsKLSAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250
ZXh0R1BSKTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0SW5z
dGFuY2VHUFIpOwogICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJu
YWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2Rl
IGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRp
ZXJVcCkKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxh
dGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNl
cHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAgLCBtX21v
ZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKQEAgLTMz
OSw5ICszMzcsOSBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgIG1fbWVtb3J5QmFzZUdQ
UiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgbV9wcm9jLnBpblJlZ2lzdGVy
KG1fbWVtb3J5QmFzZUdQUik7CiAKLSAgICBtX3dhc21Db250ZXh0R1BSID0gcGlubmVkUmVncy53
YXNtQ29udGV4dFBvaW50ZXI7Ci0gICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAg
ICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEdQUik7CisgICAgbV93YXNtQ29u
dGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsK
KyAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgbV9wcm9jLnBpblJlZ2lz
dGVyKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAKICAgICBpZiAobW9kZSAhPSBNZW1vcnlN
b2RlOjpTaWduYWxpbmcpIHsKICAgICAgICAgQVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdpc3Rl
cnNbMF0uc2l6ZU9mZnNldCk7CkBAIC0zNTAsNiArMzQ4LDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9j
ZWR1cmUKICAgICAgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rl
cik7CiAgICAgfQogCisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICAgICAgVGh1bmtz
OjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsK
KwogICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0No
ZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIpIHsK
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKQEAgLTM2Myw2ICszNjQsMTYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2Vw
dGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CisKKyAgICAg
ICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25h
bGluZzoKKyAgICAgICAgLy8gTW9zdCBtZW1vcnkgYWNjZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUg
ZG9uJ3QgZG8gYW4gZXhwbGljaXQgZXhjZXB0aW9uIGNoZWNrIGJlY2F1c2UgdGhleSBjYW4gcmVs
eSBvbiBmYXVsdCBoYW5kbGluZyB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1
bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZSB0aHVuayB0byBleGlzdCBzbyB0
aGF0IGl0IGNhbiBqdW1wIHRvIHRoYXQgdGh1bmsuCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
IVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5l
cmF0b3IpKSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICB9CiAKICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1l
SW5Qcm9sb2d1ZSgmY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9jLCBPcmln
aW4oKSwgbV9jdXJyZW50QmxvY2spOwpAQCAtMzczLDEyICszODQsMTIgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUKICAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gc3RhY2tPdmVyZmxvd0NoZWNr
OwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVSZWdpc3RlcihmcmFtZVBv
aW50ZXIpOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29u
dGV4dCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwg
Y2xvYmJlcnMgd2FzbUNvbnRleHQgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdl
IG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgICAgIGlmICghQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNt
VG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9l
cyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lk
ZS4KICAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJl
ZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCiAgICAgICAg
ICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7CiAg
ICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVl
OwotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25zdHJhaW50ID0gVmFs
dWVSZXA6OnJlZyhtX3dhc21Db250ZXh0R1BSKTsKKyAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dD
aGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3Rh
bmNlR1BSKTsKICAgICAgICAgfQogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPm51bUdQU2Ny
YXRjaFJlZ2lzdGVycyA9IDI7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewpAQCAtNDAxLDcgKzQxMiw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlCiAgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dDaGVjayA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpOwogICAgICAg
ICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1l
U2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKIAot
ICAgICAgICAgICAgR1BSUmVnIGNvbnRleHQgPSB1c2VGYXN0VExTRm9yQ29udGV4dCgpID8gcGFy
YW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBjb250
ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyBwYXJhbXNbMF0uZ3ByKCkgOiBt
X3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAKICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGxl
YWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJhbWUgc2l6ZSBp
cyB3aXRoaW4KICAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRoZWlyIGNhbGxl
ciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCkBAIC00MTEsMTAgKzQyMiwxMCBA
QCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBp
bmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKIAotICAgICAgICAgICAgICAgIGlmICh1c2VGYXN0VExT
Rm9yQ29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGNv
bnRleHQpOworICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFu
Y2UpOwogCi0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGNvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIp
OworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250
ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xp
bWl0KCkpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CiAgICAgICAgICAgICAgICAg
aWYgKFVOTElLRUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCkBAIC00MjMsMTAgKzQzNCwxMCBAQCBC
M0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
b3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5n
bGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3Vz
ZXNJbnN0YW5jZVZhbHVlICYmIHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1c2VGYXN0VExTKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0
aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3QuCi0gICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwg
Q0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkp
OwotICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGpp
dCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNo
UmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KGNvbnRleHRJbnN0YW5jZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBkb24ndCBhY3R1YWxseSBuZWVk
IHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRjaHBvaW50IGNvbnNlcnZhdGl2
ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFjayBjaGVjaykgd2hpY2ggcHJl
dmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KICAgICAgICAgICAgIH0KQEAgLTQzOCw3ICs0
NDksNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogCiB2b2lkIEIzSVJHZW5lcmF0b3I6OnJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1v
cnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykK
IHsKLSAgICByZXN0b3JlV2FzbUNvbnRleHQocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKyAgICBy
ZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwcm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAg
aWYgKCEhbWVtb3J5KSB7CiAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVk
UmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNDU4LDEyICs0NjksMTIgQEAg
dm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBN
ZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3IKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW3Bpbm5lZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9
IHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAg
ICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7CiAgICAg
ICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwogICAgICAgICAgICAgQVNTRVJU
KCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMg
d2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyBy
ZWxhdGl2ZSB0byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1l
bW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNp
emVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgp
KSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6
ZVJlZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6
ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwogICAgICAgICB9KTsKQEAgLTU0
MSwyNCArNTUyLDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNz
aW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
ewotICAgIGludDMyX3QgKCpncm93TWVtb3J5KSAoQ29udGV4dCosIGludDMyX3QpID0gW10gKENv
bnRleHQqIHdhc21Db250ZXh0LCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsKLSAgICAgICAg
Vk0mIHZtID0gKndhc21Db250ZXh0LT52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogd2FzbU1l
bW9yeSA9IHdhc21Db250ZXh0LT5tZW1vcnkoKTsKLQorICAgIGludDMyX3QgKCpncm93TWVtb3J5
KShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBpbnQzMl90KSA9IFtdIChKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsKICAgICAgICAgaWYg
KGRlbHRhIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICBib29sIHNob3Vs
ZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IGZhbHNlOwotICAgICAgICAvLyBncm93KCkgZG9l
cyBub3QgcmVxdWlyZSBFeGVjU3RhdGUqIGlmIGl0IGRvZXNuJ3QgdGhyb3cgZXhjZXB0aW9ucy4K
LSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbnVsbHB0cjsKLSAgICAgICAgUGFnZUNvdW50IHJl
c3VsdCA9IHdhc21NZW1vcnktPmdyb3codm0sIGV4ZWMsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihk
ZWx0YSksIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7Ci0gICAgICAgIHNjb3BlLnJl
bGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgYXV0byBncm93biA9IGluc3RhbmNlLT5pbnRlcm5hbE1l
bW9yeSgpLmdyb3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1v
cnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9y
eTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVt
b3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2Fz
ZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gcmVz
dWx0LnBhZ2VDb3VudCgpOworICAgICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQo
KTsKICAgICB9OwogCiAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2Fs
bFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKQEAgLTU3MiwxMyArNTgxLDEzIEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVt
b3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1
ZSogbWVtb3J5T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBz
YWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkp
KTsKKyAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFu
Y2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mV2FzbU1lbW9yeSgpKSk7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShz
dGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihudWxscHRyKS0+bWVtb3J5KCktPm1l
bW9yeSgpLnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0
aGlzIHNpemUiKTsKLSAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3Qs
IHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7
CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8V2FzbTo6TWVt
b3J5Kj4obnVsbHB0ciktPnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJl
bGllcyBvbiB0aGlzIHNpemUiKTsKKyAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1v
cnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkp
KTsKICAgICAKICAgICBjb25zdGV4cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OwotICAgIHN0
YXRpY19hc3NlcnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAxIDw8IHNoaWZ0VmFsdWUsICJUaGlz
IG11c3QgaG9sZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhp
cyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CiAgICAgVmFs
dWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBa
U2hyLCBvcmlnaW4oKSwKICAgICAgICAgc2l6ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNoaWZ0VmFsdWUpKTsKIApAQCAtMTA2OSwx
NCArMTA3OCwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIG1fbWF4TnVtSlND
YWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19j
YXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCiAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMg
Y2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBi
ZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRp
b24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYy
Ci0gICAgICAgIFZhbHVlKiBmdW5jdGlvbkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGlu
c3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKSk7Ci0gICAgICAgIFZhbHVlKiBq
c1R5cGVPZkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZDhaLCBvcmlnaW4oKSwgZnVuY3Rpb25JbXBvcnQsIHNhZmVDYXN0PGludDMyX3Q+
KEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpKTsKLSAgICAgICAgVmFsdWUqIGlzV2FzbUNh
bGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmln
aW4oKSwganNUeXBlT2ZJbXBvcnQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSkpOworICAgICAg
ICBWYWx1ZSogdGFyZ2V0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZh
bHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZU
YXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAgICAgICBWYWx1ZSogaXNXYXNtQ2Fs
bCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9y
aWdpbigpLCB0YXJnZXRJbnN0YW5jZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKTsKIAogICAgICAgICBCYXNpY0Jsb2NrKiBpc1dh
c21CbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBCYXNpY0Jsb2NrKiBpc0pTQmxv
Y2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogaXNFbWJlZGRlckJs
b2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
biA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGlzV2FzbUNhbGwsIEZy
ZXF1ZW50ZWRCbG9jayhpc1dhc21CbG9jayksIEZyZXF1ZW50ZWRCbG9jayhpc0pTQmxvY2spKTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIz
OjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxv
Y2spLCBGcmVxdWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2NrKSk7CiAKICAgICAgICAgVmFsdWUq
IHdhc21DYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJv
YywgaXNXYXNtQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAg
ICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CkBAIC0xMDk3LDE1
ICsxMTA1LDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgVXBzaWxvblZhbHVl
KiB3YXNtQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZvaWQgPyBudWxscHRyIDog
aXNXYXNtQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHdh
c21DYWxsUmVzdWx0KTsKICAgICAgICAgaXNXYXNtQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24pOwogCi0gICAgICAgIC8vIEZJ
WE1FOiBMZXRzIHJlbW92ZSB0aGlzIGluZGlyZWN0aW9uIGJ5IGNyZWF0aW5nIGEgUElDIGZyaWVu
ZGx5IElDCisgICAgICAgIC8vIEZJWE1FOiBMZXQncyByZW1vdmUgdGhpcyBpbmRpcmVjdGlvbiBi
eSBjcmVhdGluZyBhIFBJQyBmcmllbmRseSBJQwogICAgICAgICAvLyBmb3IgY2FsbHMgb3V0IHRv
IEpTLiBUaGlzIHNob3VsZG4ndCBiZSB0aGF0IGhhcmQgdG8gZG8uIFdlIGNvdWxkIHByb2JhYmx5
CiAgICAgICAgIC8vIGltcGxlbWVudCB0aGUgSUMgdG8gYmUgb3ZlciBXYXNtOjpDb250ZXh0Ki4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM3
NQotICAgICAgICBWYWx1ZSogY29kZUJsb2NrID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywKLSAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSkpOwotICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9u
ID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKLSAgICAgICAgICAg
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIHNhZmVDYXN0PGludDMy
X3Q+KEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6Om9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKGZ1
bmN0aW9uSW5kZXgpKSk7Ci0gICAgICAgIFZhbHVlKiBqc0NhbGxSZXN1bHQgPSB3YXNtQ2FsbGlu
Z0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBpc0pTQmxvY2ssIG9yaWdpbigpLCBhcmdz
LCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzRW1i
ZWRkZXJCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCisgICAgICAgICAgICBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbUNvZGVCbG9jaygpKSk7
CisgICAgICAgIFZhbHVlKiBqdW1wRGVzdGluYXRpb24gPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKCksIGNvZGVCbG9jaywgc2FmZUNhc3Q8aW50MzJfdD4oQ29kZUJsb2NrOjpvZmZz
ZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihmdW5jdGlvbkluZGV4KSkpOworICAgICAgICBW
YWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBD
YWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0
dXJuVHlwZSksCiAgICAgICAgICAgICBbJl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkg
ewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1
ZTsKQEAgLTExMTksOCArMTEyNyw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAg
ICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5n
cHIoKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgVXBz
aWxvblZhbHVlKiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVs
bHB0ciA6IGlzSlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwganNDYWxsUmVzdWx0KTsKLSAgICAgICAgaXNKU0Jsb2NrLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVXBzaWxv
blZhbHVlKiBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8g
bnVsbHB0ciA6IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgZW1iZWRkZXJDYWxsUmVzdWx0KTsKKyAgICAgICAgaXNFbWJlZGRlckJsb2Nr
LT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0
aW9uKTsKIAogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKIApAQCAtMTEy
OSw3ICsxMTM3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIHJlc3VsdCA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IFBoaSwgdG9CM1R5cGUocmV0dXJuVHlwZSksIG9yaWdpbigpKTsKICAgICAgICAgICAgIHdhc21D
YWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7Ci0gICAgICAgICAgICBqc0NhbGxSZXN1
bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAgICAgIGVtYmVkZGVyQ2FsbFJlc3Vs
dFVwc2lsb24tPnNldFBoaShyZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIGNh
bGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAv
IG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KQEAgLTExNjUsMTcgKzExNzMsMTcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9
IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YXJncy5zaXplKCkpKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZm
ZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUganNGdW5jdGlvbkJ1ZmZlcjsKKyAgICBFeHByZXNzaW9u
VHlwZSBpbnN0YW5jZXNCdWZmZXI7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlclNpemU7CiAgICAgewogICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWJsZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGlu
dDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKSk7CisgICAgICAg
ICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6b2Zmc2V0T2ZXYXNtVGFibGUoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVm
ZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxp
bnQzMl90PihKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsKLSAgICAg
ICAganNGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICB0
YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkpTRnVu
Y3Rpb25zKCkpKTsKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpU
YWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSkpOworICAgICAgICBpbnN0YW5jZXNCdWZmZXIgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+
KFdhc206OlRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXJTaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNh
c3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZlNpemUoKSkpOworICAgICAg
ICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFdhc206OlRhYmxlOjpvZmZzZXRPZlNpemUo
KSkpOwogICAgIH0KIAogICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3Ig
aXMgdmFsaWQuCkBAIC0xMTk1LDYgKzEyMDMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npbwog
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZm
ZXIsIG9mZnNldCk7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlz
IGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJl
SW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgorICAgIC8vIEZJWE1FOiB3aGVu
IHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVj
YXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2FsbGFi
bGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50MzJfdCksICJMb2FkIGNv
ZGVnZW4gYXNzdW1lcyBpMzIiKTsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJ
bmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgSW50MzIsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKSk7CiAgICAg
ewpAQCAtMTIyMywxOSArMTIzMiwxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgIHsK
ICAgICAgICAgVmFsdWUqIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAotICAg
ICAgICAgICAgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU09i
amVjdD4pKSk7Ci0gICAgICAgIFZhbHVlKiBqc09iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCks
Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFk
ZCwgb3JpZ2luKCksIGpzRnVuY3Rpb25CdWZmZXIsIG9mZnNldCkpOworICAgICAgICAgICAgY29u
c3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdhc206Okluc3RhbmNlKikpKTsKKyAgICAgICAg
VmFsdWUqIG5ld0NvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2lu
KCksIGluc3RhbmNlc0J1ZmZlciwgb2Zmc2V0KSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogY29u
dGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGRvQ29u
dGV4dFN3aXRjaCA9IG1fcHJvYy5hZGRCbG9jaygpOwogCi0gICAgICAgIFZhbHVlKiBuZXdDb250
ZXh0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIGpzT2JqZWN0LCBzYWZlQ2Fz
dDxpbnQzMl90PihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSk7
Ci0gICAgICAgIFZhbHVlKiBpc1NhbWVDb250ZXh0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCi0gICAgICAgICAgICBuZXdDb250ZXh0
LCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAgICBWYWx1ZSogaXNTYW1lQ29udGV4dEluc3RhbmNl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2lu
KCksCisgICAgICAgICAgICBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNlVmFsdWUoKSk7CiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6
QnJhbmNoLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIGlzU2FtZUNvbnRleHQsIEZyZXF1ZW50ZWRC
bG9jayhjb250aW51YXRpb24pLCBGcmVxdWVudGVkQmxvY2soZG9Db250ZXh0U3dpdGNoKSk7Cisg
ICAgICAgICAgICBpc1NhbWVDb250ZXh0SW5zdGFuY2UsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51
YXRpb24pLCBGcmVxdWVudGVkQmxvY2soZG9Db250ZXh0U3dpdGNoKSk7CiAKICAgICAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAgLTEyNDMsMjYgKzEyNTAsMjYg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzIxODEKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86
OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwogICAgICAgICBwYXRj
aHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0g
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0LCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG5ld0NvbnRleHRJbnN0YW5jZSwgVmFs
dWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5j
ZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBHUFJSZWcgbmV3Q29u
dGV4dCA9IHBhcmFtc1swXS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0ID0g
cGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9
IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2Ug
PSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8m
IHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwogICAgICAgICAgICAgY29u
c3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAg
ICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAg
ICAgICAgICBBU1NFUlQobmV3Q29udGV4dCAhPSBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0LCBDb250ZXh0OjpvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgaml0LnN0
b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0LCBDb250
ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwotICAgICAgICAgICAgaml0LnN0b3Jl
V2FzbUNvbnRleHQobmV3Q29udGV4dCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJh
c2VNZW1vcnkpOyAvLyBKU1dlYkFzc2VtYmx5TWVtb3J5Ki4KKyAgICAgICAgICAgIEFTU0VSVChu
ZXdDb250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5l
d0NvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQoKSkpOworICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShu
ZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnkqLgogICAgICAg
ICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIEFTU0VSVChz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBBU1NF
UlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHQpOworICAgICAgICAgICAg
QVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwog
ICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8v
IE1lbW9yeSBzaXplLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsgLy8gV2FzbU1lbW9yeTo6dm9pZCouCisgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRP
ZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdh
c206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1v
cnk6OnZvaWQqLgogICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dpdGNoLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIApA
QCAtMTMzOSwxOTQgKzEzNDYsNiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVj
dG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzcwogICAgIGRhdGFM
b2dMbigpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNU
b1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1l
bW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkKLXsKLSAgICBDQ2FsbEhlbHBl
cnMmIGppdCA9ICpjb21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBvaW50SklUOwotCi0gICAgYXV0
byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7Ci0gICAgaml0
LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0KLSAgICAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMg
Y29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMy
MQotICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbiA9IGppdC5tb3Zl
V2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciogbGlu
a2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICpsaW5rZWRD
YWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxlZU1vdmVMb2NhdGlvbik7Ci0g
ICAgfSk7Ci0KLSAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpOwotICAgIFJlZ2lzdGVyU2V0IHRvU2F2ZSA9IHBpbm5lZFJl
Z3MudG9TYXZlKG1vZGUpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHVuc2lnbmVkIHRv
U2F2ZVNpemUgPSB0b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCk7Ci0gICAgLy8gVGhleSBzaG91bGQg
YWxsIGJlIGNhbGxlZSBzYXZlcy4KLSAgICB0b1NhdmUuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIEFTU0VSVCh0b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCkg
PT0gdG9TYXZlU2l6ZSk7Ci0jZW5kaWYKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lz
dGVyc1RvU3BpbGwodG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6
OkZyYW1lUG9pbnRlckJhc2VkKTsKLSAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7Ci0KLSAgICB1bnNpZ25lZCB0b3RhbEZyYW1lU2l6
ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsKLSAgICB0b3RhbEZy
YW1lU2l6ZSArPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzKCk7Ci0g
ICAgdG90YWxGcmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgIHVuc2ln
bmVkIG51bUdQUnMgPSAwOwotICAgIHVuc2lnbmVkIG51bUZQUnMgPSAwOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAg
ICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpJ
NjQ6Ci0gICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAg
ICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgKytudW1HUFJz
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICBj
YXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgdG90YWxGcmFtZVNp
emUgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVtRlBSczsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRvdGFsRnJhbWVTaXplID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgdG90YWxGcmFtZVNp
emUpOwotICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZy
YW1lU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAv
LyBXZSBzYXZlIGFsbCB0aGVzZSByZWdpc3RlcnMgcmVnYXJkbGVzcyBvZiBoYXZpbmcgYSBtZW1v
cnkgb3Igbm90LgotICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCB3ZSB1c2Ugb25lIG9mIHRoZXNl
IGFzIGEgc2NyYXRjaC4gVGhhdCBzYWlkLAotICAgIC8vIGFsbW9zdCBhbGwgcmVhbCB3YXNtIHBy
b2dyYW1zIHVzZSBtZW1vcnksIHNvIGl0J3Mgbm90IHJlYWxseQotICAgIC8vIHdvcnRoIG9wdGlt
aXppbmcgZm9yIHRoZSBjYXNlIHRoYXQgdGhleSBkb24ndC4KLSAgICBmb3IgKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewotICAgICAgICBH
UFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0gICAgICAgIHB0cmRpZmZfdCBv
ZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKHJlZywg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQp
KTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgd2FzbUNvbnRleHRHUFIgPSBwaW5uZWRSZWdzLndhc21D
b250ZXh0UG9pbnRlcjsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNh
bGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSk7Ci0gICAgICAgIG51bUdQUnMgPSAwOwotICAgICAgICBudW1GUFJzID0gMDsKLSAg
ICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRo
aXMuIFNvCi0gICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBz
aW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5u
ZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotCi0gICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9
IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0K
LSAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBwYXNzZXMgV2FzbTo6Q29udGV4dCogYXMgdGhlIGZp
cnN0IEpTIGFyZ3VtZW50IHdoZW4gd2UncmUKLSAgICAgICAgLy8gbm90IHVzaW5nIGZhc3QgVExT
IHRvIGhvbGQgdGhlIFdhc206OkNvbnRleHQqLgotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JD
b250ZXh0KCkpIHsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ29udGV4dEdQUik7
Ci0gICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyAqIHNpemVvZih2b2lkKik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgIHN3
aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7Ci0gICAgICAgICAgICBjYXNlIFdhc206Okkz
MjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICAgICAgICAgIGlmIChudW1H
UFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09
IFdhc206OkkzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21D
YWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbnVtR1BSczsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgY2FzZSBXYXNt
OjpGNjQ6Ci0gICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkubV9mcHJBcmdzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0
dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikgewotICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQu
c3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBz
aXplb2Yodm9pZCopOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKQotICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9m
cHJBcmdzW251bUZQUnNdLmZwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlv
bigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICsrbnVtRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghIWluZm8ubWVtb3J5KSB7Ci0g
ICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsK
LQotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNvbnRleHRHUFIsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7Ci0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKLSAgICAg
ICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOwot
ICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKLSAgICAgICAgICAgIEFT
U0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1
bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3Rl
cnMgcmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSks
IHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgaml0LmFkZDY0
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1v
cnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsK
LSAgICB9Ci0KLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0
Y2hhYmxlTmVhckNhbGwoKTsKLSAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5j
dGlvbkluZGV4ICsgaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgQVNTRVJUKGZ1bmN0
aW9uSW5kZXhTcGFjZSA8IGluZm8uZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKLSAgICBqaXQu
YWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4
U3BhY2VdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxsKSwg
ZnVuY3Rpb25JbmRleFNwYWNlIH0pOwotICAgIH0pOwotCi0KLSAgICBmb3IgKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewotICAgICAgICBH
UFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0gICAgICAgIEFTU0VSVChyZWcg
IT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0g
cmVnQXRPZmZzZXQub2Zmc2V0KCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwgcmVnKTsKLSAgICB9
Ci0KLSAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAgICBjYXNlIFdhc206
OkYzMjoKLSAgICAgICAgaml0Lm1vdmVGbG9hdFRvMzIoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXYXNt
OjpGNjQ6Ci0gICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBhdXRvIEIzSVJH
ZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogewogICAgIE9wY29kZU9yaWdpbiBvcmlnaW4o
bV9wYXJzZXItPmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGlu
Z09mZnNldCgpKTsKQEAgLTE1MzQsNyArMTM1Myw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6b3Jp
Z2luKCkgLT4gT3JpZ2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KG9yaWdpbik7
CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQs
IGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0
aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0
YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlv
bk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3Vu
dCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewogICAg
IGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogCkBA
IC0xNTU4LDExICsxMzc3LDExIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAgICAgICAgID8g
T3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0
aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5l
cmF0b3IgY29udGV4dChpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVw
KTsKLSAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgZnVu
Y3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgQjNJUkdl
bmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwg
dGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5l
cmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgs
IHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIu
cGFyc2UoKSk7CiAKLSAgICBjb250ZXh0Lmluc2VydENvbnN0YW50cygpOworICAgIGlyR2VuZXJh
dG9yLmluc2VydENvbnN0YW50cygpOwogCiAgICAgcHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5
KCk7CiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlMmM2YWRiLi42OWJlNDQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVC
eXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbUVt
YmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgpAQCAtNTQsOSArNTUs
NyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6
Ok9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlwcm9kdWN0czsKIH07CiAKLUV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3Qg
U2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7
CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRp
b24gPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IDIyZWRkMTYuLmQwZWFmYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTI5LDgg
KzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGlu
Zy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTUzLDIxICs1MSwyMSBAQCBuYW1lc3Bh
Y2UgV2FzbUJCUVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0qIHZtLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+
IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNl
KHZtLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3Jr
LCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVt
YmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKKyAg
ICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShj
cmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgLCBtX3N0YXRl
KFN0YXRlOjpWYWxpZGF0ZWQpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewogfQogCi1CQlFQ
bGFuOjpCQlFQbGFuKFZNKiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsg
d29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQkJRUGxhbih2bSwgYWRvcHRSZWYo
Km5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwgd29yaywgV1RGTW92ZSh0
YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+
JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVF
bWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlv
biB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBCQlFQbGFuKGNvbnRleHQsIGFkb3B0UmVmKCpu
ZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFz
ayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQog
ewogICAgIG1fc3RhdGUgPSBTdGF0ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihW
TSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQXN5bmNX
b3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2Uodm0sIHNvdXJjZSwg
c291cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBj
b250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5j
V29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKGNvbnRleHQsIHNv
dXJjZSwgc291cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6
SW5pdGlhbCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC0yNjksNyArMjY3LDcgQEAg
dm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkK
IAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7CiAgICAgICAgIFRpZXJVcENvdW50KiB0aWVy
VXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5j
dGlvbkluZGV4XSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0
ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwg
ZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21U
b1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9t
b2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7Cisg
ICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29t
cGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25M
ZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAg
ICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjg1LDcgKzI4Myw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAK
ICAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25J
bmRleCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChm
dW5jdGlvbkluZGV4LCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIobV9jb21waWxhdGlvbkNvbnRleHRz
W2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1
bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9u
SW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVy
bmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlciht
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVyZSwgJm1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgfQogCkBAIC0zMTQsMTQgKzMxMiwx
NCBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIp
CiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJv
ZHVjdHMpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGF1dG8ganNUb1dhc21J
bnRlcm5hbEZ1bmN0aW9uID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlv
bkluZGV4KSkgeworICAgICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlvbklu
ZGV4KSkgewogICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC5q
c0VudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcoIk91dCBv
ZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBlbnRyeXBvaW50IGF0IGluZGV4ICIsIFN0
cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBqc1RvV2FzbUludGVybmFs
RnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpD
b21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0
aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGls
YXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgi
SmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4
LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC5qc0Vu
dHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCAzNTlmMTNiLi5jNmVhNDk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKQEAgLTI4LDEyICsyOCwxMiBAQAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5j
bHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldh
c21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAi
V2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDEsOCAr
NDEsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxMaW5rSW5mbzsKLWNsYXNzIEpT
R2xvYmFsT2JqZWN0OwotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNt
IHsKIApAQCAtNTAsMTIgKzQ4LDEzIEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJsaWMgUGxh
biB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47CiAgICAgZW51bSBBc3luY1dvcmsg
OiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKKwogICAgIC8vIE5vdGU6IENv
bXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhl
cndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBCQlFQbGFuKFZNKiwg
UmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5j
V29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRl
cldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBC
QlFQbGFuKENvbnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKICAg
ICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGFy
ZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0aW9uL2Z1bmN0aW9u
IHRlc3RzCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJpZCBvZiBmdW5jdGlvbiB0ZXN0cyB3
ZSBzaG91bGQgcmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMgY29uc3RydWN0b3IuCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5j
V29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihD
b250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFz
ayYmKTsKIAogICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogCkBAIC0xNDEsNyAr
MTQwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dh
c21Ub1dhc21FeGl0U3R1YnM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgSGFzaFNldDx1aW50MzJfdCwg
dHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlczsKLSAg
ICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIHR5
cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAg
ICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIHR5
cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9u
czsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7
CiAgICAgVmVjdG9yPFRpZXJVcENvdW50PiBtX3RpZXJVcENvdW50czsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaAppbmRleCAxYjhiNTZmLi40
NDQ3OTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklu
bGluZXMuaApAQCAtMzksMTAgKzM5LDEwIEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxl
ZXMoY29uc3QgRnVuY3RvciYgY2FsbGJhY2spCiAgICAgQVNTRVJUKCFmYWlsZWQoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9u
SW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlv
bkluZGV4KSB7CiAKLSAgICAgICAgUmVmUHRyPFdhc206OkNhbGxlZT4ganNFbnRyeXBvaW50Q2Fs
bGVlOwotICAgICAgICBpZiAoYXV0byBqc1RvV2FzbUZ1bmN0aW9uID0gbV9qc1RvV2FzbUludGVy
bmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICBq
c0VudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGpzVG9XYXNt
RnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoUG9pbnRlcihqc1RvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJp
dHM6OmJveFdhc20oanNFbnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7CisgICAgICAgIFJlZlB0cjxX
YXNtOjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKKyAgICAgICAgaWYgKGF1dG8g
ZW1iZWRkZXJUb1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9u
cy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRlclRvV2Fz
bUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBD
YWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwogICAg
ICAgICB9CiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRl
cm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwpAQCAtNTAsNyArNTAs
NyBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxi
YWNrKQogICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IFdh
c206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlv
bkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLmdldChmdW5jdGlv
bkluZGV4U3BhY2UpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1
bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5
cG9pbnRDYWxsZWUucHRyKCkpKTsKIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9u
SW5kZXgsIFdURk1vdmUoanNFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2lu
dENhbGxlZSkpOworICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1v
dmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxl
ZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
Y3BwCmluZGV4IDY3Y2NmNWUuLjQ5MTBjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5jcHAKQEAgLTI5LDU5NiArMjksMTQgQEAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJGcmFtZVRyYWNl
cnMuaCIKLSNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKLSNpbmNsdWRlICJOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiVGh1
bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCi0jaW5j
bHVkZSAiV2FzbUNvbnRleHQuaCIKLSNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiB1c2luZyBKSVQgPSBDQ2FsbEhlbHBl
cnM7CiAKLXN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKEpJVCYgaml0LCB1bnNp
Z25lZCBpbXBvcnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKLXsKLSAgICAvLyBXZSdyZSBjYWxsaW5n
IG91dCBvZiB0aGUgY3VycmVudCBXZWJBc3NlbWJseS5JbnN0YW5jZS4gVGhhdCBJbnN0YW5jZSBo
YXMgYSBsaXN0IG9mIGFsbCBpdHMgaW1wb3J0IGZ1bmN0aW9ucy4KLSAgICBqaXQubG9hZFdhc21D
b250ZXh0KHJlc3VsdCk7Ci0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHJlc3VsdCwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSks
IHJlc3VsdCk7Ci19Ci0KLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub0pzKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3Ms
IFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5IGFic3RyYWN0IGF3
YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KLSAgICAvLyBJdCdkIGJlIHN1cGVyIGVhc3kgdG8g
ZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDEKLSAg
ICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9IHdhc21DYWxsaW5nQ29udmVu
dGlvbigpOwotICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc0NDID0ganNjQ2FsbGlu
Z0NvbnZlbnRpb24oKTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgIHVuc2lnbmVkIGFyZ0NvdW50
ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBKSVQgaml0OwotCi0gICAgLy8gTm90
ZTogV2FzbUIzSVJHZW5lcmF0b3IgYXNzdW1lcyB0aGF0IHRoaXMgc3R1YiB0cmVhdHMgU1AgYXMg
YSBjYWxsZWUgc2F2ZS4KLSAgICAvLyBJZiB3ZSBldmVyIGNoYW5nZSB0aGlzLCB3ZSB3aWxsIGFs
c28gbmVlZCB0byBjaGFuZ2UgV2FzbUIzSVJHZW5lcmF0b3IuCi0KLSAgICAvLyBCZWxvdywgd2Ug
YXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBpcyBhbHdheXMgb24gdGhlIHN0
YWNrLgotICAgIEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6ZSgpKTsKLSAgICBBU1NFUlQoIWpz
Q0MubV9mcHJBcmdzLnNpemUoKSk7Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsK
LSAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigwKSwgSklUOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBj
b2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIx
Ci0KLSAgICB7Ci0gICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7Ci0gICAgICAgIGhh
c0JhZEk2NFVzZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpID09IEk2NDsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudCAmJiAhaGFzQmFkSTY0VXNl
OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3Vt
ZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAg
IGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55
ZnVuYzoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0g
ICAgICAgICAgICBjYXNlIEk2NDogewotICAgICAgICAgICAgICAgIGhhc0JhZEk2NFVzZSA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7Ci0gICAgICAgICAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIENhbGxlZS4KLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKSVQ6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgICAgICAgICAg
YXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSk7Ci0KLSAgICAgICAgICAgIHZvaWQgKCp0aHJvd0JhZEk2NCkoRXhlY1N0YXRl
KiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAg
ICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gd2FzbUNvbnRleHQt
Pmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3Ry
dWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVNDSUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQg
YXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9y
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZt
LCBleGVjKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gp
OwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7
Ci0KLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7Ci0gICAg
ICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5K
YXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNh
bGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBsZWFzdCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVk
LiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0
ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiB0aGlzLgotICAg
IFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVTYXZlcyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdp
c3RlcnM7Ci0gICAgbWlzc2luZ0NhbGxlZVNhdmVzLmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVS
ZWdpc3RlcnMpOwotICAgIEFTU0VSVChtaXNzaW5nQ2FsbGVlU2F2ZXMuaXNFbXB0eSgpKTsKLQot
ICAgIGlmICghT3B0aW9uczo6dXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzKCkpIHsK
LSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShhcmdDb3VudCAqIHNpemVvZih1aW50NjRfdCkpOwotICAgICAgICBjaGFyKiBidWZm
ZXIgPSBhcmdDb3VudCA/IHN0YXRpY19jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVm
ZmVyKCkpIDogbnVsbHB0cjsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwot
ICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGJ1
ZmZlck9mZnNldCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
OwotICAgICAgICBjb25zdCBHUFJSZWcgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ0NTMDsKLSAg
ICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNpemVvZihSZWdpc3RlcikpKSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3Jl
UHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlcikpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0g
MDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ1R5
cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJn
VHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBGdW5jOgot
ICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNhc2Ug
STMyOiB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsKLSAgICAgICAgICAgICAgICBp
ZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFs
cmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJs
ZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSBHUFJJbmZvOjphcmd1
bWVudEdQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdwclJlZyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7
Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBidWZmZXIgKyBidWZmZXJPZmZz
ZXQpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEYzMjogewotICAgICAgICAg
ICAgICAgIEZQUlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJz
IDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9
IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOwotICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxs
IGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAg
ICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9m
ZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVnLCBmcHJSZWcpOwotICAgICAgICAg
ICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7Ci0g
ICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgICAgICAgICAg
RlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNt
Q0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUND
Lm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1l
bnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAg
ICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAg
ICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCAr
PSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBq
aXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBq
aXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAgICAgICAg
ICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1ZmZlck9mZnNldCArPSBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksIHNjcmF0
Y2hHUFIpOwotICAgICAgICBpZiAoYXJnQ291bnQpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBz
aG91bGQgbm90IGxvb2sgYXQgdGhpcyBidWZmZXIgYXQgYWxsLCB0aGVzZSBhcmVuJ3QgSlNWYWx1
ZXMuCi0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2Ny
YXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVpbnQ2
NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU2lnbmF0dXJlSW5kZXgsIHVp
bnQ2NF90KikgPQotICAgICAgICAgICAgW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNh
bGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KiBidWZmZXIpIC0+
IHVpbnQ2NF90IHsgCi0gICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
ICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAg
ICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwot
ICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9
IDA7IGFyZ051bSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnTnVtKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0p
OwotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGFyZzsKLSAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEFueWZ1
bmM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJMzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihzdGF0aWNfY2Fz
dDxpbnQzMl90PihidWZmZXJbYXJnTnVtXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRjMyOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIEY2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGpzTnVtYmVyKGJpdHdpc2Vf
Y2FzdDxkb3VibGU+KGJ1ZmZlclthcmdOdW1dKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcmdzLmFw
cGVuZChhcmcpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIENhbGxEYXRh
IGNhbGxEYXRhOwotICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5t
ZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShjYWxsZWUsIGNhbGxEYXRhKTsKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGNhbGxlZSwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOwotCi0gICAgICAgICAgICAgICAgdWludDY0X3Qg
cmVhbFJlc3VsdDsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBl
KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICAgICAgY2FzZSBB
bnlmdW5jOgotICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWxSZXN1
bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlc3VsdC50
b0ludDMyKGV4ZWMpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAgICAgICAgICAgICBjYXNlIEYz
MjogewotICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gYml0d2lzZV9jYXN0PHVpbnQ2
NF90PihyZXN1bHQudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVhbFJlc3VsdDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBqaXQubG9h
ZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0g
ICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpJVDo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgICAgICAKLSAgICAgICAgbWF0ZXJp
YWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0
ZXJzID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxvdy4iKTsKLSAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjphcmd1bWVudEdQUjEs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4KSwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgp
OwotICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0s
IEFzc2VtYmx5SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0KLSAgICAgICAgLy8g
ZXhjZXB0aW9uIGhlcmUuCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7Ci0gICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICB2b2lkICgqZG9V
bndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7Ci0g
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2
bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwot
ICAgICAgICB9OwotICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbCgpOwotICAg
ICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwotCi0gICAgICAgIG5vRXhjZXB0
aW9uLmxpbmsoJmppdCk7Ci0gICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkg
ewotICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAg
aml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgICAg
ICBqaXQucmV0KCk7Ci0KLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAoVU5MSUtFTFko
bGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwotCi0gICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBjYWxsRnVuYyk7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhleGNl
cHRpb25DYWxsLCBkb1Vud2luZGluZyk7Ci0KLSAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
bGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1w
b3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Ci0gICAgfQot
Ci0gICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVy
ZSBzaW5jZSBXYXNtQjNJUkdlbmVyYXRvcgotICAgIC8vIHdpbGwgZG8gdGhlIHN0YWNrIGNoZWNr
IGZvciB1cy4gV2hlbmV2ZXIgaXQgZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IG1ha2UKLSAgICAvLyBh
IGNhbGwgdG8gdGhpcyB0aHVuaywgaXQnbGwgbWFrZSBzdXJlIGl0cyBzdGFjayBjaGVjayBpbmNs
dWRlcyBzcGFjZQotICAgIC8vIGZvciB1cyBoZXJlLgotCi0gICAgY29uc3QgdW5zaWduZWQgbnVt
YmVyT2ZQYXJhbWV0ZXJzID0gYXJnQ291bnQgKyAxOyAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1
bWVudC4KLSAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7Ci0gICAgY29uc3Qg
dW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6
ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICBjb25zdCB1bnNp
Z25lZCBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVu
dEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKLSAgICBqaXQuc3ViUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVs
cGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotCi0gICAgLy8g
RklYTUUgbWFrZSB0aGVzZSBsb29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRoZXJl
IGFyZSBtYW55IGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdl
IGZvciBodWdlIHNpZ25hdHVyZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU1NDcKLSAgICAKLSAgICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRoZSBpbnRlZ2VyIHBh
cmFtZXRlcnMsIGZyZWVpbmcgdXAgdGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBhZnRlcndhcmRzLgot
ICAgIHsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwotICAgICAgICB1bnNp
Z25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zm
c2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyAr
K2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50
KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55ZnVu
YzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAgICAgICAgICBjYXNlIEkzMjog
ewotICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1h
cnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOwotICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5
IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMg
c2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOwotICAgICAgICAgICAgICAg
ICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAgICAgICAgICAgIGppdC56ZXJv
RXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7IC8vIENsZWFyIG5vbi1pbnQzMiBhbmQgbm9u
LXRhZyBiaXRzLgotICAgICAgICAgICAgICAgIGppdC5ib3hJbnQzMihncHJSZWcsIEpTVmFsdWVS
ZWdzKGdwclJlZyksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoZ3ByUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVy
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgRjMyOgotICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgLy8gU2tpcHBl
ZDogaGFuZGxlZCBiZWxvdy4KLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPj0g
d2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9
IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAg
ICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIHsKLSAgICAgICAgLy8gSW50ZWdlciByZWdpc3RlcnMgaGF2ZSBhbHJlYWR5IGJlZW4g
c3BpbGxlZCwgdGhlc2UgYXJlIG5vdyBhdmFpbGFibGUuCi0gICAgICAgIEdQUlJlZyBkb3VibGVF
bmNvZGVPZmZzZXRHUFJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgIEdQUlJl
ZyBzY3JhdGNoID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwotICAgICAgICBib29sIGhhc01hdGVy
aWFsaXplZERvdWJsZUVuY29kZU9mZnNldCA9IGZhbHNlOwotICAgICAgICBhdXRvIG1hdGVyaWFs
aXplRG91YmxlRW5jb2RlT2Zmc2V0ID0gWyZoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZz
ZXQsICZqaXRdIChHUFJSZWcgZGVzdCkgewotICAgICAgICAgICAgaWYgKCFoYXNNYXRlcmlhbGl6
ZWREb3VibGVFbmNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KERv
dWJsZUVuY29kZU9mZnNldCA9PSAxbGwgPDwgNDgsICJjb2RlZ2VuIGFzc3VtZXMgdGhpcyBiZWxv
dyIpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKDEpLCBkZXN0
KTsKLSAgICAgICAgICAgICAgICBqaXQubHNoaWZ0NjQoSklUOjpUcnVzdGVkSW1tMzIoNDgpLCBk
ZXN0KTsKLSAgICAgICAgICAgICAgICBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHVuc2lnbmVkIG1h
cnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwot
ICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0
QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICB1
bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5
cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAgc3dp
dGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNl
IEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEk2NDoK
LSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVk
IGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAgICAgICAgICAgLy8gU2tpcHBl
ZDogaGFuZGxlZCBhYm92ZS4KLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPj0g
d2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9
IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKLSAg
ICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAg
ICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8
IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3
YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBh
cmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAg
ICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKLSAgICAgICAgICAg
ICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3Vi
bGVUbzY0KGZwclJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3Vi
bGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAgICAgICAgICAgICAg
ICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKLSAgICAgICAg
ICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxl
ZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6
ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBGNjQ6IHsK
LSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJz
aGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAg
ICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBz
cGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNj
cmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBS
MDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoSklUOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKLSAgICAgICAgICAgICAgICBq
aXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBtYXRl
cmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcpOwotICAg
ICAgICAgICAgICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcsIHNjcmF0Y2gp
OwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZyYW1lLndpdGhP
ZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9m
ZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQ
UnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
LQotICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpyZWdUMDsgLy8gQ2Fs
bGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGggYmVsb3cuCi0gICAgQVNTRVJU
KCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBvcnRKU0NlbGxHUFJSZWcpKTsK
LQotICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIGltcG9ydEpT
Q2VsbEdQUlJlZyk7Ci0KLSAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMy
KG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQ
YXlsb2FkT2Zmc2V0KSk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVV
bmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgIC8vIEZJ
WE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBubyByZWdp
c3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NDg4Ci0KLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5m
b3MuYWRkKCk7Ci0gICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxs
LCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0gICAgSklUOjpEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFs
dWUoMCk7Ci0gICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVj
aywgaW5pdGlhbFJpZ2h0VmFsdWUpOwotICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOwotICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLSAgICBzbG93UGF0aC5s
aW5rKCZqaXQpOwotICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgotICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgotICAgIEpJ
VDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgIGRvbmUubGluaygmaml0KTsK
LQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOwotCi0gICAgc3dp
dGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBWb2lkOgotICAgICAgICAv
LyBEaXNjYXJkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmM6Ci0gICAgY2FzZSBBbnlm
dW5jOgotICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRzIHdp
dGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBXZWJBc3NlbWJs
eS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KLSAgICB9Ci0gICAgY2Fz
ZSBJMzI6IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycykpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90
SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpKTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOwotCi0gICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0gICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwot
ICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3Mu
YXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGludDMyX3Qg
KCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwotICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsKLSAgICAgICAgfTsKLSAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0kzMik7Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgRjMyOiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAg
YXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICBhdXRvIGlzRG91YmxlID0g
aml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
LCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgotICAg
ICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAg
ZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsK
LSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0Lm1vdmU2NFRv
RG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7
Ci0gICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVt
cCgpKTsKLQotICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAg
ICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5k
KGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGZsb2F0ICgqY29udmVy
dFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdikgLT4gZmxvYXQgeyAKLSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1iZXIoZXhlYykpOwotICAgICAg
ICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjMyKTsKLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25l
OwotICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgIGF1dG8g
aXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgIC8vIFdlJ3JlIGFu
IGludDMyCi0gICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBqaXQuY29udmVydEludDY0
VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBS
KTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgaXNEb3VibGUu
bGluaygmaml0KTsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hZGQ2NChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAg
aml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAg
IG5vdEFOdW1iZXIubGluaygmaml0KTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGpp
dC5jYWxsKCk7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZF
eGNlcHRpb24oKnZtKSk7Ci0KLSAgICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3Rh
dGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91Ymxl
IHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIHYu
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBjb252ZXJ0VG9GNjQpOwotICAgICAgICB9KTsKLQotICAgICAgICBkb25lLmxpbmsoJmpp
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBpZiAoIWV4Y2VwdGlvbkNoZWNrcy5l
bXB0eSgpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOwotICAgICAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwot
ICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgaml0
Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAgICB2b2lkICgqZG9VbndpbmRp
bmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7Ci0gICAgICAg
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhl
Yyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAg
ICB9OwotCi0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vud2luZGluZyk7Ci0g
ICAgICAgIH0pOwotICAgIH0KLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKFVOTElLRUxZKHBh
dGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93
Q2FsbCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQ
YXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOwotICAg
IGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhvdFBh
dGhCZWdpbiwgaG90UGF0aE90aGVyKTsKLQotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJ
bmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKLX0KLQogRXhwZWN0
ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNp
Z25lZCBpbXBvcnRJbmRleCkKIHsKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5l
ZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNjMzLDI0ICs1MSwyMyBAQCBF
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNt
KHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIgIT0gc2NyYXRjaCk7CiAgICAgR1BSUmVnIHNpemVSZWdBc1NjcmF0Y2ggPSBzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXI7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxDb250ZXh0
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U+Ojp2YWx1ZSwgIlRoaXMgaXMgYXNzdW1lZCBpbiB0aGUg
Y29kZSBiZWxvdy4iKTsKICAgICAvLyBCMydzIGNhbGwgY29kZWdlbiBlbnN1cmVzIHRoYXQgdGhl
IEpTQ2VsbCBpcyBhIFdlYkFzc2VtYmx5RnVuY3Rpb24uCi0gICAgaml0LmxvYWRXYXNtQ29udGV4
dChzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgotICAgIGppdC5sb2FkUHRyKEpJ
VDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mSW1wb3J0RnVuY3Rpb24oaW1wb3J0SW5kZXgpKSwgc2NyYXRjaCk7Ci0KLSAgICAvLyBHZXQg
dGhlIGNhbGxlZSdzIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGFuZCBzZXQgaXQgYXMgV2FzbUNvbnRl
eHQuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24gSW5zdGFu
Y2UuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVu
Y3Rpb246Om9mZnNldE9mSW5zdGFuY2UoKSksIGJhc2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCi0g
ICAgaml0LnN0b3JlV2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7CisgICAgaml0LmxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQgSW5zdGFuY2UqCisgICAgLy8g
R2V0IHRoZSBjYWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21D
b250ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5n
IGl0cyBvd24gSW5zdGFuY2UuCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdB
c1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShp
bXBvcnRJbmRleCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseUluc3RhbmNlKi4KKyAg
ICAvLyBXaGlsZSB3ZSdyZSBhY2Nlc3NpbmcgdGhhdCBjYWNoZWxpbmUsIGFsc28gZ2V0IHRoZSB3
YXNtIGVudHJ5cG9pbnQgc28gd2UgY2FuIHRhaWwgY2FsbCB0byBpdCBiZWxvdy4KKyAgICBqaXQu
bG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZldhc21FbnRyeXBvaW50KGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOyAvLyBX
YXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbi4KKyAgICBqaXQuc3RvcmVXYXNtQ29udGV4
dEluc3RhbmNlKGJhc2VNZW1vcnkpOwogCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNp
emVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkpLCBzaXplUmVnQXNTY3JhdGNoKTsKICAgICBqaXQuc3RvcmVQdHIoc2l6ZVJlZ0Fz
U2NyYXRjaCwgSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKIAogICAgIC8vIEZJWE1FIHRoZSBmb2xsb3dp
bmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGhhdmUgdGhlIHNh
bWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9yeSByZWdpc3Rl
ciBhcyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMuCi0gICAgaml0LmxvYWRQdHIo
SklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBKU1dlYkFzc2VtYmx5TWVtb3J5Ki4KKyAgICBqaXQu
bG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnkqLgogICAg
IEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBh
c3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdp
c3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJl
c3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJh
c2VNZW1vcnkpOyAvLyBXYXNtTWVtb3J5Ojp2b2lkKi4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdz
WzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgIGppdC5sb2FkUHRyKEpJVDo6
QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ld
LnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ld
LnNpemVSZWdpc3RlciAhPSBzY3JhdGNoKTsKQEAgLTY1OCw3ICs3NSw2IEBAIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQg
aW1wb3J0SW5kZXgpCiAgICAgfQogCiAgICAgLy8gVGFpbCBjYWxsIGludG8gdGhlIGNhbGxlZSBX
ZWJBc3NlbWJseSBmdW5jdGlvbi4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2NyYXRj
aCwgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
bigpKSwgc2NyYXRjaCk7CiAgICAgaml0LmxvYWRQdHIoc2NyYXRjaCwgc2NyYXRjaCk7CiAgICAg
aml0Lmp1bXAoc2NyYXRjaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CaW5kaW5nLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGlu
Zy5oCmluZGV4IDRlMjYyYmEuLmZlYzZiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOCw5ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAj
aW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2Fz
bUZvcm1hdC5oIgotI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00NCw3ICs0Miw2IEBAIGVudW0gY2xhc3MgQmluZGlu
Z0ZhaWx1cmUgewogfTsKIAogRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5n
RmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCk7Ci1FeHBlY3RlZDxNYWNy
b0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KcyhWTSosIEJhZzxDYWxs
TGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0
SW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCmluZGV4IDcwZmVmYjAuLjk4MDQzODAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCkBAIC0zNSwx
NiArMzUsMjYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotQ29kZUJs
b2NrOjpDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxl
SW5mb3JtYXRpb24pCitSZWY8Q29kZUJsb2NrPiBDb2RlQmxvY2s6OmNyZWF0ZShDb250ZXh0KiBj
b250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1h
dGlvbiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQoreworICAgIHNpemVfdCBpbXBvcnRG
dW5jdGlvbkNvdW50ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpOwor
ICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6
ZShpbXBvcnRGdW5jdGlvbkNvdW50KSkpIENvZGVCbG9jayhjb250ZXh0LCBtb2RlLCBtb2R1bGVJ
bmZvcm1hdGlvbiwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNl
cHRpb24pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1wb3J0RnVuY3Rpb25Db3VudDsg
KytpKQorICAgICAgICByZXN1bHQtPmltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihpKSA9IG51bGxw
dHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpyZXN1bHQpOworfQorCitDb2RlQmxvY2s6OkNvZGVC
bG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9u
JiBtb2R1bGVJbmZvcm1hdGlvbiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDog
bV9jYWxsZWVDb3VudChtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSkK
ICAgICAsIG1fbW9kZShtb2RlKQogewogICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb3RlY3RlZFRo
aXMgPSB0aGlzOwotICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihudWxscHRyLCBt
YWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNo
YXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyldIChWTSosIFBsYW4mKSB7CisKKyAgICBtX3BsYW4gPSBhZG9wdFJl
ZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEJCUVBs
YW46OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICBpZiAobV9wbGFu
LT5mYWlsZWQoKSkgewogICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtX3BsYW4tPmVycm9y
TWVzc2FnZSgpOwotICAgICAgICAgICAgbV9wbGFuID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHNl
dENvbXBpbGF0aW9uRmluaXNoZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC02NiwxMCArNzYsMTAgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2Rl
LCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24pCiAgICAgICAgIG1fd2FzbVRv
V2FzbUNhbGxzaXRlcyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKICAgICAg
ICAgbV90aWVyVXBDb3VudHMgPSBtX3BsYW4tPnRha2VUaWVyVXBDb3VudHMoKTsKIAotICAgICAg
ICBtX3BsYW4gPSBudWxscHRyOwotICAgIH0pKSk7Ci0KKyAgICAgICAgc2V0Q29tcGlsYXRpb25G
aW5pc2hlZCgpOworICAgIH0pLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93
V2FzbUV4Y2VwdGlvbikpOwogICAgIG1fcGxhbi0+c2V0TW9kZShtb2RlKTsKKwogICAgIGF1dG8m
IHdvcmtsaXN0ID0gV2FzbTo6ZW5zdXJlV29ya2xpc3QoKTsKICAgICAvLyBOb3RlLCBpbW1lZGlh
dGVseSBhZnRlciB3ZSBlbnF1ZXVlIHRoZSBwbGFuLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGUgYWJv
dmUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuCiAgICAgd29ya2xpc3QuZW5xdWV1ZShtYWtlUmVm
KCptX3BsYW4uZ2V0KCkpKTsKQEAgLTkyLDcgKzEwMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjp3YWl0
VW50aWxGaW5pc2hlZCgpCiAgICAgLy8gZWxzZSwgaWYgd2UgZG9uJ3QgaGF2ZSBhIHBsYW4sIHdl
J3JlIGFscmVhZHkgY29tcGlsZWQuCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpjb21waWxlQXN5bmMo
Vk0mIHZtLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrKQordm9pZCBDb2RlQmxvY2s6
OmNvbXBpbGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2sm
JiB0YXNrKQogewogICAgIFJlZlB0cjxQbGFuPiBwbGFuOwogICAgIHsKQEAgLTEwNCwxMiArMTE0
LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpjb21waWxlQXN5bmMoVk0mIHZtLCBBc3luY0NvbXBpbGF0
aW9uQ2FsbGJhY2smJiB0YXNrKQogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGtlZXAgYSBS
ZWZQdHIgb24gdGhlIFBsYW4gYmVjYXVzZSB0aGUgd29ya2xpc3Qgd2lsbCBrZWVwCiAgICAgICAg
IC8vIGEgUmVmUHRyIG9uIHRoZSBQbGFuIHVudGlsIHRoZSBwbGFuIGZpbmlzaGVzIG5vdGlmeWlu
ZyBhbGwgb2YgaXRzIGNhbGxiYWNrcy4KICAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvdGVj
dGVkVGhpcyA9IHRoaXM7Ci0gICAgICAgIHBsYW4tPmFkZENvbXBsZXRpb25UYXNrKHZtLCBjcmVh
dGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHRhc2sgPSBXVEZNb3ZlKHRh
c2spLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFZNKiB2bSwgUGxh
biYpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2bSk7Ci0gICAgICAgICAgICB0YXNrLT5ydW4oKnZt
LCBtYWtlUmVmKCp0aGlzKSk7CisgICAgICAgIHBsYW4tPmFkZENvbXBsZXRpb25UYXNrKGNvbnRl
eHQsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgdGFzayA9IFdU
Rk1vdmUodGFzayksIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxh
biYpIHsKKyAgICAgICAgICAgIHRhc2stPnJ1bihtYWtlUmVmKCp0aGlzKSk7CiAgICAgICAgIH0p
KTsKICAgICB9IGVsc2UKLSAgICAgICAgdGFzay0+cnVuKHZtLCBtYWtlUmVmKCp0aGlzKSk7Cisg
ICAgICAgIHRhc2stPnJ1bihtYWtlUmVmKCp0aGlzKSk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpp
c1NhZmVUb1J1bihNZW1vcnlNb2RlIG1lbW9yeU1vZGUpCkBAIC0xMzAsNiArMTM5LDEzIEBAIGJv
b2wgQ29kZUJsb2NrOjppc1NhZmVUb1J1bihNZW1vcnlNb2RlIG1lbW9yeU1vZGUpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCisKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDb21waWxhdGlvbkZpbmlzaGVk
KCkKK3sKKyAgICBtX3BsYW4gPSBudWxscHRyOworICAgIG1fY29tcGlsYXRpb25GaW5pc2hlZC5z
dG9yZSh0cnVlKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suaAppbmRleCAyZGJmN2U0Li5lMzYxZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNvZGVCbG9jay5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAi
V2FzbUVtYmVkZGVyLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21U
aWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtMzcsMTEgKzM5LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsK
LQogbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBDYWxsZWU7CitzdHJ1Y3QgQ29udGV4dDsKIGNs
YXNzIEJCUVBsYW47CiBjbGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwpA
QCAtNTEsMjAgKzUyLDQyIEBAIGVudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3Q7CiAgICAg
CiBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2Nr
PiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSYsIFJlZjxDb2Rl
QmxvY2s+JiYpOworICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoUmVmPENvZGVCbG9jaz4m
Jik7CiAgICAgdXNpbmcgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrID0gUmVmUHRyPFdURjo6U2hh
cmVkVGFzazxDYWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRl
KE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQor
ICAgIHN0YXRpYyBSZWY8Q29kZUJsb2NrPiBjcmVhdGUoQ29udGV4dCosIE1lbW9yeU1vZGUsIE1v
ZHVsZUluZm9ybWF0aW9uJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2Vw
dGlvbik7CisKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0U3R1YnMoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihz
aXplb2YoQ29kZUJsb2NrKSk7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBvcnRDb3VudCkKKyAgICB7CisgICAgICAg
IHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGZ1bmN0aW9u
SW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIHZvaWQqJiBpbXBvcnRXYXNt
VG9FbWJlZGRlclN0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDb2RlQmxvY2sobW9kZSwgbW9kdWxlSW5mb3JtYXRpb24pKTsKKyAg
ICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpICsgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJT
dHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9m
SW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleDsKKyAgICB9CisKKyAg
ICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9KU0NhbGxTdHViRm9ySW1w
b3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJ1bm5hYmxl
KCkpOworICAgICAgICByZXR1cm4gJmltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihpbXBvcnRJbmRl
eCk7CiAgICAgfQogCiAgICAgdm9pZCB3YWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHZvaWQgY29t
cGlsZUFzeW5jKFZNJiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgY29t
cGlsZUFzeW5jKENvbnRleHQqLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CiAKICAgICBi
b29sIGNvbXBpbGF0aW9uRmluaXNoZWQoKQogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOwotICAgICAgICByZXR1cm4gIW1fcGxhbjsKKyAgICAgICAgcmV0dXJu
IG1fY29tcGlsYXRpb25GaW5pc2hlZC5sb2FkKCk7CiAgICAgfQogICAgIGJvb2wgcnVubmFibGUo
KSB7IHJldHVybiBjb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIW1fZXJyb3JNZXNzYWdlOyB9CiAK
QEAgLTc4LDkgKzEwMSwxMiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdW5zaWduZWQgZnVuY3Rp
b25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXpl
KCk7IH0KKyAgICAKKyAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFs
aWQgb25jZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgogCiAgICAgQ2FsbGVlJiBq
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQo
KSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0g
ZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogCkBAIC05MCw2ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIENhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChydW5u
YWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1
bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVu
Y3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAgICBpZiAobV9v
cHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4XSkKQEAgLTExNyw3ICsxNDQsOCBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPTUdQbGFuOwogCi0gICAgQ29kZUJsb2NrKE1l
bW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJik7CisgICAgQ29kZUJsb2NrKENvbnRleHQqLCBN
ZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBU
aHJvd1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwog
ICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAg
VmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7CkBAIC0xMjgsNiArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3dhc21U
b1dhc21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNt
VG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CisgICAgc3RkOjph
dG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKICAgICBTdHJpbmcg
bV9lcnJvck1lc3NhZ2U7CiAgICAgTG9jayBtX2xvY2s7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNvbnRleHQuY3BwCmluZGV4IGZlYTE2ZGUuLmUwNTlmYzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5jcHAKQEAgLTI4LDMwICsyOCw0MSBA
QAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKICNpbmNs
dWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYgdm0pCitib29sIENv
bnRleHQ6OnVzZUZhc3RUTFMoKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgcmV0
dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpOworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNlKiBDb250ZXh0Ojps
b2FkKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmICh1c2VGYXN0
VExTRm9yQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENvbnRleHQqPihf
cHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKKyAgICBp
ZiAodXNlRmFzdFRMUygpKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05URVhU
X0tFWSkpOwogI2VuZGlmCi0gICAgcmV0dXJuIHZtLndhc21Db250ZXh0OworICAgIHJldHVybiBp
bnN0YW5jZTsKIH0KIAotdm9pZCBzdG9yZUNvbnRleHQoVk0mIHZtLCBDb250ZXh0KiBjb250ZXh0
KQordm9pZCBDb250ZXh0OjpzdG9yZShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGksIHZvaWQqIHNv
ZnRTdGFja0xpbWl0KQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKHVzZUZh
c3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIF9wdGhyZWFkX3NldHNwZWNpZmljX2RpcmVjdChX
VEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9jYXN0PHZvaWQqPihjb250ZXh0KSk7CisgICAg
aWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KFdU
Rl9XQVNNX0NPTlRFWFRfS0VZLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGkpKTsKICNlbmRpZgotICAg
IHZtLndhc21Db250ZXh0ID0gY29udGV4dDsKLSAgICBpZiAoY29udGV4dCkKLSAgICAgICAgY29u
dGV4dC0+c2V0Q2FjaGVkU3RhY2tMaW1pdCh2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKyAgICBpbnN0
YW5jZSA9IGk7CisgICAgaWYgKGluc3RhbmNlKQorICAgICAgICBpbnN0YW5jZS0+c2V0Q2FjaGVk
U3RhY2tMaW1pdChzb2Z0U3RhY2tMaW1pdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAppbmRleCAzY2Y2NWZi
Li5jMmI1MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKQEAg
LTI3LDM3ICsyNywyMCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgotCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgVk07CitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiAKIG5h
bWVzcGFjZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdGhpcyB0byBiZSBzb21l
dGhpbmcgZWxzZSBhdCBzb21lIHBvaW50OgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MDI2MAotdXNpbmcgQ29udGV4dCA9IEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTsKLQotaW5saW5lIGJvb2wgdXNlRmFzdFRMUygpCi17Ci0jaWYgRU5BQkxFKEZBU1RfVExTX0pJ
VCkKLSAgICByZXR1cm4gT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0VExTKCk7Ci0jZWxzZQot
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQorc3RydWN0IENvbnRleHQgeworICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgeyBudWxscHRyIH07CiAKLWlubGluZSBib29sIHVz
ZUZhc3RUTFNGb3JDb250ZXh0KCkKLXsKLSAgICBpZiAodXNlRmFzdFRMUygpKQotICAgICAgICBy
ZXR1cm4gT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQorICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogbG9hZCgpIGNvbnN0OworICAgIHZv
aWQgc3RvcmUoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdm9pZCogc29mdFN0YWNrTGltaXQpOwog
Ci1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYpOwotdm9pZCBzdG9yZUNvbnRleHQoVk0mLCBDb250
ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgdXNlRmFzdFRMUygpOworfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg3OTRmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2Fz
bUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworI2luY2x1ZGUgPG1lbW9y
eT4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTsgLy8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5zdGFuY2UsIHNv
IHNob3VsZCB1c2UgYmVsb3cuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorCituYW1lc3Bh
Y2UgV2FzbSB7CisKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CitzdHJ1Y3QgSW50ZXJuYWxG
dW5jdGlvbjsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKK2NsYXNzIFNpZ25hdHVyZTsKK3N0
cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOworCisvLyBDcmVhdGUgd3JhcHBlciBjb2RlIHRv
IGNhbGwgZnJvbSBlbWJlZGRlciAtPiBXZWJBc3NlbWJseS4KK3VzaW5nIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWlu
dDMyX3QpPjsKKworLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW4gZXhjZXB0aW9uIGlzIGRldGVjdGVk
LiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBQQyB0byBjb250aW51ZSBhdC4KK3VzaW5nIFRocm93
V2FzbUV4Y2VwdGlvbiA9IHZvaWQqICgqKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBl
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmIxZDgyOC4u
Y2MxZTdkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZh
dWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTMwLDExICszMCwxMSBAQAogCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldhc21N
ZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCiAKKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCmluZGV4IDM4MTI4MzYu
LmU1ZTA3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmgKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIHZvaWQgcmVnaXN0ZXJDb2RlKHZvaWQq
IHN0YXJ0LCB2b2lkKiBlbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
CmluZGV4IGIyMjIyMTcuLmU3YjNkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmgKQEAgLTQ0LDE0ICs0NCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
SlNGdW5jdGlvbjsKLQogbmFtZXNwYWNlIEIzIHsKIGNsYXNzIENvbXBpbGF0aW9uOwogfQogCiBu
YW1lc3BhY2UgV2FzbSB7CiAKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CitzdHJ1Y3QgTW9k
dWxlSW5mb3JtYXRpb247CisKIGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKIHsK
ICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21JbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5z
dGFuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YmUwZTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2Uu
Y3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgi
CisKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlv
bi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20geworCituYW1lc3BhY2Ugeworc2l6ZV90IGdsb2JhbE1lbW9yeUJ5dGVTaXplKE1v
ZHVsZSYgbW9kdWxlKQoreworICAgIHJldHVybiBtb2R1bGUubW9kdWxlSW5mb3JtYXRpb24oKS5n
bG9iYWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3Rlcik7Cit9Cit9CisKK0luc3RhbmNlOjpJbnN0
YW5jZShSZWY8TW9kdWxlPiYmIG1vZHVsZSkKKyAgICA6IG1fbW9kdWxlKFdURk1vdmUobW9kdWxl
KSkKKyAgICAsIG1fZ2xvYmFscyhNYWxsb2NQdHI8dWludDY0X3Q+OjptYWxsb2MoZ2xvYmFsTWVt
b3J5Qnl0ZVNpemUobV9tb2R1bGUuZ2V0KCkpKSkKK3sKK30KKworSW5zdGFuY2U6On5JbnN0YW5j
ZSgpIHsgfQorCitzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUobV9tb2R1bGUuZ2V0KCkpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzc4YTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTAsMCArMSw4NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgor
I2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisjaW5jbHVk
ZSAiV2FzbVRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xh
c3MgSW5zdGFuY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW5zdGFuY2U+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEluc3RhbmNlPiBjcmVhdGUoUmVmPE1vZHVsZT4mJiBtb2R1
bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnN0YW5jZShXVEZNb3Zl
KG1vZHVsZSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFJlZjxD
b2RlQmxvY2s+JiYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgbV9jb2RlQmxvY2sgPSBXVEZN
b3ZlKGNvZGVCbG9jayk7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkluc3RhbmNl
KCk7CisKKyAgICBzaXplX3QgZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSBjb25zdDsKKworICAgIE1v
ZHVsZSYgbW9kdWxlKCkgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CisgICAgTWVtb3J5KiBt
ZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQorICAgIFRhYmxlKiB0YWJsZSgpIHsg
cmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KKworICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KKyAgICBpbnQ2NF90
IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgp
W2ldOyB9CisgICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KGxvYWRJMzJHbG9iYWwoaSkpOyB9CisgICAgZG91YmxlIGxv
YWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJs
ZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KKyAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBp
bnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkU3RhY2tMaW1pdCk7IH0KKyAgICB2b2lkKiBjYWNoZWRT
dGFja0xpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9CisgICAgdm9p
ZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZvaWQqIGxpbWl0KSB7IG1fY2FjaGVkU3RhY2tMaW1pdCA9
IGxpbWl0OyB9CisKKyAgICBmcmllbmQgY2xhc3MgSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U7
IC8vIEZJWE1FIHJlbW92ZSB0aGlzIG9uY2UgcmVmYWN0b3JlZCBodHRwczovL3dlYmtpdC5vcmcv
Yi8xNzc0NzIuCisKK3ByaXZhdGU6CisgICAgSW5zdGFuY2UoUmVmPE1vZHVsZT4mJik7CisgICAg
CisgICAgUmVmPE1vZHVsZT4gbV9tb2R1bGU7CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9jb2Rl
QmxvY2s7CisgICAgUmVmUHRyPE1lbW9yeT4gbV9tZW1vcnk7CisgICAgUmVmUHRyPFRhYmxlPiBt
X3RhYmxlOworICAgIE1hbGxvY1B0cjx1aW50NjRfdD4gbV9nbG9iYWxzOworICAgIHZvaWQqIG1f
Y2FjaGVkU3RhY2tMaW1pdCB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0
czx1aW50cHRyX3Q+OjptYXgoKSkgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGM1ZjQ4ZTkuLjBkYzc3NWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0yOCwxMyArMjgsMTkgQEAKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVkZSAiV2FzbVRo
dW5rcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgog
I2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVk
ZSA8d3RmL09TQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1
ZGUgPHd0Zi9SQU1TaXplLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8
Y3N0cmluZz4KKyNpbmNsdWRlIDxtdXRleD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKIApAQCAtNTEsMTkgKzU3LDE5IEBAIE5FVkVSX0lOTElORSBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpIHsgQ1JBCiBzdHJ1
Y3QgTWVtb3J5UmVzdWx0IHsKICAgICBlbnVtIEtpbmQgewogICAgICAgICBTdWNjZXNzLAotICAg
ICAgICBTdWNjZXNzQW5kQXN5bmNHQywKLSAgICAgICAgU3luY0dDQW5kUmV0cnkKKyAgICAgICAg
U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlLAorICAgICAgICBTeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5CiAgICAgfTsKLSAgICAKKwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0b1N0cmluZyhL
aW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBT
dWNjZXNzOgogICAgICAgICAgICAgcmV0dXJuICJTdWNjZXNzIjsKLSAgICAgICAgY2FzZSBTdWNj
ZXNzQW5kQXN5bmNHQzoKLSAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0FuZEFzeW5jR0MiOwot
ICAgICAgICBjYXNlIFN5bmNHQ0FuZFJldHJ5OgotICAgICAgICAgICAgcmV0dXJuICJTeW5jR0NB
bmRSZXRyeSI7CisgICAgICAgIGNhc2UgU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOgor
ICAgICAgICAgICAgcmV0dXJuICJTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUiOworICAg
ICAgICBjYXNlIFN5bmNUcnlUb1JlY2xhaW1NZW1vcnk6CisgICAgICAgICAgICByZXR1cm4gIlN5
bmNUcnlUb1JlY2xhaW1NZW1vcnkiOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTgsMTcgKzEwNCwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdCByZXN1bHQgPSBbJl0gewogICAgICAg
ICAgICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICAgICAgaWYgKG1f
bWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1l
bW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZvaWQqIHJl
c3VsdCA9IEdpZ2FjYWdlOjp0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0
aXZlLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0
KQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVz
dWx0OjpTeW5jR0NBbmRSZXRyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3Vs
dChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX21lbW9yaWVzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KAogICAgICAgICAgICAgICAgIHJl
c3VsdCwKLSAgICAgICAgICAgICAgICBtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50IC8g
MiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0MgOiBNZW1vcnlSZXN1bHQ6OlN1Y2Nl
c3MpOworICAgICAgICAgICAgICAgIG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQgLyAy
ID8gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUgOiBNZW1vcnlS
ZXN1bHQ6OlN1Y2Nlc3MpOwogICAgICAgICB9KCk7CiAgICAgICAgIAogICAgICAgICBpZiAoT3B0
aW9uczo6bG9nV2ViQXNzZW1ibHlNZW1vcnkoKSkKQEAgLTE1MywxMiArMTU5LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgTWVtb3J5UmVzdWx0OjpLaW5kIHJlc3VsdCA9IFsmXSB7CiAgICAgICAgICAg
ICBhdXRvIGhvbGRlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgICAgICBpZiAobV9waHlz
aWNhbEJ5dGVzICsgYnl0ZXMgPiBtZW1vcnlMaW1pdCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBNZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5OworICAgICAgICAgICAgICAgIHJldHVybiBN
ZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1fcGh5c2ljYWxCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKG1fcGh5c2ljYWxCeXRlcyA+PSBtZW1vcnlMaW1pdCgpIC8gMikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kQXN5bmNHQzsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M7
CiAgICAgICAgIH0oKTsKQEAgLTIwNSw3ICsyMTEsNyBAQCBzdGF0aWMgTWVtb3J5TWFuYWdlciYg
bWVtb3J5TWFuYWdlcigpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1ib29sIHRyeUFu
ZEdDKFZNJiB2bSwgY29uc3QgRnVuYyYgYWxsb2NhdGUpCitib29sIHRyeUFsbG9jYXRlKGNvbnN0
IEZ1bmMmIGFsbG9jYXRlLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mIG5vdGlmeU1lbW9y
eVByZXNzdXJlLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mIHN5bmNUcnlUb1JlY2xhaW1N
ZW1vcnkpCiB7CiAgICAgdW5zaWduZWQgbnVtVHJpZXMgPSAyOwogICAgIGJvb2wgZG9uZSA9IGZh
bHNlOwpAQCAtMjE0LDE0ICsyMjAsMTYgQEAgYm9vbCB0cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1
bmMmIGFsbG9jYXRlKQogICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2VzczoKICAgICAg
ICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWVt
b3J5UmVzdWx0OjpTdWNjZXNzQW5kQXN5bmNHQzoKLSAgICAgICAgICAgIHZtLmhlYXAuY29sbGVj
dEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CisgICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0
OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU6CisgICAgICAgICAgICBpZiAobm90aWZ5
TWVtb3J5UHJlc3N1cmUpCisgICAgICAgICAgICAgICAgbm90aWZ5TWVtb3J5UHJlc3N1cmUoKTsK
ICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeToKKyAgICAgICAgY2FzZSBNZW1vcnlSZXN1
bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnk6CiAgICAgICAgICAgICBpZiAoaSArIDEgPT0gbnVt
VHJpZXMpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB2bS5oZWFwLmNvbGxl
Y3RTeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CisgICAgICAgICAgICBpZiAoc3luY1RyeVRv
UmVjbGFpbU1lbW9yeSkKKyAgICAgICAgICAgICAgICBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIzMCwzMiArMjM4LDMy
IEBAIGJvb2wgdHJ5QW5kR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKIAogfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCiAKLWNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBt
b2RlKQorTWVtb3J5OjpNZW1vcnkoKQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2Ug
TWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOwotICAg
IGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7Ci0gICAgfQot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwogfQogCi1N
ZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCitNZW1v
cnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIEZ1bmN0aW9u
PHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgRnVuY3Rpb248dm9pZCgpPiYmIHN5bmNU
cnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3Vu
dCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1faW5pdGlhbChpbml0aWFsKQogICAg
ICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgLCBtX25vdGlmeU1lbW9yeVByZXNzdXJlKHN0ZDo6
Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSkKKyAg
ICAsIG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2
b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxs
YmFjayhzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50
KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKQogewogICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygp
KTsKICAgICBBU1NFUlQobV9tb2RlID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKTsKICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhp
cyk7CiB9CiAKLU1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9k
ZSkKK01lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VD
b3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSwgRnVu
Y3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2b2lkKCk+JiYg
c3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFn
ZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKQogICAgIDogbV9tZW1vcnkobWVtb3J5KQog
ICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQog
ICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAgLCBtX21hcHBlZENhcGFjaXR5KG1hcHBlZENh
cGFjaXR5KQogICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX25vdGlmeU1lbW9yeVByZXNzdXJl
KHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJl
KSkKKyAgICAsIG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5j
dGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nl
c3NDYWxsYmFjayhzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFn
ZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKQogewogICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJNZW1vcnk6Ok1lbW9yeSBhbGxvY2F0aW5nICIsICp0aGlzKTsKIH0KQEAgLTI3NSw3ICsy
ODMsMTIgQEAgc3RhdGljIHZvaWQgY29tbWl0WmVyb1BhZ2VzKHZvaWQqIHN0YXJ0QWRkcmVzcywg
c2l6ZV90IHNpemVJbkJ5dGVzKQogI2VuZGlmCiB9CiAKLVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6
Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQorUmVm
UHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVtb3J5KCkpOworfQorICAgIAorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBGdW5jdGlvbjx2b2lkKCk+JiYgbm90aWZ5
TWVtb3J5UHJlc3N1cmUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNz
Q2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGluaXRpYWwpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFt
YXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRl
ZWQgYnkgb3VyIGNhbGxlci4KQEAgLTI4MywzMyArMjk2LDI3IEBAIFJlZlB0cjxNZW1vcnk+IE1l
bW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
KQogICAgIGNvbnN0IHNpemVfdCBpbml0aWFsQnl0ZXMgPSBpbml0aWFsLmJ5dGVzKCk7CiAgICAg
Y29uc3Qgc2l6ZV90IG1heGltdW1CeXRlcyA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiAw
OwogCi0gICAgLy8gV2UgbmVlZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBzdHViIHByaW9yIHRvIHJ1
bm5pbmcgY29kZS4KLSAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KICAgICBpZiAobWF4aW11bSAmJiAhbWF4aW11bUJ5dGVzKSB7CiAgICAgICAgIC8v
IFVzZXIgc3BlY2lmaWVkIGEgemVybyBtYXhpbXVtLCBpbml0aWFsIHNpemUgbXVzdCBhbHNvIGJl
IHplcm8uCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbml0aWFsQnl0ZXMpOwotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0sIHN0ZDo6Zm9yd2FyZDxX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3RkOjpmb3J3YXJk
PFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9y
d2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nl
c3NDYWxsYmFjaykpKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBkb25lID0gdHJ5QW5kR0MoCi0g
ICAgICAgIHZtLAorICAgIGJvb2wgZG9uZSA9IHRyeUFsbG9jYXRlKAogICAgICAgICBbJl0gKCkg
LT4gTWVtb3J5UmVzdWx0OjpLaW5kIHsKICAgICAgICAgICAgIHJldHVybiBtZW1vcnlNYW5hZ2Vy
KCkudHJ5QWxsb2NhdGVQaHlzaWNhbEJ5dGVzKGluaXRpYWxCeXRlcyk7Ci0gICAgICAgIH0pOwor
ICAgICAgICB9LCBub3RpZnlNZW1vcnlQcmVzc3VyZSwgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7
CiAgICAgaWYgKCFkb25lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAg
Y2hhciogZmFzdE1lbW9yeSA9IG51bGxwdHI7CiAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2Vt
Ymx5RmFzdE1lbW9yeSgpKSB7Ci0gICAgICAgIHRyeUFuZEdDKAotICAgICAgICAgICAgdm0sCisg
ICAgICAgIHRyeUFsbG9jYXRlKAogICAgICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6
S2luZCB7CiAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtZW1vcnlNYW5hZ2VyKCkudHJ5
QWxsb2NhdGVWaXJ0dWFsUGFnZXMoKTsKICAgICAgICAgICAgICAgICBmYXN0TWVtb3J5ID0gYml0
d2lzZV9jYXN0PGNoYXIqPihyZXN1bHQuYmFzZVB0cik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC5raW5kOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LCBub3RpZnlNZW1v
cnlQcmVzc3VyZSwgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgfQogICAgIAogICAgIGlm
IChmYXN0TWVtb3J5KSB7CkBAIC0zMjAsMTUgKzMyNywxNSBAQCBSZWZQdHI8TWVtb3J5PiBNZW1v
cnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkK
ICAgICAgICAgfQogCiAgICAgICAgIGNvbW1pdFplcm9QYWdlcyhmYXN0TWVtb3J5LCBpbml0aWFs
Qnl0ZXMpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoZmFz
dE1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgTWVt
b3J5TW9kZTo6U2lnbmFsaW5nKSk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1v
cnkoZmFzdE1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMo
KSwgTWVtb3J5TW9kZTo6U2lnbmFsaW5nLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lk
KCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4+KHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlv
bjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKSk7CiAg
ICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpjcmFzaElmV2ViQXNzZW1ibHlD
YW50RmFzdE1lbW9yeSgpKSkKICAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9y
eSgpOwogCiAgICAgaWYgKCFpbml0aWFsQnl0ZXMpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9p
ZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2
b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rp
b248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwog
ICAgIAogICAgIHZvaWQqIHNsb3dNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhH
aWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCksIGluaXRpYWxCeXRlcyk7CiAgICAg
aWYgKCFzbG93TWVtb3J5KSB7CkBAIC0zMzYsNyArMzQzLDcgQEAgUmVmUHRyPE1lbW9yeT4gTWVt
b3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0p
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBtZW1zZXQoc2xvd01lbW9yeSwg
MCwgaW5pdGlhbEJ5dGVzKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShzbG93TWVt
b3J5LCBpbml0aWFsLCBtYXhpbXVtLCBpbml0aWFsQnl0ZXMsIE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xvd01lbW9yeSwgaW5p
dGlhbCwgbWF4aW11bSwgaW5pdGlhbEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZywg
c3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUp
LCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVt
b3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3Vu
dCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogfQogCiBNZW1vcnk6On5NZW1vcnkoKQpAQCAt
MzQ1LDcgKzM1MiwxMCBAQCBNZW1vcnk6On5NZW1vcnkoKQogICAgICAgICBtZW1vcnlNYW5hZ2Vy
KCkuZnJlZVBoeXNpY2FsQnl0ZXMobV9zaXplKTsKICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsK
ICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Ci0gICAgICAgICAgICBtcHJvdGVj
dChtX21lbW9yeSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgUFJPVF9SRUFEIHwgUFJPVF9X
UklURSk7CisgICAgICAgICAgICBpZiAobXByb3RlY3QobV9tZW1vcnksIE1lbW9yeTo6ZmFzdE1h
cHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZygibXByb3RlY3QgZmFpbGVkOiAiLCBzdHJlcnJvcihlcnJubyksICJcbiIpOworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZVZpcnR1YWxQYWdlcyhtX21lbW9yeSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZzoKQEAgLTM3MSwzNCArMzgxLDUwIEBAIGJvb2wgTWVtb3J5OjphZGRyZXNzSXNJbkFjdGl2
ZUZhc3RNZW1vcnkodm9pZCogYWRkcmVzcykKICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLmNv
bnRhaW5zQWRkcmVzcyhhZGRyZXNzKTsKIH0KIAotYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQ
YWdlQ291bnQgbmV3U2l6ZSkKK0V4cGVjdGVkPFBhZ2VDb3VudCwgTWVtb3J5OjpHcm93RmFpbFJl
YXNvbj4gTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBkZWx0YSkKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VChuZXdTaXplID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisgICAgY29uc3QgV2Fz
bTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCA9IHNpemVJblBhZ2VzKCk7CiAKLSAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IHRvICIsIG5ld1NpemUsICIgZnJvbSAiLCAqdGhp
cyk7CisgICAgaWYgKCFkZWx0YS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhKTsKKyAgICAKKyAgICBjb25zdCBXYXNt
OjpQYWdlQ291bnQgbmV3UGFnZUNvdW50ID0gb2xkUGFnZUNvdW50ICsgZGVsdGE7CisgICAgaWYg
KCFuZXdQYWdlQ291bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJl
YXNvbjo6SW52YWxpZEdyb3dTaXplKTsKIAotICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+
IG1heGltdW0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gc3VjY2VzcyA9IFsm
XSAoKSB7CisgICAgICAgIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhvbGRQYWdlQ291bnQsIG5ld1Bh
Z2VDb3VudCk7CisgICAgICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CisgICAgfTsKIAotICAgIHNp
emVfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKKyAgICBpZiAoZGVsdGEucGFnZUNv
dW50KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKworICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJNZW1vcnk6Omdyb3coIiwgZGVsdGEsICIpIHRvICIsIG5ld1BhZ2VDb3VudCwg
IiBmcm9tICIsICp0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdQYWdlQ291bnQgPiBQYWdl
Q291bnQ6OmZyb21CeXRlcyhtX3NpemUpKTsKKworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3UGFn
ZUNvdW50ID4gbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0Zh
aWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bSk7CisKKyAgICBzaXplX3QgZGVzaXJlZFNpemUg
PSBuZXdQYWdlQ291bnQuYnl0ZXMoKTsKICAgICBSRUxFQVNFX0FTU0VSVChkZXNpcmVkU2l6ZSA+
IG1fc2l6ZSk7CiAgICAgc2l6ZV90IGV4dHJhQnl0ZXMgPSBkZXNpcmVkU2l6ZSAtIG1fc2l6ZTsK
ICAgICBSRUxFQVNFX0FTU0VSVChleHRyYUJ5dGVzKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnlB
bmRHQygKLSAgICAgICAgdm0sCisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VzcyA9IHRyeUFsbG9j
YXRlKAogICAgICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0OjpLaW5kIHsKICAgICAgICAgICAg
IHJldHVybiBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQaHlzaWNhbEJ5dGVzKGV4dHJhQnl0
ZXMpOwotICAgICAgICB9KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgCisgICAgICAgIH0sIG1fbm90aWZ5TWVtb3J5UHJlc3N1cmUsIG1fc3luY1Ry
eVRvUmVjbGFpbU1lbW9yeSk7CisgICAgaWYgKCFhbGxvY2F0aW9uU3VjY2VzcykKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeSk7CisKICAg
ICBzd2l0Y2ggKG1vZGUoKSkgewogICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6
IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0gMCk7Ci0gICAg
ICAgIAorCiAgICAgICAgIHZvaWQqIG5ld01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFs
bG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIFdURjo6cGFnZVNpemUoKSwgZGVzaXJlZFNpemUpOwog
ICAgICAgICBpZiAoIW5ld01lbW9yeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkp
OworCiAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOwogICAgICAg
ICBtZW1zZXQoc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld01lbW9yeSkgKyBtX3NpemUsIDAsIGRlc2ly
ZWRTaXplIC0gbV9zaXplKTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQpAQCAtNDA2LDcgKzQzMiw3
IEBAIGJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCiAgICAgICAg
IG1fbWVtb3J5ID0gbmV3TWVtb3J5OwogICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJl
ZFNpemU7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKICAgICB9CiAgICAgY2FzZSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmc6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkpOwpAQCAtNDE1
LDE2ICs0NDEsMTcgQEAgYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291bnQgbmV3U2l6
ZSkKICAgICAgICAgCiAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5nIFdlYkFz
c2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiIGFzIHJlYWQrd3JpdGUg
aW4gcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9pbnRlcihz
dGFydEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKICAgICAgICAgaWYgKG1wcm90ZWN0KHN0
YXJ0QWRkcmVzcywgZXh0cmFCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgZmFpbGVk
ICIsICp0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRhdGFM
b2coIm1wcm90ZWN0IGZhaWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAiXG4iKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgY29t
bWl0WmVyb1BhZ2VzKHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRlcyk7CiAgICAgICAgIG1fc2l6ZSA9
IGRlc2lyZWRTaXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKKyAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKyAgICB9CisgICAgfQorCiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG9sZFBhZ2VDb3Vu
dDsKIH0KIAogdm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCA2MGE5YmI3Li4zZjE4YzE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC0yNyw4ICsyNywxMSBA
QAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUu
aCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzgsMTggKzQxLDggQEAgY2xhc3MgUHJp
bnRTdHJlYW07CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdh
c20gewogCi0vLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotZW51bSBjbGFzcyBN
ZW1vcnlNb2RlIDogdWludDhfdCB7Ci0gICAgQm91bmRzQ2hlY2tpbmcsCi0gICAgU2lnbmFsaW5n
Ci19Owotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7Ci1K
U19FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOwotCiBj
bGFzcyBNZW1vcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTcs
OCArNTAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0mKSBjb25z
dDsKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWVt
b3J5OyB9Ci0gICAgCi0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisKKyAgICBzdGF0aWMgUmVmUHRyPE1l
bW9yeT4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5v
dGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNs
YWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdy
b3dTdWNjZXNzQ2FsbGJhY2spOwogCiAgICAgfk1lbW9yeSgpOwogCkBAIC03NSwyMiArNjksMzQg
QEAgcHVibGljOgogCiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
OyB9CiAKLSAgICAvLyBncm93KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIEpTV2Vi
QXNzZW1ibHlNZW1vcnkgb2JqZWN0IHNpbmNlIHRoYXQgb2JqZWN0IG5lZWRzIHRvIHVwZGF0ZSBp
bnRlcm5hbAotICAgIC8vIHBvaW50ZXJzIHdpdGggdGhlIGN1cnJlbnQgYmFzZSBhbmQgc2l6ZS4K
LSAgICBib29sIGdyb3coVk0mLCBQYWdlQ291bnQpOworICAgIGVudW0gY2xhc3MgR3Jvd0ZhaWxS
ZWFzb24geworICAgICAgICBJbnZhbGlkRGVsdGEsCisgICAgICAgIEludmFsaWRHcm93U2l6ZSwK
KyAgICAgICAgV291bGRFeGNlZWRNYXhpbXVtLAorICAgICAgICBPdXRPZk1lbW9yeSwKKyAgICB9
OworICAgIEV4cGVjdGVkPFBhZ2VDb3VudCwgR3Jvd0ZhaWxSZWFzb24+IGdyb3coUGFnZUNvdW50
KTsKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0K
KworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoTWVtb3J5LCBtX21lbW9yeSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0KKwog
cHJpdmF0ZToKLSAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7Ci0gICAg
TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisgICAgTWVtb3J5
KCk7CisgICAgTWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQ
YWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOworICAgIE1lbW9yeShQYWdlQ291bnQg
aW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlm
eU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dT
dWNjZXNzQ2FsbGJhY2spOwogCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoZXNlIHRv
IHRoZSBpbnN0YW5jZSB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNlIGNhbGxz
LgorICAgIC8vIEZJWE1FOiB3ZSBjYWNoZSB0aGVzZSBvbiB0aGUgaW5zdGFuY2VzIHRvIGF2b2lk
IGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5zdGFuY2UgY2FsbHMuIFRoaXMgd2lsbCByZXF1aXJlIHVw
ZGF0aW5nIGFsbCB0aGUgaW5zdGFuY2VzIHdoZW4gZ3JvdyBpcyBjYWxsZWQuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUKICAgICB2b2lkKiBtX21lbW9yeSB7
IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwogICAgIFBhZ2VDb3VudCBtX2lu
aXRpYWw7CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKICAgICBzaXplX3QgbV9tYXBwZWRDYXBh
Y2l0eSB7IDAgfTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nIH07CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fbm90aWZ5TWVtb3J5UHJlc3N1
cmU7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeTsK
KyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiBtX2dyb3dTdWNj
ZXNzQ2FsbGJhY2s7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKaW5k
ZXggYmY1NjVmMC4uYjVjMzRiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIGNvbnN0IFBp
bm5lZFJlZ2lzdGVySW5mbyYgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKQogICAgIHN0ZDo6Y2Fs
bF9vbmNlKHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mb0ZsYWcsIFtdICgpIHsKICAgICAgICAgVmVj
dG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CiAgICAgICAgIEdQUlJl
ZyBiYXNlTWVtb3J5UG9pbnRlciA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIEdQUlJlZyB3YXNt
Q29udGV4dFBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBHUFJSZWcgd2FzbUNvbnRl
eHRJbnN0YW5jZVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyLCBhbmQg
d2Ugc2hvdWxkIGFsbG93IGRpZmZlcmVudAogICAgICAgICAvLyAgICAgICAgV2ViQXNzZW1ibHku
SW5zdGFuY2UgdG8gaGF2ZSBkaWZmZXJlbnQgcGlucy4gUmlnaHQgbm93IHdlIHRha2UgYSB2ZWN0
b3Igd2l0aCBvbmx5IG9uZSBlbnRyeS4KQEAgLTY1LDI3ICs2NSwyNyBAQCBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAgICAgICAgLy8gICAgICAg
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAg
ICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07CiAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mUGlubmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6ZXMuc2l6ZSgpICsgMTsKLSAg
ICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQorICAgICAgICBpZiAoIUNvbnRleHQ6
OnVzZUZhc3RUTFMoKSkKICAgICAgICAgICAgICsrbnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnM7CiAg
ICAgICAgIFZlY3RvcjxHUFJSZWc+IHBpbm5lZFJlZ3MgPSBnZXRQaW5uZWRSZWdpc3RlcnMobnVt
YmVyT2ZQaW5uZWRSZWdpc3RlcnMpOwogCiAgICAgICAgIGJhc2VNZW1vcnlQb2ludGVyID0gcGlu
bmVkUmVncy50YWtlTGFzdCgpOwotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkp
Ci0gICAgICAgICAgICB3YXNtQ29udGV4dFBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7
CisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgd2FzbUNv
bnRleHRJbnN0YW5jZVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CiAKICAgICAgICAg
QVNTRVJUKHBpbm5lZFNpemVzLnNpemUoKSA9PSBwaW5uZWRSZWdzLnNpemUoKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaW5uZWRTaXplcy5zaXplKCk7ICsraSkKICAgICAg
ICAgICAgIHNpemVSZWdpc3RlcnMuYXBwZW5kKHsgcGlubmVkUmVnc1tpXSwgcGlubmVkU2l6ZXNb
aV0gfSk7Ci0gICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RGTW92
ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0UG9pbnRlcik7
CisgICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RGTW92ZShzaXpl
UmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
KTsKICAgICB9KTsKIAogICAgIHJldHVybiBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uZ2V0KCk7
CiB9CiAKLVBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5u
ZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBiYXNlTWVtb3J5UG9p
bnRlciwgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRlcikKK1Bpbm5lZFJlZ2lzdGVySW5mbzo6UGlu
bmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdp
c3RlcnMsIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFu
Y2VQb2ludGVyKQogICAgIDogc2l6ZVJlZ2lzdGVycyhXVEZNb3ZlKHNpemVSZWdpc3RlcnMpKQog
ICAgICwgYmFzZU1lbW9yeVBvaW50ZXIoYmFzZU1lbW9yeVBvaW50ZXIpCi0gICAgLCB3YXNtQ29u
dGV4dFBvaW50ZXIod2FzbUNvbnRleHRQb2ludGVyKQorICAgICwgd2FzbUNvbnRleHRJbnN0YW5j
ZVBvaW50ZXIod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpCiB7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKaW5kZXggNDIz
N2JhYy4uMjMzMjllYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lz
dGVySW5mbyB7CiBzdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJbmZvIHsKICAgICBWZWN0b3I8UGlubmVk
U2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKICAgICBHUFJSZWcgYmFzZU1lbW9yeVBv
aW50ZXI7Ci0gICAgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRlcjsKKyAgICBHUFJSZWcgd2FzbUNv
bnRleHRJbnN0YW5jZVBvaW50ZXI7CiAgICAgc3RhdGljIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5m
byYgZ2V0KCk7CiAgICAgUGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0
ZXJJbmZvPiYmLCBHUFJSZWcsIEdQUlJlZyk7CiAKQEAgLTUyLDggKzUyLDggQEAgc3RydWN0IFBp
bm5lZFJlZ2lzdGVySW5mbyB7CiAgICAgewogICAgICAgICBSZWdpc3RlclNldCByZXN1bHQ7CiAg
ICAgICAgIHJlc3VsdC5zZXQoYmFzZU1lbW9yeVBvaW50ZXIpOwotICAgICAgICBpZiAod2FzbUNv
bnRleHRQb2ludGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICByZXN1bHQuc2V0KHdh
c21Db250ZXh0UG9pbnRlcik7CisgICAgICAgIGlmICh3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRl
ciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmVzdWx0LnNldCh3YXNtQ29udGV4dElu
c3RhbmNlUG9pbnRlcik7CiAgICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZykgewogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogc2l6ZVJlZ2lzdGVycykK
ICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGluZm8uc2l6ZVJlZ2lzdGVyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iMWJjOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5TW9kZS5oIgorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlNb2Rl
IG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3Vu
ZHNDaGVja2luZzogcmV0dXJuICJCb3VuZHNDaGVja2luZyI7CisgICAgY2FzZSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmc6IHJldHVybiAiU2lnbmFsaW5nIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xNGZjODk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0V4cG9ydE1hY3Jvcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBv
cnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjY5MworZW51bSBjbGFzcyBNZW1vcnlNb2RlIDogdWludDhfdCB7CisgICAgQm91bmRz
Q2hlY2tpbmcsCisgICAgU2lnbmFsaW5nCit9OworCitzdGF0aWMgY29uc3RleHByIHNpemVfdCBO
dW1iZXJPZk1lbW9yeU1vZGVzID0gMjsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IGNoYXIqIG1h
a2VTdHJpbmcoTWVtb3J5TW9kZSk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1MWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZS5jcHAKaW5kZXggOGUzNjZmNC4uOTkyZTNkNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKQEAgLTU2LDI3ICs1NiwyNiBAQCBzdGF0aWMgTW9kdWxl
OjpWYWxpZGF0aW9uUmVzdWx0IG1ha2VWYWxpZGF0aW9uUmVzdWx0KEJCUVBsYW4mIHBsYW4pCiAK
IHN0YXRpYyBQbGFuOjpDb21wbGV0aW9uVGFzayBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKE1vZHVs
ZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICByZXR1cm4gY3Jl
YXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXSAoVk0qIHZtLCBQbGFuJiBwbGFuKSB7CisgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRh
c2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFBs
YW4mIHBsYW4pIHsKICAgICAgICAgQVNTRVJUKCFwbGFuLmhhc1dvcmsoKSk7Ci0gICAgICAgIEFT
U0VSVCh2bSk7Ci0gICAgICAgIGNhbGxiYWNrLT5ydW4oKnZtLCBtYWtlVmFsaWRhdGlvblJlc3Vs
dChzdGF0aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKKyAgICAgICAgY2FsbGJhY2stPnJ1biht
YWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKICAgICB9
KTsKIH0KIAotTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKFZN
JiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKQorTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0
IE1vZHVsZTo6dmFsaWRhdGVTeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYm
IHNvdXJjZSkKIHsKLSAgICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxh
bigmdm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZp
bmFsaXplKCkpKTsKKyAgICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxh
bihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRv
bnRGaW5hbGl6ZSgpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgcGxhbi0+cGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZSgpOwogICAgIHJldHVybiBtYWtlVmFsaWRhdGlvblJlc3VsdChwbGFuLmdldCgp
KTsKIH0KIAotdm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMoVk0mIHZtLCBWZWN0b3I8dWludDhf
dD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykK
K3ZvaWQgTW9kdWxlOjp2YWxpZGF0ZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50
OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmIGNhbGxiYWNr
KQogewotICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKCZ2bSwgV1RG
TW92ZShzb3VyY2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRhdGlvbkNhbGxiYWNr
KFdURk1vdmUoY2FsbGJhY2spKSkpOworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5l
dyBCQlFQbGFuKGNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwg
bWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSksIG51bGxwdHIsIG51bGxw
dHIpKTsKICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7
CiB9CiAKLVJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5
TW9kZSBtb2RlKQorUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayhD
b250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYm
IGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbikKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtODcsMjMgKzg2LDIzIEBAIFJlZjxDb2RlQmxvY2s+
IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlKQogICAgIC8vIEZJ
WE1FOiBXZSBtaWdodCB3YW50IHRvIGJhY2sgb2ZmIHJldHJ5aW5nIGF0IHNvbWUgcG9pbnQ6CiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYwNwogICAg
IGlmICghY29kZUJsb2NrIHx8IChjb2RlQmxvY2stPmNvbXBpbGF0aW9uRmluaXNoZWQoKSAmJiAh
Y29kZUJsb2NrLT5ydW5uYWJsZSgpKSkgewotICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6
OmNyZWF0ZShtb2RlLCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3Jt
YXRpb24oKSkpOworICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZShjb250ZXh0
LCBtb2RlLCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24o
KSksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsK
ICAgICAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXSA9IGNvZGVC
bG9jazsKICAgICB9CiAgICAgcmV0dXJuIGNvZGVCbG9jay5yZWxlYXNlTm9uTnVsbCgpOwogfQog
Ci1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKE1lbW9yeU1vZGUgbW9kZSkKK1Jl
ZjxDb2RlQmxvY2s+IE1vZHVsZTo6Y29tcGlsZVN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5
TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIs
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgUmVmPENvZGVC
bG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2sobW9kZSk7CisgICAgUmVmPENv
ZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSwg
V1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAg
IGNvZGVCbG9jay0+d2FpdFVudGlsRmluaXNoZWQoKTsKICAgICByZXR1cm4gY29kZUJsb2NrOwog
fQogCi12b2lkIE1vZHVsZTo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgTWVtb3J5TW9kZSBtb2RlLCBD
b2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCit2b2lkIE1vZHVsZTo6
Y29tcGlsZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2Nr
OjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXIm
JiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNl
cHRpb24pCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2Rl
QmxvY2sobW9kZSk7Ci0gICAgY29kZUJsb2NrLT5jb21waWxlQXN5bmModm0sIFdURk1vdmUodGFz
aykpOworICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2Nr
KGNvbnRleHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNt
RXhjZXB0aW9uKTsKKyAgICBjb2RlQmxvY2stPmNvbXBpbGVBc3luYyhjb250ZXh0LCBXVEZNb3Zl
KHRhc2spKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGUuaAppbmRleCBhMWFmNzU4Li5hNmFlMjlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNvZGVCbG9jay5oIgorI2luY2x1ZGUg
Ildhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlIDx3dGYv
RXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtMzYsMTkgKzM3LDIwIEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKK3N0cnVjdCBDb250ZXh0Owogc3Ry
dWN0IE1vZHVsZUluZm9ybWF0aW9uOwogY2xhc3MgUGxhbjsKIAogdXNpbmcgU2lnbmF0dXJlSW5k
ZXggPSB1aW50MzJfdDsKLSAgICAKKwogY2xhc3MgTW9kdWxlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPE1vZHVsZT4gewogcHVibGljOgogICAgIHVzaW5nIFZhbGlkYXRpb25SZXN1bHQg
PSBXVEY6OkV4cGVjdGVkPFJlZlB0cjxNb2R1bGU+LCBTdHJpbmc+OwotICAgIHR5cGVkZWYgdm9p
ZCBDYWxsYmFja1R5cGUoVk0mLCBWYWxpZGF0aW9uUmVzdWx0JiYpOworICAgIHR5cGVkZWYgdm9p
ZCBDYWxsYmFja1R5cGUoVmFsaWRhdGlvblJlc3VsdCYmKTsKICAgICB1c2luZyBBc3luY1ZhbGlk
YXRpb25DYWxsYmFjayA9IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwogCi0gICAg
c3RhdGljIFZhbGlkYXRpb25SZXN1bHQgdmFsaWRhdGVTeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+
JiYgc291cmNlKTsKLSAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKFZNJiwgVmVjdG9yPHVp
bnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOworICAg
IHN0YXRpYyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlU3luYyhDb250ZXh0KiwgVmVjdG9yPHVp
bnQ4X3Q+JiYgc291cmNlKTsKKyAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKENvbnRleHQq
LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJh
Y2smJik7CiAKICAgICBzdGF0aWMgUmVmPE1vZHVsZT4gY3JlYXRlKFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4mJiBtb2R1bGVJbmZvcm1hdGlvbikKICAgICB7CkBAIC01OCwxNCArNjAsMTQgQEAgcHVi
bGljOgogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OwogICAgIGNvbnN0
IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KIAotICAgIFJlZjxDb2RlQmxvY2s+IGNv
bXBpbGVTeW5jKE1lbW9yeU1vZGUpOwotICAgIHZvaWQgY29tcGlsZUFzeW5jKFZNJiwgTWVtb3J5
TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CisgICAgUmVmPENv
ZGVCbG9jaz4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENv
bnRleHQqLCBNZW1vcnlNb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYm
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5Nb2R1bGUoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9y
KE1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4
X3Q+KG1vZGUpXS5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNy
ZWF0ZUNvZGVCbG9jayhNZW1vcnlNb2RlKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0
ZUNvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYs
IFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBNb2R1bGUoUmVmPE1vZHVsZUluZm9ybWF0aW9u
PiYmKTsKICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4
IDZjOTQ4YjUuLjZkNDRhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5VGFibGUuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNs
dWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCkBAIC0y
NjUsNyArMjY0LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIoYm9vbCBp
c0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFy
c2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7CiAgICAgaWYgKFVOTElLRUxZKCFs
aW1pdHMpKQogICAgICAgICByZXR1cm4gbGltaXRzLmdldFVuZXhwZWN0ZWQoKTsKLSAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRTaXplKGluaXRpYWwp
LCAiVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlk
Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4VGFibGVFbnRyaWVzLCAi
VGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyB0b28gYmlnLCBt
YXhpbXVtICIsIG1heFRhYmxlRW50cmllcyk7CiAKICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1h
eGltdW0gPj0gaW5pdGlhbCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQ
bGFuLmNwcAppbmRleCA3NGNmNjUzLi5jY2RmNzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1ZGUgIkIzQ29t
cGlsYXRpb24uaCIKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNs
dWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNs
dWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2lu
Y2x1ZGUgIldhc21NZW1vcnkuaCIKQEAgLTUxLDEwICs1MiwxMCBAQCBuYW1lc3BhY2UgV2FzbU9N
R1BsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAK
LU9NR1BsYW46Ok9NR1BsYW4oUmVmPE1vZHVsZT4gbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2Uo
bnVsbHB0ciwgbWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlLT5t
b2R1bGVJbmZvcm1hdGlvbigpKSksIFdURk1vdmUodGFzaykpCi0gICAgLCBtX21vZHVsZShtb2R1
bGUuY29weVJlZigpKQotICAgICwgbV9jb2RlQmxvY2soKm1vZHVsZS0+Y29kZUJsb2NrRm9yKG1v
ZGUpKQorT01HUGxhbjo6T01HUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1v
ZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9u
VGFzayYmIHRhc2spCisgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1
bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRh
c2spKQorICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQorICAgICwgbV9jb2RlQmxvY2so
Km1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVu
Y3Rpb25JbmRleCkKIHsKICAgICBzZXRNb2RlKG1vZGUpOwpAQCAtMTYyLDEzICsxNjMsMTMgQEAg
dm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbXBsZXRlKGhvbGRM
b2NrKG1fbG9jaykpOwogfQogCi12b2lkIHJ1bk9NR1BsYW5Gb3JJbmRleChDb250ZXh0KiBjb250
ZXh0LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQordm9pZCBPTUdQbGFuOjpydW5Gb3JJbmRleChK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQog
ewotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvbnRleHQtPmNvZGVC
bG9jaygpOwotICAgIEFTU0VSVChjb250ZXh0LT5tZW1vcnlNb2RlKCkgPT0gY29kZUJsb2NrLT5t
X2NvZGVCbG9jay0+bW9kZSgpKTsKKyAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jayA9IGlu
c3RhbmNlLT53YXNtQ29kZUJsb2NrKCk7CisgICAgQVNTRVJUKGluc3RhbmNlLT53YXNtTWVtb3J5
KCktPm1vZGUoKSA9PSBjb2RlQmxvY2subW9kZSgpKTsKIAotICAgIGlmIChjb2RlQmxvY2stPm1f
Y29kZUJsb2NrLT50aWVyVXBDb3VudChmdW5jdGlvbkluZGV4KS5zaG91bGRTdGFydFRpZXJVcCgp
KSB7Ci0gICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKGNvbnRl
eHQtPm1vZHVsZSgpLT5tb2R1bGUoKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLT5tX2NvZGVC
bG9jay0+bW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAgIGlmIChjb2RlQmxvY2su
dGllclVwQ291bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAoKSkgeworICAgICAg
ICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5jZS0+Y29udGV4
dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+d2FzbU1vZHVsZSgpKSwgZnVuY3Rpb25J
bmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAg
ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+
d2FpdEZvckNvbXBsZXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5oCmluZGV4IDcxNjRhOWUuLmI4MDgyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUg
Ildhc21Nb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgpAQCAtNDEsMTcgKzQwLDIwIEBA
IG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIE9NR1BsYW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CiBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47Ci0gICAgLy8gTm90ZTogQ29tcGxldGlvblRh
c2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVy
ZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR1BsYW4oUmVmPE1vZHVsZT4sIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOwogCiAg
ICAgYm9vbCBoYXNXb3JrKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fY29tcGxldGVkOyB9
CiAgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKICAgICBib29sIG11
bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgc3Rh
dGljIHZvaWQgcnVuRm9ySW5kZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCk7CisKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNo
aXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KICAgICB1c2luZyBCYXNlOjpt
X2xvY2s7CiAKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSBy
ZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2Ug
Y3ljbGUuCisgICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CisKICAgICBib29sIGlz
Q29tcGxldGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbXBsZXRlZDsgfQogICAgIHZv
aWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikgb3ZlcnJpZGUKICAgICB7
CkBAIC02NSw4ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4
OwogfTsKIAotdm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCosIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpOwotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBhZ2VDb3VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3Vu
dC5oCmluZGV4IGU0Mzg0N2MuLmVmMDVmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGFnZUNvdW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CiAgICAgfQorICAgIAorICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNWYWxpZChtX3BhZ2VDb3Vu
dCk7CisgICAgfQogCiAgICAgc3RhdGljIFBhZ2VDb3VudCBmcm9tQnl0ZXModWludDY0X3QgYnl0
ZXMpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGJh
MjdjZjkuLmQwNjNjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjksOCArMjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29t
cGlsYXRpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtNTEsMjAgKzQ5LDI3IEBAIG5h
bWVzcGFjZSBXYXNtUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5m
bywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBS
ZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3Zl
KGluZm8pKQorICAgICwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoV1RGTW92ZShjcmVhdGVFbWJl
ZGRlcldyYXBwZXIpKQorICAgICwgbV90aHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0
aW9uKQogICAgICwgbV9zb3VyY2UobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkK
ICAgICAsIG1fc291cmNlTGVuZ3RoKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkp
CiB7Ci0gICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHZtLCBXVEZN
b3ZlKHRhc2spKSk7CisgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQ29tcGxldGlvblRhc2smJiB0
YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+
IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4oY29udGV4dCwgV1RGTW92
ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgbnVsbHB0ciwgbnVsbHB0cikKK3sKK30KKworUGxhbjo6
UGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3Vy
Y2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRp
b24oYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQog
ICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3Ro
KQogewotICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih2bSwgV1RG
TW92ZSh0YXNrKSkpOworICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKIHZvaWQgUGxhbjo6cnVuQ29tcGxldGlv
blRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKQEAgLTcyLDE4ICs3NywxOCBAQCB2b2lkIFBs
YW46OnJ1bkNvbXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgQVNTRVJU
KGlzQ29tcGxldGUoKSAmJiAhaGFzV29yaygpKTsKIAogICAgIGZvciAoYXV0byYgdGFzayA6IG1f
Y29tcGxldGlvblRhc2tzKQotICAgICAgICB0YXNrLnNlY29uZC0+cnVuKHRhc2suZmlyc3QsICp0
aGlzKTsKKyAgICAgICAgdGFzay5zZWNvbmQtPnJ1bigqdGhpcyk7CiAgICAgbV9jb21wbGV0aW9u
VGFza3MuY2xlYXIoKTsKICAgICBtX2NvbXBsZXRlZC5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBQ
bGFuOjphZGRDb21wbGV0aW9uVGFzayhWTSYgdm0sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK3Zv
aWQgUGxhbjo6YWRkQ29tcGxldGlvblRhc2soQ29udGV4dCogY29udGV4dCwgQ29tcGxldGlvblRh
c2smJiB0YXNrKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgaWYgKCFp
c0NvbXBsZXRlKCkpCi0gICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcigmdm0sIFdURk1vdmUodGFzaykpKTsKKyAgICAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKICAgICBlbHNlCi0g
ICAgICAgIHRhc2stPnJ1bigmdm0sICp0aGlzKTsKKyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsK
IH0KIAogdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCkBAIC05NCwxOSArOTksMTkgQEAg
dm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCiAgICAgfQogfQogCi1ib29sIFBsYW46OnRy
eVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJiB2bSkKK2Jvb2wgUGxhbjo6dHJ5UmVtb3ZlQ29u
dGV4dEFuZENhbmNlbElmTGFzdChDb250ZXh0JiBjb250ZXh0KQogewogICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbG9jayk7CiAKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAv
LyBXZSBhbGxvdyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNrIHRvIG5vdCBoYXZlIGEgdm0uCisg
ICAgICAgIC8vIFdlIGFsbG93IHRoZSBmaXJzdCBjb21wbGV0aW9uIHRhc2sgdG8gbm90IGhhdmUg
YSBDb250ZXh0LgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9jb21wbGV0aW9u
VGFza3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBBU1NFUlQobV9jb21wbGV0aW9uVGFza3Nb
aV0uZmlyc3QpOwogICAgIH0KIAogICAgIGJvb2wgcmVtb3ZlZEFueVRhc2tzID0gZmFsc2U7Ci0g
ICAgbV9jb21wbGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBzdGQ6OnBh
aXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4mIHBhaXIpIHsKLSAgICAgICAgYm9vbCBzaG91bGRSZW1v
dmUgPSBwYWlyLmZpcnN0ID09ICZ2bTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5yZW1vdmVBbGxN
YXRjaGluZyhbJl0gKGNvbnN0IHN0ZDo6cGFpcjxDb250ZXh0KiwgQ29tcGxldGlvblRhc2s+JiBw
YWlyKSB7CisgICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFpci5maXJzdCA9PSAmY29udGV4
dDsKICAgICAgICAgcmVtb3ZlZEFueVRhc2tzIHw9IHNob3VsZFJlbW92ZTsKICAgICAgICAgcmV0
dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5oCmluZGV4IDEwZjhhMWIuLjdhMDdiZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBsYW4uaApAQCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJX
YXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUg
Ildhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRl
IDx3dGYvU2hhcmVkVGFzay5oPgpAQCAtMzksMjUgKzM5LDI3IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgQ2FsbExpbmtJbmZvOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1By
b21pc2VEZWZlcnJlZDsKIAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKKwog
Y2xhc3MgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiBwdWJsaWM6
Ci0gICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSosIFBsYW4mKTsKKyAgICB0eXBlZGVm
IHZvaWQgQ2FsbGJhY2tUeXBlKFBsYW4mKTsKICAgICB1c2luZyBDb21wbGV0aW9uVGFzayA9IFJl
ZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwotICAgIHN0YXRpYyBDb21wbGV0aW9uVGFz
ayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4o
W10oVk0qLCBQbGFuJikgeyB9KTsgfQotICAgIFBsYW4oVk0qLCBSZWY8TW9kdWxlSW5mb3JtYXRp
b24+LCBDb21wbGV0aW9uVGFzayYmKTsKKworICAgIHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250
RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oUGxh
biYpIHsgfSk7IH0KKyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBD
b21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0
aW9uKTsKKyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0
aW9uVGFzayYmKTsKIAogICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkg
YmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZh
bGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwg
Y29uc3QgdWludDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgUGxhbihDb250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQ29tcGxldGlv
blRhc2smJik7CiAgICAgdmlydHVhbCBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwogCiAgICAg
Ly8gSWYgeW91IGd1YXJhbnRlZSB0aGUgb3JkZXJpbmcgaGVyZSwgeW91IGNhbiByZWx5IG9uIEZJ
Rk8gb2YgdGhlCiAgICAgLy8gY29tcGxldGlvbiB0YXNrcyBiZWluZyBjYWxsZWQuCi0gICAgdm9p
ZCBhZGRDb21wbGV0aW9uVGFzayhWTSYsIENvbXBsZXRpb25UYXNrJiYpOworICAgIHZvaWQgYWRk
Q29tcGxldGlvblRhc2soQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgdm9pZCBz
ZXRNb2RlKE1lbW9yeU1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CiAgICAgTWVtb3J5TW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkBAIC03Miw3ICs3NCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAvLyBSZXR1cm5zIHRydWUg
aWYgaXQgY2FuY2VsbGVkIHRoZSBwbGFuLgotICAgIGJvb2wgdHJ5UmVtb3ZlVk1BbmRDYW5jZWxJ
Zkxhc3QoVk0mKTsKKyAgICBib29sIHRyeVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29u
dGV4dCYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBydW5Db21wbGV0aW9uVGFza3MoY29uc3Qg
QWJzdHJhY3RMb2NrZXImKTsKQEAgLTgzLDcgKzg1LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKIAotICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRhc2tzOworICAg
IFZlY3RvcjxzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiwgMT4gbV9jb21wbGV0
aW9uVGFza3M7CisKKyAgICBDcmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldy
YXBwZXI7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVs
bHB0ciB9OwogCiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAgY29uc3Qgc2l6ZV90
IG1fc291cmNlTGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNpZ25hdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0
dXJlLmNwcAppbmRleCA4YjYwMGVkLi42YTQyZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2lnbmF0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2ln
bmF0dXJlLmgKaW5kZXggZTQxM2IyNS4uYWFjZWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw4ICs0Myw2IEBAIGNsYXNzIFByaW50U3RyZWFtOwog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogdXNp
bmcgU2lnbmF0dXJlQXJnQ291bnQgPSB1aW50MzJfdDsKQEAgLTE1Niw3ICsxNTQsNyBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFzaD4gOiBTaW1w
bGVDbGFzc0hhc2hUcmFpdHM8SgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewog
Ci0vLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5
IFZNcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWly
ZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3
aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4KKy8vIFNpZ25hdHVy
ZSBpbmZvcm1hdGlvbiBpcyBoZWxkIGdsb2JhbGx5IGFuZCBzaGFyZWQgYnkgdGhlIGVudGlyZSBw
cm9jZXNzIHRvIGFsbG93IGFsbCBzaWduYXR1cmVzIHRvIGJlIHVuaXF1ZS4gVGhpcyBpcyByZXF1
aXJlZCB3aGVuIHdhc20gY2FsbHMgYW5vdGhlciB3YXNtIGluc3RhbmNlLCBhbmQgbXVzdCB3b3Jr
IHdoZW4gbW9kdWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgVk1zLgogLy8gTm90ZTog
c2lnbmF0dXJlcyBhcmUgbmV2ZXIgcmVtb3ZlZCBiZWNhdXNlIHRoYXQgd291bGQgcmVxdWlyZSBh
Y2NvdW50aW5nIGZvciBhbGwgV2ViQXNzZW1ibHkuTW9kdWxlIGFuZCB3aGljaCBzaWduYXR1cmVz
IHRoZXkgdXNlLiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBpcyBib3VuZGVkLCBh
bmQgaXNuJ3Qgd29ydGggdGhlIGNvdW50aW5nIG92ZXJoZWFkLiBXZSBjb3VsZCBjbGVhciBldmVy
eXRoaW5nIHdoZW4gd2UgcmVhY2ggemVybyBvdXRzdGFuZGluZyBXZWJBc3NlbWJseS5Nb2R1bGUu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMzcKIGNsYXNzIFNp
Z25hdHVyZUluZm9ybWF0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaWduYXR1cmVJ
bmZvcm1hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGVmYWVjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApAQCAtMCwwICsxLDEy
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUuaCIKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
KworUmVmUHRyPFRhYmxlPiBUYWJsZTo6Y3JlYXRlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFs
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90
TnVsbCwgZmFzdE1hbGxvYyhzaXplb2YoVGFibGUpKSkgVGFibGUoaW5pdGlhbCwgbWF4aW11bSkp
OworfQorCitUYWJsZTo6flRhYmxlKCkKK3sKK30KKworVGFibGU6OlRhYmxlKHVpbnQzMl90IGlu
aXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgbV9zaXplID0g
aW5pdGlhbDsKKyAgICBtX21heGltdW0gPSBtYXhpbXVtOworICAgIEFTU0VSVChpc1ZhbGlkU2l6
ZShtX3NpemUpKTsKKyAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6
ZSk7CisKKyAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxv
Y2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCisgICAgLy8g
QnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgorICAgIG1fZnVuY3Rpb25zID0gTWFs
bG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxh
YmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICBtX2luc3Rh
bmNlcyA9IE1hbGxvY1B0cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPjo6bWFsbG9jKHNpemVvZihK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIG5ldyAo
Jm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgICAg
IEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWdu
YXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2Rl
LgorICAgICAgICBtX2luc3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7CisgICAgfQorfQorCitz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKK3sKKyAg
ICBpZiAoZGVsdGEgPT0gMCkKKyAgICAgICAgcmV0dXJuIHNpemUoKTsKKworICAgIHVzaW5nIENo
ZWNrZWQgPSBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz47CisgICAgQ2hlY2tlZCBu
ZXdTaXplQ2hlY2tlZCA9IHNpemUoKTsKKyAgICBuZXdTaXplQ2hlY2tlZCArPSBkZWx0YTsKKyAg
ICB1aW50MzJfdCBuZXdTaXplOworICAgIGlmIChuZXdTaXplQ2hlY2tlZC5zYWZlR2V0KG5ld1Np
emUpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICB7CisgICAgICAgIENoZWNrZWQg
cmVhbGxvY0Z1bmN0aW9uc1NpemVDaGVja2VkID0gbmV3U2l6ZUNoZWNrZWQ7CisgICAgICAgIHJl
YWxsb2NGdW5jdGlvbnNTaXplQ2hlY2tlZCAqPSBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbik7Cisg
ICAgICAgIHVpbnQzMl90IHJlYWxsb2NGdW5jdGlvbnNTaXplOworICAgICAgICBpZiAocmVhbGxv
Y0Z1bmN0aW9uc1NpemVDaGVja2VkLnNhZmVHZXQocmVhbGxvY0Z1bmN0aW9uc1NpemUpID09IENo
ZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgICAgICBtX2Z1bmN0aW9ucy5yZWFsbG9jKHJlYWxsb2NGdW5jdGlvbnNTaXplKTsKKyAg
ICAgICAgZm9yICh1aW50MzJfdCBpID0gbV9zaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAg
ICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24o
KTsKKyAgICB9CisgICAgCisgICAgeworICAgICAgICBDaGVja2VkIHJlYWxsb2NJbnN0YW5jZXNT
aXplQ2hlY2tlZCA9IG5ld1NpemVDaGVja2VkOworICAgICAgICByZWFsbG9jSW5zdGFuY2VzU2l6
ZUNoZWNrZWQgKj0gc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworICAgICAgICB1aW50
MzJfdCByZWFsbG9jSW5zdGFuY2VzU2l6ZTsKKyAgICAgICAgaWYgKHJlYWxsb2NJbnN0YW5jZXNT
aXplQ2hlY2tlZC5zYWZlR2V0KHJlYWxsb2NJbnN0YW5jZXNTaXplKSA9PSBDaGVja2VkU3RhdGU6
OkRpZE92ZXJmbG93KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
bV9pbnN0YW5jZXMucmVhbGxvYyhyZWFsbG9jSW5zdGFuY2VzU2l6ZSk7CisgICAgICAgIGZvciAo
dWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgIG1faW5z
dGFuY2VzLmdldCgpW2ldID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX3NpemUgPSBuZXdTaXpl
OworCisgICAgcmV0dXJuIG5ld1NpemU7Cit9CisKK3ZvaWQgVGFibGU6OmNsZWFyRnVuY3Rpb24o
dWludDMyX3QgaW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOwor
ICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsK
KyAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdh
c206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBp
bGVkIGNvZGUuCisgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXhdID0gbnVsbHB0cjsKK30KKwor
dm9pZCBUYWJsZTo6c2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgsIENhbGxhYmxlRnVuY3Rpb24g
ZnVuY3Rpb24sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9
IGZ1bmN0aW9uOworICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IGluc3RhbmNlOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6VGFibGUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwOGVjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRl
ICJXYXNtTGltaXRzLmgiCisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTsgLy8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5zdGFuY2UgaHR0cHM6
Ly93ZWJraXQub3JnL2IvMTc3NDcyCisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgVGFibGUg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGFibGU+IHsKK3B1YmxpYzoKKyAgICBlbnVt
IGNsYXNzIENyZWF0ZUZhaWwgeworICAgICAgICBJbnZhbGlkU2l6ZSwKKyAgICB9OworICAgIHN0
YXRpYyBSZWZQdHI8VGFibGU+IGNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtYXhpbXVtKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UYWJsZSgpOwor
CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4aW11bTsgfQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
KyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VO
VVNFRF9SRVRVUk47CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lk
IHNldEZ1bmN0aW9uKHVpbnQzMl90LCBDYWxsYWJsZUZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqKTsgLy8gRklYTUUgbWFrZSB0aGlzIFdhc206Okluc3RhbmNlLiBodHRwczovL3dlYmtp
dC5vcmcvYi8xNzc0NzIKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBtX3NpemUpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkZ1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwg
bV9mdW5jdGlvbnMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlcygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9pbnN0YW5jZXMpOyB9CisKKyAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBzaXplIDwgbWF4
VGFibGVFbnRyaWVzOyB9CisKK3ByaXZhdGU6CisgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBtX21heGltdW07CisgICAgdWludDMyX3QgbV9zaXplOworICAgIE1hbGxvY1B0cjxD
YWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICAvLyBjYWxsX2luZGlyZWN0IG5lZWRz
IHRvIGRvIGFuIEluc3RhbmNlIGNoZWNrIHRvIHBvdGVudGlhbGx5IGNvbnRleHQgc3dpdGNoIHdo
ZW4gY2FsbGluZyBhIGZ1bmN0aW9uIHRvIGFub3RoZXIgaW5zdGFuY2UuIFdlIGNhbiBob2xkIHJh
dyBwb2ludGVycyB0byBJbnN0YW5jZSBoZXJlIGJlY2F1c2UgdGhlIGVtYmVkZGVyIGVuc3VyZXMg
dGhhdCBUYWJsZSBrZWVwcyBhbGwgdGhlIGluc3RhbmNlcyBhbGl2ZS4gV2UgY291bGRuJ3QgaG9s
ZCBhIFJlZiBoZXJlIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgY3ljbGVzLgorICAgIE1hbGxvY1B0
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPiBtX2luc3RhbmNlczsgLy8gRklYTUUgbWFrZSB0aGlz
IGEgV2FzbTo6SW5zdGFuY2UuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKaW5kZXggOTc3YjAxYi4u
YzIzNTk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5r
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAg
LTI5LDExICsyOSw5IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiSGVhcENl
bGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iu
aCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKQEAgLTQ4LDQ2ICs0NiwxOCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9y
KGNvbnN0IEFic3RyYWN0TG9ja2VyJgogCiAgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVy
ZSBtdXN0IG1vdmUgRXhjZXB0aW9uVHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYmVmb3JlIGp1
bXBpbmcgaGVyZS4KICAgICAvLyBXZSdyZSBhbGxvd2VkIHRvIHVzZSB0ZW1wIHJlZ2lzdGVycyBo
ZXJlLiBXZSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIGNhbGxlZSBzYXZlcy4KLSAgICBqaXQubG9h
ZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQ29udGV4dDo6b2Zmc2V0
T2ZWTSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0
SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxs
KCk7CiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGppdC5icmVh
a3BvaW50KCk7IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAotICAgIHZvaWQqICgqdGhy
b3dXYXNtRXhjZXB0aW9uKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBXYXNtOjpD
b250ZXh0KikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUs
IFdhc206OkNvbnRleHQqIHdhc21Db250ZXh0KSAtPiB2b2lkKiB7Ci0gICAgICAgIFZNKiB2bSA9
IHdhc21Db250ZXh0LT52bSgpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotCi0gICAgICAgICAgICBK
U09iamVjdCogZXJyb3I7IAotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6
U3RhY2tPdmVyZmxvdykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihleGVjLCBnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGVycm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGV4ZWMsICp2
bSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNt
OjplcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKLSAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOwotICAgICAgICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cp
OwotICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKLSAgICAgICAg
Ly8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5k
IGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKQotICAgICAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0
aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5v
dCByZXF1aXJlCi0gICAgICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNv
bnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24K
LSAgICAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBp
bmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKLSAgICAgICAgLy8gdG8gdGhl
IGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMg
dGVycmlibGUgaGFjay4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDQ0MAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtD
YWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih3YXNtQ29udGV4
dC0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkpOwotICAgICAgICByZXR1cm4gdm0tPnRhcmdldE1h
Y2hpbmVQQ0ZvclRocm93OwotICAgIH07Ci0KKyAgICBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uID0gVGh1bmtzOjpzaW5nbGV0b24oKS50aHJvd1dhc21FeGNlcHRpb24oKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCh0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyKHRocm93V2FzbUV4Y2VwdGlvbikpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpKTsKIH0KIApAQCAtMTE5LDgg
Kzg5LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5l
cmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogI2VuZGlmCiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJz
VG9TcGlsbCwgZXh0cmFQYWRkaW5nQnl0ZXMpOwogCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChH
UFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJ1bk9NR1BsYW5Gb3JJbmRleCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHR5cGVkZWYgdm9pZCAoKlJ1bikoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiwgdWludDMyX3QpOworICAgIFJ1biBydW4gPSBPTUdQbGFuOjpydW5Gb3JJ
bmRleDsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihydW4pKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQu
Y2FsbChHUFJJbmZvOjphcmd1bWVudEdQUjIpOwogCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3Bp
bGwsIFJlZ2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNl
cnZhdGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMpOwpAQCAtMTQyLDYgKzExNCwxOSBAQCBUaHVua3Mm
IFRodW5rczo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gKnRodW5rczsKIH0KIAordm9pZCBUaHVu
a3M6OnNldFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAvLyBU
aGUgdGh1bmtzIGFyZSB1bmlxdWUgZm9yIHRoZSBlbnRpcmUgcHJvY2VzcywgdGhlcmVmb3JlIGNo
YW5naW5nIHRoZSB0aHJvd2luZyBmdW5jdGlvbiBjaGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBvZiBX
ZWJBc3NlbWJseS4KKyAgICBSRUxFQVNFX0FTU0VSVCghbV90aHJvd1dhc21FeGNlcHRpb24gfHwg
bV90aHJvd1dhc21FeGNlcHRpb24gPT0gdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBtX3Rocm93
V2FzbUV4Y2VwdGlvbiA9IHRocm93V2FzbUV4Y2VwdGlvbjsKK30KKworVGhyb3dXYXNtRXhjZXB0
aW9uIFRodW5rczo6dGhyb3dXYXNtRXhjZXB0aW9uKCkKK3sKKyAgICByZXR1cm4gbV90aHJvd1dh
c21FeGNlcHRpb247Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6OnN0dWIoVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3Mu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBkZjE0Y2Ey
Li41Mjk3NjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1
bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0y
OCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTQyLDYgKzQzLDkgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgICBzdGF0aWMgVGh1bmtzJiBzaW5nbGV0b24o
KTsKIAorICAgIHZvaWQgc2V0VGhyb3dXYXNtRXhjZXB0aW9uKFRocm93V2FzbUV4Y2VwdGlvbik7
CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbigpOworCiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWIoVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBzdHViKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1bmtHZW5lcmF0b3IpOwog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IpOwpA
QCAtNTAsNiArNTQsNyBAQCBwcml2YXRlOgogICAgIFRodW5rcygpID0gZGVmYXVsdDsKIAogICAg
IEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9zdHViczsK
KyAgICBUaHJvd1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRyIH07
CiAgICAgTG9jayBtX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVdvcmtsaXN0LmNwcAppbmRleCA5YzViNjg0Li4yZmUxMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAKQEAgLTE3MiwxMyArMTczLDEzIEBAIHZvaWQgV29ya2xp
c3Q6OmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYgcGxhbikKICAgICBwbGFuLndhaXRG
b3JDb21wbGV0aW9uKCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZN
JiB2bSkKK3ZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRleHQoQ29udGV4dCYgY29u
dGV4dCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBWZWN0b3I8UXVl
dWVFbGVtZW50PiBlbGVtZW50czsKICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIFF1ZXVlRWxlbWVudCBlbGVtZW50ID0gbV9xdWV1ZS5kZXF1ZXVlKCk7Ci0gICAgICAg
IGJvb2wgZGlkQ2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFz
dCh2bSk7CisgICAgICAgIGJvb2wgZGlkQ2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVD
b250ZXh0QW5kQ2FuY2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICBpZiAoIWRpZENhbmNlbCkK
ICAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICB9CkBA
IC0xODgsNyArMTg5LDcgQEAgdm9pZCBXb3JrbGlzdDo6c3RvcEFsbFBsYW5zRm9yVk0oVk0mIHZt
KQogCiAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKICAgICAgICAgaWYgKHRo
cmVhZC0+ZWxlbWVudC5wbGFuKSB7Ci0gICAgICAgICAgICBib29sIGRpZENhbmNlbCA9IHRocmVh
ZC0+ZWxlbWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7CisgICAgICAg
ICAgICBib29sIGRpZENhbmNlbCA9IHRocmVhZC0+ZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250
ZXh0QW5kQ2FuY2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGRpZENhbmNlbCkg
ewogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRl
YWRsb2NraW5nIHNpbmNlIHRoZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjaGVja2luZyBm
b3IgYSBuZXcgcGxhbiBhbmQgbXVzdCBob2xkIHRoZSBsb2NrIHRvIGRvIHNvLgogICAgICAgICAg
ICAgICAgIHRocmVhZC0+c3luY2hyb25pemUud2FpdCgqbV9sb2NrKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKaW5kZXggNmI2OTM1Mi4uNzQ4YTllYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTI3LDggKzI3LDYgQEAK
IAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0KICNpbmNsdWRl
IDxxdWV1ZT4KIAogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KQEAgLTM3LDEwICsz
NSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKLQog
bmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIFBsYW47CiAKIGNsYXNz
IFdvcmtsaXN0IHsKQEAgLTUwLDEzICs0NywxMCBAQCBwdWJsaWM6CiAgICAgfldvcmtsaXN0KCk7
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGVucXVldWUoUmVmPFBsYW4+KTsKLSAgICB2
b2lkIHN0b3BBbGxQbGFuc0ZvclZNKFZNJik7CisgICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JDb250
ZXh0KENvbnRleHQmKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFu
U3luY2hyb25vdXNseShQbGFuJik7CiAKLSAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VE
ZWZlcnJlZCosIFBsYW4qKTsKLSAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJl
ZCosIFBsYW4qKTsKLQogICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgewogICAgICAgICBTaHV0ZG93
biwKICAgICAgICAgU3luY2hyb25vdXMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNzEwOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNt
LmNwcApAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVG9XYXNt
LmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMu
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwor
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihD
b21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUs
IHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29t
cGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKKworICAgIGF1dG8gcmVzdWx0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworICAgIGppdC5lbWl0RnVuY3Rpb25Q
cm9sb2d1ZSgpOworCisgICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKKyAgICBqaXQuc3Rv
cmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUg
PSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOworCisgICAg
Y29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKTsKKyAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2Rl
KTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCB0b1NhdmVTaXplID0gdG9T
YXZlLm51bWJlck9mU2V0R1BScygpOworICAgIC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUg
c2F2ZXMuCisgICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKKyAgICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUp
OworI2VuZGlmCisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRv
U2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJC
YXNlZCk7CisgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdp
c3RlcnNUb1NwaWxsOworCisgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNU
b1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7CisgICAgdG90YWxGcmFtZVNpemUgKz0gV2Fz
bUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOworICAgIHRvdGFsRnJhbWVT
aXplIC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICB1bnNpZ25lZCBudW1HUFJzID0g
MDsKKyAgICB1bnNpZ25lZCBudW1GUFJzID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2ln
bmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBj
YXNlIFdhc206OkkzMjoKKyAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNp
emUgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6
CisgICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2Zw
ckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2
b2lkKik7CisgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKKyAgICBqaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2Ugc2F2ZSBhbGwg
dGhlc2UgcmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KKyAg
ICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2gu
IFRoYXQgc2FpZCwKKyAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVt
b3J5LCBzbyBpdCdzIG5vdCByZWFsbHkKKyAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUg
Y2FzZSB0aGF0IHRoZXkgZG9uJ3QuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBy
ZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJl
Z0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRP
ZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQorCisg
ICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0
SW5zdGFuY2VQb2ludGVyOworCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mg
Y2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKKyAgICAgICAgbnVtR1BScyA9IDA7CisgICAgICAgIG51bUZQUnMgPSAwOwor
ICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBzZXQgdGhlIHBpbm5lZCByZWdpc3RlcnMgYWZ0ZXIg
dGhpcy4gU28KKyAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGlzIGFzIGEgc2NyYXRjaCBmb3Igbm93
IHNpbmNlIHdlIHNhdmVkIGl0IGFib3ZlLgorICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHBp
bm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0
ID0gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
KworICAgICAgICAvLyB2bUVudHJ5VG9XYXNtIHBhc3NlcyBXYXNtOjpDb250ZXh0KidzIGluc3Rh
bmNlIGFzIHRoZSBmaXJzdCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCisgICAgICAgIC8vIG5vdCB1
c2luZyBmYXN0IFRMUyB0byBob2xkIHRoZSBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlLgorICAg
ICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09m
ZnNldCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgICAgICAgICAganNPZmZzZXQgKz0g
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHB0cmRpZmZfdCB3
YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9p
ZCopOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChp
KSkgeworICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBjYXNlIFdhc206
Okk2NDoKKyAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1
cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNp
emVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFy
Z3NbbnVtR1BSc10uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dw
ckFyZ3NbbnVtR1BSc10uZ3ByKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICArK251bUdQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdh
c206OkYzMjoKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlm
IChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpG
MzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcp
OworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVl
RnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZy
YW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50
KGkpID09IFdhc206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNl
dCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
RG91YmxlKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnBy
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUZQUnM7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9
IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1
c2VGYXN0VExTKCkpCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Mod2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
Zldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAg
ICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKKyAgICAgICAgICAgIEFTU0VS
VCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVz
IHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMg
cmVsYXRpdmUgdG8gMC4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3Nb
MF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBz
aXplUmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6
TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgfQorCisgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7
CisgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8u
aW1wb3J0RnVuY3Rpb25Db3VudCgpOworICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBp
bmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgaml0LmFkZExpbmtUYXNrKFt1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5k
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFj
ZSB9KTsKKyAgICB9KTsKKworCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdB
dE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0
T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNl
dCgpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7CisgICAgfQorCisgICAgc3dpdGNoIChz
aWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGpp
dC5tb3ZlRmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICBq
aXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1RvV2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Yjk4
ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldhc21CM0lSR2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8bWVtb3J5Pgor
CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4
dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHku
Y3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHkuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKcmVuYW1lIHRvIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAppbmRleCAwZmFmOTc3Li5jNTc4ZGYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCkBAIC0y
OCwzMSArMjgsMzEgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU09i
amVjdC5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKLSNpbmNs
dWRlICJqcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIgotI2lu
Y2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVRhYmxlLmgiCi0j
aW5jbHVkZSAianMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1
ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUu
aCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5j
bHVkZSAianMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9X
ZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIKLSNpbmNs
dWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25z
dHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBl
LmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVk
ZSAianMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5
Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUxp
bmtFcnJvckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90
b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5
cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JD
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBl
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmOTFlNmM3
Li4wODI1MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5
LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIldhc21CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2Fz
bVRvSlMuaCIKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC00NCw3ICs0NCw3
IEBAIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJX
ZWJBc3NlbWJseUNvZGVCbG9jayIsIG51bGxwCiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiBj
b2RlQmxvY2ssIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSkKIHsKICAgICBjb25zdCBXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0gICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNp
emUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sodm0sIFdURk1vdmUoY29kZUJsb2NrKSwgbW9kdWxlSW5mb3JtYXRpb24pOwor
ICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3Zl
KGNvZGVCbG9jayksIG1vZHVsZUluZm9ybWF0aW9uKTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtLCBtb2R1bGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01OCw3ICs1OCw3IEBA
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBS
ZWY8V2FzbTo6Q29kZUJsb2NrPiYmIGNvCiAgICAgbV93YXNtVG9KU0V4aXRTdHVicy5yZXNlcnZl
Q2FwYWNpdHkobV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9jb2RlQmxvY2stPmZ1bmN0
aW9uSW1wb3J0Q291bnQoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlcy5hdChpbXBvcnRJbmRleCk7Ci0gICAgICAgIGF1dG8gYmluZGluZyA9
IFdhc206Ondhc21Ub0pzKCZ2bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1w
b3J0SW5kZXgpOworICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9KUygmdm0sIG1f
Y2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKICAgICAgICAgaWYg
KFVOTElLRUxZKCFiaW5kaW5nKSkgewogICAgICAgICAgICAgc3dpdGNoIChiaW5kaW5nLmVycm9y
KCkpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6QmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5
OgpAQCAtNjgsNyArNjgsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBtX3dhc21U
b0pTRXhpdFN0dWJzLnVuY2hlY2tlZEFwcGVuZChiaW5kaW5nLnZhbHVlKCkpOwotICAgICAgICBp
bXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBv
cnRJbmRleF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIG1fY29kZUJsb2Nr
LT5pbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRT
dHVic1tpbXBvcnRJbmRleF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogfQog
CkBAIC04MywxMSArODMsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihj
ZWxsKS0+SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soKTsK
IH0KIAotYm9vbCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppc1NhZmVUb1J1bihKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBtZW1vcnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1Nh
ZmVUb1J1bihtZW1vcnktPm1lbW9yeSgpLm1vZGUoKSk7Ci19Ci0KIHZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6Y2xlYXJKU0NhbGxJQ3MoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVy
ID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCmlu
ZGV4IDUyNzAzZjguLmFiYjhjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTY0LDM5ICs2NCwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiAmdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsgfQotICAgIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgV2Fz
bTo6Q29kZUJsb2NrJiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQog
Ci0gICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CisgICAg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxl
Kik7CiAKLSAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25j
ZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgotCi0gICAgV2FzbTo6Q2FsbGVlJiBq
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKLSAgICAgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQotICAgIFdhc206Oldhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQo
cnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0g
ICAgfQotCi0gICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbVRvSnNDYWxs
U3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChydW5uYWJsZSgpKTsKLSAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0
SW5kZXgpOwotICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNt
VG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zm
c2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGltcG9ydEluZGV4OwotICAgIH0K
LQotICAgIFdhc206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2su
Z2V0KCk7IH0KLQogICAgIHZvaWQgY2xlYXJKU0NhbGxJQ3MoVk0mKTsKIAogICAgIGJvb2wgcnVu
bmFibGUoKSBjb25zdCB7IHJldHVybiAhbV9lcnJvck1lc3NhZ2U7IH0KQEAgLTExNCwyMSArODcs
NiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZkltcG9ydFN0dWJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6ZW9mKEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXpl
KENoZWNrZWQ8c2l6ZV90PiBmdW5jdGlvbkltcG9ydENvdW50KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIChvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogZnVuY3Rpb25JbXBv
cnRDb3VudCkudW5zYWZlR2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZComIGltcG9ydFdhc21Ub0pT
U3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAqYml0d2lz
ZV9jYXN0PHZvaWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0
V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KSk7Ci0gICAgfQotCiAgICAgY2xhc3MgVW5jb25kaXRp
b25hbEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewogICAg
ICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CiAgICAgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwCmluZGV4IGM3N2ZhMDUuLmM1MmVlYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtNDks
MTIgKzQ5LDE3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNp
Z25lZCBudW1JbXBvcnRGdW5jdGlvbnMpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1J
bXBvcnRGdW5jdGlvbnMsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiAg
ICAgLCBtX3ZtKCZ2bSkKKyAgICAsIG1fd2FzbU1vZHVsZShtX2luc3RhbmNlLT5tb2R1bGUoKSkK
KyAgICAsIG1fd2FzbVRhYmxlKG1faW5zdGFuY2UtPm1fdGFibGUuZ2V0KCkpCisgICAgLCBtX2ds
b2JhbHMobV9pbnN0YW5jZS0+bV9nbG9iYWxzLmdldCgpKQogICAgICwgbV9udW1JbXBvcnRGdW5j
dGlvbnMobnVtSW1wb3J0RnVuY3Rpb25zKQogewotICAgIG1lbXNldChpbXBvcnRGdW5jdGlvbnMo
KSwgMCwgbV9udW1JbXBvcnRGdW5jdGlvbnMgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PikpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUltcG9ydEZ1bmN0aW9uczsg
KytpKQorICAgICAgICBuZXcgKGltcG9ydEZ1bmN0aW9uSW5mbyhpKSkgSW1wb3J0RnVuY3Rpb25J
bmZvKCk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCkKQEAgLTYzLDEyICs2OCwxMCBAQCB2b2lkIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBtb2R1bGUsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIG1f
bW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKLSAgICBjb25zdCBzaXplX3QgZXh0cmFNZW1v
cnlTaXplID0gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoKTsKLSAgICBtX2dsb2JhbHMgPSBNYWxsb2NQ
dHI8dWludDY0X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKLSAgICBoZWFwKCktPnJlcG9y
dEV4dHJhTWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7Ci0KICAgICBtX21vZHVsZU5h
bWVzcGFjZU9iamVjdC5zZXQodm0sIHRoaXMsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAg
bV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBtb2R1bGUtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBoZWFw
KCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxs
b2NhdGVkKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCkBAIC04OCw0MCArOTEsNDQgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9j
YWxsZWUpOwotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3Qt
Pmdsb2JhbE1lbW9yeUJ5dGVTaXplKCkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKHRoaXNPYmplY3QtPm1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0
aW9uczsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5j
dGlvbnMoKVtpXSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1
bmN0aW9uSW5mbyhpKS0+aW1wb3J0RnVuY3Rpb24pOyAvLyBUaGlzIGFsc28ga2VlcHMgdGhlIGZ1
bmN0aW9ucycgSlNXZWJBc3NlbWJseUluc3RhbmNlIGFsaXZlLgogfQogCiB2b2lkIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
UmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrKQogeworICAgIG1faW5zdGFuY2Ut
PmZpbmFsaXplQ3JlYXRpb24od2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOworICAgIG1fd2FzbUNv
ZGVCbG9jayA9IHdhc21Db2RlQmxvY2sucHRyKCk7CisKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXdhc21Db2RlQmxvY2stPnJ1bm5hYmxlKCkp
IHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5r
RXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vy
cm9yU3RydWN0dXJlKCksIHdhc21Db2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVCh3YXNtQ29kZUJsb2NrLT5pc1Nh
ZmVUb1J1bihtZW1vcnlNb2RlKCkpKTsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBtb2R1bGUoKS0+Y29kZUJsb2NrKG1lbW9yeU1vZGUoKSk7Ci0gICAgaWYgKGNvZGVC
bG9jaykgeworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGpzQ29kZUJsb2NrID0gbV9tb2R1
bGUtPmNvZGVCbG9jayhtZW1vcnlNb2RlKCkpOworICAgIGlmIChqc0NvZGVCbG9jaykgewogICAg
ICAgICAvLyBBIENvZGVCbG9jayBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxlZC4gSWYg
c28sIGl0IG1lYW5zCiAgICAgICAgIC8vIHRoYXQgdGhlIENvZGVCbG9jayB3ZSBhcmUgdHJ5aW5n
IHRvIGNvbXBpbGUgbXVzdCBiZSB0aGUgc2FtZQogICAgICAgICAvLyBiZWNhdXNlIHdlIHdpbGwg
bmV2ZXIgY29tcGlsZSBhIENvZGVCbG9jayBhZ2FpbiBvbmNlIGl0J3MKICAgICAgICAgLy8gcnVu
bmFibGUuCi0gICAgICAgIEFTU0VSVCgmY29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29k
ZUJsb2NrLnB0cigpKTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxv
Y2spOworICAgICAgICBBU1NFUlQoJmpzQ29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29k
ZUJsb2NrLnB0cigpKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBqc0NvZGVC
bG9jayk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6Y3JlYXRlKHZtLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSwgbV9tb2R1bGUuZ2V0
KCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAg
ICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtFcnJv
clN0cnVjdHVyZSgpLCBjb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIGpzQ29k
ZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHdhc21D
b2RlQmxvY2spLCBtX21vZHVsZS5nZXQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghanNDb2Rl
QmxvY2stPnJ1bm5hYmxlKCkpKSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwganNDb2RlQmxvY2stPmVycm9y
TWVzc2FnZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9j
b2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgICAgICBtb2R1bGUoKS0+c2V0
Q29kZUJsb2NrKHZtLCBtZW1vcnlNb2RlKCksIGNvZGVCbG9jayk7CisgICAgICAgIG1fY29kZUJs
b2NrLnNldCh2bSwgdGhpcywganNDb2RlQmxvY2spOworICAgICAgICBtX21vZHVsZS0+c2V0Q29k
ZUJsb2NrKHZtLCBtZW1vcnlNb2RlKCksIGpzQ29kZUJsb2NrKTsKICAgICB9CiAKICAgICBhdXRv
KiBtb2R1bGVSZWNvcmQgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21vZHVs
ZU5hbWVzcGFjZU9iamVjdC0+bW9kdWxlUmVjb3JkKCkpOwotICAgIG1vZHVsZVJlY29yZC0+bGlu
ayhleGVjLCBtb2R1bGUoKSwgdGhpcyk7CisgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIG1f
bW9kdWxlLmdldCgpLCB0aGlzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogCiAgICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUo
ZXhlYyk7CkBAIC0xMjksNyArMTM2LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZp
bmFsaXplQ3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjoKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVj
dCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSog
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1
Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYgaW5zdGFuY2Up
CiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
YXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTU4
LDggKzE2NSw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlID0gbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1l
c3BhY2UoZXhlYyk7CiAgICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5
IGJpZyB3ZSBzaG91bGQgdHJ5IHRvIHRocm93IE9PTSBoZXJlLgotICAgIGF1dG8qIGluc3RhbmNl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5o
ZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50
KCkpKSkgSlNXZWJBc3NlbWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxl
SW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24odm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOworICAgIGF1dG8qIGpzSW5z
dGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+
KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9u
Q291bnQoKSkpKSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBt
b2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCksIFdURk1vdmUoaW5zdGFuY2Up
KTsKKyAgICBqc0luc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1vZHVsZU5h
bWVzcGFjZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsK
IAogICAgIC8vIExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1w
dHkgbGlzdHMgb2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1v
cnkgb2JqZWN0cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgpA
QCAtMTkwLDE1ICsxOTcsMjEgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAg
IGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3Nh
Z2UoaW1wb3J0LCAiaW1wb3J0IGZ1bmN0aW9uIiwgIm11c3QgYmUgY2FsbGFibGUiKSkpOwogCisg
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRy
eXBvaW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2Fz
dDxKU09iamVjdCo+KHZhbHVlKTsKKwogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhw
b3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIHdhc21GdW5jdGlvbjsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOwogICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlI
b3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rp
b24pKSB7CiAgICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMg
bm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJy
b3IuCiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1
cmVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAg
ICAgIGlmICh3YXNtRnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWdu
YXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbGVlSW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAg
ICAgICAgICAgICAgICAgIHdhc21FbnRyeXBvaW50ID0gd2FzbUZ1bmN0aW9uLT53YXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbigpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21X
cmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8v
IGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCkBAIC0yMTUsNyArMjI4LDEwIEBAIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZt
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICAvLyBOb3RlOiBhZGRpbmcgdGhlIEpT
Q2VsbCB0byB0aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBjbG9zdXJlIHJlcXVpcmVtZW50cyBi
LiBhYm92ZSAodGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdpbCBiZSBrZXB0IGFsaXZlKSBhbmQg
di4gYmVsb3cgKHRoZSBKU0Z1bmN0aW9uKS4KIAogICAgICAgICAgICAgQVNTRVJUKG51bUltcG9y
dEZ1bmN0aW9ucyA9PSBpbXBvcnQua2luZEluZGV4KTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5p
bXBvcnRGdW5jdGlvbnMoKVtudW1JbXBvcnRGdW5jdGlvbnMrK10uc2V0KHZtLCBpbnN0YW5jZSwg
ZnVuY3Rpb24pOworICAgICAgICAgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbmZvID0ganNJbnN0
YW5jZS0+aW1wb3J0RnVuY3Rpb25JbmZvKG51bUltcG9ydEZ1bmN0aW9ucysrKTsKKyAgICAgICAg
ICAgIGluZm8tPnRhcmdldEluc3RhbmNlID0gY2FsbGVlSW5zdGFuY2U7CisgICAgICAgICAgICBp
bmZvLT53YXNtRW50cnlwb2ludCA9IHdhc21FbnRyeXBvaW50OworICAgICAgICAgICAgaW5mby0+
aW1wb3J0RnVuY3Rpb24uc2V0KHZtLCBqc0luc3RhbmNlLCBmdW5jdGlvbik7CiAgICAgICAgICAg
ICAvLyB2LiBBcHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTI0Myw3ICsyNTksOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAg
ICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgogICAgICAgICAgICAgLy8gaWlp
LiBBcHBlbmQgdi5bW1RhYmxlXV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5t
X3RhYmxlLnNldCh2bSwgaW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2Ut
Pm1fdGFibGUuc2V0KHZtLCBqc0luc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3Rh
bmNlLT5tX3dhc21UYWJsZSA9IHRhYmxlLT50YWJsZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIApAQCAtMjczLDggKzI5MCw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8v
IGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgQVNTRVJU
KCFpbnN0YW5jZS0+bV9tZW1vcnkpOwotICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNl
dCh2bSwgaW5zdGFuY2UsIG1lbW9yeSk7CisgICAgICAgICAgICBBU1NFUlQoIWpzSW5zdGFuY2Ut
Pm1fbWVtb3J5KTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgbWVtb3J5
KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjkxLDEzICszMDgsMTMgQEAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxz
ID09IGltcG9ydC5raW5kSW5kZXgpOwogICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1h
dGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2Ug
V2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0
R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBqc0luc3Rh
bmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIHZhbHVlLnRvSW50
MzIoZXhlYykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNt
OjpGMzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9i
YWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChleGVjKSkpOworICAg
ICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEds
b2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAg
ICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAganNJ
bnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTMxNSwxNCArMzMyLDIxIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTCiAgICAgICAgIH0KIAogICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYm
ICFoYXNNZW1vcnlJbXBvcnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUg
YSBtZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQ
dHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1h
eGltdW0oKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24u
bWVtb3J5LmlzSW1wb3J0KCkpOworCisgICAgICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2Vi
QXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIFJlZlB0cjxX
YXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKG1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCks
CisgICAgICAgICAgICAgICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0
aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5j
b2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsm
dm0sIGpzTWVtb3J5XSAoV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNv
dW50IG5ld1BhZ2VDb3VudCkgeyBqc01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xk
UGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOyB9KTsKICAgICAgICAgICAgIGlmICghbWVtb3J5KQog
ICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihl
eGVjKSk7CiAKLSAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNl
LAotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgp
LCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICAgICAganNNZW1vcnktPmFkb3B0
KG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1l
bW9yeSh2bSwganNNZW1vcnkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMzNiwxOSArMzYwLDI0IEBA
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgp
KTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRl
ZmluaXRpb24uCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJB
c3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgIG1vZHVsZUlu
Zm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50
YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6VGFi
bGU+IHdhc21UYWJsZSA9IFdhc206OlRhYmxlOjpjcmVhdGUobW9kdWxlSW5mb3JtYXRpb24udGFi
bGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24ubWF4aW11bSgpKTsKKyAgICAgICAgICAgIGlmICghd2FzbVRhYmxlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2
bSwgImNvdWxkbid0IGNyZWF0ZSBUYWJsZSIpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlU
YWJsZSogdGFibGUgPSBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21U
YWJsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMg
YmUgYWJsZSB0byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlUYWJsZSB3ZSd2ZSBkZWZpbmVkLgog
ICAgICAgICAgICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJlIHRvbyBsYXJnZSwgd2Ugc2hvdWxk
IGhhdmUgdGhyb3duIGEgdmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAgICAgIHRocm93U2NvcGUu
YXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7Ci0gICAgICAg
ICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAg
ICAgICBqc0luc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwgdGFibGUpOworICAg
ICAgICAgICAganNJbnN0YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFibGUoKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgeworICAgIGlm
ICghanNJbnN0YW5jZS0+bWVtb3J5KCkpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUg
YSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2lu
ZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVy
cy4KLSAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwg
MCwgMCkucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2Vi
QXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAganNNZW1vcnktPmFk
b3B0KFdhc206Ok1lbW9yeTo6Y3JlYXRlKCkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGpz
SW5zdGFuY2UtPnNldE1lbW9yeSh2bSwganNNZW1vcnkpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIH0KICAgICAKQEAgLTM2MCwyMCArMzg5
LDEzIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVh
dGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFs
LmluaXRpYWxpemF0aW9uVHlwZSAhPSBXYXNtOjpHbG9iYWw6OklzSW1wb3J0KTsKICAgICAgICAg
ICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID09IFdhc206Okdsb2JhbDo6RnJvbUds
b2JhbEltcG9ydCkgewogICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHNP
ckltcG9ydE51bWJlciA8IG51bUltcG9ydEdsb2JhbHMpOwotICAgICAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGluc3RhbmNlLT5sb2FkSTY0R2xvYmFsKGdsb2Jh
bC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5j
ZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGpzSW5zdGFuY2UtPmluc3RhbmNl
KCkubG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOwogICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9i
YWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOworICAgICAgICAgICAg
ICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2JhbEluZGV4LCBnbG9iYWwu
aW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NF
UlQoIWluc3RhbmNlLT5jb2RlQmxvY2soKSk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0K
LXNpemVfdCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5z
aXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHJldHVybiBqc0luc3RhbmNlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggM2NmZTU0OS4uZDUyNTUwYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUlu
c3RhbmNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw3NSArNDEsOTQgQEAgY2xhc3Mg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xh
c3MgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlOwogCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDb2Rl
QmxvY2s7CitjbGFzcyBUYWJsZTsgLy8gRklYTUUgcmVtb3ZlIHRoaXMgYWZ0ZXIgcmVmYWN0b3Jp
bmcuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfQorCiBjbGFzcyBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5
cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUq
LCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3Rh
bmNlPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUJsb2NrLmdldCgpOyB9CiAgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFZNJiwgRXhlY1N0YXRl
KiwgUmVmPFdhc206OkNvZGVCbG9jaz4mJik7Ci0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotCi0gICAgSlNPYmplY3Qq
IGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkgeyBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251
bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVybiBpbXBvcnRGdW5jdGlvbnMoKVtpZHhdLmdldCgpOyB9
Ci0KKyAgICAKKyAgICBXYXNtOjpJbnN0YW5jZSYgaW5zdGFuY2UoKSB7IHJldHVybiBtX2luc3Rh
bmNlLmdldCgpOyB9CisgICAgV2FzbTo6Q29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
ICZtX3ZtLT53YXNtQ29udGV4dDsgfQogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1
bGVOYW1lc3BhY2VPYmplY3QoKSB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5nZXQo
KTsgfQorICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdl
dCgpOyB9CisgICAgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiB3ZWJBc3NlbWJseVRvSlNDYWxsZWUo
KSB7IHJldHVybiBtX2NhbGxlZS5nZXQoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSog
bWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lbW9yeShW
TSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBt
X21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgfQorICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2
bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogdmFsdWUpIHsgQVNTRVJUKCFtZW1vcnkoKSk7IG1fbWVt
b3J5LnNldCh2bSwgdGhpcywgdmFsdWUpOyBtX3dhc21NZW1vcnkgPSAmbWVtb3J5KCktPm1lbW9y
eSgpOyB9CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5
KCktPm1lbW9yeSgpLm1vZGUoKTsgfQogCi0gICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgp
IHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KLQotICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KLSAgICBpbnQ2
NF90IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdl
dCgpW2ldOyB9Ci0gICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KGxvYWRJMzJHbG9iYWwoaSkpOyB9Ci0gICAgZG91Ymxl
IGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRv
dWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KLSAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBp
LCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQotCi0gICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fbWVtb3J5KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5z
dGFuY2UsIG1fdGFibGUpOyB9CisgICAgLy8gVGFpbCBhY2Nlc3NvcnMuCisgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZlRhaWwoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6
ZW9mKHVpbnQ2NF90KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9CisgICAgc3Ry
dWN0IEltcG9ydEZ1bmN0aW9uSW5mbyB7CisgICAgICAgIC8vIFRhcmdldCBpbnN0YW5jZSBhbmQg
ZW50cnlwb2ludCBhcmUgb25seSBzZXQgZm9yIHdhc20tPndhc20gY2FsbHMsIGFuZCBhcmUgb3Ro
ZXJ3aXNlIG51bGxwdHIuIFRoZSBlbWJlZGRlci1zcGVjaWZpYyBsb2dpYyBvY2N1cnMgdGhyb3Vn
aCBpbXBvcnQgZnVuY3Rpb24uCisgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogdGFyZ2V0
SW5zdGFuY2UgeyBudWxscHRyIH07CisgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uIHdhc21FbnRyeXBvaW50IHsgbnVsbHB0ciB9OworICAgICAgICBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+IGltcG9ydEZ1bmN0aW9uIHsgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpIH07Cisg
ICAgfTsKKyAgICBJbXBvcnRGdW5jdGlvbkluZm8qIGltcG9ydEZ1bmN0aW9uSW5mbyhzaXplX3Qg
aW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuICZiaXR3aXNlX2Nhc3Q8SW1wb3J0RnVuY3Rpb25J
bmZvKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mVGFpbCgpKVtpbXBvcnRG
dW5jdGlvbk51bV07IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mVGFyZ2V0SW5zdGFuY2Uo
c2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9y
dEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VU
T0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB0YXJnZXRJbnN0YW5jZSk7IH0KKyAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mV2FzbUVudHJ5cG9pbnQoc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJl
dHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1
bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNtRW50
cnlwb2ludCk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6
ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1
bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SW1wb3J0RnVuY3Rpb25JbmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBKU09iamVjdCogaW1w
b3J0RnVuY3Rpb24odW5zaWduZWQgaW1wb3J0RnVuY3Rpb25OdW0pIHsgUkVMRUFTRV9BU1NFUlQo
aW1wb3J0RnVuY3Rpb25OdW0gPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVybiBpbXBvcnRG
dW5jdGlvbkluZm8oaW1wb3J0RnVuY3Rpb25OdW0pLT5pbXBvcnRGdW5jdGlvbi5nZXQoKTsgfQor
ICAgIAorICAgIC8vIEZJWE1FIHJlbW92ZSB0aGVzZSBhZnRlciByZWZhY3RvcmluZyB0aGVtIG91
dC4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCisgICAgV2FzbTo6TWVtb3J5JiBpbnRlcm5h
bE1lbW9yeSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKTsgfQorICAgIFdhc206OkNvZGVC
bG9jayYgd2FzbUNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RhbmNlLT5jb2RlQmxv
Y2soKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtVGFibGUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21UYWJsZSk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jYWxsZWUpOyB9Ci0gICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJB
c3NlbWJseUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlZNKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwg
bV92bSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jb2RlQmxvY2spOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZldhc21Db2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21Db2RlQmxvY2spOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2NhY2hlZFN0YWNrTGltaXQpOyB9Ci0gICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJuIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pPihzaXplb2YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKSk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0
RnVuY3Rpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZkltcG9y
dEZ1bmN0aW9ucygpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2Yoc2l6ZW9mKFdyaXRlQmFy
cmllcjxKU0NlbGw+KSk7IH0KLQotICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogd2ViQXNzZW1i
bHlUb0pTQ2FsbGVlKCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KLQotICAgIHZvaWQqIGNh
Y2hlZFN0YWNrTGltaXQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7IH0KLSAg
ICB2b2lkIHNldENhY2hlZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9jYWNoZWRTdGFja0xp
bWl0ID0gbGltaXQ7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbU1lbW9yeSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fd2FzbU1l
bW9yeSk7IH0KKyAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyBSRUxFQVNFX0FT
U0VSVChtX2luc3RhbmNlLT5jYWNoZWRTdGFja0xpbWl0KCkgPT0gbV9jYWNoZWRTdGFja0xpbWl0
KTsgcmV0dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tM
aW1pdCh2b2lkKiBsaW1pdCkgeyBtX2luc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGxpbWl0
KTsgbV9jYWNoZWRTdGFja0xpbWl0ID0gbGltaXQ7IH0KKyAgICBXYXNtOjpNZW1vcnkqIHdhc21N
ZW1vcnkoKSB7IHJldHVybiBtX3dhc21NZW1vcnk7IH0KKyAgICBXYXNtOjpNb2R1bGUmIHdhc21N
b2R1bGUoKSB7IHJldHVybiBtX3dhc21Nb2R1bGU7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0
aW9ucyk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQgbnVtSW1wb3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRp
YyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IG51bUltcG9ydEZ1bmN0aW9u
cykKICAgICB7Ci0gICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIHNp
emVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdl
dCgpOworICAgICAgICByZXR1cm4gKG9mZnNldE9mVGFpbCgpICsgc2l6ZW9mKEltcG9ydEZ1bmN0
aW9uSW5mbykgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdldCgpOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBWTSogbV92bTsKLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRG
dW5jdGlvbnMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsg
fQotICAgIHNpemVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0OworICAgIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisK
KyAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAKKyAgICBWTSogbV92bTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFdyaXRlQmFy
cmllcjxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiAg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5VGFibGU+IG1fdGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPFdl
YkFzc2VtYmx5VG9KU0NhbGxlZT4gbV9jYWxsZWU7Ci0gICAgTWFsbG9jUHRyPHVpbnQ2NF90PiBt
X2dsb2JhbHM7CisgICAgCisgICAgLy8gRklYTUUgcmVtb3ZlIHRoZXNlIGFmdGVyIHJlZmFjdG9y
aW5nIHRoZW0gb3V0LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKICAgICB2b2lkKiBtX2Nh
Y2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludHB0cl90Pjo6bWF4KCkpIH07CisgICAgV2FzbTo6Q29kZUJsb2NrKiBtX3dhc21Db2RlQmxv
Y2sgeyBudWxscHRyIH07CisgICAgV2FzbTo6TW9kdWxlJiBtX3dhc21Nb2R1bGU7CisgICAgV2Fz
bTo6TWVtb3J5KiBtX3dhc21NZW1vcnkgeyBudWxscHRyIH07CisgICAgV2FzbTo6VGFibGUqIG1f
d2FzbVRhYmxlIHsgbnVsbHB0ciB9OworICAgIHVpbnQ2NF90KiBtX2dsb2JhbHMgeyBudWxscHRy
IH07CisKICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAK
aW5kZXggMjIzYzU4Yi4uZDY0MGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2lu
Zm8gPSB7ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CiAKLUpTV2Vi
QXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVt
b3J5KQorSlNXZWJBc3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC01MCwxMCArNTAsMTYgQEAg
SlNXZWJBc3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3QKICAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGV4
ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CiAK
LSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNz
ZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUs
IFdURk1vdmUobWVtb3J5KSk7Ci0gICAgaW5zdGFuY2UtPm1fbWVtb3J5LT5jaGVjaygpOwotICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOworICAg
IGF1dG8qIG1lbW9yeSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlN
ZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAg
IG1lbW9yeS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBtZW1vcnk7Cit9CisgICAg
Cit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVt
b3J5KQoreworICAgIG1fbWVtb3J5LnN3YXAobWVtb3J5KTsKKyAgICBBU1NFUlQobV9tZW1vcnkt
PnJlZkNvdW50KCkgPT0gMSk7CisgICAgbV9tZW1vcnktPmNoZWNrKCk7CiB9CiAKIFN0cnVjdHVy
ZSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC02MSwxMyArNjcsMTAg
QEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1i
bHlNZW1vcnkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4m
JiBtZW1vcnkpCitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAg
LCBtX21lbW9yeShXVEZNb3ZlKG1lbW9yeSkpCisgICAgLCBtX21lbW9yeShXYXNtOjpNZW1vcnk6
OmNyZWF0ZSgpLnJlbGVhc2VOb25OdWxsKCkpCiB7Ci0gICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZD
b3VudCgpID09IDEpOwotICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVtb3J5LT5tZW1vcnkoKTsKLSAg
ICBtX21lbW9yeVNpemUgPSBtX21lbW9yeS0+c2l6ZSgpOwogfQogCiBKU0FycmF5QnVmZmVyKiBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQpAQCAtODUsNTIgKzg4LDQ1IEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAg
cmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIH0KIAotV2FzbTo6UGFnZUNvdW50IEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRl
bHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKK1dhc206OlBhZ2VDb3Vu
dCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50
MzJfdCBkZWx0YSkKIHsKLSAgICAvLyBOb3RlOiBXZSBjYW4gb25seSB1c2UgZXhlYyBpZiBzaG91
bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgaXMgdHJ1ZS4KICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFdhc206OlBhZ2VDb3VudCBvbGRQYWdl
Q291bnQgPSBtZW1vcnkoKS5zaXplSW5QYWdlcygpOwotCi0gICAgaWYgKCFXYXNtOjpQYWdlQ291
bnQ6OmlzVmFsaWQoZGVsdGEpKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNP
bkZhaWx1cmUpCisgICAgYXV0byBncm93biA9IG1lbW9yeSgpLmdyb3coV2FzbTo6UGFnZUNvdW50
KGRlbHRhKSk7CisgICAgaWYgKCFncm93bikgeworICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9y
KCkpIHsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlk
RGVsdGE6CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cg
ZXhwZWN0cyB0aGUgZGVsdGEgdG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50IikpKTsKLSAgICAgICAg
cmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwotICAgIH0KLQotICAgIFdhc206OlBhZ2VDb3VudCBu
ZXdTaXplID0gb2xkUGFnZUNvdW50ICsgV2FzbTo6UGFnZUNvdW50KGRlbHRhKTsKLSAgICBpZiAo
IW5ld1NpemUpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246OkludmFsaWRHcm93U2l6ZToKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3Nl
bWJseS5NZW1vcnkuZ3JvdyBleHBlY3RzIHRoZSBncm93biBzaXplIHRvIGJlIGEgdmFsaWQgcGFn
ZSBjb3VudCIpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1v
cnk6Okdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgd291bGQgZXhjZWVkIHRoZSBtZW1vcnkn
cyBkZWNsYXJlZCBtYXhpbXVtIHNpemUiKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAgICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVy
biBXYXNtOjpQYWdlQ291bnQoKTsKICAgICB9CiAKLSAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAg
Ym9vbCBzdWNjZXNzID0gbWVtb3J5KCkuZ3Jvdyh2bSwgbmV3U2l6ZSk7Ci0gICAgICAgIGlmICgh
c3VjY2VzcykgewotICAgICAgICAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZSA9PSBtZW1vcnkoKS5t
ZW1vcnkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplID09IG1lbW9yeSgpLnNp
emUoKSk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQot
ICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotICAgICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3Vu
dCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fbWVtb3J5QmFzZSA9IG1lbW9yeSgpLm1lbW9yeSgp
OwotICAgICAgICBtX21lbW9yeVNpemUgPSBtZW1vcnkoKS5zaXplKCk7Ci0gICAgfQorICAgIHJl
dHVybiBncm93bi52YWx1ZSgpOworfQogCi0gICAgLy8gV2UgbmVlZCB0byBjbGVhciBvdXQgdGhl
IG9sZCBhcnJheSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUgcG9pbnRpbmcKLSAgICAv
LyB0byBzdGFsZSBtZW1vcnkuCit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3dTdWNjZXNz
Q2FsbGJhY2soVk0mIHZtLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdl
Q291bnQgbmV3UGFnZUNvdW50KQoreworICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBv
bGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nIHRvIHN0YWxl
IG1lbW9yeS4KICAgICAvLyBOZXV0ZXIgdGhlIG9sZCBhcnJheS4KICAgICBpZiAobV9idWZmZXIp
IHsKICAgICAgICAgbV9idWZmZXItPm5ldXRlcih2bSk7CiAgICAgICAgIG1fYnVmZmVyID0gbnVs
bHB0cjsKICAgICAgICAgbV9idWZmZXJXcmFwcGVyLmNsZWFyKCk7CiAgICAgfQotCisgICAgCiAg
ICAgbWVtb3J5KCkuY2hlY2soKTsKLQotICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxv
Y2F0ZWQoV2FzbTo6UGFnZUNvdW50KGRlbHRhKS5ieXRlcygpKTsKLSAgICByZXR1cm4gb2xkUGFn
ZUNvdW50OworICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3
UGFnZUNvdW50LmJ5dGVzKCkgLSBvbGRQYWdlQ291bnQuYnl0ZXMoKSk7CiB9CiAKIHZvaWQgSlNX
ZWJBc3NlbWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCmluZGV4IDFkMDZj
NGMuLjRiYmJjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgKQEAgLTQ4LDI2ICs0OCwyMyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAmdm0uZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CiAgICAgfQog
Ci0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYs
IFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNZW1vcnk+JiYpOworICAgIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAorICAgIHZvaWQgYWRvcHQoUmVmPFdh
c206Ok1lbW9yeT4mJik7CiAgICAgV2FzbTo6TWVtb3J5JiBtZW1vcnkoKSB7IHJldHVybiBtX21l
bW9yeS5nZXQoKTsgfQogICAgIEpTQXJyYXlCdWZmZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgV2FzbTo6UGFnZUNvdW50IGdyb3coVk0mLCBFeGVjU3RhdGUqLCB1aW50
MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwotCi0gICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1dlYkFzc2VtYmx5TWVtb3J5LCBtX21lbW9yeUJhc2UpOyB9Ci0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eU1lbW9yeSwgbV9tZW1vcnlTaXplKTsgfQorICAgIFdhc206OlBhZ2VDb3VudCBncm93KFZNJiwg
RXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEpOworICAgIHZvaWQgZ3Jvd1N1Y2Nlc3NDYWxsYmFj
ayhWTSYsIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQ
YWdlQ291bnQpOwogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1
Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5PiYmKTsKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZN
JiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCogbV9tZW1vcnlCYXNlOwotICAgIHNp
emVfdCBtX21lbW9yeVNpemU7CiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAg
V3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IG1fYnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCBiYWIxMTgxLi40MGMxMDA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNp
bmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUg
Ildhc21Nb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTYxLDYg
KzYyLDcgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKKwogSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNX
ZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6
TW9kdWxlPiYmIG1vZHVsZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fbW9k
dWxlKFdURk1vdmUobW9kdWxlKSkKQEAgLTkxLDYgKzkzLDM2IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eU1vZHVsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAgICAgV2FzbTo6U2lnbmF0dXJlSW5mb3Jt
YXRpb246OnRyeUNsZWFudXAoKTsKIH0KIAorY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24m
IEpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7Cit9CisKK1N5bWJvbFRhYmxlKiBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0KCk7Cit9CisKK1dhc206OlNpZ25hdHVyZUluZGV4
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9k
dWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNw
YWNlKTsKK30KKworV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
YWxsZWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhbGxlZS5nZXQoKTsKK30KKworSlNXZWJB
c3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKFdhc206Ok1l
bW9yeU1vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNp
emVfdD4obW9kZSldLmdldCgpOworfQorCitXYXNtOjpNb2R1bGUmIEpTV2ViQXNzZW1ibHlNb2R1
bGU6Om1vZHVsZSgpCit7CisgICAgcmV0dXJuIG1fbW9kdWxlLmdldCgpOworfQorCiB2b2lkIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayhWTSYgdm0sIFdhc206Ok1lbW9yeU1vZGUg
bW9kZSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIG1fY29kZUJs
b2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmgKaW5kZXggM2RjNjdhMy4uYjcwYjQyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMzAsMTUgKzMwLDE5IEBA
CiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKLSNpbmNsdWRlICJXYXNtTW9k
dWxlLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVz
cGFjZSBXYXNtIHsKIGNsYXNzIE1vZHVsZTsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIGNs
YXNzIFBsYW47Cit1c2luZyBTaWduYXR1cmVJbmRleCA9IHVpbnQzMl90OwogfQogCiBjbGFzcyBT
eW1ib2xUYWJsZTsKQEAgLTUyLDIzICs1NiwyMCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIGNyZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpNb2R1
bGU6OlZhbGlkYXRpb25SZXN1bHQmJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBXVEY6OkV4cGVjdGVkPFJlZlB0cjxXYXNtOjpNb2R1bGU+LCBTdHJpbmc+JiYpOwogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSk7CiAKLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsgfQot
ICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhw
b3J0U3ltYm9sVGFibGUuZ2V0KCk7IH0KLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlLT5zaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICB9Ci0gICAgV2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlKiBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZS5nZXQo
KTsgfQorICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlv
bigpIGNvbnN0OworICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0Owor
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OworICAgIFdlYkFzc2VtYmx5
VG9KU0NhbGxlZSogY2FsbGVlKCkgY29uc3Q7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nb
c3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKTsKKyAgICB2b2lkIHNldENv
ZGVCbG9jayhWTSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsK
IAogICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlKCkgY29uc3Q7CiAKLSAgICBXYXNt
OjpNb2R1bGUmIG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0gICAgdm9pZCBz
ZXRDb2RlQmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Kik7CisgICAgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9jazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCmluZGV4IGZmNDZkNGQuLmFkYWE3
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhYmxlLmNwcApAQCAtMjksMzAgKzI5LDIyIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKLSNp
bmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5VGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5
LlRhYmxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1dlYkFzc2VtYmx5VGFibGUpIH07CiAKLUpTV2ViQXNzZW1ibHlUYWJsZSogSlNXZWJB
c3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhp
bXVtKQorSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpUYWJs
ZT4mJiB0YWJsZSkKIHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CiAKLSAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7Ci0gICAg
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICBpZiAoIWds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFibGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2JhbE9iamVjdC0+
d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH07Ci0KLSAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7Ci0KLSAgICBpZiAo
IWlzVmFsaWRTaXplKGluaXRpYWwpKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgIH0KIAotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRhYmxlPih2bS5oZWFwKSkgSlNX
ZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUsIGluaXRpYWwsIG1heGltdW0pOworICAgIGF1
dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRh
YmxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUo
dGFibGUpKTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBp
bnN0YW5jZTsKIH0KQEAgLTYyLDIzICs1NCwxNSBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlU
YWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagog
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNX
ZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11
bSkKK0pTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpUYWJsZT4mJiB0YWJsZSkKICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSkKKyAgICAsIG1fdGFibGUoV1RGTW92ZSh0YWJsZSkpCiB7Ci0gICAgbV9zaXpl
ID0gaW5pdGlhbDsKLSAgICBBU1NFUlQoaXNWYWxpZFNpemUobV9zaXplKSk7Ci0gICAgbV9tYXhp
bXVtID0gbWF4aW11bTsKLSAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1f
c2l6ZSk7Ci0KICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1h
bGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCiAgICAg
Ly8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgotICAgIG1fZnVuY3Rpb25zID0g
TWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNh
bGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpKTsKLSAgICBtX2pz
RnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+OjptYWxsb2Moc2l6
ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUp
KTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpIHsKLSAgICAgICAg
bmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKLSAg
ICAgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4ID09IFdhc206
OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVk
IGNvZGUuCisgICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0
PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemUoKTsg
KytpKQogICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+KCk7Ci0gICAgfQogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQpAQCAtOTksNyArODMsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3NpemU7ICsraSkKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c2l6ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pOwogfQogCkBAIC0x
MDcsNDcgKzkxLDQ0IEBAIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRl
bHRhKQogewogICAgIGlmIChkZWx0YSA9PSAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBD
aGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gbmV3U2l6ZUNoZWNrZWQgPSBtX3NpemU7
Ci0gICAgbmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7Ci0gICAgdWludDMyX3QgbmV3U2l6ZTsKLSAg
ICBpZiAobmV3U2l6ZUNoZWNrZWQuc2FmZUdldChuZXdTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRp
ZE92ZXJmbG93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1heGltdW0oKSAmJiBu
ZXdTaXplID4gKm1heGltdW0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghaXNW
YWxpZFNpemUobmV3U2l6ZSkpCisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHNpemUoKTsKKworICAg
IGF1dG8gZ3JldyA9IG1fdGFibGUtPmdyb3coZGVsdGEpOworICAgIGlmICghZ3JldykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV2FzbTo6
Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG5ld1NpemUpKTsKLSAgICBt
X2pzRnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3Rh
dGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBncmV3LnZh
bHVlKCk7CisgICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+KSAqIG5ld1NpemUpOwogCi0gICAgZm9yICh1aW50MzJfdCBpID0gbV9zaXplOyBpIDwg
bmV3U2l6ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBu
ZXdTaXplOyArK2kpCiAgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdyaXRl
QmFycmllcjxKU09iamVjdD4oKTsKLSAgICB9Ci0gICAgbV9zaXplID0gbmV3U2l6ZTsKKwogICAg
IHJldHVybiB0cnVlOwogfQogCitKU09iamVjdCogSlNXZWJBc3NlbWJseVRhYmxlOjpnZXRGdW5j
dGlvbih1aW50MzJfdCBpbmRleCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IHNpemUo
KSk7CisgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOworfQorCiB2
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xlYXJGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+Y2xlYXJG
dW5jdGlvbihpbmRleCk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV2FzbTo6
Q2FsbGFibGVGdW5jdGlvbigpOwotICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0u
c2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSBy
ZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFi
bGU6OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIGZ1bmN0aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAg
ICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24o
KSwgZnVuY3Rpb24tPmluc3RhbmNlKCkpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhd
LnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9
IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRh
YmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiogZnVuY3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3Np
emUpOworICAgIG1fdGFibGUtPnNldEZ1bmN0aW9uKGluZGV4LCBmdW5jdGlvbi0+Y2FsbGFibGVG
dW5jdGlvbigpLCBmdW5jdGlvbi0+aW5zdGFuY2UoKSk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQo
KVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClb
aW5kZXhdID0gZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWJsZS5oCmluZGV4IGRmODNlOTcuLjQ0ODc1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDU3ICsyOSw0MiBAQAog
CiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIldhc21MaW1pdHMuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUuaCIKICNpbmNs
dWRlICJXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5
RnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1zdHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbjsKLX0KLQogY2xh
c3MgSlNXZWJBc3NlbWJseVRhYmxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0
aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUq
LCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKKyAg
ICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1
Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJF
X0lORk87CiAKLSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhpbXVtOyB9Ci0gICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNpemUpIHsgcmV0
dXJuIFdhc206OlRhYmxlOjppc1ZhbGlkU2l6ZShzaXplKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5tYXhpbXVtKCk7IH0K
KyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+c2l6ZSgpOyB9CiAg
ICAgYm9vbCBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgSlNP
YmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQotICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgICAgICByZXR1cm4gbV9qc0Z1bmN0aW9ucy5n
ZXQoKVtpbmRleF0uZ2V0KCk7Ci0gICAgfQotICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJf
dCBpbmRleCk7Ci0gICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90IGluZGV4LCBXZWJB
c3NlbWJseUZ1bmN0aW9uKik7Ci0gICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90IGlu
ZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiopOwotCi0gICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRh
YmxlLCBtX3NpemUpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1bmN0aW9ucygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fZnVuY3Rpb25z
KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKU0Z1bmN0aW9ucygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fanNGdW5jdGlvbnMpOyB9Cisg
ICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIGNsZWFyRnVuY3Rp
b24odWludDMyX3QpOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCwgV2ViQXNz
ZW1ibHlGdW5jdGlvbiopOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCwgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsKIAotICAgIHN0YXRpYyBib29sIGlzVmFsaWRTaXpl
KHVpbnQzMl90IHNpemUpCi0gICAgewotICAgICAgICAvLyBUaGlzIHRvcHMgb3V0IGF0IH4zODQg
TUIgd29ydGggb2YgZGF0YSBpbiB0aGlzIGNsYXNzLgotICAgICAgICByZXR1cm4gc2l6ZSA8ICgx
IDw8IDI0KTsKLSAgICB9CisgICAgV2FzbTo6VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJs
ZS5wdHIoKTsgfQogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVj
dHVyZSosIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0p
OworICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpUYWJs
ZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCi0gICAgTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+IG1f
ZnVuY3Rpb25zOworICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKICAgICBNYWxsb2NQdHI8
V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj4gbV9qc0Z1bmN0aW9uczsKLSAgICBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtX21heGltdW07Ci0gICAgdWludDMyX3QgbV9zaXplOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyMDQ4OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtMCww
ICsxLDY1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRl
ICJGcmFtZVRyYWNlcnMuaCIKKyNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CisjaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlRodW5rR2Vu
ZXJhdG9ycy5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUg
Ildhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwordXNpbmcgSklUID0gQ0NhbGxIZWxwZXJzOwor
CitzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWduZWQg
aW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgLy8gV2UncmUgY2FsbGluZyBvdXQg
b2YgdGhlIGN1cnJlbnQgV2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFuY2UgaGFzIGEg
bGlzdCBvZiBhbGwgaXRzIGltcG9ydCBmdW5jdGlvbnMuCisgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKHJlc3VsdCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHJlc3VsdCwg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4
KSksIHJlc3VsdCk7Cit9CisKK0V4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5m
b3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkK
K3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5IGFic3RyYWN0
IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KKyAgICAvLyBJdCdkIGJlIHN1cGVyIGVhc3kg
dG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDEK
KyAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpOworICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc0NDID0ganNjQ2Fs
bGluZ0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIHVuc2lnbmVkIGFyZ0Nv
dW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBKSVQgaml0OworCisgICAgLy8g
Tm90ZTogV2FzbUIzSVJHZW5lcmF0b3IgYXNzdW1lcyB0aGF0IHRoaXMgc3R1YiB0cmVhdHMgU1Ag
YXMgYSBjYWxsZWUgc2F2ZS4KKyAgICAvLyBJZiB3ZSBldmVyIGNoYW5nZSB0aGlzLCB3ZSB3aWxs
IGFsc28gbmVlZCB0byBjaGFuZ2UgV2FzbUIzSVJHZW5lcmF0b3IuCisKKyAgICAvLyBCZWxvdywg
d2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBpcyBhbHdheXMgb24gdGhl
IHN0YWNrLgorICAgIEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6ZSgpKTsKKyAgICBBU1NFUlQo
IWpzQ0MubV9mcHJBcmdzLnNpemUoKSk7CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
KTsKKyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigwKSwgSklUOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBh
cyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
MzIxCisKKyAgICB7CisgICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7CisgICAgICAg
IGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpID09IEk2NDsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudCAmJiAhaGFzQmFkSTY0
VXNlOyArK2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFy
Z3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2Ug
QW55ZnVuYzoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
CisgICAgICAgICAgICBjYXNlIEk2NDogeworICAgICAgICAgICAgICAgIGhhc0JhZEk2NFVzZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7CisgICAgICAgICAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZy
YW1lKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dElu
c3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisKKyAgICAgICAgICAgIC8vIFN0b3JlIENh
bGxlZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUo
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6YXJndW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKKworICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAg
ICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CisKKyAgICAgICAgICAgIHZvaWQg
KCp0aHJvd0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikgPSBbXSAo
RXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKSAtPiB2b2lk
IHsKKyAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgICAgICAgICBh
dXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVj
dC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVNDSUlMaXRlcmFs
KCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0
ZWQgZnVuY3Rpb24iKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+
Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWls
dXJlOjpPdXRPZk1lbW9yeSk7CisKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0
aHJvd0JhZEk2NCk7CisgICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWld
IiwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEhlcmUgd2UgYXNz
dW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBsZWFzdCBhbGwgdGhl
IHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBzYXZlIGFuZCBy
ZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBhbHJlYWR5IHRvb2sg
Y2FyZSBvZiB0aGlzLgorICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVTYXZlcyA9IHdhc21D
Qy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgbWlzc2luZ0NhbGxlZVNhdmVzLmV4Y2x1ZGUo
anNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIEFTU0VSVChtaXNzaW5nQ2FsbGVlU2F2
ZXMuaXNFbXB0eSgpKTsKKworICAgIGlmICghT3B0aW9uczo6dXNlQ2FsbElDc0ZvcldlYkFzc2Vt
Ymx5VG9KU0NhbGxzKCkpIHsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhcmdDb3VudCAqIHNpemVvZih1aW50NjRfdCkpOwor
ICAgICAgICBjaGFyKiBidWZmZXIgPSBhcmdDb3VudCA/IHN0YXRpY19jYXN0PGNoYXIqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKKyAgICAgICAgdW5zaWduZWQgbWFy
c2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Cisg
ICAgICAgIHVuc2lnbmVkIGJ1ZmZlck9mZnNldCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zm
c2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBjb25zdCBHUFJSZWcgc2NyYXRjaEdQUiA9IEdQ
UkluZm86OnJlZ0NTMDsKKyAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNp
emVvZihSZWdpc3RlcikpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpOworCisgICAgICAgIGZvciAo
dW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CisgICAg
ICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAg
ICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAg
ICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAg
Y2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsK
KyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNp
emUoKSkKKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJz
aGFsbGVkR1BSc10uZ3ByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdp
c3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBncHJS
ZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
NjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdw
clJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0
cihncHJSZWcsIGdwclJlZyk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBi
dWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IEYzMjogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAgICAgICAg
aWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigp
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBh
bHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFi
bGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJn
dW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAg
ICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVnLCBm
cHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciAr
IGJ1ZmZlck9mZnNldCk7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjY0OiB7
CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFy
c2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
c3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBz
Y3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAgICAgICAg
ICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJP
ZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1
ZmZlck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIGppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlciksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoYXJnQ291bnQpIHsKKyAgICAg
ICAgICAgIC8vIFRoZSBHQyBzaG91bGQgbm90IGxvb2sgYXQgdGhpcyBidWZmZXIgYXQgYWxsLCB0
aGVzZSBhcmVuJ3QgSlNWYWx1ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAg
fQorCisgICAgICAgIHVpbnQ2NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
U2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KikgPQorICAgICAgICAgICAgW10gKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGNhbGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVp
bnQ2NF90KiBidWZmZXIpIC0+IHVpbnQ2NF90IHsgCisgICAgICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAg
ICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
ICsrYXJnTnVtKSB7CisgICAgICAgICAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVy
ZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGFyZzsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSTY0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJMzI6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBq
c051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihidWZmZXJbYXJnTnVtXSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRjMyOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9
IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJ1ZmZlclthcmdOdW1dKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICAgICAgICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShjYWxsZWUsIGNh
bGxEYXRhKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxs
VHlwZTo6Tm9uZSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMs
IGNhbGxlZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOworCisgICAgICAg
ICAgICAgICAgdWludDY0X3QgcmVhbFJlc3VsdDsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAg
ICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgICAgIGNhc2UgSTY0OgorICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAgICAg
ICAgICAgICAgIHJlYWxSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHJlc3VsdC50b0ludDMyKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAg
ICAgICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihyZXN1bHQudG9OdW1iZXIoZXhlYykpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVhbFJlc3VsdDsKKyAgICAgICAgICAgIH07CisgICAgICAg
IAorICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7
CisgICAgICAgIAorICAgICAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQsIGltcG9ydElu
ZGV4LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQUklu
Zm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgPj0gNCwgIldlIHJlbHkgb24gdGhpcyB3aXRo
IHRoZSBjYWxsIGJlbG93LiIpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2ln
bmF0dXJlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYnVmZmVyKSk7CisgICAg
ICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGF1dG8gbm9FeGNlcHRpb24gPSBq
aXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpJbnZlcnRlZEV4Y2Vw
dGlvbkNoZWNrKTsKKworICAgICAgICAvLyBleGNlcHRpb24gaGVyZS4KKyAgICAgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlG
cmFtZSk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0
ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAgICAgICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAg
ICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICB9OworICAgICAg
ICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7Cisg
ICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgICAgICBjYXNlIEY2
NDogeworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91Ymxl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAg
ICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICBqaXQucmV0KCk7CisKKyAg
ICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5n
RmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBj
YWxsRnVuYyk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25DYWxsLCBkb1Vud2lu
ZGluZyk7CisKKyAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJB
c3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVy
ZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7CisgICAgfQorCisgICAgLy8gTm90ZTogV2Ug
ZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJUkdl
bmVyYXRvcgorICAgIC8vIHdpbGwgZG8gdGhlIHN0YWNrIGNoZWNrIGZvciB1cy4gV2hlbmV2ZXIg
aXQgZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IG1ha2UKKyAgICAvLyBhIGNhbGwgdG8gdGhpcyB0aHVu
aywgaXQnbGwgbWFrZSBzdXJlIGl0cyBzdGFjayBjaGVjayBpbmNsdWRlcyBzcGFjZQorICAgIC8v
IGZvciB1cyBoZXJlLgorCisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0g
YXJnQ291bnQgKyAxOyAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KKyAgICBjb25zdCB1
bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9m
Qnl0ZXNGb3JDYWxsKTsKKyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgLy8gRklYTUUgbWFrZSB0aGVzZSBs
b29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFyZ3VtZW50
cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdlIHNpZ25hdHVy
ZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1NDcKKyAgICAK
KyAgICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRoZSBpbnRlZ2VyIHBhcmFtZXRlcnMsIGZyZWVpbmcg
dXAgdGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBhZnRlcndhcmRzLgorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBS
cyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xv
dDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgeworICAgICAg
ICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAg
ICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAg
ICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgIGNh
c2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8v
IEhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAgICAgICAgICAg
IEdQUlJlZyBncHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2Fz
bUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21D
Qy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3Vt
ZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAg
ICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK21h
cnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJS
ZWcsIGdwclJlZyk7IC8vIENsZWFyIG5vbi1pbnQzMiBhbmQgbm9uLXRhZyBiaXRzLgorICAgICAg
ICAgICAgICAgIGppdC5ib3hJbnQzMihncHJSZWcsIEpTVmFsdWVSZWdzKGdwclJlZyksIERvTm90
SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBj
YWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjMyOgorICAgICAgICAg
ICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBiZWxvdy4K
KyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPj0gd2FzbUNDLm1fZnByQXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBjYWxs
ZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHsKKyAgICAgICAg
Ly8gSW50ZWdlciByZWdpc3RlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc3BpbGxlZCwgdGhlc2UgYXJl
IG5vdyBhdmFpbGFibGUuCisgICAgICAgIEdQUlJlZyBkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcg
PSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIxOworICAgICAgICBib29sIGhhc01hdGVyaWFsaXplZERvdWJsZUVuY29k
ZU9mZnNldCA9IGZhbHNlOworICAgICAgICBhdXRvIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zm
c2V0ID0gWyZoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQsICZqaXRdIChHUFJSZWcg
ZGVzdCkgeworICAgICAgICAgICAgaWYgKCFoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZz
ZXQpIHsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KERvdWJsZUVuY29kZU9mZnNldCA9
PSAxbGwgPDwgNDgsICJjb2RlZ2VuIGFzc3VtZXMgdGhpcyBiZWxvdyIpOworICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKDEpLCBkZXN0KTsKKyAgICAgICAgICAgICAg
ICBqaXQubHNoaWZ0NjQoSklUOjpUcnVzdGVkSW1tMzIoNDgpLCBkZXN0KTsKKyAgICAgICAgICAg
ICAgICBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsK
KyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBj
YWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0g
PCBhcmdDb3VudDsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25h
dHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAg
ICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgICAgICAg
ICAgY2FzZSBJMzI6CisgICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBhYm92ZS4K
KyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPj0gd2FzbUNDLm1fZ3ByQXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKKyAgICAgICAgICAgICAgICBjYWxs
ZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVn
OworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Mu
c2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21h
cnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJl
Z2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGZw
clJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0Lmxv
YWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0
KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9h
dFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFO
KGZwclJlZyk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2Ny
YXRjaCk7CisgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91
YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91Ymxl
RW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2
NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgICAgICAgICBG
UFJSZWcgZnByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21D
Qy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0Mu
bV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVu
dHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAg
ICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWREb3VibGUoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBmck9mZnNldCksIGZwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9
IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGpp
dC5wdXJpZnlOYU4oZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQo
ZnByUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZURvdWJsZUVuY29k
ZU9mZnNldChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcpOworICAgICAgICAgICAgICAgIGppdC5h
ZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVP
ZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVn
aXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAs
IEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworCisgICAgR1BS
UmVnIGltcG9ydEpTQ2VsbEdQUlJlZyA9IEdQUkluZm86OnJlZ1QwOyAvLyBDYWxsZWUgbmVlZHMg
dG8gYmUgaW4gcmVnVDAgZm9yIHNsb3cgcGF0aCBiZWxvdy4KKyAgICBBU1NFUlQoIXdhc21DQy5t
X2NhbGxlZVNhdmVSZWdpc3RlcnMuZ2V0KGltcG9ydEpTQ2VsbEdQUlJlZykpOworCisgICAgbWF0
ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgaW1wb3J0SlNDZWxsR1BSUmVn
KTsKKworICAgIGppdC5zdG9yZTY0KGltcG9ydEpTQ2VsbEdQUlJlZywgY2FsbGVlRnJhbWUud2l0
aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpKSk7CisgICAgaml0LnN0b3JlMzIoSklUOjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQ
YXJhbWV0ZXJzKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZz
ZXQpKTsKKyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW02NChWYWx1ZVVuZGVmaW5lZCks
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworCisgICAgLy8gRklYTUUgVGFpbCBj
YWxsIGlmIHRoZSB3YXNtIHJldHVybiB0eXBlIGlzIHZvaWQgYW5kIG5vIHJlZ2lzdGVycyB3ZXJl
IHNwaWxsZWQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODgK
KworICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvcy5hZGQoKTsK
KyAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIENvZGVPcmln
aW4oKSwgaW1wb3J0SlNDZWxsR1BSUmVnKTsKKyAgICBKSVQ6OkRhdGFMYWJlbFB0ciB0YXJnZXRU
b0NoZWNrOworICAgIEpJVDo6VHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSgwKTsKKyAg
ICBKSVQ6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgaW1wb3J0SlNDZWxsR1BSUmVnLCB0YXJnZXRUb0NoZWNrLCBpbml0aWFs
UmlnaHRWYWx1ZSk7CisgICAgSklUOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7Cisg
ICAgSklUOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7
CisgICAgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGhlcmUuCisgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gcmVnVDIuCisgICAgSklUOjpDYWxsIHNs
b3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgZG9uZS5saW5rKCZqaXQpOworCisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7CisKKyAgICBzd2l0Y2ggKHNpZ25h
dHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIC8vIERpc2NhcmQu
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuYzoKKyAgICBjYXNlIEFueWZ1bmM6CisgICAg
ICAgIC8vIEZvciB0aGUgSmF2YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMgd2l0aCB0aGVzZSB0
eXBlcyBpbiB0aGVpciBzaWduYXR1cmUgcmV0dXJuIGFyZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSB2
YWxpZGF0aW9uIGVycm9yLgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEk2NDogeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgIH0KKyAgICBjYXNlIEkzMjogewor
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFu
Y2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0
ZXJzKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1Zh
bHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykp
OworICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CisKKyAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1
dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0
LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgaW50MzJfdCAoKmNvbnZlcnRU
b0kzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHYpIC0+IGludDMyX3QgeyAKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAg
ICAgICByZXR1cm4gdi50b0ludDMyKGV4ZWMpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvSTMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGMzI6IHsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFO
dW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNo
SWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5z
aWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFwcGVu
ZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOworICAgICAgICBq
aXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAg
aml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisg
ICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2Fs
bCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRK
dW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgZmxvYXQgKCpjb252ZXJ0VG9GMzIpKEV4
ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBm
bG9hdCB7IAorICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4odi50b051bWJlcihleGVjKSk7CisgICAgICAgIH07CisgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GMzIpOworICAgICAgICB9KTsK
KworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEY2NDogeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAg
IGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBpc0RvdWJsZSA9
IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKKyAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAg
ICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQp
OworICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVy
blZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQubW92ZTY0
VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBS
KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90QU51bWJl
ci5saW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
KyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigq
dm0pKTsKKworICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSosIEpTVmFs
dWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUgeyAKKyAgICAg
ICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gdi50b051bWJlcihl
eGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZl
cnRUb0Y2NCk7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OworICAgIGppdC5yZXQoKTsKKworICAgIGlmICghZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsK
KyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJhbWUp
OworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAg
aml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAgICB2b2lkICgqZG9Vbndp
bmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAg
ICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAg
ICAgICB9OworCisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vud2luZGluZyk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKFVOTElLRUxZ
KHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgQ29kZUxvY2F0aW9u
TGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChz
bG93Q2FsbCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKKyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBo
b3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOwor
ICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhv
dFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBv
cnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKK30KKwordm9p
ZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBl
IHR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgVk0qIHZtID0g
aW5zdGFuY2UtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisKKyAgICB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoKnZtKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNl
LT5nbG9iYWxPYmplY3QoKTsKKworICAgICAgICBKU09iamVjdCogZXJyb3I7CisgICAgICAgIGlm
ICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCisgICAgICAgICAgICBlcnJv
ciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNy
ZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1
Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7CisgICAg
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICB9CisKKyAg
ICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9y
Q2F0Y2gpOworICAgIEFTU0VSVCghIXZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAg
Ly8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRv
dGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRsZVVuY2F1Z2h0
RXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8g
bG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0
aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2Ug
Y291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMg
Zmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVm
b3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0
aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICBiaXR3aXNlX2Nhc3Q8
dWludDY0X3QqPihleGVjKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVp
bnQ2NF90PihpbnN0YW5jZS0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkpOworICAgIHJldHVybiB2
bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2FzbVRvSlMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
YzI0YWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2FzbVRvSlMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtQmluZGlu
Zy5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNp
bmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxM
aW5rSW5mbzsKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVjdGVkPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiwgQmFnPENhbGxM
aW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJ
bmRleCk7CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSosIFdhc206OkV4Y2Vw
dGlvblR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCAw
ZDI3NzY1Li5jNTg1ZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAogICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5nIHRvIHJ1biB3aXRoIG1h
dGNoZXMgdGhlIG9uZSB3ZSBleHBlY3QuCi0gICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFu
Y2UoKS0+Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+
bWVtb3J5KCkpKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5j
ZSgpLmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1l
bW9yeSgpLT5tZW1vcnkoKS5tb2RlKCkpKTsKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdl
IGhhdmUgYSBkaXNhbGxvd2VkIEk2NCB1c2UuCiAKQEAgLTgyLDExICs4MiwxMSBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5RXhlY3V0
ZVN0YXJ0LCBXZWJBc3NlbWJseUV4ZWN1dGVFbmQpOwogCiAgICAgVmVjdG9yPEpTVmFsdWU+IGJv
eGVkQXJnczsKLSAgICBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCA9IHdhc21GdW5jdGlvbi0+
aW5zdGFuY2UoKTsKLSAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0byBzdG9yZSB0
aGUgY29udGV4dCwgdGhlIGpzCi0gICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3RzIHRoZSBXYXNt
Q29udGV4dCogYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgotICAgIGlmICghV2FzbTo6dXNlRmFzdFRM
U0ZvckNvbnRleHQoKSkKLSAgICAgICAgYm94ZWRBcmdzLmFwcGVuZCh3YXNtQ29udGV4dCk7Cisg
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IHdhc21GdW5jdGlvbi0+aW5zdGFu
Y2UoKTsKKyAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0byBzdG9yZSB0aGUgY29u
dGV4dCwgdGhlIEpTCisgICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3RzIHRoZSBpbnN0YW5jZSBh
cyB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgaWYgKCFXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExT
KCkpCisgICAgICAgIGJveGVkQXJncy5hcHBlbmQoaW5zdGFuY2UpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsg
KythcmdJbmRleCkgewogICAgICAgICBKU1ZhbHVlIGFyZyA9IGV4ZWMtPmFyZ3VtZW50KGFyZ0lu
ZGV4KTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcHJvdG9D
YWxsRnJhbWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rpb24sIGZpcnN0QXJndW1lbnQsIGFyZ0Nv
dW50LCByZW1haW5pbmdBcmdzKTsKIAogICAgIC8vIEZJWE1FIERvIGF3YXkgd2l0aCB0aGlzIGVu
dGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50IGdlbmVyYXRlZCBieSBC
My4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ4NgotICAgIFdh
c206OkNvbnRleHQqIHByZXZXYXNtQ29udGV4dCA9IFdhc206OmxvYWRDb250ZXh0KHZtKTsKKyAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHByZXZJbnN0YW5jZSA9IHZtLndhc21Db250ZXh0Lmxv
YWQoKTsKICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBzdGFjayBjaGVjayBoZXJlIGZvciB0
aGUgd3JhcHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0CiAgICAgICAgIC8vIHdhbnQgdG8g
ZW1pdCBhIHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFwcGVyIGZ1bmN0aW9uLgpAQCAtMTM3
LDIyICsxMzcsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdl
YkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBpZiAoVU5MSUtFTFko
KHNwIDwgc3RhY2tTcGFjZVVzZWQpIHx8ICgoc3AgLSBzdGFja1NwYWNlVXNlZCkgPCBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHZtLnNvZnRTdGFja0xpbWl0KCkpKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoZXhlYykpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVDb250ZXh0KHZt
LCB3YXNtQ29udGV4dCk7CisgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUoaW5zdGFuY2UsIHZtLnNv
ZnRTdGFja0xpbWl0KCkpOwogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkpOwot
ICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkgPT0gV2FzbTo6bG9hZENvbnRleHQo
dm0pKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpID09IHZtLndhc21Db250
ZXh0LmxvYWQoKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRvV2Fz
bSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludCgpLCAmdm0sICZwcm90b0NhbGxGcmFtZSk7CiAg
ICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBpbiBhIHJlZ2lzdGVyIG9yIG9uIHRo
ZSBzdGFjayBzaW5jZSBpdCdzIHN0b3JlZCBpbiBWZWN0b3I8SlNWYWx1ZT4uCiAgICAgLy8gVGhp
cyBwcm9iYWJseSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIHNpbmNlIHRoZSBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBzaG91bGQga2VlcCB0aGUgaW5zdGFuY2UKICAgICAvLyBhbGl2ZS4gQnV0IGl0
J3MgZ29vZCBoeWdpZW5lLgotICAgIHdhc21Db250ZXh0LT51c2UoKTsKLSAgICBpZiAocHJldldh
c21Db250ZXh0ICE9IHdhc21Db250ZXh0KSB7CisgICAgaW5zdGFuY2UtPnVzZSgpOworICAgIGlm
IChwcmV2SW5zdGFuY2UgIT0gaW5zdGFuY2UpIHsKICAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGZv
ciBzb21lIGV4dHJhIHNhZmV0eSBpbnN0ZWFkIG9mIGxlYXZpbmcgYSBjYWNoZWQKICAgICAgICAg
Ly8gdmFsdWUgaW4gdGhlcmUuIElmIHdlIGV2ZXIgZm9yZ2V0IHRvIHNldCB0aGUgdmFsdWUgdG8g
YmUgYSByZWFsCiAgICAgICAgIC8vIGJvdW5kcywgdGhpcyB3aWxsIGZvcmNlIGV2ZXJ5IHN0YWNr
IG92ZXJmbG93IGNoZWNrIHRvIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vIGZpcmUuCi0gICAgICAg
IHdhc21Db250ZXh0LT5zZXRDYWNoZWRTdGFja0xpbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkpOworICAgICAgICBpbnN0YW5jZS0+
c2V0Q2FjaGVkU3RhY2tMaW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludHB0cl90Pjo6bWF4KCkpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVDb250ZXh0KHZt
LCBwcmV2V2FzbUNvbnRleHQpOworICAgIHZtLndhc21Db250ZXh0LnN0b3JlKHByZXZJbnN0YW5j
ZSwgdm0uc29mdFN0YWNrTGltaXQoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5z
dGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYTlkOGYwZC4uMmZkZDVhNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0zMiwxMiArMzIsMTQgQEAKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2lu
Y2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNsdWRlICJXYXNt
V29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
V2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgpAQCAtNzUsMTAgKzc3LDEwIEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0
YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSA9IElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rh
cmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VT
dHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAg
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJl
KTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0
cnVjdHVyZSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2FzbTo6TW9kdWxlPihtb2R1bGUt
Pm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAg
ICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYywgbW9kdWxlLT5tb2R1bGUoKS5j
b21waWxlU3luYyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSk7CisgICAgaW5zdGFuY2UtPmZpbmFs
aXplQ3JlYXRpb24odm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoJnZtLndh
c21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCAmV2FzbTo6Y3JlYXRlSlNUb1dhc21X
cmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaW5zdGFuY2UpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAppbmRleCA2NDk4OWI1Li44NmY4MTdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcApAQCAtOTYsMTMgKzk2LDE4IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhl
Y1N0YXRlKiBleGVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8V2FzbTo6TWVtb3J5
PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4
aW11bVBhZ2VDb3VudCk7CisgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9
IFdhc206Ok1lbW9yeTo6Y3JlYXRlKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQs
CisgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0QXN5bmMoQ29sbGVjdGlvblNjb3Bl
OjpGdWxsKTsgfSwKKyAgICAgICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RTeW5jKENvbGxl
Y3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgIFsmdm0sIGpzTWVtb3J5XSAoV2FzbTo6UGFn
ZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkgeyBqc01l
bW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNvdW50LCBuZXdQYWdlQ291bnQp
OyB9KTsKICAgICBpZiAoIW1lbW9yeSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKSk7CiAKLSAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9y
eVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqbWVtb3J5LmxlYWtSZWYoKSkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0KKyAgICBqc01lbW9y
eS0+YWRvcHQobWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOworICAgIAogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNZW1vcnkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAKaW5kZXgg
ZTk5NGRjOC4uNGZjYThjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcApAQCAtNzcsOCArNzcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9G
dW5jR3JvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgdWludDMyX3QgZGVsdGEgPSB0b05vbldyYXBw
aW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAKLSAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09u
RmFpbHVyZSA9IHRydWU7Ci0gICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3Jv
dyh2bSwgZXhlYywgZGVsdGEsIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CisgICAg
V2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3Jvdyh2bSwgZXhlYywgZGVsdGEpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0LnBhZ2VDb3VudCgpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3IuY3BwCmluZGV4IDk2MTAyNGQuLjE2NjEwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IuY3BwCkBAIC0xNjEsMTEgKzE2MSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5TW9kdWxlRXhwb3J0cyhFeGVjU3RhdGUqIGV4ZWMpCiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHN0cnVjdHVy
ZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMt
Pm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9k
dWxlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIHN0cnVjdHVyZSkpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAKKyAgICBWZWN0b3I8dWludDhfdD4gc291cmNl
ID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVudCgw
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxl
KGV4ZWMsIFdURk1vdmUoc291cmNlKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0x
NzUsMTYgKzE3NiwxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIikpOwogfQogCi1KU1ZhbHVlIFdlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYnVmZmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlNb2R1bGUq
IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4
ZWMsIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFZlY3Rv
cjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMs
IGJ1ZmZlcik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBhdXRv
KiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShl
eGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXYXNtOjpNb2R1bGU6
OnZhbGlkYXRlU3luYyh2bSwgV1RGTW92ZShzb3VyY2UpKSk7CisgICAgcmV0dXJuIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV2FzbTo6TW9kdWxl
Ojp2YWxpZGF0ZVN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKGJ1ZmZlcikpKTsKIH0KIAog
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TW9kdWxl
UHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCmluZGV4IDYw
MjVjOTguLjEzYWNhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKQEAgLTMwLDggKzMwLDEx
IEBACiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBK
U1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGU7CiAK
IGNsYXNzIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5j
dGlvbiB7CkBAIC00NCw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAot
ICAgIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGJ1ZmZl
ciwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZU1v
ZHVsZShFeGVjU3RhdGUqLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpOwogCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBl
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggY2IxZmVjMS4uMGE4NjZlZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIFVO
VVNFRF9QQVJBTShzY29wZSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2Nr
ID0gaW5zdGFuY2UtPmNvZGVCbG9jaygpOworICAgIFdhc206OkNvZGVCbG9jayogY29kZUJsb2Nr
ID0gaW5zdGFuY2UtPmluc3RhbmNlKCkuY29kZUJsb2NrKCk7CiAgICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpOwogCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gbW9kdWxlLT5l
eHBvcnRTeW1ib2xUYWJsZSgpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUsCiAgICAgICAgICAgICAvLyBSZXR1cm4gVG9KU1ZhbHVlKHYpLgogICAgICAgICAgICAg
c3dpdGNoIChnbG9iYWwudHlwZSkgewogICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAg
ICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxvYWRJMzJHbG9i
YWwoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1Zh
bHVlKGluc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKQEAg
LTE2MCwxMSArMTYwLDExIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhl
Y1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgICAgICAg
ICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEYzMkdsb2JhbChleHAua2lu
ZEluZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFu
Y2UtPmluc3RhbmNlKCkubG9hZEYzMkdsb2JhbChleHAua2luZEluZGV4KSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAg
ICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkRjY0R2xvYmFsKGV4cC5r
aW5kSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0
YW5jZS0+aW5zdGFuY2UoKS5sb2FkRjY0R2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTIxNywxMiArMjE3LDEy
IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IG1f
aW5zdGFuY2UtPm1vZHVsZSgpOwotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1faW5zdGFuY2UtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9y
bWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsK
KyAgICBXYXNtOjpNb2R1bGUmIG1vZHVsZSA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkubW9kdWxl
KCk7CisgICAgV2FzbTo6Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5pbnN0YW5j
ZSgpLmNvZGVCbG9jaygpOworICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1
bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS5tb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIEpTV2ViQXNz
ZW1ibHlUYWJsZSogdGFibGUgPSBtX2luc3RhbmNlLT50YWJsZSgpOwogCi0gICAgY29uc3QgVmVj
dG9yPFdhc206OlNlZ21lbnQ6OlB0cj4mIGRhdGEgPSBtX2luc3RhbmNlLT5tb2R1bGUoKS0+bW9k
dWxlSW5mb3JtYXRpb24oKS5kYXRhOworICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50OjpQ
dHI+JiBkYXRhID0gbW9kdWxlSW5mb3JtYXRpb24uZGF0YTsKICAgICBKU1dlYkFzc2VtYmx5TWVt
b3J5KiBqc01lbW9yeSA9IG1faW5zdGFuY2UtPm1lbW9yeSgpOwogCiAgICAgc3RkOjpvcHRpb25h
bDxKU1ZhbHVlPiBleGNlcHRpb247CkBAIC0yMzksNyArMjM5LDcgQEAgSlNWYWx1ZSBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4ID0gZWxlbWVu
dC5vZmZzZXQuaXNHbG9iYWxJbXBvcnQoKQotICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KG1faW5zdGFuY2UtPmxvYWRJMzJHbG9iYWwoZWxlbWVudC5vZmZzZXQuZ2xvYmFs
SW1wb3J0SW5kZXgoKSkpCisgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
bV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xvYmFsKGVsZW1lbnQub2Zmc2V0Lmdsb2Jh
bEltcG9ydEluZGV4KCkpKQogICAgICAgICAgICAgICAgIDogZWxlbWVudC5vZmZzZXQuY29uc3RW
YWx1ZSgpOwogCiAgICAgICAgICAgICBmbihlbGVtZW50LCB0YWJsZUluZGV4KTsKQEAgLTI1NSw3
ICsyNTUsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVj
U3RhdGUqIGV4ZWMpCiAKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpTZWdtZW50OjpQdHImIHNl
Z21lbnQgOiBkYXRhKSB7CiAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQgPSBzZWdtZW50LT5v
ZmZzZXQuaXNHbG9iYWxJbXBvcnQoKQotICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KG1faW5zdGFuY2UtPmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0Lmdsb2JhbElt
cG9ydEluZGV4KCkpKQorICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1f
aW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChzZWdtZW50LT5vZmZzZXQuZ2xvYmFs
SW1wb3J0SW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgOiBzZWdtZW50LT5vZmZzZXQuY29uc3RW
YWx1ZSgpOwogCiAgICAgICAgICAgICBmbihtZW1vcnksIHNpemVJbkJ5dGVzLCBzZWdtZW50LCBv
ZmZzZXQpOwpAQCAtMjkzLDcgKzI5Myw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIC8vIGZvciB0aGUgaW1w
b3J0LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTUxMAogICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGVsZW1lbnQu
ZnVuY3Rpb25JbmRpY2VzW2ldOwotICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4ID0gbW9kdWxlLnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgY29kZUJsb2Nr
LT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVu
Y3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlv
bihmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0
RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCmluZGV4IGU5YTYzNGEu
LjFmYjk0M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGdW5j
dGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1By
b21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCkBAIC00MCw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiV2FzbUJCUVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgogI2luY2x1ZGUg
Ildhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCIKQEAgLTk0LDcg
Kzk2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlD
b21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKICAgICBlbHNl
IHsKLSAgICAgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKHZtLCBXVEZNb3ZlKHNvdXJj
ZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtwcm9taXNl
LCBnbG9iYWxPYmplY3RdIChWTSYgdm0sIFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYm
IHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYygm
dm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpN
b2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGdsb2JhbE9iamVjdCwgJnZtXSAoV2FzbTo6
TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgICAg
IHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtwcm9t
aXNlLCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXSAoKSBtdXRh
YmxlIHsKICAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CiAgICAgICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CkBAIC0xMzUsNyArMTM3LDcgQEAgc3RhdGljIHZvaWQgaW5zdGFudGlhdGUoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1cKIHsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgLy8gSW4gb3Jk
ZXIgdG8gYXZvaWQgcG90ZW50aWFsbHkgcmVjb21waWxpbmcgYSBtb2R1bGUuIFdlIGZpcnN0IGdh
dGhlciBhbGwgdGhlIGltcG9ydC9tZW1vcnkgaW5mb3JtYXRpb24gcHJpb3IgdG8gY29tcGlsaW5n
IGNvZGUuCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwor
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpLCBXYXNtOjpJbnN0
YW5jZTo6Y3JlYXRlKFJlZjxXYXNtOjpNb2R1bGU+KG1vZHVsZS0+bW9kdWxlKCkpKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKSk7
CiAKICAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKQEAgLTE0MywxMyAr
MTQ1LDEzIEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiAgICAgZGVwZW5kZW5jaWVzLmFwcGVu
ZChTdHJvbmc8SlNDZWxsPih2bSwgaW5zdGFuY2UpKTsKICAgICB2bS5wcm9taXNlRGVmZXJyZWRU
aW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsK
ICAgICAvLyBOb3RlOiBUaGlzIGNvbXBsZXRpb24gdGFzayBtYXkgb3IgbWF5IG5vdCBnZXQgY2Fs
bGVkIGltbWVkaWF0ZWx5LgotICAgIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZUFzeW5jKHZtLCBp
bnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206OkNvZGVCbG9jazo6
Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmRdIChW
TSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgcmVmQ29kZUJsb2NrKSBtdXRhYmxlIHsKKyAg
ICBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVBc3luYygmdm0ud2FzbUNvbnRleHQsIGluc3RhbmNl
LT5tZW1vcnlNb2RlKCksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q29kZUJsb2NrOjpDYWxsYmFj
a1R5cGU+KFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZCwgJnZtXSAoUmVm
PFdhc206OkNvZGVCbG9jaz4mJiByZWZDb2RlQmxvY2spIG11dGFibGUgewogICAgICAgICBSZWZQ
dHI8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBXVEZNb3ZlKHJlZkNvZGVCbG9jayk7CiAg
ICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2Us
IFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZCwgJnZtLCBjb2RlQmxvY2sg
PSBXVEZNb3ZlKGNvZGVCbG9jayldICgpIG11dGFibGUgewogICAgICAgICAgICAgRXhlY1N0YXRl
KiBleGVjID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAg
ICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBjb2RlQmxv
Y2sucmVsZWFzZU5vbk51bGwoKSwgcmVzb2x2ZUtpbmQpOwogICAgICAgICB9KTsKLSAgICB9KSk7
CisgICAgfSksICZXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIsICZXYXNtOjp3YXNtVG9KU0V4
Y2VwdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFsdWUgYnVm
ZmVyLCBKU09iamVjdCogaW1wb3J0T2JqZWN0KQpAQCAtMTY1LDcgKzE2Nyw3IEBAIHN0YXRpYyB2
b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9t
aXNlRGVmZXJyZWQqIHByCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNvdXJj
ZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpKTsKIAotICAgIFdhc206Ok1v
ZHVsZTo6dmFsaWRhdGVBc3luYyh2bSwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNr
PFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9i
YWxPYmplY3RdIChWTSYgdm0sIFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJlc3Vs
dCkgbXV0YWJsZSB7CisgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29u
dGV4dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2Fs
bGJhY2tUeXBlPihbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3QsICZ2bV0gKFdh
c206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAg
IHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtwcm9t
aXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQp
LCAmdm1dICgpIG11dGFibGUgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CkBAIC0yMTMsNyArMjE1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQog
ICAgIHNpemVfdCBieXRlU2l6ZTsKICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZlckZy
b21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIEJC
UVBsYW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgQkJRUGxhbjo6VmFs
aWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOworICAgIEJCUVBsYW4gcGxhbigmdm0ud2Fz
bUNvbnRleHQsIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgQkJRUGxhbjo6VmFsaWRhdGlv
biwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRv
IHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcg
d2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NjAxNQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFyc2VB
bmRWYWxpZGF0ZU1vZHVsZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAppbmRleCAxMTg2
NWY1Li4yYzViYzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTkwLDggKzkwLDE1
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBSZWZQ
dHI8V2FzbTo6VGFibGU+IHdhc21UYWJsZSA9IFdhc206OlRhYmxlOjpjcmVhdGUoaW5pdGlhbCwg
bWF4aW11bSk7CisgICAgaWYgKCF3YXNtVGFibGUpIHsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNvdWxkbid0IGNyZWF0ZSBUYWJsZSIp
KSkpOworICAgIH0KKwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCBpbml0aWFs
LCBtYXhpbXVtKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlU
YWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgd2FzbVRhYmxlLnJlbGVhc2VOb25OdWxsKCkpKTsKIH0K
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlU
YWJsZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggMDIxYzYx
OC4uNjhlOTU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtNjMsNyArNjMsNyBAQCBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsTwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9u
LT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmluZm8oKSksICJXZSBz
aG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwogICAgIFN0cmlu
ZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhv
c3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50cmluc2ljLCBj
YWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvblN0cnVjdHVyZSgpLCB7IHNpZ25hdHVyZUluZGV4LCBpbnN0YW5jZS0+Y29kZUJs
b2NrKCktPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpIH0pOworICAgIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiB7IHNpZ25h
dHVyZUluZGV4LCBpbnN0YW5jZS0+d2FzbUNvZGVCbG9jaygpLndhc21Ub0pTQ2FsbFN0dWJGb3JJ
bXBvcnQoaW1wb3J0SW5kZXgpIH0gKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwog
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKLS0gCjIuOS4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321822</attachid>
            <date>2017-09-26 09:07:21 -0700</date>
            <delta_ts>2017-09-26 09:56:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>430413</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA3OWY1YWU4YzMwZWU0ZDQwOWI1N2M4NjMzMDJiMDI5Mzk0Mzg4NjNkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NDcgKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDEyICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgICAgICAgICB8ICAyMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaCAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaCAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCAgICAgICAgICAgfCAxMjYgKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAgICAgICAgfCAgNzYgKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCAgICAgICAgICB8ICA1OSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oICAgICAgICAgICAgfCAg
IDUgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCAgICAgICAg
fCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oICAgICAg
ICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAg
ICAgICAgICB8IDIyNyArKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oICAgICAgICAgICB8ICA0OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgfCAgIDAKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4g
anN9L0pTV2ViQXNzZW1ibHkuaCAgIHwgIDUwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAgICAgICAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTE4ICsrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDg1ICsrLQogLi4uL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgfCAgNzYgKystCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggICB8ICAxMyAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAg
MzIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAg
fCAgMjUgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAgIHwgIDc1ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmggfCAgNDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCAgICAgICAgIHwgNjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8
ICAxOSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAg
ICAgfCAgIDUgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAg
ICAgICAgIHwgIDIyICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgICB8ICAxNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVj
dG9yLmNwcCAgICAgICAgfCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAgICAgICAgIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93YXNtL1dhc21Nb2R1bGUuaCB8ICAgMiArCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8ICAgMSArCiAxMTEgZmlsZXMgY2hhbmdlZCwgMzA3
NiBpbnNlcnRpb25zKCspLCAxNzQ0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeU1vZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAwJSkKIHJlbmFtZSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggKDYyJSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd2Fz
bS9XYXNtTW9kdWxlLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDgyZWYxNmQuLjZiNjc2N2UgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDkt
MjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRXhjZWVkaW5nIG1h
eCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyCisgICAg
ICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdlOiBpdCB1c2Vk
IHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIHRl
c3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qczoKKyAgICAgICAgKGFz
c2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAgKGFzc2Vy
dC50aHJvd3MpOgorCiAyMDE3LTA5LTIzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBpbmZpbml0ZSBsb29waW5nIHRlc3QyNjIgdGVzdApkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uN2ZlNmIxMyAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0IGJ1ZmZlciBv
ZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQqMTAyNCk7
CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5jZSBpdCBmYWls
cy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVycm9yLCAiT3V0
IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCks
IFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNlZWQgdGhlIG1l
bW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOyAKICAgICBhc3NlcnRFcShidWZmZXIuYnl0
ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnkuYnVmZmVyLCBidWZmZXIp
OwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pTVGVzdHMv
d2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0ZCAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rh
YmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQo
dGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBp
bml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRz
IG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0cyBoYXMg
YSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4g
aXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAy
KiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUncyBpbml0aWFs
IHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQgLyAyNzogVGFi
bGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBtYXhpbXVt
IDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAy
MTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAg
XTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDlkNzc4ZjEuLmJmOWMyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ1MCBAQAorMjAxNy0wOS0yNSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBh
cHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBl
dmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZW50YWlscyBjbGVhbmluZyB1cCBhbmQgc3BsaXR0
aW5nIGEgYnVuY2ggb2YgY29kZSB3aGljaCB3ZSBoYWQKKyAgICAgICAgaW50ZXJ0d2luZWQgYmV0
d2VlbiBDKysgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgSlMgb2JqZWN0cywgYW5kIHB1cmUgQysr
CisgICAgICAgIGltcGxlbWVudGF0aW9uIG9iamVjdHMuIFRoaXMgc3BlY2lmaWMgY2hhbmdlIGdv
ZXMgbW9zdCBvZiB0aGUgd2F5IHRvd2FyZHMKKyAgICAgICAgYWxsb3dpbmcgSlNDJ3MgV2ViQXNz
ZW1ibHkgdG8gd29yayB3aXRob3V0IFZNIC8gSlMsIHVwIHRvIGJ1dCBleGNsdWRpbmcKKyAgICAg
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlICh0aGVyZSdzIFdhc206Okluc3RhbmNlLCBidXQgaXQn
cyBub3QgKnRoZSogdGhpbmcKKyAgICAgICAgeWV0KS4gQmVjYXVzZSBvZiB0aGlzIHdlIHN0aWxs
IGhhdmUgYSBmZXcgRklYTUUgaWRlbnRpZnlpbmcgcGxhY2VzIHRoYXQgbmVlZCB0bworICAgICAg
ICBjaGFuZ2UuIEEgZm9sbG93LXVwIGNoYW5nZSB3aWxsIGdvIHRoZSByZXN0IG9mIHRoZSB3YXku
CisKKyAgICAgICAgSSB3ZW50IGFib3V0IHRoaXMgY2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkg
cG9zc2libGU6IGdyZXAgdGhlCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3dhc20gZGlyZWN0b3J5
IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNsdWRlIHRoZSAvanMvCisgICAg
ICAgIHN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1lbnRhdGlvbiBv
ZiBXZWJBc3NlbWJseSkuCisKKyAgICAgICAgTm9uZSBvZiB0aGlzIGNoYW5nZSByZW1vdmVzIHRo
ZSBuZWVkIGZvciBhIEpJVCBlbnRpdGxlbWVudCB0byBiZSBhYmxlIHRvIHVzZQorICAgICAgICBX
ZWJBc3NlbWJseS4gV2UgZG9uJ3QgaGF2ZSBhbiBpbnRlcnByZXRlciwgdGhlIHByb2Nlc3MgdGhl
cmVmb3JlIHN0aWxsIG5lZWRzIHRvCisgICAgICAgIGJlIGFsbG93ZWQgdG8gSklUIHRvIHVzZSB0
aGVzZSBwdXJlLUMrKyBBUElzLgorCisgICAgICAgIEludGVyZXN0aW5nIHRoaW5ncyB0byBub3Rl
OgorCisgICAgICAgICAgLSBSZW1vdmUgVk0gZnJvbSBQbGFuIGFuZCBhc3NvY2lhdGVkIHBsYWNl
cy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KKyAgICAgICAgICAgIHRoZSBjYWxs
YmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCisgICAgICAgICAgLSBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCisg
ICAgICAgICAgICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNv
bnN0cnVjdGlvbiB0aW1lIGZvciB0aGlzCisgICAgICAgICAgICBwdXJwb3NlOiBvbmUgdG8gbm90
aWZ5IG9mIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCisgICAgICAg
ICAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIg
Y3JlYXRlcyB0aGUgbWVtb3J5IHRvCisgICAgICAgICAgICBkaWN0YXRlIGhvdyB0byByZWFjdCB0
byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1iZWRkaW5nIHRoYXQncyB0bworICAg
ICAgICAgICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3RpdmVseSkuCisgICAg
ICAgICAgLSBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdhc206
Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCisgICAgICAgICAgICB0aGVyZSwgd2l0aCBhbiBl
bnVtIGNsYXNzIGZvciBmYWlsdXJlIHR5cGVzLgorICAgICAgICAgIC0gRXhjZWVkaW5nIG1heCBv
biBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRo
aXMKKyAgICAgICAgICAgIGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNl
ZCB0byB0aHJvdyBPT00gZXJyb3IuIFVwZGF0ZSB0aGUKKyAgICAgICAgICAgIGNvcnJlc3BvbmRp
bmcgdGVzdC4KKyAgICAgICAgICAtIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3Jvd19tZW1vcnkgb3Bj
b2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCisgICAgICAgICAgICByZWFjaCBk
aXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgorICAgICAgICAgIC0gSlNXZWJB
c3NlbWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNh
dXNlIGl0J3Mgb25seQorICAgICAgICAgICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20g
Z3Jvd19tZW1vcnkgYXMgYmVmb3JlKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9yeSBub3cgdGFr
ZXMgYSBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCisgICAg
ICAgICAgICB3cmFwcGVycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2Nl
ZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CisgICAgICAgICAgICBrbm93bmluZyBhbnl0aGluZyBh
Ym91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxpc3Qgb2YgY2FsbGJhY2tzCisg
ICAgICAgICAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xsIHdhbnQgdG8g
bm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAorICAgICAgICAgICAgdW5kZXIgYSBsb2NrKS4KKyAg
ICAgICAgICAtIFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9m
IHRydXRoIGFib3V0IGFkZHJlc3MgLyBzaXplLAorICAgICAgICAgICAgdXNlZCBkaXJlY3RseSBi
eSBnZW5lcmF0ZWQgY29kZSBpbnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCisgICAgICAg
ICAgLSBNb3ZlIHdhc21Ub0pTIGZyb20gdGhlIGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRv
IGl0cyBvd24gaGVhZGVyIHVuZGVyCisgICAgICAgICAgICB3YXNtL2pzLiBJdCdzIG9ubHkgdXNl
ZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwLCBhbmQgdXNlcyBWTSwKKyAg
ICAgICAgICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3NlbWJseS4KKyAgICAg
ICAgICAtIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVjdCBo
b2xkaW5nIGEKKyAgICAgICAgICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3Rl
YWQgb2YgYW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcworICAgICAgICAgICAgZG9lc24n
dCBhZGQgYW55dGhpbmcgdG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0
dWFsbHkgZ2V0cworICAgICAgICAgICAgcGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBU
TFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAgICAgIHBvdGVu
dGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVudGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hh
bmdlIGlzIHRvCisgICAgICAgICAgICBhbGxvdyBwYXNzaW5nIFdhc206OkNvbnRleHQgYXJvdW5k
IHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZNCisgICAgICAgICAgICBj
b250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3RpdmVseSB0
aGUgc2FtZSwgYnV0IHdpdGgKKyAgICAgICAgICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRk
aW5nIGlzIG11Y2ggYmV0dGVyIG9mZi4KKyAgICAgICAgICAtIE1vdmUgSlNXZWJBc3NlbWJseSBp
bnRvIHRoZSBKUyBmb2xkZXIuCisgICAgICAgICAgLSBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJs
b2NrIGRpcmVjdGx5IGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KKyAgICAgICAg
ICAtIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24gV2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyBy
YXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKKyAgICAgICAgICAgIGJlaW5nIG9uIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5FbWJlZGRlcgorICAgICAgICAg
ICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jaywgYW5kIGlzIHN0aWxsCisgICAgICAgICAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCisg
ICAgICAgICAgICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRv
IGNhbGwgYmFjayBpbnRvIHRoZQorICAgICAgICAgICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRk
aW5nIGFueSBpbmRpcmVjdGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQorICAgICAg
ICAgICAgdGhlIEIzIElSIGdlbmVyYXRvciBub3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2Nr
IGluc3RlYWQgb2YKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suCisgICAgICAg
ICAgLSBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24gY29tcGxldGlvbiBp
cyBub3cgbWFya2VkIGJ5IGl0cyBvd24KKyAgICAgICAgICAgIGF0b21pYzxib29sPiBmbGFnIGlu
c3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBhbmQK
KyAgICAgICAgICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVj
YXVzZSBiZWZvcmUgbXkgY2hhbmdlcworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayBkaWQgaXRzIG93biBjb21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQorICAgICAg
ICAgICAgV2FzbTo6Q29kZUJsb2NrLCB3aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0
IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRo
ZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2VyLCB0aGUgbG9jayB3YXMgYmVpbmcKKyAg
ICAgICAgICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2VydGlvbi4KKyAgICAgICAg
ICAtIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhyb3VnaCBh
IGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKKyAgICAgICAgICAgIGluIGF0IGNvbXBpbGF0aW9uIHRp
bWUsIGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4K
KyAgICAgICAgICAtIFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQg
aGFuZGxpbmcgdGh1bmtzLiBPbmx5IHRoZSBJUgorICAgICAgICAgICAgZ2VuZXJhdG9yIHNob3Vs
ZCBrbm93LCBhbmQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcK
KyAgICAgICAgICAgIHRodW5rIGlzIGdlbmVyYXRlZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQg
KG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5vdAorICAgICAgICAgICAgYWxsIG9mIHRoZW0g
Z2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KKyAgICAgICAgICAtIE1ha2UgZXhjZXB0aW9u
IHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNvZGVkCisgICAg
ICAgICAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKKyAgICAgICAgICAgIGNvZGUgd2hlbiBhIFdlYkFz
c2VtYmx5IGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBn
ZXQKKyAgICAgICAgICAgIGNhbGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNh
biBvbmx5IGhhdmUgYSBzaW5nbGUgb2YgdGhlc2UKKyAgICAgICAgICAgIGZ1bmN0aW9ucyAoaS5l
LiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJvY2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVy
IGlzIGEKKyAgICAgICAgICAgIHNpbmdsZXRvbi4gVGhhdCBjYW4gYmUgZml4ZWQgaW4gaW4gIzE3
NzQ3NS4KKyAgICAgICAgICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVyZSBhbGwgZW1iZWRk
ZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgorICAgICAgICAgIC0gU3BsaXQgdXAgSlNXZWJBc3NlbWJs
eVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKKyAgICAgICAgICAgIHJlZmNvdW50ZWQu
IEpTV2ViQXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGlu
IHRoZQorICAgICAgICAgICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBi
eSB0aGUgSklUIGNvZGUgdG8gbG9va3VwIHdoZXJlIHRvCisgICAgICAgICAgICBjYWxsIGFuZCBk
byB0aGUgaW5zdGFuY2UgY2hlY2sgKGZvciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlz
IGNyZWF0ZXMKKyAgICAgICAgICAgIGFuIGV4dHJhIGFsbG9jYXRpb24gZm9yIGFsbCB0aGUgaW5z
dGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhjaGFuZ2UKKyAgICAgICAgICAgIHJlbW92
ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUgaW5zdGFuY2UgdXNlZCB0
byBiZSBvYnRhaW5lZAorICAgICAgICAgICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4gQWxzbyBu
b3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKKyAgICAgICAgICAgIGlu
c3RhbmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRl
ciB0byB0aGUKKyAgICAgICAgICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ug
d291bGQgY2F1c2UgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICAgICAgICAtIEFkZCBXYXNtSW5zdGFu
Y2UuIEl0IGRvZXNuJ3QgZG8gbXVjaCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCisgICAgICAgICAg
LSBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBkb2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1w
b3J0ZWQgZnVuY3Rpb25zIGFzCisgICAgICAgICAgICBKU09iamVjdHMsIGl0IGFsc28gaGFzIHRo
ZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3YXNtCisgICAgICAgICAgICBl
bnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIgaW5zdGFuY2Un
cyBpbXBvcnRlZAorICAgICAgICAgICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAorICAgICAgICAgICAg
Y3JlYXRlcyBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBk
aXNhc3NvY2lhdGUKKyAgICAgICAgICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVt
YmVkZGVyLW5ldXRyYWwgdGhpbmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKKyAgICAgICAgICAgIHdp
biBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBnZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZklt
cG9ydEZ1bmN0aW9uIGZvcgorICAgICAgICAgICAgdGhlIGNhbGwgb3Bjb2RlICh3aGVuIHRoZSBj
YWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgICAg
ICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhpcyBpc24ndCBrbm93
biBhdCBjb21waWxlLXRpbWUKKyAgICAgICAgICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQgb24g
dGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgorICAgICAg
ICAgICAgdGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3Rh
bmNlIChvbmx5IHdhc20tPndhc20KKyAgICAgICAgICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2Ug
aXMgd2FzbUJpbmRpbmcgd2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCisgICAg
ICAgICAgICBmaWd1cmUgb3V0IHRoZSB3YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRo
ZW4gZ2V0cworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwKKyAgICAgICAgICAgIGNhbGwuIFRoZSBk
aXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5zdGFuY2UgY2FuIGJlCisg
ICAgICAgICAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBDb250ZXh0
IGlzLCBhbmQKKyAgICAgICAgICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVh
ZHkgZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKKyAgICAgICAgICAgIGNh
biBtb3ZlIHRoaXMgdGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRv
IFdhc206Okluc3RhbmNlLAorICAgICAgICAgICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGlu
IGFzIGFuIG9wYXF1ZSBwb2ludGVyIHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAorICAgICAg
ICAgICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdyaXRlQmFycmllcjxKU09iamVjdD4uCisgICAg
ICAgICAgLSBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJhbWUsIGFuZCBpbiBtYW55IHBs
YWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAorICAgICAgICAgICAgYXJvdW5kIGluc3RlYWQgb2Yg
Vk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1lcyB3aGljaAor
ICAgICAgICAgICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYworICAgICAgICAgICAgbG9jYXRpb24uIFRoYXQg
Y2hhbmdlIHdvbid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwg
YnV0CisgICAgICAgICAgICB3aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hp
bmVyeSBpbiBhIGdlbmVyaWMgbWFubmVyIHdpdGhvdXQKKyAgICAgICAgICAgIGhhdmluZyBhIFZN
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxp
Y2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW53aW5k
RXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0pOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogZGZnL0RGR09TUkVu
dHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxl
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2Fs
bGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0
YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWNT
dGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUgY29uc3QpOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAgICAoSlNDOjpOYXRpdmVDYWxsRnJhbWVU
cmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxG
cmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSk6
CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjp+TmF0aXZl
Q2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IpOgorICAgICAgICAoSlNDOjpTdGFj
a1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJl
YWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVySXNFbnRyeUZyYW1lIGNvbnN0KToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmg6CisgICAgICAgIChKU0M6OlZN
RW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVJl
Y29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAoSlNDOjpFbnRyeUZyYW1l
Ojp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRl
ck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlND
Ojp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAg
ICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9P
cHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6Cisg
ICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OkZyYW1lV2Fsa2VyKToKKyAg
ICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VUb1BhcmVudEZyYW1lKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6Cisg
ICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dTY29w
ZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZN
Lmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KToKKyAgICAgICAgKiBy
dW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjppc1NhbmVGcmFtZSk6CisgICAgICAg
IChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAgICAgICAoSlND
OjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2spOgorICAgICAgICAqIHdhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2FzbUJC
UVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6
Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmg6
CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRp
bmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNt
L1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpD
b2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29t
cGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpzZXRDb21waWxhdGlv
bkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFN0dWJzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNv
ZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yik6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCk6CisgICAgICAg
IChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0LmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUyk6CisgICAgICAgIChK
U0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250
ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAgICAgICAqIHdh
c20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIu
aC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtSW5z
dGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om1lbW9yeSk6
CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0YWJsZSk6CisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkU3RhY2tMaW1p
dCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRDYWNoZWRTdGFja0xp
bWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3Rlcklu
Zm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6CisgICAgICAgIChK
U0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9TYXZlIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlVmFsaWRhdGlvbkNh
bGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y29tcGls
ZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBh
cnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50
Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnJ1bkNv
bXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmFkZENvbXBsZXRpb25U
YXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNl
bElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgICogd2FzbS9XYXNtVGFi
bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJs
ZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChK
U0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFi
bGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpvZmZz
ZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAqIHdhc20vV2FzbVRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c2V0VGhyb3dXYXNtRXhjZXB0
aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtzOjp0aHJvd1dhc21FeGNlcHRpb24pOgor
ICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRl
eHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0Lmg6CisgICAgICAgICogd2FzbS9qcy9K
U1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDogQ29waWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaC4KKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Lmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmguCisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbnN0YW5jZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0NhbGxlZSk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVybmFsTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21UYWJsZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscyk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNhY2hlZFN0YWNrTGltaXQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldENhY2hlZFN0YWNrTGltaXQp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21NZW1vcnkpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21Nb2R1bGUpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUgY29uc3QpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9y
eSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKToKKyAgICAgICAg
KiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAuCisg
ICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KU0V4Y2VwdGlv
bik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJseUZ1bmN0aW9u
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5TWVt
b3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVs
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1v
ZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmg6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21waWxlRnVu
Yyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGlsZUFu
ZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMpOgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTctMDktMjUgIERldmluIFJvdXNzbyAg
PHdlYmtpdEBkZXZpbnJvdXNzby5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBD
b25zb2xlLmFkZEluc3BlY3RlZE5vZGUgdG8gRE9NLnNldEluc3BlY3RlZE5vZGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTc2MmY2OC4uOWVlNTdlZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEwODIsNyArMTA4Miw3IEBACiAJCTc5QzRCMTVFMUJBMjE1OEYw
MEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThG
MDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMz
M0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQ
Q1Jhbmdlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUQ1Q0Q1OTFDMTEwNkE5
MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNt
RXhjZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87
IH07CisJCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlEQUUyNzkxRTAz
QzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAzIC8q
IEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZFMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xNDYwLDcgKzE0NjAsNiBAQAogCQlBRDJGQ0MyMDFEQjU5Q0Iy
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMTQxREI1OUM1OTAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKIAkJQUQyRkND
MjExREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MxNTFEQjU5
QzU5MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAqLzsgfTsKIAkJ
QUQyRkNDMkQxREI4MzhGRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MyNzFEQjgzOEM0
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLzsgfTsKLQkJQUQyRkNDMzExREI4
M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5LmggKi87IH07CiAJCUFENDEyQjM0MUU3QjJFOUUwMDhBRjE1NyAvKiBXYXNtQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0MTJC
MzIxRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ0MjUyNTExRTVEMEUxNDAwOUQyQTk3IC8q
IEZ1bGxDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDQyNTI1MDFFNUQwREVCMDA5RDJBOTcgLyogRnVsbENvZGVPcmlnaW4uaCAqLzsg
fTsKIAkJQUQ0OTM3QzQxRERCRTYxNDAwNzdDODA3IC8qIEFic3RyYWN0TW9kdWxlUmVjb3JkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDMjFE
REJFNjBBMDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ2OCw2ICsxNDY3LDEzIEBACiAJ
CUFENDkzN0Q0MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDQTFEREQyNzM0
MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovOyB9OwogCQlBRDRCMURGQTFERjI0
NEUyMDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGlu
Zy5oICovOyB9OwogCQlBRDVCNDE2RjFFQkFGQjc3MDA4RUZBNDMgLyogV2FzbU5hbWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUI0MTZFMUVCQUZC
NjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUFENUMzNkREMUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUMz
NkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYg
LyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RTYxRjY5
RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMz
NkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9X
YXNtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUYzMUY2MjQ4MkUwMDEzMTND
MiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdhc21Ub0pTLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREQwOUFFRTFGNUY2
MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFRjFGN0EyNjNBMDAwQkNBQUYgLyogV2FzbU1lbW9y
eU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
NUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENzQzOEMwMUUwNDU3QTQwMEZE
MEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEODZB
OTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDg2QTkzRDFBQTREODdDMDAyRkU3N0Yg
LyogV2Vha0dDTWFwSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOEZG
Mzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDE1Niw5ICs0MTYyLDI1IEBACiAJ
CUFEMkZDQzE1MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0MyNjFEQjgz
OEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
RDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgcGF0aCA9
IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViQXNzZW1ibHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAv
KiBXYXNtRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Gb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0NzFGNEJB
Nzg2MDA2Njk5MTIgLyogV0FCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0QTFGNERFNjhDMDA2Njk5MTIgLyogV0FJbnN0
YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQUluc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFEM0YxRTRCMUY0REU2OEMwMDY2OTkxMiAvKiBXQVRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdBVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNEMx
RjRERTY4QzAwNjY5OTEyIC8qIFdBTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBTWVtb3J5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUyMUY0RjRBRTUwMDY2OTkxMiAv
KiBXQU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1lbW9yeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUzMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1vZHVs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUFEM0YxRTU0MUY0RjRBRTUwMDY2OTkxMiAvKiBXQUluc3RhbmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdBSW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXQVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNjQxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
RXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY1MUY1MEU1
N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUV4Y2Vw
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY4MUY1NDdDQjYw
MDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FN
ZW1vcnlEZXNjcmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQU1lbW9yeURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNkExRjU0N0NCNjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdBSW1wb3J0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZC
MUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
QVRhYmxlRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2
QzFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0FJbXBvcnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNG
MUU2RDFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0FUYWJsZURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDNGMUU3MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXQUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTcx
MUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
RnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQxMkIzMTFFN0Iy
RThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUQ0MTJCMzUxRTdCNTdDMDAwOEFGMTU3IC8qIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZUlmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MTczLDE1ICs0MTk1LDI4IEBACiAJCUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNt
QmluZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENEIxREY4MURGMjQ0RDcw
MDcxQUUzMiAvKiBXYXNtQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDVCNDE2RTFF
QkFGQjY1MDA4RUZBNDMgLyogV2FzbU5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbU5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REMx
RjY4OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtRW1i
ZWRkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REUxRjY5OUVCNjAw
MEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSW5zdGFu
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZERjFGNjk5RUI2MDAw
QkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21JbnN0YW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWJsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFi
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbU1lbW9yeU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU2lnbmF0dXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNpZ25hdHVy
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDg2QTkzRDFBQTREODdDMDAyRkU3
N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWFrR0NNYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOERE
NkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1RvV2Fz
bS5oOyBwYXRoID0ganMvSlNUb1dhc20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUQ4REQ2RDAxRjY3MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEpTVG9XYXNtLmNwcDsgcGF0aCA9IGpzL0pTVG9XYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5kZXhPck5hbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtSW5kZXhPck5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDlF
ODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEQjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QYWdlQ291bnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMjFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRvSlNDYWxs
ZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMzFERjhFQTAwMDA1
QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlU
b0pTQ2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUVFMUY1RjYy
M0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXYXNtVG9KUy5oOyBwYXRo
ID0ganMvV2FzbVRvSlMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRUYx
RjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdhc21U
b0pTLmNwcDsgcGF0aCA9IGpzL1dhc21Ub0pTLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRjMxRjYyNDgyRTAwMTMx
M0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBw
YXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQxOTEsNiArNDIyNiw4IEBACiAJCUFERTgwMjk2MUUwOEYxQzkwMDU4
REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7
IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJs
eUxpbmtFcnJvclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOUQx
RTA4RjIyNjAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JD
b25zdHJ1Y3Rvci5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQURGQzMwRjcxRjQ3QTdCODAwNjQ1
MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFzc2VtYmx5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY5MUY0N0E4QzAwMDY0NTFEMyAvKiBXQU1v
ZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0
aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OUY4OTM4MTg5MUFE
QjUwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyog
VG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0g
VG9vbEV4ZWN1dGFibGUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NjQ1LDYgKzU2ODIsMjYgQEAKIAkJCQk4NkYzRUVCNjE2ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1
bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVl
SlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5oICovLAorCQkJCUFEM0YxRTQ3MUY0QkE3ODYwMDY2OTkxMiAvKiBXQUJhc2UuaCAq
LywKKwkJCQlBRDNGMUU2NTFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uY3BwICovLAor
CQkJCUFEM0YxRTY0MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5oICovLAorCQkJCUFE
M0YxRTcxMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLywKKwkJCQlBRDNGMUU3
MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovLAorCQkJCUFEM0YxRTZDMUY1NDdD
QjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5jcHAgKi8sCisJCQkJQUQzRjFFNkExRjU0N0NC
NjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8sCisJCQkJQUQzRjFFNTQxRjRGNEFFNTAw
NjY5OTEyIC8qIFdBSW5zdGFuY2UuY3BwICovLAorCQkJCUFEM0YxRTRBMUY0REU2OEMwMDY2OTkx
MiAvKiBXQUluc3RhbmNlLmggKi8sCisJCQkJQUQzRjFFNTIxRjRGNEFFNTAwNjY5OTEyIC8qIFdB
TWVtb3J5LmNwcCAqLywKKwkJCQlBRDNGMUU0QzFGNERFNjhDMDA2Njk5MTIgLyogV0FNZW1vcnku
aCAqLywKKwkJCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9y
LmNwcCAqLywKKwkJCQlBRDNGMUU2OTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlw
dG9yLmggKi8sCisJCQkJQUQzRjFFNTMxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTW9kdWxlLmNwcCAq
LywKKwkJCQlBREZDMzBGOTFGNDdBOEMwMDA2NDUxRDMgLyogV0FNb2R1bGUuaCAqLywKKwkJCQlB
RDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8sCisJCQkJQUQzRjFFNEIx
RjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUuaCAqLywKKwkJCQlBRDNGMUU2RDFGNTQ3Q0I4MDA2
Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovLAorCQkJCUFEM0YxRTZCMUY1NDdDQjgw
MDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovLAorCQkJCUFERkMzMEY3MUY0N0E3Qjgw
MDY0NTFEMyAvKiBXZWJBc3NlbWJseS5oICovLAogCQkJCTVERTNEMEY0MEREOERERkIwMDQ2ODcx
NCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQVBJOwpAQCAt
NTk3OSw4ICs2MDM2LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAotCQkJCUFEMkZDQzJFMURCODM5
RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLywKLQkJCQlBRDJGQ0MyRjFEQjgzOUY3
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5
QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBFOTIxRDVBNEFCMzAw
OTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJNTNDQTczMDcxRUE1MzNEODAw
NzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAqLywKQEAgLTU5OTYsNiArNjA1MSw3IEBACiAJCQkJ
NTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCAqLywKIAkJCQlBRDQx
MkIzMTFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovLAogCQkJCUFENDEyQjMy
MUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICovLAorCQkJCUFENUMzNkRDMUY2ODhC
NUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLywKIAkJCQk3OURBRTI3OTFFMDNDODIyMDBC
NTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLywKIAkJCQk1MzgxQjkzNjFFNjBFOTY2MDA5
MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCiAJCQkJNTM4MUI5MzgxRTYw
RTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLywKQEAgLTYwMDQsNiAr
NjA2MCw4IEBACiAJCQkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBh
cnNlci5oICovLAogCQkJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuY3BwICovLAogCQkJCUFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCAqLywKKwkJCQlBRDVDMzZERTFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNw
cCAqLywKKwkJCQlBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8s
CiAJCQkJQUQwMDY1OUQxRUNBQzdGRTAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCAqLywKIAkJCQk1
M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLywKIAkJ
CQk1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8sCkBA
IC02MDExLDYgKzYwNjksOCBAQAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNt
TWVtb3J5LmggKi8sCiAJCQkJNzlCNzU5NzExREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAgKi8sCiAJCQkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oICovLAorCQkJCUFENUMzNkYwMUY3QTI2QkYwMDBCQ0FBRiAvKiBX
YXNtTWVtb3J5TW9kZS5jcHAgKi8sCisJCQkJQUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdh
c21NZW1vcnlNb2RlLmggKi8sCiAJCQkJNzkwMDgxMzYxRTk1QThFQzAwNTJEN0NEIC8qIFdhc21N
b2R1bGUuY3BwICovLAogCQkJCTc5MDA4MTM3MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxl
LmggKi8sCiAJCQkJNTNFNzc3RTExRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAgKi8sCkBAIC02MDMyLDYgKzYwOTIsOCBAQAogCQkJCTUzRjQwRTg0MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBD
MkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJB
IC8qIFdhc21TaWduYXR1cmUuaCAqLywKKwkJCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLywKKwkJCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3Bw
ICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggKi8sCiAJ
CQkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICovLApAQCAt
NzYzMiw2ICs3Njk0LDEwIEBACiAJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQUQ4REQ2RDAxRjY3
MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLywKKwkJCQlBRDhERDZDRjFGNjcwODlGMDAw
NEVCNTIgLyogSlNUb1dhc20uaCAqLywKKwkJCQlBREQwOUFGMjFGNjI0ODI5MDAxMzEzQzIgLyog
SlNXZWJBc3NlbWJseS5jcHAgKi8sCisJCQkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpT
V2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJCQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8q
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RG
RUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcCAqLywKQEAgLTc2NTEsNiAr
NzcxNyw4IEBACiAJCQkJQUQyRkNCQUQxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBRTFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseVRhYmxlLmNwcCAqLywKIAkJCQlBRDJGQ0JBRjFEQjU4REE0MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseVRhYmxlLmggKi8sCisJCQkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdh
c21Ub0pTLmNwcCAqLywKKwkJCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMu
aCAqLywKIAkJCQlBRDJGQ0JCMDFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQUQyRkNCQjExREI1OERBNDAwQjNFNzM2IC8q
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCMjFE
QjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3BwICov
LApAQCAtNzkyNiw2ICs3OTk0LDcgQEAKIAkJCQkwRkVDODVCQjFCRTE0NjJGMDA4MEZGNzQgLyog
QjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRGNjdEMjFEOUM2
RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzZFNTQ1MzFDNDY4
RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzMTlEQTA0MUMxQkU0MEQwMDFEMjYwQiAvKiBCM0xvd2VyTWFjcm9zQWZ0
ZXJPcHRpbWl6YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxRTFCREFDREFDMDA4
MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMTYsNiArODA4NSw3
IEBACiAJCQkJRTMyOERBRUIxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8q
IEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAx
RjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MjE5LDYgKzgyODksNyBAQAogCQkJCTBGQTU4MUJDMTUwRTk1MzAwMEI5QTJEOSAvKiBERkdOb2Rl
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3NTAwMEMyMzk2IC8qIERG
R051bGxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQUQ1QzM2REQxRjY4OEI2NTAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjlDRTkxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGRjFDOTBD
NTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTgzMjksOCArODQw
MCwxMCBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVz
c2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUExRjc1QUQ2QTAwMEJD
QUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M1NzFGMzNBNDUzMDBG
NTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzRFREJGNzFEQjVGRkM5MDBEQzg3QTUgLyogRnJh
bWVUcmFjZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTg3MzEsNyArODgwNCw2IEBACiAJCQkJQTc0
ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFr
U2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBRDJGQ0MzMTFEQjgzRDQ5MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlF
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUZENDg0
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjQsNiArODk5Niw3IEBACiAJCQkJ
QkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBL
ZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBS
ZWdFeHBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZEMUM4RjY1OTUwMDQ4MDE1
MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDNDBF
MTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTkw
OTMsNiArOTE2Niw3IEBACiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1
YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUw
IC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUYxRjdBMjYz
QTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1MkFB
MTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQz
QTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBmZDUyNmIyLi4yZDI4ZWU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MjYsNyArOTI2LDYgQEAgdG9vbHMvSlNEb2xsYXJWTVBy
b3RvdHlwZS5jcHAKIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCiB0b29scy9WTUluc3Bl
Y3Rvci5jcHAKIAotd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKIHdhc20vV2FzbUJCUVBsYW4uY3BwCiB3YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtOTM0
LDEyICs5MzMsMTYgQEAgd2FzbS9XYXNtQ2FsbGVlLmNwcAogd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uY3BwCiB3YXNtL1dhc21Db2RlQmxvY2suY3BwCiB3YXNtL1dhc21Db250ZXh0LmNwcAor
d2FzbS9XYXNtRW1iZWRkZXIuaAogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAogd2Fz
bS9XYXNtRm9ybWF0LmNwcAogd2FzbS9XYXNtSW5kZXhPck5hbWUuY3BwCit3YXNtL1dhc21JbnN0
YW5jZS5jcHAKK3dhc20vV2FzbUluc3RhbmNlLmgKIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNw
cAogd2FzbS9XYXNtTWVtb3J5LmNwcAogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCit3
YXNtL1dhc21NZW1vcnlNb2RlLmNwcAogd2FzbS9XYXNtTW9kdWxlLmNwcAogd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uY3BwCiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC05NDksMTAg
Kzk1MiwxNSBAQCB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQu
Y3BwCiB3YXNtL1dhc21QbGFuLmNwcAogd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAord2FzbS9XYXNt
VGFibGUuY3BwCit3YXNtL1dhc21UYWJsZS5oCiB3YXNtL1dhc21UaHVua3MuY3BwCiB3YXNtL1dh
c21WYWxpZGF0ZS5jcHAKIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCit3YXNtL2pzL0pTVG9XYXNt
LmNwcAord2FzbS9qcy9KU1RvV2FzbS5oCit3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAK
QEAgLTk2Miw2ICs5NzAsOCBAQCB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKK3dhc20vanMvV2FzbVRv
SlMuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmgKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5
cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA0MjI4
MGM1Li42ZGY0NDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTE3OSw3ICsxNzksNyBAQCBDYWxsU2l0ZUluZGV4
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6b3JpZ2luYWxDYWxsU2l0ZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gc3R1Ygogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4Y2Vw
dGlvbkhhbmRsZXIoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7Ci0gICAgaml0LT5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0pOworICAgIGppdC0+
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJm1fdm0udG9wRW50
cnlGcmFtZSk7CiAgICAgaWYgKG5lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oKSkg
ewogICAgICAgICAvLyBUbyB0aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4Y2Vw
dGlvbiBoYW5kbGluZwogICAgICAgICAvLyBjYWxsIHNpdGUsIHRoZXkgd2lsbCBleHBlY3QgdGhl
IE9TUiBleGl0IHRvIGJlIGFycml2ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCmluZGV4IDM0OGM2OGMuLjc3MTZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKICAqCkBAIC02NTIsOCArNjUyLDggQEAgdm9pZCBEZWJ1Z2dlcjo6c3RlcE91dE9m
RnVuY3Rpb24oKQogICAgIGlmICghbV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Vk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAg
ICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxs
RnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSkgOiBudWxscHRyOworICAgIEVudHJ5
RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgbV9wYXVzZU9u
Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSh0b3BFbnRyeUZyYW1lKSA6IG51bGxwdHI7CiAgICAgbV9wYXVzZU9uU3RlcE91dCA9
IHRydWU7CiAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG5v
dGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2
b2lkIERlYnVnZ2VyOjpyZXR1cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAo
IW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1l
KiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5
RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJh
bWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIGNhbGws
IHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdlIGFy
ZSByZXR1cm5pbmcgdG8uCiAgICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQgPSB0
cnVlOwpAQCAtODU2LDggKzg1Niw4IEBAIHZvaWQgRGVidWdnZXI6OnVud2luZEV2ZW50KENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1F
bnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50
cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAg
IC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYW4gZXhjZXB0aW9uIGxvY2F0aW9uIGxpa2UgYSBzdGVw
LW91dC4KICAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkK
QEAgLTg4Niw4ICs4ODYsOCBAQCB2b2lkIERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZN
RW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVu
dHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAg
ICAvLyBSZXR1cm5pbmcgZnJvbSBhIHByb2dyYW0sIGNvdWxkIGJlIGV2YWwoKSwgdGhlcmUgd2Fz
IGF0IGxlYXN0IG9uZSBleHByZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVybmlu
ZyB0by4KICAgICBtX3Bhc3RGaXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGQxOWRkYjcu
LmZmOTc4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAg
IC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBh
cmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpAQCAtMTYw
LDcgKzE2MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygp
CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAg
ICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0
aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNTgzYmY5OC4uMDIxZWFhYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTcsNyArMzE3
LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdp
c3RlclNldDo6YWxsRlBScygpKTsKIAogICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSByZWdp
c3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsKLSAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2
bUVudHJ5UmVjb3JkKHZtLT50b3BWTUVudHJ5RnJhbWUpOworICAgIFZNRW50cnlSZWNvcmQqIHJl
Y29yZCA9IHZtRW50cnlSZWNvcmQodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCBjdXJyZW50RW50cnkgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpOwogICAgICAg
ICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWcoKSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAzNDMzMDhjLi5jNzdlMDA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg1LDcgKzE4
NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdChFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7CiAg
ICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNl
IHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgogICAgICAgICAgICAgLy8gU28s
IHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAg
ICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKTsKKyAgICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBq
aXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIGppdC5hZGRQdHIoCkBAIC01Mzcs
NyArNTM3LDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwg
Vk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGppdC5lbWl0TWF0ZXJpYWxp
emVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCZ2bS50b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIERvIGFsbCBkYXRhIGZv
cm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCBiNzMyN2YzLi5lZDBh
ZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC0xMzUsNyAr
MTM1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50cnlKdW1w
RGVzdGluYXRpb24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BF
bnRyeUZyYW1lKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsK
IAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCmluZGV4IGZmMmNlNTYuLjAzZjAyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiAKICAg
ICAvLyBFbWl0IHRoZSBleGNlcHRpb24gaGFuZGxlci4KICAgICAqc3RhdGUuZXhjZXB0aW9uSGFu
ZGxlciA9IGppdC5sYWJlbCgpOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggN2MwMTgxZC4uYWFjODY4MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Myw3ICsxNDMsNyBAQCB2
b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlv
biA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKLSAgICAg
ICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtKTsKKyAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigmdm0udG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAxY2ViYzAxLi5lMGU1
OTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CkBAIC0yNjQsNyArMjY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJh
bWUpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAppbmRleCA4ZTA4MWQ3Li5jZWZjYWQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg2LDcgKzE4
Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIC8vIFRoZSBmaXJzdCB0aGluZyB3
ZSBuZWVkIHRvIGRvIGlzIHJlc3RhYmxpc2ggb3VyIGZyYW1lIGluIHRoZSBjYXNlIG9mIGFuIGV4
Y2VwdGlvbi4KICAgICBpZiAoZXhpdC5pc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoKTsgLy8gVGhlIGZpcnN0IHRp
bWUgd2UgaGl0IHRoaXMgZXhpdCwgbGlrZSBhdCBhbGwgb3RoZXIgdGltZXMsIHRoaXMgZmllbGQg
c2hvdWxkIGJlIG5vbi1udWxsLgotICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgIGppdC5yZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFt
ZSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgp
LCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CkBAIC00MTIsOCArNDEyLDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lz
dGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdp
c3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkgewotICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcFZNRW50cnlGcmFtZSwgR1BSSW5m
bzo6cmVnVDEpOwotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5m
bzo6cmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcEVudHJ5RnJhbWUsIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CiAgICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcg
PD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggOWZhMjlkMC4uYmU2MWE0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTQsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3Bl
LmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KQEAgLTIxNyw3ICsyMTgsNyBAQCBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjp3
YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgaWYgKCFjYWxsZWUoKS5pc1dhc20oKSkKICAgICAgICAgcmV0dXJuIGxleGljYWxH
bG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gV2FzbTo6bG9hZENvbnRleHQodm0pLT5nbG9iYWxP
YmplY3QoKTsKKyAgICByZXR1cm4gdm0ud2FzbUNvbnRleHQubG9hZCgpLT5nbG9iYWxPYmplY3Qo
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICByZXR1cm4gbGV4aWNhbEdsb2Jh
bE9iamVjdCgpOwpAQCAtMjM3LDI0ICsyMzgsMjQgQEAgYm9vbCBDYWxsRnJhbWU6OmlzQW55V2Fz
bUNhbGxlZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1DYWxsRnJhbWUqIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFtZSkKK0NhbGxGcmFtZSog
Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYgY3VyckVudHJ5RnJhbWUpCiB7Ci0g
ICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJyVk1FbnRyeUZyYW1lKSB7
Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29y
ZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAgY3VyclZNRW50cnlGcmFtZSA9IGN1cnJWTUVu
dHJ5UmVjb3JkLT5wcmV2VG9wVk1FbnRyeUZyYW1lKCk7CisgICAgaWYgKGNhbGxlckZyYW1lT3JF
bnRyeUZyYW1lKCkgPT0gY3VyckVudHJ5RnJhbWUpIHsKKyAgICAgICAgVk1FbnRyeVJlY29yZCog
Y3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAgICAg
ICAgY3VyckVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcEVudHJ5RnJhbWUo
KTsKICAgICAgICAgcmV0dXJuIGN1cnJWTUVudHJ5UmVjb3JkLT5wcmV2VG9wQ2FsbEZyYW1lKCk7
CiAgICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9y
Vk1FbnRyeUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxs
ZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsKIH0KIAotU1VQUFJFU1NfQVNBTiBDYWxsRnJhbWUqIENh
bGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFt
ZSkKK1NVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2FmZUNhbGxlckZyYW1l
KEVudHJ5RnJhbWUqJiBjdXJyRW50cnlGcmFtZSkKIHsKLSAgICBpZiAodW5zYWZlQ2FsbGVyRnJh
bWVPclZNRW50cnlGcmFtZSgpID09IGN1cnJWTUVudHJ5RnJhbWUpIHsKLSAgICAgICAgVk1FbnRy
eVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJWTUVudHJ5RnJh
bWUpOwotICAgICAgICBjdXJyVk1FbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnVuc2Fm
ZVByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAgICBpZiAodW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5
RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAgICAgICBWTUVudHJ5UmVjb3JkKiBjdXJy
Vk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyckVudHJ5RnJhbWUpOworICAgICAgICBj
dXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wRW50cnlGcmFt
ZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQtPnVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KHVuc2Fm
ZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENh
bGxGcmFtZSo+KHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCiBTb3VyY2VP
cmlnaW4gQ2FsbEZyYW1lOjpjYWxsZXJTb3VyY2VPcmlnaW4oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDYyMzA5YTAuLjZkNWQ3MjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTE0
MSwxMiArMTQxLDEyIEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBDYWxsRnJhbWUmIG9w
ZXJhdG9yPShjb25zdCBSZWdpc3RlciYgcikgeyAqc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlz
KSA9IHI7IHJldHVybiAqdGhpczsgfQogCi0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yVk1F
bnRyeUZyYW1lKCkpOyB9Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUo
KSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KLSAgICAg
ICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9Cisg
ICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsgfQorICAgICAgICB2b2lk
KiBjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZyYW1lQW5k
UEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVuc2FmZUNh
bGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVB
bmRQQygpLmNhbGxlckZyYW1lOyB9CiAKLSAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxsZXJG
cmFtZShWTUVudHJ5RnJhbWUqJik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYpOworICAgICAgICBDYWxsRnJhbWUqIHVuc2Fm
ZUNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBTb3VyY2VPcmlnaW4gY2FsbGVyU291cmNlT3JpZ2luKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAppbmRleCBjNWI2Yjgz
Li43NmFjZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
RnJhbWVUcmFjZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Zy
YW1lVHJhY2Vycy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBW
TUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIAogY2xhc3MgU3VzcGVuZEV4Y2VwdGlv
blNjb3BlIHsKIHB1YmxpYzoKQEAgLTc0LDMzICs3NCwzMyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAgICAgQVNT
RVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9jYXN0
PHZvaWQqPih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0tPnRv
cEVudHJ5RnJhbWUpKTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAg
ICB9CiB9OwogCiBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB7CiBwdWJs
aWM6Ci0gICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZShW
TSogdm0sIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
KyAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKFZNKiB2
bSwgRW50cnlGcmFtZSogRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAg
IDogbV92bSh2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFTU0VSVChj
YWxsRnJhbWUpOwotICAgICAgICBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50
cnlGcmFtZTsKKyAgICAgICAgbV9zYXZlZFRvcEVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFt
ZTsKICAgICAgICAgbV9zYXZlZFRvcENhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7Ci0gICAg
ICAgIHZtLT50b3BWTUVudHJ5RnJhbWUgPSB2bUVudHJ5RnJhbWU7CisgICAgICAgIHZtLT50b3BF
bnRyeUZyYW1lID0gRW50cnlGcmFtZTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxG
cmFtZTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5OYXRpdmVDYWxsRnJhbWVUcmFjZXJX
aXRoUmVzdG9yZSgpCiAgICAgewotICAgICAgICBtX3ZtLT50b3BWTUVudHJ5RnJhbWUgPSBtX3Nh
dmVkVG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX3ZtLT50b3BFbnRyeUZyYW1lID0gbV9zYXZl
ZFRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1fdm0tPnRvcENhbGxGcmFtZSA9IG1fc2F2ZWRUb3BD
YWxsRnJhbWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwotICAgIFZNRW50cnlG
cmFtZSogbV9zYXZlZFRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBtX3NhdmVkVG9w
RW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIG1fc2F2ZWRUb3BDYWxsRnJhbWU7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApp
bmRleCAxMzUzZTEwLi5hNTEzZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTY1Myw5ICs2NTMsOSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAK
LSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
aXNpdG9yKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodmlzaXRvcik7CiAKLSAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53aW5kaW5nID0gdmlz
aXRvci0+Y2FsbGVySXNWTUVudHJ5RnJhbWUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53
aW5kaW5nID0gdmlzaXRvci0+Y2FsbGVySXNFbnRyeUZyYW1lKCk7CiAgICAgICAgIGlmIChzaG91
bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
IApAQCAtNjYzLDcgKzY2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAgICB7CiAj
aWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSB2aXNpdG9y
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC02NzYsNyArNjc2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaW50cHRyX3QqIGZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdCo+KG1fY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9
IGN1cnJlbnRDYWxsZWVTYXZlcy0+c2l6ZSgpOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNv
cmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgVk1FbnRy
eVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRvcEVudHJ5RnJhbWUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZl
cy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGN1cnJlbnRF
bnRyeS5yZWcoKSkpCkBAIC03MDIsNyArNzAyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBpZiAodW53
aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIGlmIChjYWxsRnJh
bWUtPmNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUpCisg
ICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gdm0udG9w
RW50cnlGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGNhbGxG
cmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggODVkMTQ3YS4uMWRhOTNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxOCArNDQsMTggQEAgU3RhY2tWaXNpdG9yOjpT
dGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0pCiAgICAgQ2FsbEZyYW1l
KiB0b3BGcmFtZTsKICAgICBpZiAoc3RhcnRGcmFtZSkgewogICAgICAgICBBU1NFUlQodm0pOwot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKKyAg
ICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKICAgICAgICAg
dG9wRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgICAgICAKLSAgICAgICAgaWYgKHRvcEZy
YW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKSA9PSBzdGF0
aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7Ci0gICAgICAgICAgICB0b3BGcmFtZSA9IHZtRW50
cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKLSAg
ICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUu
bV9WTUVudHJ5RnJhbWUpLT5tX3ByZXZUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIGlmICh0b3BG
cmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFtZS5tX2VudHJ5RnJhbWUpID09IHN0YXRp
Y19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKKyAgICAgICAgICAgIHRvcEZyYW1lID0gdm1FbnRy
eVJlY29yZChtX2ZyYW1lLm1fZW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKKyAgICAg
ICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fZW50
cnlGcmFtZSktPm1fcHJldlRvcEVudHJ5RnJhbWU7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gMDsKKyAgICAgICAgbV9mcmFtZS5tX2Vu
dHJ5RnJhbWUgPSAwOwogICAgICAgICB0b3BGcmFtZSA9IDA7CiAgICAgfQotICAgIG1fZnJhbWUu
bV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IGZhbHNlOworICAgIG1fZnJhbWUubV9jYWxsZXJJc0Vu
dHJ5RnJhbWUgPSBmYWxzZTsKICAgICByZWFkRnJhbWUodG9wRnJhbWUpOwogCiAgICAgLy8gRmlu
ZCB0aGUgZnJhbWUgdGhlIGNhbGxlciB3YW50cyB0byBzdGFydCB1bndpbmRpbmcgZnJvbS4KQEAg
LTc1LDE0ICs3NSwxNCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSgpCiAgICAg
ICAgICAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCAmaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIpOwogICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG1fZnJhbWUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZTsK
KyAgICAgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlckVudHJ5
RnJhbWU7CiAgICAgICAgICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUuY2FsbEZy
YW1lKCksIGNhbGxlckNvZGVPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2ZyYW1l
Lm1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX0NhbGxlckVudHJ5RnJhbWU7CiAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUo
KSk7CiB9CiAKQEAgLTE1Miw5ICsxNTIsOSBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklu
bGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaQogewog
ICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpOwotICAgIG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fVk1F
bnRyeUZyYW1lOwotICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUobV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSk7Ci0gICAgbV9mcmFtZS5tX2NhbGxl
cklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSAhPSBtX2ZyYW1l
Lm1fVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX2VudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX2NhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZShtX2ZyYW1lLm1fQ2FsbGVyRW50cnlGcmFtZSk7CisgICAgbV9mcmFtZS5tX2Nh
bGxlcklzRW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lICE9IG1fZnJhbWUu
bV9lbnRyeUZyYW1lOwogICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwogCiAgICAg
Q2FsbGVlQml0cyBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwpAQCAtNTAwLDcgKzUwMCw3
IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBJbmRl
bnRlciBpbmRlbnQsIHN0ZDo6ZnVuY3Rpb248CiAKICAgICAgICAgICAgIGluZGVudC0tOwogICAg
ICAgICB9Ci0gICAgICAgIG91dC5wcmludChpbmRlbnQsICJ2bUVudHJ5RnJhbWU6ICIsIFJhd1Bv
aW50ZXIodm1FbnRyeUZyYW1lKCkpLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KGluZGVudCwg
IkVudHJ5RnJhbWU6ICIsIFJhd1BvaW50ZXIobV9lbnRyeUZyYW1lKSwgIlxuIik7CiAgICAgICAg
IGluZGVudC0tOwogICAgIH0KICAgICBvdXQucHJpbnQoaW5kZW50LCAifVxuIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5kZXggOGFk
MDk0MC4uNzA3OWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAg
ICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAgc2l6
ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsgfQotICAgICAgICBib29sIGNhbGxlcklzVk1FbnRyeUZyYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc1ZNRW50cnlGcmFtZTsgfQorICAgICAgICBib29s
IGNhbGxlcklzRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNFbnRyeUZyYW1l
OyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxlckZyYW1lOyB9CiAgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsZWU7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jazsgfQpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgQ2xvbmVk
QXJndW1lbnRzKiBjcmVhdGVBcmd1bWVudHMoKTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2bUVu
dHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX1ZNRW50cnlGcmFtZTsgfQogICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CiAgICAgICAg
IAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBJbmRlbnRlciA9IEluZGVudGVyKCkp
IGNvbnN0OwpAQCAtMTE0LDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICNlbmRpZgogICAgICAgICBDYWxsRnJhbWUqIG1fY2Fs
bEZyYW1lOwotICAgICAgICBWTUVudHJ5RnJhbWUqIG1fVk1FbnRyeUZyYW1lOwotICAgICAgICBW
TUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICBFbnRyeUZyYW1lKiBt
X2VudHJ5RnJhbWU7CisgICAgICAgIEVudHJ5RnJhbWUqIG1fQ2FsbGVyRW50cnlGcmFtZTsKICAg
ICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwogICAgICAgICBDYWxsZWVCaXRzIG1fY2Fs
bGVlOwogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtMTIzLDcgKzEyMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAg
ICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIFdhc206OkluZGV4T3JO
YW1lIG1fd2FzbUZ1bmN0aW9uSW5kZXhPck5hbWU7Ci0gICAgICAgIGJvb2wgbV9jYWxsZXJJc1ZN
RW50cnlGcmFtZSA6IDE7CisgICAgICAgIGJvb2wgbV9jYWxsZXJJc0VudHJ5RnJhbWUgOiAxOwog
ICAgICAgICBib29sIG1faXNXYXNtRnJhbWUgOiAxOwogCiAgICAgICAgIGZyaWVuZCBjbGFzcyBT
dGFja1Zpc2l0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvVk1FbnRyeVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZN
RW50cnlSZWNvcmQuaAppbmRleCBmMzZjMmJlLi4wMTAzYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjks
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFZNRW50cnlGcmFtZTsKK3N0cnVjdCBF
bnRyeUZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKQEAgLTQwLDcgKzQwLDcg
QEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgICAqLwogICAgIFZNKiBtX3ZtOwogICAgIEV4
ZWNTdGF0ZSogbV9wcmV2VG9wQ2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFtZSogbV9wcmV2VG9w
Vk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fcHJldlRvcEVudHJ5RnJhbWU7CiAKICNp
ZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAg
ICBpbnRwdHJfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW05VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTXTsKQEAgLTQ5LDIwICs0OSwyMCBAQCBzdHJ1Y3QgVk1FbnRyeVJlY29yZCB7
CiAgICAgRXhlY1N0YXRlKiBwcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wQ2Fs
bEZyYW1lOyB9CiAgICAgU1VQUFJFU1NfQVNBTiBFeGVjU3RhdGUqIHVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BDYWxsRnJhbWU7IH0KIAotICAgIFZNRW50cnlGcmFt
ZSogcHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcFZNRW50cnlGcmFtZTsg
fQotICAgIFNVUFBSRVNTX0FTQU4gVk1FbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wVk1FbnRyeUZy
YW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wVk1FbnRyeUZyYW1lOyB9CisgICAgRW50cnlGcmFtZSog
cHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BFbnRyeUZyYW1lOyB9CisgICAg
U1VQUFJFU1NfQVNBTiBFbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wRW50cnlGcmFtZSgpIHsgcmV0
dXJuIG1fcHJldlRvcEVudHJ5RnJhbWU7IH0KIH07CiAKLWV4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChWTUVudHJ5RnJhbWUqKTsKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChFbnRyeUZyYW1lKik7CiAKLXN0cnVjdCBWTUVudHJ5RnJhbWUgewor
c3RydWN0IEVudHJ5RnJhbWUgewogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9DQUxMRUVf
U0FWRVNfUkVHSVNURVJTID4gMAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgdm1FbnRyeVJlY29yZE9m
ZnNldCgpCiAgICAgewotICAgICAgICBWTUVudHJ5RnJhbWUqIGZha2VWTUVudHJ5RnJhbWUgPSBy
ZWludGVycHJldF9jYXN0PFZNRW50cnlGcmFtZSo+KDB4MTAwMCk7Ci0gICAgICAgIFZNRW50cnlS
ZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZVZNRW50cnlGcmFtZSk7CisgICAgICAg
IEVudHJ5RnJhbWUqIGZha2VFbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxFbnRyeUZyYW1l
Kj4oMHgxMDAwKTsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29y
ZChmYWtlRW50cnlGcmFtZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGZha2VWTUVudHJ5RnJhbWUpKTsKKyAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYWtlRW50
cnlGcmFtZSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlck9mZnNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKaW5kZXggOGQzMWY3YS4uMzcxOWJhNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoVk0mIHZtLCBHUFJSZWcgc2NyYXRjaDAs
IEdQUlJlZyBzY3JhdGNoMSwKIH0KICNlbmRpZgogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSkK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqKiB0b3BFbnRyeUZyYW1lKQogewogI2lmIE5VTUJF
Ul9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7
CkBAIC02MDUsOCArNjA1LDggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0KICAgICB9CiAgICAg
QVNTRVJUKHNjcmF0Y2ggIT0gSW52YWxpZEdQUlJlZyk7CiAKLSAgICBsb2FkUHRyKCZ2bS50b3BW
TUVudHJ5RnJhbWUsIHNjcmF0Y2gpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZy
YW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBs
b2FkUHRyKHRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
RW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7
CiAKICAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMgZXhjZXB0IGZvciB0aGUgc2NyYXRj
aC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CkBA
IC03NzgsNDEgKzc3OCw0MSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1
ZVRvQm9vbGVhbihWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZQogfQogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dChH
UFJSZWcgZHN0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KEdQUlJlZyBkc3QpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6
dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0
VExTKCkpIHsKICAgICAgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRMU09mZnNldEZvcktleShXVEZf
V0FTTV9DT05URVhUX0tFWSksIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
LSAgICBtb3ZlKFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRQb2lu
dGVyLCBkc3QpOworICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNt
Q29udGV4dEluc3RhbmNlUG9pbnRlciwgZHN0KTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnN0b3JlV2FzbUNvbnRleHQoR1BSUmVnIHNyYykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYykKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNf
SklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKFdh
c206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBzdG9yZVRvVExTUHRyKHNyYywg
ZmFzdFRMU09mZnNldEZvcktleShXVEZfV0FTTV9DT05URVhUX0tFWSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkud2FzbUNvbnRleHRQb2ludGVyKTsKKyAgICBtb3ZlKHNyYywgV2FzbTo6UGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiB9CiAKLWJv
b2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lz
dGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAg
aWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6
OnVzZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIGxvYWRGcm9tVExTUHRyTmVlZHNNYWNyb1Nj
cmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEFz
c2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIo
KQorYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYg
KFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIHN0b3JlVG9UTFNQdHJOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CkBAIC04NzUsMTAgKzg3NSwx
MCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKFZNJiB2bSwgVl9EZWJ1Z09wZXJh
dGlvbl9FUFAgZnVuY3Rpb24sIHZvaWQqIGFyZwogICAgIH0KIH0KIAotdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNh
dmVzQnVmZmVyKQogewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
QnVmZmVyT2Zmc2V0KCkpLCBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBjYWxs
ZWVTYXZlc0J1ZmZlcik7CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2
ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVy
U2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhNjhjMzY5
Li5jYzcwYTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTM2MCwyOCArMzYwLDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSKQogICAgIHsKICNp
ZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHZtR1BSLCBWTTo6dG9wVk1FbnRyeUZyYW1lT2Zmc2V0KCkpLCB2bUdQUik7Ci0gICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZt
R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBWTTo6dG9wRW50cnlGcmFtZU9m
ZnNldCgpKSwgdm1HUFIpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwodm1HUFIpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHZt
R1BSKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0p
CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihF
bnRyeUZyYW1lKiogdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAg
ICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQ
UlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0
cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAgICAgICAgbG9hZFB0
cih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVTRURf
UEFSQU0odm0pOwogICAgICAgICBVTlVTRURfUEFSQU0odXNlZFJlZ2lzdGVycyk7CiAjZW5kaWYK
ICAgICB9CiAKLSAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcihWTSYpOworICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiopOwogCi0gICAgdm9pZCBjb3B5Q2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCisgICAgdm9pZCBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50
cnlGcmFtZSoqIHRvcEVudHJ5RnJhbWUsIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAg
ewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJS
ZWcgdGVtcDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoMCk7CkBAIC0zOTIsOCArMzkyLDgg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogCiAgICAgICAgIC8vIENv
cHkgc2F2ZWQgY2FsbGVlU2F2ZXMgb24gc3RhY2sgb3IgdW5zYXZlZCBjYWxsZWVTYXZlcyBpbiBy
ZWdpc3RlciB0byB2bSBjYWxsZWVTYXZlIGJ1ZmZlcgotICAgICAgICBsb2FkUHRyKCZ2bS50b3BW
TUVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVudHJ5
RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHRlbXAxKTsKKyAgICAg
ICAgbG9hZFB0cih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVt
cDEpOwogCiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZN
OjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOwpAQCAtNDAxLDEyICs0MDEsMTIgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25l
ZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBS
ZWdpc3RlckF0T2Zmc2V0IHZtRW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KHZtRW50cnkucmVnKCkpKQorICAgICAgICAg
ICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAg
ICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogY3VycmVudEZy
YW1lRW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmZpbmQodm1FbnRyeS5yZWcoKSk7CisgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxs
ZWVTYXZlcy0+ZmluZChlbnRyeS5yZWcoKSk7CiAKLSAgICAgICAgICAgIGlmICh2bUVudHJ5LnJl
ZygpLmlzR1BSKCkpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKSB7CiAg
ICAgICAgICAgICAgICAgR1BSUmVnIHJlZ1RvU3RvcmU7CiAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRGcmFtZUVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgY2FsbGVlU2F2
ZSBmcm9tIHN0YWNrIGludG8gdGVtcCByZWdpc3RlcgpAQCAtNDE0LDkgKzQxNCw5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBjdXJyZW50RnJhbWVFbnRyeS0+b2Zmc2V0KCkpLCByZWdUb1N0b3JlKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBzdG9yZSBjYWxsZWUg
c2F2ZSBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICByZWdUb1N0b3JlID0gdm1FbnRyeS5y
ZWcoKS5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnVG9TdG9yZSA9IGVudHJ5LnJlZygp
LmdwcigpOwogCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0
ZW1wMSwgdm1FbnRyeS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1Rv
U3RvcmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvU3RvcmU7CiAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnRGcmFtZUVudHJ5KSB7CkBAIC00MjUsOSArNDI1LDkgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIGZwUmVnVG9TdG9yZSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3Qgc3RvcmUgY2FsbGVl
IHNhdmUgZGlyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gdm1FbnRy
eS5yZWcoKS5mcHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gZW50cnku
cmVnKCkuZnByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1RvU3RvcmUs
IEFkZHJlc3ModGVtcDEsIHZtRW50cnkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBzdG9y
ZURvdWJsZShmcFJlZ1RvU3RvcmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBAIC0xNjQ0LDE0ICsxNjQ0LDE0IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHZvaWQgbG9hZFdh
c21Db250ZXh0KEdQUlJlZyBkc3QpOwotICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dChHUFJSZWcg
c3JjKTsKLSAgICBzdGF0aWMgYm9vbCBsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJl
Z2lzdGVyKCk7Ci0gICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3Jh
dGNoUmVnaXN0ZXIoKTsKKyAgICB2b2lkIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBk
c3QpOworICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBzcmMpOworICAg
IHN0YXRpYyBib29sIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdp
c3RlcigpOworICAgIHN0YXRpYyBib29sIHN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2Fs
bGVlU2F2ZXNCdWZmZXIpOworICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CiAKICAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9iYXNlbGluZUNvZGVCbG9jazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA1ZWNmM2E2Li43Yzk0Y2JhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBKSVQ6OmVtaXRF
bnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFk
ZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1l
bnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRF
eGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CiAKLSAg
ICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3Rl
clRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQpOwog
ICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQ
UikpOwpAQCAtODg1LDcgKzg4NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAg
IC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBh
cmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KIApAQCAtOTA1
LDcgKzkwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkK
ICAgICAgICAgbV9leGNlcHRpb25IYW5kbGVyID0gbGFiZWwoKTsKICAgICAgICAgbV9leGNlcHRp
b25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAg
ICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRo
ZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggY2EyZGI4Yy4uZjIwMThjYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYs
OCArNTYsOCBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFt
ZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgCiAgICAgRXhlY1N0YXRlKiBzaGFkb3dD
aGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVud2lu
ZEZyb21DYWxsZXJGcmFtZSkgewotICAgICAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9
IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgRW50cnlG
cmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgICAgICBzaGFkb3dD
aGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwog
ICAgIH0KICAgICB2bS0+c2hhZG93Q2hpY2tlbigpLmxvZygqdm0sIHNoYWRvd0NoaWNrZW5Ub3BG
cmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aHJvd1BhY2tldCgpKTsKICAgICAKQEAgLTg0
LDcgKzg0LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJh
bWUsIFVud2luZFN0YXJ0IHVud2luZFN0YXJ0KQogICAgIH0gZWxzZQogICAgICAgICBjYXRjaFJv
dXRpbmUgPSBMTEludDo6Z2V0Q29kZVB0cihoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbik7CiAgICAg
Ci0gICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgQVNTRVJUKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2
bS0+dG9wRW50cnlGcmFtZSkpOwogCiAgICAgdm0tPmNhbGxGcmFtZUZvckNhdGNoID0gY2FsbEZy
YW1lOwogICAgIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyA9IGNhdGNoUm91dGluZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDliNDE2NmEuLmNiNjRi
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNDU1LDcg
KzQ1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BF
bnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UaHJvdywgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KCkpOwpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIHJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgcmVzdG9yZUNh
bGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlG
cmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2Fk
NjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJh
bWVSZWdpc3Rlcik7CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xv
b3BfaGludChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGkK
ICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9t
RnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVu
dHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1f
Ynl0ZWNvZGVPZmZzZXQpOwogICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hU
ZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBhMTIyOGQzLi42MDdhNDg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03NjUsNyArNzY1LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBj
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50
cnlGcmFtZSk7CiAgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
cmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgp
KTsKQEAgLTgyNiw3ICs4MjYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fc3RyaW5nKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0o
KSk7CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSks
IHJlZ1QzKTsKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUgZm9y
IHRoZSBoYW5kbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggYzA0Y2RjNC4uZTYzOTkzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xMDMsMTQgKzEwMywxNCBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqCiAgICAgVk0qIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4
ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVj
LT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7CiAgICAg
ICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZN
RW50cnlGcmFtZTsKKyAgICAgICAgZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOwogICAg
IH0KIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1F
bnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgdGhyb3dTdGFj
a092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKIH0KIApAQCAtMTIwLDEwICsxMjAs
MTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93RGl2aWRlRXJyb3IoRXhlY1N0
YXRlKiBleGVjKQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4
ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVj
LT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldp
dGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxs
ZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0
aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1l
LCBBU0NJSUxpdGVyYWwoIkRpdmlzaW9uIGJ5IHplcm8gb3IgZGl2aXNpb24gb3ZlcmZsb3cuIikp
KTsKIH0KQEAgLTEzMywxMCArMTMzLDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25U
aHJvd091dE9mQm91bmRzQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7
CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlG
cmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOwor
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1l
KTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1F
bnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5k
bGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFt
ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1lLCBBU0NJSUxpdGVyYWwoIk91dC1vZi1i
b3VuZHMgYWNjZXNzLiIpKSk7CiB9CkBAIC0xNDksOSArMTQ5LDkgQEAgaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIGlu
dDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4
ZWMsICp2bSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAwKSB7Ci0g
ICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsK
LSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50
cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNl
cih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1l
KTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsK
ICAgICB9CiAKQEAgLTE2NSw5ICsxNjUsOSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29uc3RydWN0QXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICBpbnQzMl90IG1p
c3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAqdm0s
IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAwKSB7Ci0gICAg
ICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAg
ICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlG
cmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUqIGVudHJ5
RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsK
ICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApp
bmRleCA5MmU0MmIxLi5lNDM5NjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCkBAIC02Niw3ICs2Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZtKQogICAgIC8v
IGV2ZW4gdGhvdWdoIHdlIHdvbid0IHVzZSBpdC4KICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAKLSAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwor
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0t
PnRvcEVudHJ5RnJhbWUpOwogCiAgICAgaml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29r
dXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMzYyLDcgKzM2
Miw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZN
KiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBrCiAgICAgLy8gSGFuZGxlIGFuIGV4Y2VwdGlv
bgogICAgIGV4Y2VwdGlvbkhhbmRsZXIubGluaygmaml0KTsKIAotICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFt
ZSk7CiAgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlciwg
JnZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZTlhMGQyYS4uMzUwMzVkYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKQEAgLTE4NzIsOCArMTg3Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25QcmludFN0ZEVycihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHByaW50CiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBWTUVudHJ5RnJhbWUqIHRv
cFZNRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBFeGVjU3RhdGUqIGNhbGxl
ckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZy
YW1lKiB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKKyAgICBFeGVjU3RhdGUqIGNh
bGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgaWYgKGNh
bGxlckZyYW1lKQogICAgICAgICB2bS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFtZShjYWxsZXJG
cmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDczNWU3
MWIuLjM2NjRlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcApAQCAtNDgxLDEzICs0ODEsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3Rh
Y2tfY2hlY2spCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZy
YW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5
RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7
CiAgICAgICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0u
dG9wVk1FbnRyeUZyYW1lOworICAgICAgICB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFt
ZTsKICAgICB9Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKCZ2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
V2l0aFJlc3RvcmUgdHJhY2VyKCZ2bSwgdG9wRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogCiAg
ICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50VGh1bmtzLmNwcAppbmRleCAzNmY2NDg2Li41Mjk2N2UzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyArMTE2
LDcgQEAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvTmF0aXZlKHZvaWQqIGV4ZWN1dGFibGVBZGRy
ZXNzLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAotZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKFZN
RW50cnlGcmFtZSogZW50cnlGcmFtZSkKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29yZCogdm1FbnRy
eVJlY29yZChFbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQogewogICAgIC8vIFRoZSBDIExvb3AgZG9l
c24ndCBoYXZlIGFueSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMsIHNvIHRoZSBWTUVudHJ5UmVjb3Jk
IGlzIGFsbG9jYXRlZCBhdCB0aGUgYmFzZSBvZiB0aGUgZnJhbWUuCiAgICAgaW50cHRyX3Qgc3Rh
Y2tBbGlnbm1lbnQgPSBzdGFja0FsaWdubWVudEJ5dGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggNWRkZTY2NC4u
N2JmMWVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQpAQCAtNjU5LDcgKzY1OSw3IEBAIGVuZAogCiBtYWNybyBjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLCB0ZW1wKQogICAgIGlm
IEFSTTY0IG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCi0gICAgICAgIGxvYWRwIFZNOjp0b3BWTUVu
dHJ5RnJhbWVbdm1dLCB0ZW1wCisgICAgICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwg
dGVtcAogICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAsIHRlbXApCiAgICAgICAgIGxlYXAgVk1F
bnRyeVJlY29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlclt0ZW1wXSwgdGVtcAogICAgICAg
ICBpZiBBUk02NApAQCAtNzAxLDcgKzcwMSw3IEBAIGVuZAogCiBtYWNybyByZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAgICAgaWYg
QVJNNjQgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRvcFZNRW50
cnlGcmFtZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1dLCB0
ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBWTUVu
dHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAgICAgICAg
IGlmIEFSTTY0CkBAIC0xMTQ0LDcgKzExNDQsNyBAQCBpZiBub3QgQ19MT09QCiAgICAgICAgIHN0
b3JlcCBhZGRyZXNzLCBWTTo6bV9sYXN0U3RhY2tUb3Bbdm1dCiAgICAgICAgIHJldAogICAgIAot
ICAgICMgVk1FbnRyeVJlY29yZCogdm1FbnRyeVJlY29yZChjb25zdCBWTUVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUpCisgICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0IEVudHJ5
RnJhbWUqIGVudHJ5RnJhbWUpCiAgICAgZ2xvYmFsIF92bUVudHJ5UmVjb3JkCiAgICAgX3ZtRW50
cnlSZWNvcmQ6CiAgICAgICAgIGlmIFg4NiBvciBYODZfV0lOCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4
IDExNGE5NzguLjMzMDkwZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMjUsOCArMTI1LDggQEAg
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29yZDo6
bV92bVtzcF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9yZXAg
dDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBWTTo6
dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1f
cHJldlRvcFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0s
IHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3Nw
XQogCiAgICAgIyBBbGlnbiBzdGFjayBwb2ludGVyCiAgICAgaWYgWDg2X1dJTiBvciBNSVBTCkBA
IC0xODksOCArMTg5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJl
dlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9wQ2FsbEZyYW1lW3Q1
XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0sIHQ0
Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAgIGxvYWRwIFZNRW50
cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0b3JlcCB0NCwgVk06
OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNmciwgQ2Fs
bGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTI0MSw3ICsyNDEsNyBAQCBtYWNybyBkb1ZNRW50
cnkobWFrZUNhbGwpCiAKIC5jb3B5QXJnc0RvbmU6CiAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2Fs
bEZyYW1lW3ZtXQotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAg
c3RvcmVwIGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBtYWtlQ2FsbChlbnRyeSwg
dDMsIHQ0KQogCkBAIC0yNTUsOCArMjU1LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQog
ICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlS
ZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9w
Q2FsbEZyYW1lW3Q1XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlG
cmFtZVtzcF0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAg
IGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0
b3JlcCB0NCwgVk06OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBz
dWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTMyNCw4ICszMjQsOCBAQCBf
aGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtz
cF0sIHQzCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwg
dDUKICAgICBzdG9yZXAgdDUsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAgVk1FbnRy
eVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDUKLSAgICBzdG9yZXAgdDUsIFZN
Ojp0b3BWTUVudHJ5RnJhbWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
RW50cnlGcmFtZVtzcF0sIHQ1CisgICAgc3RvcmVwIHQ1LCBWTTo6dG9wRW50cnlGcmFtZVt0M10K
IAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXpl
LCB0MwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQppbmRleCBlMzdhMGY2Li45NTkwOTMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMTI5
LDggKzEyOSw4IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBzdG9yZXAgdm0sIFZN
RW50cnlSZWNvcmQ6Om1fdm1bc3BdCiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2bV0sIHQ0
CiAgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3BdCi0g
ICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTUVu
dHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdCisgICAgbG9hZHAgVk06OnRvcEVu
dHJ5RnJhbWVbdm1dLCB0NAorICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
RW50cnlGcmFtZVtzcF0KIAogICAgIGxvYWRpIFByb3RvQ2FsbEZyYW1lOjpwYWRkZWRBcmdDb3Vu
dFtwcm90b0NhbGxGcmFtZV0sIHQ0CiAgICAgYWRkcCBDYWxsRnJhbWVIZWFkZXJTbG90cywgdDQs
IHQ0CkBAIC0xNzEsOCArMTcxLDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxv
YWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bdDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6
Om1fcHJldlRvcENhbGxGcmFtZVt0NF0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRyYVRl
bXBSZWcsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJhVGVt
cFJlZywgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjpt
X3ByZXZUb3BFbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJhVGVt
cFJlZywgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0
ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjIwLDcgKzIyMCw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtl
Q2FsbCkKICAgICBlbHNlCiAgICAgICAgIHN0b3JlcCBzcCwgVk06OnRvcENhbGxGcmFtZVt2bV0K
ICAgICBlbmQKLSAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIHN0
b3JlcCBjZnIsIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXQogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoZXh0cmFUZW1wUmVnLCAweGJhZDBkYzAyKQogCkBAIC0yMzYsOCArMjM2LDggQEAg
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1b
dDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0NF0s
IHQyCiAgICAgc3RvcmVwIHQyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQotICAgIGxvYWRwIFZNRW50
cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0NF0sIHQyCi0gICAgc3RvcmVwIHQyLCBW
TTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRv
cEVudHJ5RnJhbWVbdDRdLCB0MgorICAgIHN0b3JlcCB0MiwgVk06OnRvcEVudHJ5RnJhbWVbdm1d
CiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjc2LDcg
KzI3Niw2IEBAIG1hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1wKQogICAgIGVu
ZAogZW5kCiAKLQogX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIENhbGxlZVtj
ZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwpAQCAtMjkxLDggKzI5MCw4IEBA
IF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3Zt
W3QyXSwgdDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbdDJd
LCBleHRyYVRlbXBSZWcKICAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wQ2FsbEZyYW1l
W3QzXQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0Ml0s
IGV4dHJhVGVtcFJlZwotICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BWTUVudHJ5RnJh
bWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0Ml0s
IGV4dHJhVGVtcFJlZworICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BFbnRyeUZyYW1l
W3QzXQogCiAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHNwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYTVhNTNjNi4uMmEyYmJk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQwNiw3
ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICAg
ICAgT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSA9IGZhbHNlOwogCiAgICAgaWYgKCFPcHRpb25z
Ojp1c2VXZWJBc3NlbWJseSgpKQotICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RU
TFMoKSA9IGZhbHNlOworICAgICAgICBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQo
KSA9IGZhbHNlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKQogICAg
ICAgICB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDNjZWM1NTIuLjg0NzVjMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ2Nyw4ICs0NjcsNyBAQCB0eXBlZGVmIGNv
bnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZhc3RN
ZW1vcnlSZWR6b25lUGFnZXMsIDEyOCwgTm9ybWFsLCAiV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmll
cyB1c2UgNEdpQiB2aXJ0dWFsIGFsbG9jYXRpb25zLCBwbHVzIGEgcmVkem9uZSAoY291bnRlZCBh
cyBtdWx0aXBsZSBvZiA2NEtpQiBXZWJBc3NlbWJseSBwYWdlcykgYXQgdGhlIGVuZCB0byBjYXRj
aCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZCAzMi1iaXQsIGFueXRoaW5nIGJleW9uZCB0
aGUgcmVkem9uZSBpcyBleHBsaWNpdGx5IGJvdW5kcy1jaGVja2VkIikgXAogICAgIHYoYm9vbCwg
Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9yeSBmb3Igd2FzbS4i
KSBcCiAgICAgdih1bnNpZ25lZCwgbWF4TnVtV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMsIDQsIE5v
cm1hbCwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0cnVl
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwg
c3RvcmFnZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikgXAotICAgIHYo
Ym9vbCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlIChh
bmQgZmFzdCBUTFMgaXMgZW5hYmxlZCksIHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0IFRM
Uy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAorICAgIHYoYm9v
bCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3
aWxsIHN0b3JlIGNvbnRleHQgaW4gZmFzdCBUTFMuIElmIGZhbHNlLCB3ZSB3aWxsIHBpbiBpdCB0
byBhIHJlZ2lzdGVyLiIpIFwKICAgICB2KGJvb2wsIHVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRv
SlNDYWxscywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgQ2FsbExpbmtJbmZv
IHRvIGlubGluZSBjYWNoZSBXYXNtIHRvIEpTIGNhbGxzLiIpIFwKICAgICB2KGJvb2wsIHVzZU9i
amVjdFJlc3RTcHJlYWQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZW5hYmxlIE9i
amVjdCBSZXN0L1NwcmVhZCBmZWF0dXJlLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxsb2Nh
dGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5v
cm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9u
IHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4IGE0
YmU5NWIuLjNiY2Y2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBGcmFt
ZVdhbGtlcihWTSYgdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBjb25zdCBBYnN0cmFjdExvY2tl
ciYgY29kZUJsb2NrU2V0TG9ja2VyLCBjb25zdCBBYnN0cmFjdExvY2tlciYgbWFjaGluZVRocmVh
ZHNMb2NrZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX2NhbGxGcmFtZShjYWxs
RnJhbWUpCi0gICAgICAgICwgbV92bUVudHJ5RnJhbWUodm0udG9wVk1FbnRyeUZyYW1lKQorICAg
ICAgICAsIG1fZW50cnlGcmFtZSh2bS50b3BFbnRyeUZyYW1lKQogICAgICAgICAsIG1fY29kZUJs
b2NrU2V0TG9ja2VyKGNvZGVCbG9ja1NldExvY2tlcikKICAgICAgICAgLCBtX21hY2hpbmVUaHJl
YWRzTG9ja2VyKG1hY2hpbmVUaHJlYWRzTG9ja2VyKQogICAgIHsKQEAgLTEzMCw3ICsxMzAsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgU1VQUFJFU1NfQVNBTgogICAgIHZvaWQgYWR2YW5jZVRvUGFyZW50
RnJhbWUoKQogICAgIHsKLSAgICAgICAgbV9jYWxsRnJhbWUgPSBtX2NhbGxGcmFtZS0+dW5zYWZl
Q2FsbGVyRnJhbWUobV92bUVudHJ5RnJhbWUpOworICAgICAgICBtX2NhbGxGcmFtZSA9IG1fY2Fs
bEZyYW1lLT51bnNhZmVDYWxsZXJGcmFtZShtX2VudHJ5RnJhbWUpOwogICAgIH0KIAogICAgIGJv
b2wgaXNBdFRvcCgpIGNvbnN0CkBAIC0xODgsNyArMTg4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAg
Vk0mIG1fdm07CiAgICAgRXhlY1N0YXRlKiBtX2NhbGxGcmFtZTsKLSAgICBWTUVudHJ5RnJhbWUq
IG1fdm1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fZW50cnlGcmFtZTsKICAgICBjb25z
dCBBYnN0cmFjdExvY2tlciYgbV9jb2RlQmxvY2tTZXRMb2NrZXI7CiAgICAgY29uc3QgQWJzdHJh
Y3RMb2NrZXImIG1fbWFjaGluZVRocmVhZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxpbmdPdXQg
eyBmYWxzZSB9OwpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJv
Y2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgLy8gV2UgcmV1c2Ug
TExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0byBjaGVj
ayBmb3IgYm90aCBqaXQgdHlwZXMuCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhbHNv
IGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZlbiB0
aG91Z2gKICAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUgcmVhc29u
IHRoYXQgdGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZHIGZyYW1l
LAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0
IGEgVk1FbnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAgICAgICAg
ICAvLyBhbmQgd2UgZW5kIHVwIGhhdmluZyB0byB1bndpbmQgcGFzdCBhbiBFbnRyeUZyYW1lLCB3
ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExM
SW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0
IHRoaXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5jcHAKaW5kZXggMDZlOTMwMy4uNGM2NWQ2MiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDEzIEBAIFRo
cm93U2NvcGU6On5UaHJvd1Njb3BlKCkKIAogICAgIGJvb2wgd2lsbEJlSGFuZGxlQnlMTEludE9y
SklUID0gZmFsc2U7CiAgICAgdm9pZCogcHJldmlvdXNTY29wZSA9IG1fcHJldmlvdXNTY29wZTsK
LSAgICB2b2lkKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKKyAgICB2
b2lkKiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOwogCi0gICAgLy8gSWYgdGhl
IHRvcFZNRW50cnlGcmFtZSB3YXMgcHVzaGVkIG9uIHRoZSBzdGFjayBhZnRlciB0aGUgcHJldmlv
dXNTY29wZSB3YXMgaW5zdGFudGlhdGVkLAorICAgIC8vIElmIHRoZSB0b3BFbnRyeUZyYW1lIHdh
cyBwdXNoZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBpbnN0YW50
aWF0ZWQsCiAgICAgLy8gdGhlbiB0aGlzIHRocm93U2NvcGUgd2lsbCBiZSByZXR1cm5pbmcgdG8g
TExJTlQgb3IgSklUIGNvZGUgdGhhdCBhbHdheXMgZG8gYW4gZXhjZXB0aW9uCiAgICAgLy8gY2hl
Y2suIEluIHRoYXQgY2FzZSwgc2tpcCB0aGUgc2ltdWxhdGVkIHRocm93IGJlY2F1c2UgdGhlIExM
SW50IGFuZCBKSVQgd2lsbCBiZQogICAgIC8vIGNoZWNraW5nIGZvciB0aGUgZXhjZXB0aW9uIHRo
ZWlyIG93biB3YXkgaW5zdGVhZCBvZiBjYWxsaW5nIFRocm93U2NvcGU6OmV4Y2VwdGlvbigpLgot
ICAgIGlmICh0b3BWTUVudHJ5RnJhbWUgJiYgcHJldmlvdXNTY29wZSA+IHRvcFZNRW50cnlGcmFt
ZSkKKyAgICBpZiAodG9wRW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wRW50cnlGcmFt
ZSkKICAgICAgICAgd2lsbEJlSGFuZGxlQnlMTEludE9ySklUID0gdHJ1ZTsKICAgICAKICAgICBp
ZiAoIXdpbGxCZUhhbmRsZUJ5TExJbnRPckpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAppbmRleCAxODFlM2I3Li4zZWU1MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogI2VuZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0
YSgwKQotICAgICwgdG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCisgICAgLCB0b3BFbnRyeUZyYW1l
KG51bGxwdHIpCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQogICAg
ICwgcHJvbWlzZURlZmVycmVkVGltZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRU
aW1lcj4oKnRoaXMpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVs
dCA/IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkgOiBuZXcgQXRvbWljU3Ry
aW5nVGFibGUpCkBAIC0zNjgsNyArMzY4LDcgQEAgVk06On5WTSgpCiAgICAgcHJvbWlzZURlZmVy
cmVkVGltZXItPnN0b3BSdW5uaW5nVGFza3MoKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgaWYgKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSkKLSAgICAgICAgV2FzbTo6ZW5z
dXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JWTSgqdGhpcyk7CisgICAgICAgIFdhc206OmVu
c3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yQ29udGV4dCh3YXNtQ29udGV4dCk7CiAjZW5k
aWYKICAgICBpZiAoVU5MSUtFTFkobV93YXRjaGRvZykpCiAgICAgICAgIG1fd2F0Y2hkb2ctPndp
bGxEZXN0cm95Vk0odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5NTU4
NTk0Li45Mjc3MTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU1LDYgKzU1
LDcgQEAKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJW
TUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIldhc21Db250
ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRl
ckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgpAQCAtMzI5
LDE0ICszMzAsMTMgQEAgcHVibGljOgogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnRE
YXRhKiBjbGllbnREYXRhOwotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOworICAg
IEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWU7CiAgICAgLy8gTk9URTogV2hlbiB0aHJvd2luZyBh
biBleGNlcHRpb24gd2hpbGUgcm9sbGluZyBiYWNrIHRoZSBjYWxsIGZyYW1lLCB0aGlzIG1heSBi
ZSBlcXVhbCB0bwotICAgIC8vIHRvcFZNRW50cnlGcmFtZS4KKyAgICAvLyB0b3BFbnRyeUZyYW1l
LgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHZvaWQqLCBiZWNhdXNlIGl0IG1pZ2h0
IG5vdCBwb2ludCB0byBhIENhbGxGcmFtZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNDQxCiAgICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWUgeyBu
dWxscHRyIH07Ci0gICAgLy8gRklYTUU6IFNhdmUgdGhpcyBzdGF0ZSBlbHNld2hlcmUgdG8gYWxs
b3cgUElDLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NzczCi0g
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBX
YXNtOjpDb250ZXh0IHdhc21Db250ZXh0OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVy
ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVj
dHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1
Y3R1cmU7CkBAIC01MDEsOSArNTAxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFZNLCB0YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHB0cmRpZmZfdCB0b3BWTUVudHJ5RnJhbWVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZm
X3QgdG9wRW50cnlGcmFtZU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFZNLCB0b3BWTUVudHJ5RnJhbWUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFZNLCB0b3BFbnRyeUZyYW1lKTsKICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91
c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9u
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCBkZWFh
NDQ5Li44NzNkMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNw
cApAQCAtODksNyArODksNyBAQCBpbmxpbmUgQ2FsbEZyYW1lKiBzYW5pdGl6ZWRUb3BDYWxsRnJh
bWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUpCiAgICAgcmV0dXJuIHRvcENhbGxGcmFtZTsKIH0K
IAotc3RhdGljIGJvb2wgaXNTYW5lRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSwgVk1FbnRyeUZyYW1lKiBlbnRyeUZyYW1lLCBTdGFja0JvdW5kcyBzdGFja0Jv
dW5kcykKK3N0YXRpYyBib29sIGlzU2FuZUZyYW1lKENhbGxGcmFtZSogZnJhbWUsIENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0YWNr
Qm91bmRzKQogewogICAgIGlmIChyZWludGVycHJldF9jYXN0PHZvaWQqPihmcmFtZSkgPj0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW50cnlGcmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTEyMSwxOCArMTIxLDE4IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3Bv
aW50cyhTaWduYWxDb250ZXh0JiBjb250ZXh0LCBTdGFja0JvdW5kcyBzdGFjCiAgICAgfQogCiAg
ICAgQ29kZUJsb2NrKiBmb3VuZENvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgVk1FbnRyeUZyYW1l
KiB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50
cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJhbWU7CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY2Fs
bGVlIHRvIHN0YXJ0IHdpdGguIFNvLCB1c2UgdGhlIGVuZCBvZiB0aGUgc3RhY2sgdG8ga2VlcCB0
aGUKICAgICAvLyBpc1NhbmVGcmFtZSgpIGNoZWNrZXIgYmVsb3cgaGFwcHkgZm9yIHRoZSBmaXJz
dCBpdGVyYXRpb24uIEl0IHdpbGwgc3RpbGwgY2hlY2sKICAgICAvLyB0byBlbnN1cmUgdGhhdCB0
aGUgYWRkcmVzcyBpcyBpbiB0aGUgc3RhY2tCb3VuZHMuCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVG
cmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4oc3RhY2tCb3VuZHMuZW5kKCkpOwog
Ci0gICAgaWYgKCF2bUVudHJ5RnJhbWUgfHwgIWNhbGxGcmFtZSkKKyAgICBpZiAoIWVudHJ5RnJh
bWUgfHwgIWNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOyAvLyBOb3QgcnVubmluZyBKUyBjb2Rl
LiBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICBkbyB7Ci0gICAg
ICAgIGlmICghaXNTYW5lRnJhbWUoY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgdm1FbnRyeUZyYW1l
LCBzdGFja0JvdW5kcykpCisgICAgICAgIGlmICghaXNTYW5lRnJhbWUoY2FsbEZyYW1lLCBjYWxs
ZWVGcmFtZSwgZW50cnlGcmFtZSwgc3RhY2tCb3VuZHMpKQogICAgICAgICAgICAgcmV0dXJuOyAv
LyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICAgICAgQ29kZUJs
b2NrKiBjYW5kaWRhdGVDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTQy
LDkgKzE0Miw5IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhTaWdu
YWxDb250ZXh0JiBjb250ZXh0LCBTdGFja0JvdW5kcyBzdGFjCiAgICAgICAgIH0KIAogICAgICAg
ICBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZTsKLSAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1l
LT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogCi0gICAgfSB3aGlsZSAoY2FsbEZyYW1lICYm
IHZtRW50cnlGcmFtZSk7CisgICAgfSB3aGlsZSAoY2FsbEZyYW1lICYmIGVudHJ5RnJhbWUpOwog
CiAgICAgaWYgKCFmb3VuZENvZGVCbG9jaykgewogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBqdXN0
IGVudGVyZWQgdGhlIGZyYW1lIGFuZCB0aGUgY29kZUJsb2NrIHBvaW50ZXIgaXMgbm90CkBAIC0x
ODEsMTcgKzE4MSwxNyBAQCB2b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFj
ayhMb2NrZXI8TG9jaz4mLCBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZQogCiAgICAgbV9uZWVkVG9J
bnZhbGlkYXRlZENvZGVCbG9ja3MgPSBmYWxzZTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRy
eUZyYW1lID0gdm0oKS50b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSA9IHZtKCkudG9wRW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHRvcENh
bGxGcmFtZTsKIAotICAgIGlmICghdm1FbnRyeUZyYW1lKQorICAgIGlmICghZW50cnlGcmFtZSkK
ICAgICAgICAgcmV0dXJuOyAvLyBOb3QgcnVubmluZyBKUyBjb2RlLiBOb3RoaW5nIHRvIGludmFs
aWRhdGUuCiAKICAgICB3aGlsZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgaWYgKGNvZGVCbG9jayAm
JiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAg
ICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMp
OwotICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFt
ZSk7CisgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFt
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKaW5kZXggYWQ3ZDYyMS4uYWY2Y2ZlOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNDksOCArNDksNiBA
QAogI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iu
aCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaXJ0
dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKQEAgLTE3
OCw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1Nf
Xyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1v
ZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50Kik7CisgICAgQjNJUkdlbmVy
YXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rp
b24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxh
dGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNt
RXhjZXB0aW9uKTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFy
Z3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC0yNDcsNyArMjQ1LDcgQEAgcHJp
dmF0ZToKIAogICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNP
ZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CiAKLSAgICB2b2lkIHJlc3RvcmVXYXNt
Q29udGV4dChQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgVmFsdWUqKTsKKyAgICB2b2lkIHJlc3Rv
cmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwog
ICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3Jt
YXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKIAogICAg
IE9yaWdpbiBvcmlnaW4oKTsKQEAgLTI2Nyw3ICsyNjUsNyBAQCBwcml2YXRlOgogICAgIEluc2Vy
dGlvblNldCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzOwogICAgIEdQUlJlZyBtX21lbW9yeUJh
c2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IElu
dmFsaWRHUFJSZWcgfTsKLSAgICBHUFJSZWcgbV93YXNtQ29udGV4dEdQUiB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJl
ZyB9OwogICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2UgfTsKIAogICAgIFZhbHVlKiBtX2lu
c3RhbmNlVmFsdWUgeyBudWxscHRyIH07IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93
IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4K
QEAgLTI5MSwzNyArMjg5LDM3IEBAIGludDMyX3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVy
UGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZzCiAgICAgcmV0dXJu
IG9mZnNldDsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHQoUHJv
Y2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVmFsdWUqIGFyZykKK3ZvaWQgQjNJUkdl
bmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNp
Y0Jsb2NrKiBibG9jaywgVmFsdWUqIGFyZykKIHsKLSAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRl
eHQoKSkgeworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7Ci0gICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0
b3JlV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCisgICAgICAgIGlmIChD
Q2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVn
aXN0ZXIoKSkKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1h
Y3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0
cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiAgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0Nh
bGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dChwYXJhbXNbMF0uZ3ByKCkpOwor
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2Ny
YXRjaChqaXQsIENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4
dEluc3RhbmNlKHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9i
YmVycyB3YXNtQ29udGV4dCByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVl
ZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBGSVhNRTogQmVjYXVz
ZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBh
bmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxs
ZXIgc2lkZS4KICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcg
dG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
Pihwcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOwogICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVj
dHM6Om5vbmUoKTsKICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgZWZmZWN0
cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBlZmZlY3RzOwotICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2Fz
bUNvbnRleHRHUFIpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldCht
X3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFu
Y2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKLSAgICBHUFJSZWcgd2FzbUNvbnRl
eHRHUFIgPSBtX3dhc21Db250ZXh0R1BSOworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNl
R1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtKSB7Ci0gICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4
dEdQUik7CisgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3Rh
bmNlR1BSKTsKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFs
RnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBj
b21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVy
VXApCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRp
b24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0
aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9tb2Rl
KG1vZGUpCiAgICAgLCBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCkBAIC0zMzks
OSArMzM3LDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICBtX21lbW9yeUJhc2VHUFIg
PSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwogICAgIG1fcHJvYy5waW5SZWdpc3Rlciht
X21lbW9yeUJhc2VHUFIpOwogCi0gICAgbV93YXNtQ29udGV4dEdQUiA9IHBpbm5lZFJlZ3Mud2Fz
bUNvbnRleHRQb2ludGVyOwotICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAg
ICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRHUFIpOworICAgIG1fd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7Cisg
ICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rl
cihtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogCiAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9k
ZTo6U2lnbmFsaW5nKSB7CiAgICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5zaXplUmVnaXN0ZXJz
WzBdLnNpemVPZmZzZXQpOwpAQCAtMzUwLDYgKzM0OCw5IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlCiAgICAgICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIp
OwogICAgIH0KIAorICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCisgICAgICAgIFRodW5rczo6
c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CisK
ICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVj
a0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7CiAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CkBAIC0zNjMsNiArMzY0LDE2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAgIH0pOworCisgICAgICAg
IHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxp
bmc6CisgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRv
bid0IGRvIGFuIGV4cGxpY2l0IGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNlIHRoZXkgY2FuIHJlbHkg
b24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIEZhdWx0
U2lnbmFsSGFuZGxlciBub25ldGhlbGVzcyBuZWVkcyB0aGUgdGh1bmsgdG8gZXhpc3Qgc28gdGhh
dCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFU
aHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJh
dG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUlu
UHJvbG9ndWUoJmNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2lu
KCksIG1fY3VycmVudEJsb2NrKTsKQEAgLTM3MywxMiArMzg0LDEyIEBAIEIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlCiAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVjazsK
ICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2lu
dGVyKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0Ojpt
YWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRl
eHQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNs
b2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBu
ZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgICAgICBpZiAoIUNvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRv
V2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMg
bm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUu
CiAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcg
dG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgICAgICAg
ICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOwogICAg
ICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVl
UmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7CisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hl
Y2stPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0YW5j
ZUdQUik7CiAgICAgICAgIH0KICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnMgPSAyOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKQEAgLTQwMSw3ICs0MTIsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2Vu
ZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVy
ZQogICAgICAgICAgICAgYm9vbCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKICAgICAgICAg
ICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNp
emUgPj0gbWluaW11bVBhcmVudENoZWNrU2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CiAKLSAg
ICAgICAgICAgIEdQUlJlZyBjb250ZXh0ID0gdXNlRmFzdFRMU0ZvckNvbnRleHQoKSA/IHBhcmFt
c1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRHUFI7CisgICAgICAgICAgICBHUFJSZWcgY29udGV4
dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gcGFyYW1zWzBdLmdwcigpIDogbV93
YXNtQ29udGV4dEluc3RhbmNlR1BSOwogCiAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFm
IGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMg
d2l0aGluCiAgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIg
d291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgpAQCAtNDExLDEwICs0MjIsMTAgQEAg
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSBwYXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9
IHBhcmFtcy5ncFNjcmF0Y2goMSk7CiAKLSAgICAgICAgICAgICAgICBpZiAodXNlRmFzdFRMU0Zv
ckNvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNl
KTsKIAotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
b250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4
dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1p
dCgpKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIGZwLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAgIGlm
IChVTkxJS0VMWShuZWVkVW5kZXJmbG93Q2hlY2spKQpAQCAtNDIzLDEwICs0MzQsMTAgQEAgQjNJ
UkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
UHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292
ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xl
dG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpKTsKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2Vz
SW5zdGFuY2VWYWx1ZSAmJiB1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7
CiAgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhl
IGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgotICAgICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIEND
YWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGNvbnRleHQpOworICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQs
IENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShj
b250ZXh0SW5zdGFuY2UpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAv
LyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0
byBiZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVs
eSBzYWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZl
bnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCiAgICAgICAgICAgICB9CkBAIC00MzgsNyArNDQ5
LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKIAogdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0
b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5
LCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7
Ci0gICAgcmVzdG9yZVdhc21Db250ZXh0KHByb2MsIGJsb2NrLCBpbnN0YW5jZSk7CisgICAgcmVz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKIAogICAgIGlm
ICghIW1lbW9yeSkgewogICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJl
Z3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAgLTQ1OCwxMiArNDY5LDEyIEBAIHZv
aWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVt
b3J5SW5mb3JtYXRpb24mIG1lbW9yCiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBw
aW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAg
Y29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwogICAgICAg
ICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKICAgICAgICAgICAgIEFTU0VSVCgh
c2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdl
IHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVs
YXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVS
ZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1v
cnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXpl
UmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSks
IGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVS
ZWdzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVS
ZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfSk7CkBAIC01NDEs
MjQgKzU1MiwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFy
dGlhbFJlc3VsdAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lv
blR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkgKENvbnRleHQqLCBpbnQzMl90KSA9IFtdIChDb250
ZXh0KiB3YXNtQ29udGV4dCwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7Ci0gICAgICAgIFZN
JiB2bSA9ICp3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHdhc21NZW1v
cnkgPSB3YXNtQ29udGV4dC0+bWVtb3J5KCk7Ci0KKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSko
SlNXZWJBc3NlbWJseUluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7CiAgICAgICAgIGlmIChk
ZWx0YSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgYm9vbCBzaG91bGRU
aHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSBmYWxzZTsKLSAgICAgICAgLy8gZ3JvdygpIGRvZXMg
bm90IHJlcXVpcmUgRXhlY1N0YXRlKiBpZiBpdCBkb2Vzbid0IHRocm93IGV4Y2VwdGlvbnMuCi0g
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG51bGxwdHI7Ci0gICAgICAgIFBhZ2VDb3VudCByZXN1
bHQgPSB3YXNtTWVtb3J5LT5ncm93KHZtLCBleGVjLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGVs
dGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwotICAgICAgICBzY29wZS5yZWxl
YXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+aW50ZXJuYWxNZW1v
cnkoKS5ncm93KFBhZ2VDb3VudChkZWx0YSkpOworICAgICAgICBpZiAoIWdyb3duKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5
OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6
Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CisgICAgICAgICAgICBjYXNlIE1lbW9y
eTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToKKyAgICAgICAgICAgIGNhc2Ug
TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5wYWdlQ291bnQoKTsKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7
CiAgICAgfTsKIAogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxW
YWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCkBAIC01NzIsMTMgKzU4MSwxMyBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9y
eShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUq
IG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2Fm
ZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSk7
CisgICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNl
VmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
Zldhc21NZW1vcnkoKSkpOwogCi0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3Rh
dGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4obnVsbHB0ciktPm1lbW9yeSgpLT5tZW1v
cnkoKS5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhp
cyBzaXplIik7Ci0gICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBz
YWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOwor
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHN0YXRpY19jYXN0PFdhc206Ok1lbW9y
eSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxp
ZXMgb24gdGhpcyBzaXplIik7CisgICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5
T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7
CiAgICAgCiAgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKLSAgICBzdGF0
aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMSA8PCBzaGlmdFZhbHVlLCAiVGhpcyBt
dXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgc3RhdGlj
X2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMg
bXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOwogICAgIFZhbHVl
KiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNo
ciwgb3JpZ2luKCksCiAgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKQEAgLTEwNjksMTQg
KzEwNzgsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBtX21heE51bUpTQ2Fs
bEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIAogICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNh
biBiZSBsaW5rZWQgaGVyZSwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwgYmVj
YXVzZSBhbGwgaW1wb3J0IHN0dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0aW9u
IHN0YXJ0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2Mgot
ICAgICAgICBWYWx1ZSogZnVuY3Rpb25JbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0
YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZJbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSoganNU
eXBlT2ZJbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQ4Wiwgb3JpZ2luKCksIGZ1bmN0aW9uSW1wb3J0LCBzYWZlQ2FzdDxpbnQzMl90PihK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSk7Ci0gICAgICAgIFZhbHVlKiBpc1dhc21DYWxs
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2lu
KCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKyAgICAgICAg
VmFsdWUqIHRhcmdldEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1
ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFy
Z2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFsdWUqIGlzV2FzbUNhbGwg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmln
aW4oKSwgdGFyZ2V0SW5zdGFuY2UsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogaXNXYXNt
QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgQmFzaWNCbG9jayogaXNKU0Jsb2Nr
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJCbG9j
ayA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24g
PSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVx
dWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNKU0Jsb2NrKSk7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6
QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2Nr
KSwgRnJlcXVlbnRlZEJsb2NrKGlzRW1iZWRkZXJCbG9jaykpOwogCiAgICAgICAgIFZhbHVlKiB3
YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2Ms
IGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAg
ICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTA5NywxNSAr
MTEwNSwxNSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIFVwc2lsb25WYWx1ZSog
d2FzbUNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlz
V2FzbUJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNt
Q2FsbFJlc3VsdCk7CiAgICAgICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIAotICAgICAgICAvLyBGSVhN
RTogTGV0cyByZW1vdmUgdGhpcyBpbmRpcmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmllbmRs
eSBJQworICAgICAgICAvLyBGSVhNRTogTGV0J3MgcmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24gYnkg
Y3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkgSUMKICAgICAgICAgLy8gZm9yIGNhbGxzIG91dCB0byBK
Uy4gVGhpcyBzaG91bGRuJ3QgYmUgdGhhdCBoYXJkIHRvIGRvLiBXZSBjb3VsZCBwcm9iYWJseQog
ICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIElDIHRvIGJlIG92ZXIgV2FzbTo6Q29udGV4dCouCiAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzNzUK
LSAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mQ29kZUJsb2NrKCkpKTsKLSAgICAgICAgVmFsdWUqIGp1bXBEZXN0aW5hdGlvbiA9
IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAgICBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY29kZUJsb2NrLCBzYWZlQ2FzdDxpbnQzMl90
PihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihmdW5j
dGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSoganNDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNKU0Jsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIFZhbHVlKiBjb2RlQmxvY2sgPSBpc0VtYmVk
ZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50
MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21Db2RlQmxvY2soKSkpOwor
ICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9uID0gaXNFbWJlZGRlckJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKKyAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLCBjb2RlQmxvY2ssIHNhZmVDYXN0PGludDMyX3Q+KENvZGVCbG9jazo6b2Zmc2V0
T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFs
dWUqIGVtYmVkZGVyQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2Fs
bChtX3Byb2MsIGlzRW1iZWRkZXJCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVy
blR5cGUpLAogICAgICAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsK
ICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7
CkBAIC0xMTE5LDggKzExMjcsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMy
X3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAg
ICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3By
KCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIFVwc2ls
b25WYWx1ZSoganNDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxw
dHIgOiBpc0pTQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IGpzQ2FsbFJlc3VsdCk7Ci0gICAgICAgIGlzSlNCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFVwc2lsb25W
YWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51
bGxwdHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlv
bik7CiAKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CiAKQEAgLTExMjks
NyArMTEzNyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICByZXN1bHQgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQ
aGksIHRvQjNUeXBlKHJldHVyblR5cGUpLCBvcmlnaW4oKSk7CiAgICAgICAgICAgICB3YXNtQ2Fs
bFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOwotICAgICAgICAgICAganNDYWxsUmVzdWx0
VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7CisgICAgICAgICAgICBlbWJlZGRlckNhbGxSZXN1bHRV
cHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBjYWxs
IGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBv
ciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCkBAIC0xMTY1LDE3ICsxMTczLDE3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBz
dGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFy
Z3Muc2l6ZSgpKSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
OwotICAgIEV4cHJlc3Npb25UeXBlIGpzRnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lvblR5
cGUgaW5zdGFuY2VzQnVmZmVyOwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25C
dWZmZXJTaXplOwogICAgIHsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLAotICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQz
Ml90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSkpOworICAgICAgICAg
ICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mV2FzbVRhYmxlKCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50
MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7Ci0gICAgICAg
IGpzRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgdGFi
bGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1bmN0
aW9ucygpKSk7CisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbTo6VGFi
bGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsKKyAgICAgICAgaW5zdGFuY2VzQnVmZmVyID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihX
YXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0
aW9uQnVmZmVyU2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0
PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAgICAg
ICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZTaXplKCkp
KTsKICAgICB9CiAKICAgICAvLyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlz
IHZhbGlkLgpAQCAtMTE5NSw2ICsxMjAzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
LCBvZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBp
bml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUlu
ZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KKyAgICAvLyBGSVhNRTogd2hlbiB3
ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1
c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NzIxMAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENhbGxhYmxl
RnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDMyX3QpLCAiTG9hZCBjb2Rl
Z2VuIGFzc3VtZXMgaTMyIik7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEludDMyLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oT0JK
RUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZUluZGV4KSkpOwogICAgIHsK
QEAgLTEyMjMsMTkgKzEyMzIsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICB7CiAg
ICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIE11bCwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KSwKLSAgICAg
ICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+KSkpOwotICAgICAgICBWYWx1ZSoganNPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQs
IG9yaWdpbigpLCBqc0Z1bmN0aW9uQnVmZmVyLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGNvbnN0
YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXYXNtOjpJbnN0YW5jZSopKSk7CisgICAgICAgIFZh
bHVlKiBuZXdDb250ZXh0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigp
LCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkpOwogCiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRl
eHRTd2l0Y2ggPSBtX3Byb2MuYWRkQmxvY2soKTsKIAotICAgICAgICBWYWx1ZSogbmV3Q29udGV4
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBqc09iamVjdCwgc2FmZUNhc3Q8
aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mSW5zdGFuY2UoKSkpOwot
ICAgICAgICBWYWx1ZSogaXNTYW1lQ29udGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAotICAgICAgICAgICAgbmV3Q29udGV4dCwg
aW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgVmFsdWUqIGlzU2FtZUNvbnRleHRJbnN0YW5jZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LAorICAgICAgICAgICAgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOwogICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJy
YW5jaCwgb3JpZ2luKCksCi0gICAgICAgICAgICBpc1NhbWVDb250ZXh0LCBGcmVxdWVudGVkQmxv
Y2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOworICAg
ICAgICAgICAgaXNTYW1lQ29udGV4dEluc3RhbmNlLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0
aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOwogCiAgICAgICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0xMjQzLDI2ICsxMjUwLDI2IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcyMTgxCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKICAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29udGV4dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0SW5zdGFuY2UsIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VW
YWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRl
eHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dCA9IHBh
cmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBw
YXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0g
cGFyYW1zWzFdLmdwcigpOwogICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBw
aW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAg
R1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAg
ICAgICAgQVNTRVJUKG5ld0NvbnRleHQgIT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dCwgQ29udGV4dDo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dCwgQ29udGV4
dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVdh
c21Db250ZXh0KG5ld0NvbnRleHQpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG5ld0NvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgICAgICAgICBBU1NFUlQobmV3
Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdD
b250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3
Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBBU1NFUlQoc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgQVNTRVJU
KHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0KTsKKyAgICAgICAgICAgIEFT
U0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKICAg
ICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJs
eU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBN
ZW1vcnkgc2l6ZS4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFz
ZU1lbW9yeSk7IC8vIFdhc21NZW1vcnk6OnZvaWQqLgorICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZT
aXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNt
OjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5
Ojp2b2lkKi4KICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKQEAg
LTEzMzksMTk0ICsxMzQ2LDYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3Rv
cjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3MKICAgICBkYXRhTG9n
TG4oKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1v
cnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCi17Ci0gICAgQ0NhbGxIZWxwZXJz
JiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKLQotICAgIGF1dG8g
cmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwotICAgIGppdC5l
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotCi0gICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNv
ZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEK
LSAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdp
dGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtl
ZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2Fs
bGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOwotICAg
IH0pOwotCi0gICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKTsKLSAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdz
LnRvU2F2ZShtb2RlKTsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCB0b1Nh
dmVTaXplID0gdG9TYXZlLm51bWJlck9mU2V0R1BScygpOwotICAgIC8vIFRoZXkgc2hvdWxkIGFs
bCBiZSBjYWxsZWUgc2F2ZXMuCi0gICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKLSAgICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09
IHRvU2F2ZVNpemUpOwotI2VuZGlmCi0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3Rl
cnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpG
cmFtZVBvaW50ZXJCYXNlZCk7Ci0gICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdp
c3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwotCi0gICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUg
PSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7Ci0gICAgdG90YWxGcmFt
ZVNpemUgKz0gV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwotICAg
IHRvdGFsRnJhbWVTaXplIC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICB1bnNpZ25l
ZCBudW1HUFJzID0gMDsKLSAgICB1bnNpZ25lZCBudW1GUFJzID0gMDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAg
IHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6STY0
OgotICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAg
dG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVtR1BSczsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgY2Fz
ZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXpl
ICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXpl
KTsKLSAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFt
ZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8g
V2Ugc2F2ZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5
IG9yIG5vdC4KLSAgICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBh
cyBhIHNjcmF0Y2guIFRoYXQgc2FpZCwKLSAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9n
cmFtcyB1c2UgbWVtb3J5LCBzbyBpdCdzIG5vdCByZWFsbHkKLSAgICAvLyB3b3J0aCBvcHRpbWl6
aW5nIGZvciB0aGUgY2FzZSB0aGF0IHRoZXkgZG9uJ3QuCi0gICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BS
UmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwotICAgICAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihyZWcsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7
Ci0gICAgfQotCi0gICAgR1BSUmVnIHdhc21Db250ZXh0R1BSID0gcGlubmVkUmVncy53YXNtQ29u
dGV4dFBvaW50ZXI7Ci0KLSAgICB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxs
ZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOwotICAgICAgICBudW1HUFJzID0gMDsKLSAgICAgICAgbnVtRlBScyA9IDA7Ci0gICAg
ICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHNldCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0aGlz
LiBTbwotICAgICAgICAvLyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cgc2lu
Y2Ugd2Ugc2F2ZWQgaXQgYWJvdmUuCi0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcGlubmVk
UmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKLQotICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0g
ICAgICAgIC8vIHZtRW50cnlUb1dhc20gcGFzc2VzIFdhc206OkNvbnRleHQqIGFzIHRoZSBmaXJz
dCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCi0gICAgICAgIC8vIG5vdCB1c2luZyBmYXN0IFRMUyB0
byBob2xkIHRoZSBXYXNtOjpDb250ZXh0Ki4KLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29u
dGV4dCgpKSB7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNvbnRleHRHUFIpOwot
ICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewotICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6
Ci0gICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKLSAgICAgICAgICAgICAgICBpZiAobnVtR1BS
cyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBX
YXNtOjpJMzIpCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICArK251bUdQUnM7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6
RjY0OgotICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlv
bigpLm1fZnByQXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVy
ZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6
ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnBy
QXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoISFpbmZvLm1lbW9yeSkgewotICAg
ICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0K
LSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0R1BSLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGJhc2VNZW1vcnkpOwotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAg
ICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKLSAg
ICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1l
cyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJz
IHJlbGF0aXZlIHRvIDAuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVS
ZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5
LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0g
ICAgfQotCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNo
YWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rp
b25JbmRleCArIGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlv
bkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNw
YWNlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1
bmN0aW9uSW5kZXhTcGFjZSB9KTsKLSAgICB9KTsKLQotCi0gICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BS
UmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwotICAgICAgICBBU1NFUlQocmVnICE9
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJl
Z0F0T2Zmc2V0Lm9mZnNldCgpOwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7Ci0gICAgfQot
Ci0gICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBXYXNtOjpG
MzI6Ci0gICAgICAgIGppdC5tb3ZlRmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2FzbTo6
RjY0OgotICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7
Ci0gICAgaml0LnJldCgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogYXV0byBCM0lSR2Vu
ZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KIHsKICAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1f
cGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdP
ZmZzZXQoKSk7CkBAIC0xNTM0LDcgKzEzNTMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdp
bigpIC0+IE9yaWdpbgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwog
fQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBj
b25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVt
b3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlv
bkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25N
b2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQq
IHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBh
dXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAt
MTU1OCwxMSArMTM3NywxMSBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/IE9w
dGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlv
bnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJh
dG9yIGNvbnRleHQoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7
Ci0gICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0
aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOworICAgIEIzSVJHZW5l
cmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRp
ZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBh
cnNlKCkpOwogCi0gICAgY29udGV4dC5pbnNlcnRDb25zdGFudHMoKTsKKyAgICBpckdlbmVyYXRv
ci5pbnNlcnRDb25zdGFudHMoKTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgp
OwogICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggZTJjNmFkYi4uNjliZTQ0OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlw
cm9kdWN0cy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21FbWJl
ZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5m
b3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKQEAgLTU0LDkgKzU1LDcg
QEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpP
cGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7CiB9OwogCi1FeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwor
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9u
ID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAyMmVkZDE2Li5kMGVhZmExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yOSw4ICsy
OSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlv
bi5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcu
aCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCkBAIC01MywyMSArNTEsMjEgQEAgbmFtZXNwYWNl
IFdhc21CQlFQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwogfQogCi1CQlFQbGFuOjpCQlFQbGFuKFZNKiB2bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBp
bmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQmFzZSh2
bSwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywg
Q29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJl
ZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAg
OiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIFdURk1vdmUoY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9zdGF0ZShT
dGF0ZTo6VmFsaWRhdGVkKQogICAgICwgbV9hc3luY1dvcmsod29yaykKIHsKIH0KIAotQkJRUGxh
bjo6QkJRUGxhbihWTSogdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdv
cmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJCUVBsYW4odm0sIGFkb3B0UmVmKCpu
ZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFz
aykpCitCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYm
IHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24g
dGhyb3dXYXNtRXhjZXB0aW9uKQorICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigqbmV3
IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRhc2sp
LCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKIHsK
ICAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0q
IHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29y
ayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKHZtLCBzb3VyY2UsIHNv
dXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29u
dGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dv
cmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBzb3Vy
Y2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKICAgICAsIG1fc3RhdGUoU3RhdGU6Oklu
aXRpYWwpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewpAQCAtMjY5LDcgKzI2Nyw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAK
ICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVw
ID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rp
b25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOworICAg
ICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBp
bGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVu
Z3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0s
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFN
b2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAg
ICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTI4NSw3ICsyODMsNyBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogCiAg
ICAgICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5k
ZXgpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVu
Y3Rpb25JbmRleCwgY3JlYXRlSlNUb1dhc21XcmFwcGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5j
dGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbklu
ZGV4KSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVz
dWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIApAQCAtMzE0LDE0ICszMTIsMTQg
QEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQog
ICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1
Y3RzKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChhdXRvIGpzVG9XYXNtSW50
ZXJuYWxGdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25J
bmRleCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRl
eCkpIHsKICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNF
bnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2Yg
ZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJp
bmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAganNUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29t
cGlsYXRpb24+KAorICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlv
bi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0
aW9uPigKICAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkph
dmFTY3JpcHQtPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwg
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuanNFbnRy
eXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmgKaW5kZXggMzU5ZjEzYi4uYzZlYTQ5NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNt
TW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldh
c21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQxLDggKzQx
LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWxsTGlua0luZm87Ci1jbGFzcyBKU0ds
b2JhbE9iamVjdDsKLWNsYXNzIEpTUHJvbWlzZURlZmVycmVkOwogCiBuYW1lc3BhY2UgV2FzbSB7
CiAKQEAgLTUwLDEyICs0OCwxMyBAQCBjbGFzcyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4g
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQbGFuOwogICAgIGVudW0gQXN5bmNXb3JrIDog
dWludDhfdCB7IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9uIH07CisKICAgICAvLyBOb3RlOiBDb21w
bGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3
aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgQkJRUGxhbihWTSosIFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dv
cmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJ
bmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJR
UGxhbihDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRh
c2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAg
Ly8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUg
bm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0
ZXN0cwogICAgIC8vIEZJWE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ug
c2hvdWxkIHJlbW92ZSBBc3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VY
UE9SVF9QUklWQVRFIEJCUVBsYW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBBc3luY1dv
cmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29u
dGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2sm
Jik7CiAKICAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIApAQCAtMTQxLDcgKzE0
MCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNt
VG9XYXNtRXhpdFN0dWJzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5
cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0gICAg
SGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBl
bmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2pzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAg
SGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBl
bmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7
CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwog
ICAgIFZlY3RvcjxUaWVyVXBDb3VudD4gbV90aWVyVXBDb3VudHM7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKaW5kZXggMWI4YjU2Zi4uNDQ0
NzkwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5J
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5Jbmxp
bmVzLmgKQEAgLTM5LDEwICszOSwxMCBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVz
KGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogICAgIEFTU0VSVCghZmFpbGVkKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbklu
ZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25J
bmRleCkgewogCi0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGpzRW50cnlwb2ludENhbGxl
ZTsKLSAgICAgICAgaWYgKGF1dG8ganNUb1dhc21GdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAganNF
bnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShqc1RvV2FzbUZ1
bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoanNUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRz
Ojpib3hXYXNtKGpzRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOworICAgICAgICBSZWZQdHI8V2Fz
bTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CisgICAgICAgIGlmIChhdXRvIGVt
YmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMu
Z2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21G
dW5jdGlvbi0+ZW50cnlwb2ludCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2Fs
bGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKQEAgLTUwLDcgKzUwLDcg
QEAgdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFj
aykKICAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNt
OjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi5nZXQoZnVuY3Rpb25J
bmRleFNwYWNlKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5j
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBv
aW50Q2FsbGVlLnB0cigpKSk7CiAKLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbklu
ZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRD
YWxsZWUpKTsKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3Zl
KGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUp
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cAppbmRleCA2N2NjZjVlLi40OTEwYzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwCkBAIC0yOSw1OTYgKzI5LDE0IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJz
LmgiCi0jaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCi0jaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlRodW5r
R2VuZXJhdG9ycy5oIgotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgotI2luY2x1
ZGUgIldhc21Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgSklUID0gQ0NhbGxIZWxwZXJz
OwogCi1zdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWdu
ZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCi17Ci0gICAgLy8gV2UncmUgY2FsbGluZyBv
dXQgb2YgdGhlIGN1cnJlbnQgV2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFuY2UgaGFz
IGEgbGlzdCBvZiBhbGwgaXRzIGltcG9ydCBmdW5jdGlvbnMuCi0gICAgaml0LmxvYWRXYXNtQ29u
dGV4dChyZXN1bHQpOwotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCBy
ZXN1bHQpOwotfQotCi1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCi17Ci0g
ICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5
IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCi0gICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRv
IHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCi0gICAg
Y29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKTsKLSAgICBjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdD
b252ZW50aW9uKCk7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICB1bnNpZ25lZCBhcmdDb3VudCA9
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7Ci0gICAgSklUIGppdDsKLQotICAgIC8vIE5vdGU6
IFdhc21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEg
Y2FsbGVlIHNhdmUuCi0gICAgLy8gSWYgd2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNv
IG5lZWQgdG8gY2hhbmdlIFdhc21CM0lSR2VuZXJhdG9yLgotCi0gICAgLy8gQmVsb3csIHdlIGFz
c3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFj
ay4KLSAgICBBU1NFUlQoIWpzQ0MubV9ncHJBcmdzLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFqc0ND
Lm1fZnByQXJncy5zaXplKCkpOwotCi0gICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0g
ICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29k
ZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQot
Ci0gICAgewotICAgICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOwotICAgICAgICBoYXNC
YWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJldHVyblR5cGUoKSA9PSBJNjQ7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsg
KythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVu
dChhcmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1
bmM6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAg
ICAgICAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkgewotICAgICAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgICAg
IGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOwotCi0gICAgICAgICAgICAvLyBTdG9yZSBDYWxsZWUuCi0gICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIp
OwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAgICAgICAgIGF1
dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigqdm0pOwotCi0gICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSos
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAg
ICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5n
bG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvcklu
c3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVj
dG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFz
IHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOwotICAg
ICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwot
Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOwotICAgICAg
ICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2
YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxs
aW5nIGNvbnZlbnRpb24gc2F2ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4g
V2UgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVy
cyBzaW5jZSB0aGUgd2FzbSBjYWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KLSAgICBS
ZWdpc3RlclNldCBtaXNzaW5nQ2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0
ZXJzOwotICAgIG1pc3NpbmdDYWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVn
aXN0ZXJzKTsKLSAgICBBU1NFUlQobWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7Ci0KLSAg
ICBpZiAoIU9wdGlvbnM6OnVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7Ci0g
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoYXJnQ291bnQgKiBzaXplb2YodWludDY0X3QpKTsKLSAgICAgICAgY2hhciogYnVmZmVy
ID0gYXJnQ291bnQgPyBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKSA6IG51bGxwdHI7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAg
ICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBidWZm
ZXJPZmZzZXQgPSAwOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
LSAgICAgICAgY29uc3QgR1BSUmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7Ci0gICAg
ICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZVB0
cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7
IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAg
ICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjYXNlIEkz
MjogewotICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYg
KG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOwot
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUg
YXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOwotICAgICAgICAgICAg
ICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOwot
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zmc2V0
KTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAg
ICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8
IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3
YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBh
cmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAg
ICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKLSAgICAgICAgICAg
ICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAg
ICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUND
Lm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5t
X2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50
cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAg
ICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0g
c2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0
Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAg
ICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6ZW9m
KFJlZ2lzdGVyKTsKLSAgICAgICAgfQotICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgaWYgKGFyZ0NvdW50KSB7Ci0gICAgICAgICAgICAvLyBUaGUgR0Mgc2hv
dWxkIG5vdCBsb29rIGF0IHRoaXMgYnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFsdWVz
LgotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0
Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50NjRf
dCAoKmNhbGxGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1aW50
NjRfdCopID0KLSAgICAgICAgICAgIFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjYWxs
ZWUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAtPiB1
aW50NjRfdCB7IAotICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAg
ICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAg
ICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAw
OyBhcmdOdW0gPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgewotICAgICAg
ICAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhcmc7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5j
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
STMyOgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oYnVmZmVyW2FyZ051bV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNlX2Nh
c3Q8ZG91YmxlPihidWZmZXJbYXJnTnVtXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBl
bmQoYXJnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKLSAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+bWV0
aG9kVGFibGUoKnZtKS0+Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAgICAg
ICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBlLCBj
YWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJl
YWxSZXN1bHQ7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgICAgIGNhc2UgQW55
ZnVuYzoKLSAgICAgICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQudG9J
bnQzMihleGVjKSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBGMzI6
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4ocmVzdWx0LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlYWxSZXN1bHQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgaml0LmxvYWRX
YXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAg
ICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICAgICAgCi0gICAgICAgIG1hdGVyaWFs
aXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVy
cyA+PSA0LCAiV2UgcmVseSBvbiB0aGlzIHdpdGggdGhlIGNhbGwgYmVsb3cuIik7Ci0gICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmVJbmRleCksIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihidWZmZXIpKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
LSAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBB
c3NlbWJseUhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwotCi0gICAgICAgIC8vIGV4
Y2VwdGlvbiBoZXJlLgotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgdm9pZCAoKmRvVW53
aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0s
IGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoKTsKLSAgICAg
ICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAgICBub0V4Y2VwdGlv
bi5saW5rKCZqaXQpOwotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsK
LSAgICAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgIGpp
dC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86
OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAgICAg
aml0LnJldCgpOwotCi0gICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQotICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0
aW9uQ2FsbCwgZG9VbndpbmRpbmcpOwotCi0gICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9y
dEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOwotICAgIH0KLQot
ICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUg
c2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKLSAgICAvLyB3aWxsIGRvIHRoZSBzdGFjayBjaGVjayBm
b3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMgdGhhdCBpdCBtaWdodCBtYWtlCi0gICAgLy8gYSBj
YWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1ha2Ugc3VyZSBpdHMgc3RhY2sgY2hlY2sgaW5jbHVk
ZXMgc3BhY2UKLSAgICAvLyBmb3IgdXMgaGVyZS4KLQotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJl
ck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsgMTsgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1l
bnQuCi0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVv
ZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgY29uc3QgdW5zaWdu
ZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRC
eXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0gICAgaml0LnN1YlB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICBKSVQ6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLQotICAgIC8vIEZJ
WE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBh
cmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBm
b3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NTQ3Ci0gICAgCi0gICAgLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUgaW50ZWdlciBwYXJh
bWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lzdGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4KLSAg
ICB7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWdu
ZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNl
dCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKyth
cmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChh
cmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6
Ci0gICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6IHsK
LSAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJz
aGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAg
ICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBz
cGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNj
cmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BS
MDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZ3ByUmVnKTsKLSAgICAgICAgICAgICAgICAg
ICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKLSAgICAgICAgICAgICAgICBqaXQuemVyb0V4
dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOyAvLyBDbGVhciBub24taW50MzIgYW5kIG5vbi10
YWcgYml0cy4KLSAgICAgICAgICAgICAgICBqaXQuYm94SW50MzIoZ3ByUmVnLCBKU1ZhbHVlUmVn
cyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IEYzMjoKLSAgICAgICAgICAgIGNhc2UgRjY0OgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6
IGhhbmRsZWQgYmVsb3cuCi0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzID49IHdh
c21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICB7Ci0gICAgICAgIC8vIEludGVnZXIgcmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNw
aWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxhYmxlLgotICAgICAgICBHUFJSZWcgZG91YmxlRW5j
b2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgYm9vbCBoYXNNYXRlcmlh
bGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBmYWxzZTsKLSAgICAgICAgYXV0byBtYXRlcmlhbGl6
ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0
LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKLSAgICAgICAgICAgIGlmICghaGFzTWF0ZXJpYWxpemVk
RG91YmxlRW5jb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChEb3Vi
bGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4LCAiY29kZWdlbiBhc3N1bWVzIHRoaXMgYmVsb3ci
KTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW0zMigxKSwgZGVzdCk7
Ci0gICAgICAgICAgICAgICAgaml0LmxzaGlmdDY0KEpJVDo6VHJ1c3RlZEltbTMyKDQ4KSwgZGVz
dCk7Ci0gICAgICAgICAgICAgICAgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkR1BScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKLSAg
ICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFy
Z3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5z
aWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJn
TnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBl
IGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRj
aCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBG
dW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBh
Ym92ZS4KLSAgICAgICAgICAgIGNhc2UgSTMyOgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6
IGhhbmRsZWQgYWJvdmUuCi0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdh
c21DQy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgICAgICAg
ICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3
YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2Fz
bUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJn
dW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAg
ICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0
ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJSZWcsIGZwclJlZyk7Ci0gICAgICAgICAgICAg
ICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91Ymxl
VG82NChmcHJSZWcsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91Ymxl
RW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAg
aml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAg
ICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVG
cmFtZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVv
ZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7Ci0g
ICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hh
bGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3Bp
bGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3Jh
dGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAg
ICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0
Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJp
YWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAgICAg
ICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsK
LSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJz
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1
bWVudEdQUjApOwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJh
bWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0K
LSAgICBHUFJSZWcgaW1wb3J0SlNDZWxsR1BSUmVnID0gR1BSSW5mbzo6cmVnVDA7IC8vIENhbGxl
ZSBuZWVkcyB0byBiZSBpbiByZWdUMCBmb3Igc2xvdyBwYXRoIGJlbG93LgotICAgIEFTU0VSVCgh
d2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQoaW1wb3J0SlNDZWxsR1BSUmVnKSk7Ci0K
LSAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQsIGltcG9ydEluZGV4LCBpbXBvcnRKU0Nl
bGxHUFJSZWcpOwotCi0gICAgaml0LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihu
dW1iZXJPZlBhcmFtZXRlcnMpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5
bG9hZE9mZnNldCkpOwotICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5k
ZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAvLyBGSVhN
RSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVnaXN0
ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTQ4OAotCi0gICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9z
LmFkZCgpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
Q29kZU9yaWdpbigpLCBpbXBvcnRKU0NlbGxHUFJSZWcpOwotICAgIEpJVDo6RGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVl
KDApOwotICAgIEpJVDo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBpbXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ss
IGluaXRpYWxSaWdodFZhbHVlKTsKLSAgICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNh
bGwoKTsKLSAgICBKSVQ6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7Ci0gICAgc2xvd1BhdGgubGlu
aygmaml0KTsKLSAgICAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJ
bmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMi4KLSAgICBKSVQ6
OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKLSAgICBkb25lLmxpbmsoJmppdCk7Ci0K
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKLQotICAgIHN3aXRj
aCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewotICAgIGNhc2UgVm9pZDoKLSAgICAgICAgLy8g
RGlzY2FyZC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jOgotICAgIGNhc2UgQW55ZnVu
YzoKLSAgICAgICAgLy8gRm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRo
IHRoZXNlIHR5cGVzIGluIHRoZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHku
TW9kdWxlIHZhbGlkYXRpb24gZXJyb3IuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSTY0OiB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAgfQotICAgIGNhc2Ug
STMyOiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKLQotICAgICAgICBzbG93UGF0aC5hcHBlbmQo
aml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVU
YWdSZWdpc3RlcnMpKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdElu
dDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVn
aXN0ZXJzKSk7Ci0gICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBkb25lLmFwcGVuZChq
aXQuanVtcCgpKTsKLQotICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAg
ICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBpbnQzMl90ICgq
Y29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICAgICAgICAgIHJldHVybiB2LnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9JMzIpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEYzMjogewotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIGF1
dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgYXV0byBpc0RvdWJsZSA9IGpp
dC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwg
RG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKLSAgICAg
ICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRv
bmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7Ci0g
ICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0Rv
dWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwot
ICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7Ci0KLSAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwotICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAg
YXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChq
aXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBmbG9hdCAoKmNvbnZlcnRU
b0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHYpIC0+IGZsb2F0IHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAg
fTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsK
LSAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICBhdXRvIGlz
RG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBXZSdyZSBhbiBp
bnQzMgotICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRv
RG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7
Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxp
bmsoJmppdCk7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1i
ZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGpp
dC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBu
b3RBTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQu
Y2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhj
ZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRl
KiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7
IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIHJldHVybiB2LnRv
TnVtYmVyKGV4ZWMpOwotICAgICAgICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgY29udmVydFRvRjY0KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1w
dHkoKSkgewotICAgICAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKLSAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGppdC5q
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5n
KShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMp
OwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAg
fTsKLQotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOwotICAg
ICAgICB9KTsKLSAgICB9Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChVTkxJS0VMWShwYXRj
aEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0Nh
bGwpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9j
YXRpb25PZih0YXJnZXRUb0NoZWNrKSk7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0
aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKLSAgICBj
YWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRo
QmVnaW4sIGhvdFBhdGhPdGhlcik7Ci0KLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5k
ZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Ci19Ci0KIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWdu
ZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRS
ZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAgLTYzMywyNCArNTEsMjMgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1
bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
ICE9IHNjcmF0Y2gpOwogICAgIEdQUlJlZyBzaXplUmVnQXNTY3JhdGNoID0gc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyOwogCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8Q29udGV4dCwg
SlNXZWJBc3NlbWJseUluc3RhbmNlPjo6dmFsdWUsICJUaGlzIGlzIGFzc3VtZWQgaW4gdGhlIGNv
ZGUgYmVsb3cuIik7CiAgICAgLy8gQjMncyBjYWxsIGNvZGVnZW4gZW5zdXJlcyB0aGF0IHRoZSBK
U0NlbGwgaXMgYSBXZWJBc3NlbWJseUZ1bmN0aW9uLgotICAgIGppdC5sb2FkV2FzbUNvbnRleHQo
c2l6ZVJlZ0FzU2NyYXRjaCk7IC8vIE9sZCBJbnN0YW5jZSoKLSAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
ZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOwotCi0gICAgLy8gR2V0IHRo
ZSBjYWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0
LiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNl
LgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAg
IGppdC5zdG9yZVdhc21Db250ZXh0KGJhc2VNZW1vcnkpOworICAgIGppdC5sb2FkV2FzbUNvbnRl
eHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgorICAgIC8vIEdl
dCB0aGUgY2FsbGVlJ3MgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYW5kIHNldCBpdCBhcyBXYXNtQ29u
dGV4dCdzIGluc3RhbmNlLiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBp
dHMgb3duIEluc3RhbmNlLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNT
Y3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoaW1w
b3J0SW5kZXgpKSwgYmFzZU1lbW9yeSk7IC8vIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSouCisgICAg
Ly8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2Fz
bSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCisgICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludChpbXBvcnRJbmRleCkpLCBzY3JhdGNoKTsgLy8gV2Fz
bTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24uCisgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJ
bnN0YW5jZShiYXNlTWVtb3J5KTsKIAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXpl
UmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tM
aW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRjaCk7CiAgICAgaml0LnN0b3JlUHRyKHNpemVSZWdBc1Nj
cmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CiAKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5n
IGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXZWJBc3NlbWJseS5JbnN0YW5jZSBoYXZlIHRoZSBzYW1l
IHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIg
YXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgotICAgIGppdC5sb2FkUHRyKEpJ
VDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICBB
U1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNz
dW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0
ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1v
cnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6
ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsgLy8gV2FzbU1lbW9yeTo6dm9pZCouCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6dm9pZCouCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IHNpemVSZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5z
aXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5z
aXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CkBAIC02NTgsNyArNzUsNiBAQCBFeHBlY3RlZDxNYWNy
b0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGlt
cG9ydEluZGV4KQogICAgIH0KIAogICAgIC8vIFRhaWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUgV2Vi
QXNzZW1ibHkgZnVuY3Rpb24uCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gs
IFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24o
KSksIHNjcmF0Y2gpOwogICAgIGppdC5sb2FkUHRyKHNjcmF0Y2gsIHNjcmF0Y2gpOwogICAgIGpp
dC5qdW1wKHNjcmF0Y2gpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
aAppbmRleCA0ZTI2MmJhLi5mZWM2YmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsOSArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21G
b3JtYXQuaCIKLSNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDQsNyArNDIsNiBAQCBlbnVtIGNsYXNzIEJpbmRpbmdG
YWlsdXJlIHsKIH07CiAKIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpOwotRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSnMoVk0qLCBCYWc8Q2FsbExp
bmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydElu
ZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAppbmRleCA3MGZlZmIwLi5lNTEzNjdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcApAQCAtMzEsMjAg
KzMxLDMxIEBACiAKICNpbmNsdWRlICJXYXNtQkJRUGxhbklubGluZXMuaCIKICNpbmNsdWRlICJX
YXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Xb3Jr
bGlzdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1Db2RlQmxvY2s6
OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZv
cm1hdGlvbikKK1JlZjxDb2RlQmxvY2s+IENvZGVCbG9jazo6Y3JlYXRlKENvbnRleHQqIGNvbnRl
eHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2Fz
bUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCit7CisgICAgc2l6ZV90IGltcG9ydEZ1bmN0
aW9uQ291bnQgPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAg
YXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBmYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplKGlt
cG9ydEZ1bmN0aW9uQ291bnQpKSkgQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIG1vZHVsZUluZm9y
bWF0aW9uLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbXBvcnRGdW5jdGlvbkNvdW50OyArK2kp
CisgICAgICAgIHJlc3VsdC0+aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGkpID0gbnVsbHB0cjsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKnJlc3VsdCk7Cit9CisKK0NvZGVCbG9jazo6Q29kZUJsb2Nr
KENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZUluZm9ybWF0aW9uLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldy
YXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBtX2Nh
bGxlZUNvdW50KG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRnVuY3Rpb25Db3VudCgpKQogICAg
ICwgbV9tb2RlKG1vZGUpCiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9
IHRoaXM7Ci0gICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKG51bGxwdHIsIG1ha2VS
ZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVk
VGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShw
cm90ZWN0ZWRUaGlzKV0gKFZNKiwgUGxhbiYpIHsKKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgQkJRUGxhbihjb250ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6
RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgewogICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZh
aWxlZCgpKSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNz
YWdlKCk7Ci0gICAgICAgICAgICBtX3BsYW4gPSBudWxscHRyOworICAgICAgICAgICAgc2V0Q29t
cGlsYXRpb25GaW5pc2hlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAg
LTY2LDEwICs3NywxMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKICAgICAgICAgbV93YXNtVG9XYXNt
Q2FsbHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOwogICAgICAgICBt
X3RpZXJVcENvdW50cyA9IG1fcGxhbi0+dGFrZVRpZXJVcENvdW50cygpOwogCi0gICAgICAgIG1f
cGxhbiA9IG51bGxwdHI7Ci0gICAgfSkpKTsKLQorICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlz
aGVkKCk7CisgICAgfSksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNt
RXhjZXB0aW9uKSk7CiAgICAgbV9wbGFuLT5zZXRNb2RlKG1vZGUpOworCiAgICAgYXV0byYgd29y
a2xpc3QgPSBXYXNtOjplbnN1cmVXb3JrbGlzdCgpOwogICAgIC8vIE5vdGUsIGltbWVkaWF0ZWx5
IGFmdGVyIHdlIGVucXVldWUgdGhlIHBsYW4sIHRoZXJlIGlzIGEgY2hhbmNlIHRoZSBhYm92ZSBj
YWxsYmFjayB3aWxsIGJlIGNhbGxlZC4KICAgICB3b3JrbGlzdC5lbnF1ZXVlKG1ha2VSZWYoKm1f
cGxhbi5nZXQoKSkpOwpAQCAtOTIsNyArMTAzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OndhaXRVbnRp
bEZpbmlzaGVkKCkKICAgICAvLyBlbHNlLCBpZiB3ZSBkb24ndCBoYXZlIGEgcGxhbiwgd2UncmUg
YWxyZWFkeSBjb21waWxlZC4KIH0KIAotdm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyhWTSYg
dm0sIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCit2b2lkIENvZGVCbG9jazo6Y29t
cGlsZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRh
c2spCiB7CiAgICAgUmVmUHRyPFBsYW4+IHBsYW47CiAgICAgewpAQCAtMTA0LDEyICsxMTUsMTEg
QEAgdm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25D
YWxsYmFjayYmIHRhc2spCiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8ga2VlcCBhIFJlZlB0
ciBvbiB0aGUgUGxhbiBiZWNhdXNlIHRoZSB3b3JrbGlzdCB3aWxsIGtlZXAKICAgICAgICAgLy8g
YSBSZWZQdHIgb24gdGhlIFBsYW4gdW50aWwgdGhlIHBsYW4gZmluaXNoZXMgbm90aWZ5aW5nIGFs
bCBvZiBpdHMgY2FsbGJhY2tzLgogICAgICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRU
aGlzID0gdGhpczsKLSAgICAgICAgcGxhbi0+YWRkQ29tcGxldGlvblRhc2sodm0sIGNyZWF0ZVNo
YXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgdGFzayA9IFdURk1vdmUodGFzayks
IHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0qIHZtLCBQbGFuJikg
ewotICAgICAgICAgICAgQVNTRVJUKHZtKTsKLSAgICAgICAgICAgIHRhc2stPnJ1bigqdm0sIG1h
a2VSZWYoKnRoaXMpKTsKKyAgICAgICAgcGxhbi0+YWRkQ29tcGxldGlvblRhc2soY29udGV4dCwg
Y3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92
ZSh0YXNrKSwgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikg
eworICAgICAgICAgICAgdGFzay0+cnVuKG1ha2VSZWYoKnRoaXMpKTsKICAgICAgICAgfSkpOwog
ICAgIH0gZWxzZQotICAgICAgICB0YXNrLT5ydW4odm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAg
ICAgdGFzay0+cnVuKG1ha2VSZWYoKnRoaXMpKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6OmlzU2Fm
ZVRvUnVuKE1lbW9yeU1vZGUgbWVtb3J5TW9kZSkKQEAgLTEzMCw2ICsxNDAsMTMgQEAgYm9vbCBD
b2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1lbW9yeU1vZGUgbWVtb3J5TW9kZSkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKKwordm9pZCBDb2RlQmxvY2s6OnNldENvbXBpbGF0aW9uRmluaXNoZWQoKQor
eworICAgIG1fcGxhbiA9IG51bGxwdHI7CisgICAgbV9jb21waWxhdGlvbkZpbmlzaGVkLnN0b3Jl
KHRydWUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9j
ay5oCmluZGV4IDJkYmY3ZTQuLjAyMDEwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29kZUJsb2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNt
RW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM3LDExICszOCwxMCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3Mg
Q2FsbGVlOworc3RydWN0IENvbnRleHQ7CiBjbGFzcyBCQlFQbGFuOwogY2xhc3MgT01HUGxhbjsK
IHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKQEAgLTUxLDIwICs1MSw0MiBAQCBlbnVtIGNsYXNz
IE1lbW9yeU1vZGUgOiB1aW50OF90OwogICAgIAogY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9jaz4gewogcHVibGljOgotICAgIHR5cGVkZWYgdm9p
ZCBDYWxsYmFja1R5cGUoVk0mLCBSZWY8Q29kZUJsb2NrPiYmKTsKKyAgICB0eXBlZGVmIHZvaWQg
Q2FsbGJhY2tUeXBlKFJlZjxDb2RlQmxvY2s+JiYpOwogICAgIHVzaW5nIEFzeW5jQ29tcGlsYXRp
b25DYWxsYmFjayA9IFJlZlB0cjxXVEY6OlNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBlPj47Ci0gICAg
c3RhdGljIFJlZjxDb2RlQmxvY2s+IGNyZWF0ZShNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9y
bWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKKyAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3Jl
YXRlKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVk
ZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworCisgICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZkltcG9ydFN0dWJzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6ZW9mKENvZGVCbG9jaykpOworICAgIH0KKwor
ICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IGZ1bmN0aW9u
SW1wb3J0Q291bnQpCisgICAgeworICAgICAgICByZXR1cm4gKG9mZnNldE9mSW1wb3J0U3R1YnMo
KSArIHNpemVvZih2b2lkKikgKiBmdW5jdGlvbkltcG9ydENvdW50KS51bnNhZmVHZXQoKTsKKyAg
ICB9CisKKyAgICB2b2lkKiYgaW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKHVuc2lnbmVkIGltcG9y
dEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29kZUJsb2NrKG1v
ZGUsIG1vZHVsZUluZm9ybWF0aW9uKSk7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZv
aWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRvRW1i
ZWRkZXJTdHViKGltcG9ydEluZGV4KSk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCop
ICogaW1wb3J0SW5kZXg7CisgICAgfQorCisgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gd2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKKyAgICAgICAgcmV0dXJuICZpbXBvcnRX
YXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpOwogICAgIH0KIAogICAgIHZvaWQgd2FpdFVu
dGlsRmluaXNoZWQoKTsKLSAgICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIEFzeW5jQ29tcGlsYXRp
b25DYWxsYmFjayYmKTsKKyAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0KiwgQXN5bmNDb21w
aWxhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgYm9vbCBjb21waWxhdGlvbkZpbmlzaGVkKCkKICAg
ICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgcmV0
dXJuICFtX3BsYW47CisgICAgICAgIHJldHVybiBtX2NvbXBpbGF0aW9uRmluaXNoZWQubG9hZCgp
OwogICAgIH0KICAgICBib29sIHJ1bm5hYmxlKCkgeyByZXR1cm4gY29tcGlsYXRpb25GaW5pc2hl
ZCgpICYmICFtX2Vycm9yTWVzc2FnZTsgfQogCkBAIC03OCw5ICsxMDAsMTIgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVy
biBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9CisgICAgCisgICAgLy8gVGhlc2UgdHdv
IGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVu
IHBvcHVsYXRlZC4KIAogICAgIENhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBB
U1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJ
bmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKIApAQCAt
OTAsNiArMTE1LDcgQEAgcHVibGljOgogICAgIH0KICAgICBDYWxsZWUmIHdhc21FbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2Up
CiAgICAgeworICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAg
ICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1w
b3J0Q291bnQoKTsKICAgICAgICAgaWYgKG1fb3B0aW1pemVkQ2FsbGVlc1tjYWxsZWVJbmRleF0p
CkBAIC0xMTcsNyArMTQzLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
T01HUGxhbjsKIAotICAgIENvZGVCbG9jayhNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYp
OworICAgIENvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24m
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICB2b2lk
IHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50Owog
ICAgIE1lbW9yeU1vZGUgbV9tb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9jYWxs
ZWVzOwpAQCAtMTI4LDYgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBSZWZQdHI8
QkJRUGxhbj4gbV9wbGFuOworICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5p
c2hlZCB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIExvY2sgbV9s
b2NrOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250
ZXh0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAppbmRl
eCBmZWExNmRlLi5lMDU5ZmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29udGV4dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
bnRleHQuY3BwCkBAIC0yOCwzMCArMjgsNDEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAotI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisj
aW5jbHVkZSAiT3B0aW9ucy5oIgorCiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL0Zh
c3RUTFMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotQ29udGV4dCog
bG9hZENvbnRleHQoVk0mIHZtKQorYm9vbCBDb250ZXh0Ojp1c2VGYXN0VExTKCkKK3sKKyNpZiBF
TkFCTEUoRkFTVF9UTFNfSklUKQorICAgIHJldHVybiBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2Fz
bUNvbnRleHQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogQ29udGV4dDo6bG9hZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKEZB
U1RfVExTX0pJVCkKLSAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxDb250ZXh0Kj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KFdU
Rl9XQVNNX0NPTlRFWFRfS0VZKSk7CisgICAgaWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihfcHRocmVhZF9nZXRzcGVj
aWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKICNlbmRpZgotICAgIHJldHVybiB2
bS53YXNtQ29udGV4dDsKKyAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLXZvaWQgc3RvcmVDb250
ZXh0KFZNJiB2bSwgQ29udGV4dCogY29udGV4dCkKK3ZvaWQgQ29udGV4dDo6c3RvcmUoSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpLCB2b2lkKiBzb2Z0U3RhY2tMaW1pdCkKIHsKICNpZiBFTkFCTEUo
RkFTVF9UTFNfSklUKQotICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICBf
cHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVksIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oY29udGV4dCkpOworICAgIGlmICh1c2VGYXN0VExTKCkpCisgICAgICAgIF9w
dGhyZWFkX3NldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9j
YXN0PHZvaWQqPihpKSk7CiAjZW5kaWYKLSAgICB2bS53YXNtQ29udGV4dCA9IGNvbnRleHQ7Ci0g
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIGNvbnRleHQtPnNldENhY2hlZFN0YWNrTGltaXQodm0u
c29mdFN0YWNrTGltaXQoKSk7CisgICAgaW5zdGFuY2UgPSBpOworICAgIGlmIChpbnN0YW5jZSkK
KyAgICAgICAgaW5zdGFuY2UtPnNldENhY2hlZFN0YWNrTGltaXQoc29mdFN0YWNrTGltaXQpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db250ZXh0LmgKaW5kZXggM2NmNjVmYi4uYzJiNTFkZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCkBAIC0yNywzNyArMjcsMjAgQEAKIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgotI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOworY2xhc3Mg
SlNXZWJBc3NlbWJseUluc3RhbmNlOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLS8vIEZJWE1FOiBX
ZSBtaWdodCB3YW50IHRoaXMgdG8gYmUgc29tZXRoaW5nIGVsc2UgYXQgc29tZSBwb2ludDoKLS8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAyNjAKLXVzaW5nIENv
bnRleHQgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7Ci0KLWlubGluZSBib29sIHVzZUZhc3RUTFMo
KQotewotI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgcmV0dXJuIE9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RmFzdFRMUygpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0K
K3N0cnVjdCBDb250ZXh0IHsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlIHsg
bnVsbHB0ciB9OwogCi1pbmxpbmUgYm9vbCB1c2VGYXN0VExTRm9yQ29udGV4dCgpCi17Ci0gICAg
aWYgKHVzZUZhc3RUTFMoKSkKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JX
YXNtQ29udGV4dCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KKyAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGxvYWQoKSBjb25zdDsKKyAgICB2b2lkIHN0b3JlKEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSosIHZvaWQqIHNvZnRTdGFja0xpbWl0KTsKIAotQ29udGV4dCogbG9hZENvbnRleHQoVk0mKTsK
LXZvaWQgc3RvcmVDb250ZXh0KFZNJiwgQ29udGV4dCopOworICAgIHN0YXRpYyBib29sIHVzZUZh
c3RUTFMoKTsKK307CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMjI4Nzk0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21FbWJlZGRlci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBFeGVjU3RhdGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMg
c2hvdWxkIGJlIFdhc206Okluc3RhbmNlLCBzbyBzaG91bGQgdXNlIGJlbG93LiBodHRwczovL3dl
YmtpdC5vcmcvYi8xNzc0NzIKKworbmFtZXNwYWNlIFdhc20geworCitzdHJ1Y3QgQ29tcGlsYXRp
b25Db250ZXh0Oworc3RydWN0IEludGVybmFsRnVuY3Rpb247CitzdHJ1Y3QgTW9kdWxlSW5mb3Jt
YXRpb247CitjbGFzcyBTaWduYXR1cmU7CitzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsK
KworLy8gQ3JlYXRlIHdyYXBwZXIgY29kZSB0byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNz
ZW1ibHkuCit1c2luZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90KT47CisKKy8vIENhbGxlZCBhcyBzb29u
IGFzIGFuIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMg
dG8gY29udGludWUgYXQuCit1c2luZyBUaHJvd1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhl
Y1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwCmluZGV4IDJiMWQ4MjguLmNjMWU3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0zMCwx
MSArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRl
ICJNYWNoaW5lQ29udGV4dC5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2Vw
dGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5r
cy5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1Np
Z25hbHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNp
Z25hbEhhbmRsZXIuaAppbmRleCAzODEyODM2Li5lNWUwN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCkBAIC0yNyw4ICsy
Nyw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20g
ewogCiB2b2lkIHJlZ2lzdGVyQ29kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBiMjIyMjE3Li5lN2IzZGY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC00NCwxNCArNDQsMTUgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTRnVuY3Rpb247Ci0KIG5hbWVzcGFjZSBCMyB7
CiBjbGFzcyBDb21waWxhdGlvbjsKIH0KIAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29t
cGlsYXRpb25Db250ZXh0Oworc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOworCiBpbmxpbmUgYm9v
bCBpc1ZhbHVlVHlwZShUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zNGJlMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgorCisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNp
bmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIHsKK3Np
emVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZShNb2R1bGUmIG1vZHVsZSkKK3sKKyAgICByZXR1cm4g
bW9kdWxlLm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0
ZXIpOworfQorfQorCitJbnN0YW5jZTo6SW5zdGFuY2UoUmVmPE1vZHVsZT4mJiBtb2R1bGUpCisg
ICAgOiBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCisgICAgLCBtX2dsb2JhbHMoTWFsbG9jUHRy
PHVpbnQ2NF90Pjo6bWFsbG9jKGdsb2JhbE1lbW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdldCgpKSkp
Cit7Cit9CisKK0luc3RhbmNlOjp+SW5zdGFuY2UoKSB7IH0KKworc2l6ZV90IEluc3RhbmNlOjpl
eHRyYU1lbW9yeUFsbG9jYXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsb2JhbE1lbW9yeUJ5
dGVTaXplKG1fbW9kdWxlLmdldCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUluc3RhbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3
OGE3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21J
bnN0YW5jZS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5j
bHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21UYWJsZS5oIgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEluc3RhbmNlIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPEluc3RhbmNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJbnN0YW5j
ZT4gY3JlYXRlKFJlZjxNb2R1bGU+JiYgbW9kdWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW5zdGFuY2UoV1RGTW92ZShtb2R1bGUpKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZmluYWxpemVDcmVhdGlvbihSZWY8Q29kZUJsb2NrPiYmIGNvZGVCbG9jaykKKyAgICB7
CisgICAgICAgIG1fY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxvY2spOworICAgIH0KKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5JbnN0YW5jZSgpOworCisgICAgc2l6ZV90IGV4dHJhTWVtb3J5
QWxsb2NhdGVkKCkgY29uc3Q7CisKKyAgICBNb2R1bGUmIG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9k
dWxlLmdldCgpOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVC
bG9jay5nZXQoKTsgfQorICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0
KCk7IH0KKyAgICBUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisKKyAg
ICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxzLmdldCgpW2ldOyB9CisgICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQorICAgIGZsb2F0IGxvYWRGMzJHbG9i
YWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMy
R2xvYmFsKGkpKTsgfQorICAgIGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9CisgICAg
dm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQo
KVtpXSA9IGJpdHM7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZFN0YWNr
TGltaXQpOyB9CisgICAgdm9pZCogY2FjaGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBs
aW1pdCkgeyBtX2NhY2hlZFN0YWNrTGltaXQgPSBsaW1pdDsgfQorCisgICAgZnJpZW5kIGNsYXNz
IEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOyAvLyBGSVhNRSByZW1vdmUgdGhpcyBvbmNlIHJl
ZmFjdG9yZWQgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyLgorCitwcml2YXRlOgorICAgIElu
c3RhbmNlKFJlZjxNb2R1bGU+JiYpOworICAgIAorICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOwor
ICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fY29kZUJsb2NrOworICAgIFJlZlB0cjxNZW1vcnk+IG1f
bWVtb3J5OworICAgIFJlZlB0cjxUYWJsZT4gbV90YWJsZTsKKyAgICBNYWxsb2NQdHI8dWludDY0
X3Q+IG1fZ2xvYmFsczsKKyAgICB2b2lkKiBtX2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpIH07Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBjNWY0
OGU5Li4wZGM3NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNw
cApAQCAtMjgsMTMgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNs
dWRlICJWTS5oIgotI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgi
CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNp
bmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgorI2luY2x1
ZGUgPHd0Zi9QYWdlQmxvY2suaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bXV0ZXg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTUxLDE5ICs1NywxOSBAQCBO
RVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRu
dEdldEZhc3RNZW1vcnkoKSB7IENSQQogc3RydWN0IE1lbW9yeVJlc3VsdCB7CiAgICAgZW51bSBL
aW5kIHsKICAgICAgICAgU3VjY2VzcywKLSAgICAgICAgU3VjY2Vzc0FuZEFzeW5jR0MsCi0gICAg
ICAgIFN5bmNHQ0FuZFJldHJ5CisgICAgICAgIFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3Vy
ZSwKKyAgICAgICAgU3luY1RyeVRvUmVjbGFpbU1lbW9yeQogICAgIH07Ci0gICAgCisKICAgICBz
dGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmcoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgU3VjY2VzczoKICAgICAgICAgICAgIHJldHVybiAi
U3VjY2VzcyI7Ci0gICAgICAgIGNhc2UgU3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICBy
ZXR1cm4gIlN1Y2Nlc3NBbmRBc3luY0dDIjsKLSAgICAgICAgY2FzZSBTeW5jR0NBbmRSZXRyeToK
LSAgICAgICAgICAgIHJldHVybiAiU3luY0dDQW5kUmV0cnkiOworICAgICAgICBjYXNlIFN1Y2Nl
c3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZToKKyAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0Fu
ZE5vdGlmeU1lbW9yeVByZXNzdXJlIjsKKyAgICAgICAgY2FzZSBTeW5jVHJ5VG9SZWNsYWltTWVt
b3J5OgorICAgICAgICAgICAgcmV0dXJuICJTeW5jVHJ5VG9SZWNsYWltTWVtb3J5IjsKICAgICAg
ICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTk4LDE3ICsxMDQsMTcgQEAgcHVibGljOgogICAgICAgICBNZW1vcnlS
ZXN1bHQgcmVzdWx0ID0gWyZdIHsKICAgICAgICAgICAgIGF1dG8gaG9sZGVyID0gaG9sZExvY2so
bV9sb2NrKTsKICAgICAgICAgICAgIGlmIChtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50
KQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVz
dWx0OjpTeW5jR0NBbmRSZXRyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3Vs
dChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBHaWdhY2FnZTo6dHJ5QWxsb2NhdGVW
aXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMo
KSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVt
b3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5j
VHJ5VG9SZWNsYWltTWVtb3J5KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9tZW1vcmll
cy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIE1lbW9y
eVJlc3VsdCgKICAgICAgICAgICAgICAgICByZXN1bHQsCi0gICAgICAgICAgICAgICAgbV9tZW1v
cmllcy5zaXplKCkgPj0gbV9tYXhDb3VudCAvIDIgPyBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3NBbmRB
c3luY0dDIDogTWVtb3J5UmVzdWx0OjpTdWNjZXNzKTsKKyAgICAgICAgICAgICAgICBtX21lbW9y
aWVzLnNpemUoKSA+PSBtX21heENvdW50IC8gMiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5v
dGlmeU1lbW9yeVByZXNzdXJlIDogTWVtb3J5UmVzdWx0OjpTdWNjZXNzKTsKICAgICAgICAgfSgp
OwogICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ1dlYkFzc2VtYmx5TWVtb3J5KCkp
CkBAIC0xNTMsMTIgKzE1OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdDo6S2lu
ZCByZXN1bHQgPSBbJl0gewogICAgICAgICAgICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xv
Y2spOwogICAgICAgICAgICAgaWYgKG1fcGh5c2ljYWxCeXRlcyArIGJ5dGVzID4gbWVtb3J5TGlt
aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRy
eTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3BoeXNpY2FsQnl0ZXMgKz0gYnl0
ZXM7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX3BoeXNpY2FsQnl0ZXMgPj0gbWVt
b3J5TGltaXQoKSAvIDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3Vj
Y2Vzc0FuZEFzeW5jR0M7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3Vj
Y2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBy
ZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzOwogICAgICAgICB9KCk7CkBAIC0yMDUsNyArMjEx
LDcgQEAgc3RhdGljIE1lbW9yeU1hbmFnZXImIG1lbW9yeU1hbmFnZXIoKQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotYm9vbCB0cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9j
YXRlKQorYm9vbCB0cnlBbGxvY2F0ZShjb25zdCBGdW5jJiBhbGxvY2F0ZSwgY29uc3QgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgY29uc3QgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KQogewogICAgIHVuc2lnbmVkIG51bVRy
aWVzID0gMjsKICAgICBib29sIGRvbmUgPSBmYWxzZTsKQEAgLTIxNCwxNCArMjIwLDE2IEBAIGJv
b2wgdHJ5QW5kR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKICAgICAgICAgY2FzZSBN
ZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M6CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M6
Ci0gICAgICAgICAgICB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OworICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNz
dXJlOgorICAgICAgICAgICAgaWYgKG5vdGlmeU1lbW9yeVByZXNzdXJlKQorICAgICAgICAgICAg
ICAgIG5vdGlmeU1lbW9yeVByZXNzdXJlKCk7CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0
cnk6CisgICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5Ogog
ICAgICAgICAgICAgaWYgKGkgKyAxID09IG51bVRyaWVzKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OworICAgICAgICAgICAgaWYgKHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpCisgICAgICAgICAgICAg
ICAgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMzAsMzIgKzIzOCwzMiBAQCBib29sIHRyeUFuZEdDKFZNJiB2bSwgY29u
c3QgRnVuYyYgYWxsb2NhdGUpCiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1jb25zdCBj
aGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkKK01lbW9yeTo6TWVtb3J5KCkKIHsKLSAg
ICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiBy
ZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKLSAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzog
cmV0dXJuICJTaWduYWxpbmciOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiAiIjsKIH0KIAotTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDb3VudCBtYXhpbXVtKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBGdW5jdGlvbjx2b2lkKCk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1
cmUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0
aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCiAg
ICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAgICwg
bV9ub3RpZnlNZW1vcnlQcmVzc3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+
Pihub3RpZnlNZW1vcnlQcmVzc3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnko
c3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9y
eSkpCisgICAgLCBtX2dyb3dTdWNjZXNzQ2FsbGJhY2soc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rp
b248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkKIHsK
ICAgICBBU1NFUlQoIWluaXRpYWwuYnl0ZXMoKSk7CiAgICAgQVNTRVJUKG1fbW9kZSA9PSBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZyk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9y
eTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwogfQogCi1NZW1vcnk6Ok1lbW9yeSh2b2lk
KiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1h
cHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUpCitNZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1v
cnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENh
cGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQ
cmVzc3VyZSwgRnVuY3Rpb248dm9pZCgpPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6
RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFj
aykKICAgICA6IG1fbWVtb3J5KG1lbW9yeSkKICAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkp
CiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAg
ICwgbV9tYXBwZWRDYXBhY2l0eShtYXBwZWRDYXBhY2l0eSkKICAgICAsIG1fbW9kZShtb2RlKQor
ICAgICwgbV9ub3RpZnlNZW1vcnlQcmVzc3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2
b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xhaW1N
ZW1vcnkoc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSkpCisgICAgLCBtX2dyb3dTdWNjZXNzQ2FsbGJhY2soc3RkOjpmb3J3YXJkPFdURjo6
RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNr
KSkKIHsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGlu
ZyAiLCAqdGhpcyk7CiB9CkBAIC0yNzUsNyArMjgzLDEyIEBAIHN0YXRpYyB2b2lkIGNvbW1pdFpl
cm9QYWdlcyh2b2lkKiBzdGFydEFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICNlbmRpZgog
fQogCi1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeSgpKTsKK30KKyAgICAKK1JlZlB0cjxN
ZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11
bSwgRnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2b2lk
KCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3Vu
dCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKQogewogICAgIEFTU0VSVChpbml0
aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwp
OyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCkBAIC0yODMsMzMg
KzI5NiwyNyBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICBjb25zdCBzaXplX3QgaW5pdGlhbEJ5
dGVzID0gaW5pdGlhbC5ieXRlcygpOwogICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtQnl0ZXMgPSBt
YXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogMDsKIAotICAgIC8vIFdlIG5lZWQgdG8gYmUgc3Vy
ZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCi0gICAgaWYgKFVOTElLRUxZ
KCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2Vu
ZXJhdG9yKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgaWYgKG1heGltdW0gJiYg
IW1heGltdW1CeXRlcykgewogICAgICAgICAvLyBVc2VyIHNwZWNpZmllZCBhIHplcm8gbWF4aW11
bSwgaW5pdGlhbCBzaXplIG11c3QgYWxzbyBiZSB6ZXJvLgogICAgICAgICBSRUxFQVNFX0FTU0VS
VCghaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5p
dGlhbCwgbWF4aW11bSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0
aWFsLCBtYXhpbXVtLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlN
ZW1vcnlQcmVzc3VyZSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KHN5bmNU
cnlUb1JlY2xhaW1NZW1vcnkpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VD
b3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKSk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgZG9uZSA9IHRyeUFuZEdDKAotICAgICAgICB2bSwKKyAgICBib29sIGRvbmUgPSB0
cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAg
ICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlUGh5c2ljYWxCeXRlcyhp
bml0aWFsQnl0ZXMpOwotICAgICAgICB9KTsKKyAgICAgICAgfSwgbm90aWZ5TWVtb3J5UHJlc3N1
cmUsIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgIGlmICghZG9uZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIGNoYXIqIGZhc3RNZW1vcnkgPSBudWxscHRyOwog
ICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSkgewotICAgICAgICB0
cnlBbmRHQygKLSAgICAgICAgICAgIHZtLAorICAgICAgICB0cnlBbGxvY2F0ZSgKICAgICAgICAg
ICAgIFsmXSAoKSAtPiBNZW1vcnlSZXN1bHQ6OktpbmQgewogICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gbWVtb3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKCk7CiAgICAg
ICAgICAgICAgICAgZmFzdE1lbW9yeSA9IGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2VQ
dHIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQua2luZDsKLSAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSwgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIHN5bmNUcnlUb1JlY2xhaW1N
ZW1vcnkpOwogICAgIH0KICAgICAKICAgICBpZiAoZmFzdE1lbW9yeSkgewpAQCAtMzIwLDE1ICsz
MjcsMTUgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQg
aW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiAgICAgICAgIH0KIAogICAgICAgICBjb21taXRa
ZXJvUGFnZXMoZmFzdE1lbW9yeSwgaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGZhc3RNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIE1l
bW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIE1lbW9yeU1vZGU6OlNpZ25hbGluZykpOworCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGZhc3RNZW1vcnksIGluaXRpYWwsIG1heGlt
dW0sIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIE1lbW9yeU1vZGU6OlNpZ25hbGluZywgc3Rk
Ojpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBz
dGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5
KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+
Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogICAgIH0KICAgICAKICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnkoKSkpCiAgICAgICAgIHdl
YkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKTsKIAogICAgIGlmICghaW5pdGlhbEJ5dGVz
KQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0sIHN0
ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwg
c3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9y
eSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQp
Pj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKICAgICAKICAgICB2b2lkKiBzbG93TWVtb3J5ID0g
R2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RGOjpwYWdl
U2l6ZSgpLCBpbml0aWFsQnl0ZXMpOwogICAgIGlmICghc2xvd01lbW9yeSkgewpAQCAtMzM2LDcg
KzM0Myw3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgbWVtc2V0KHNsb3dNZW1vcnksIDAsIGluaXRpYWxCeXRlcyk7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xvd01lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgaW5pdGlh
bEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTWVtb3J5KHNsb3dNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIGluaXRpYWxCeXRlcywg
TWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcsIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248
dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0
aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsK
IH0KIAogTWVtb3J5Ojp+TWVtb3J5KCkKQEAgLTM0NSw3ICszNTIsMTAgQEAgTWVtb3J5Ojp+TWVt
b3J5KCkKICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVQaHlzaWNhbEJ5dGVzKG1fc2l6ZSk7
CiAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CiAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2ln
bmFsaW5nOgotICAgICAgICAgICAgbXByb3RlY3QobV9tZW1vcnksIE1lbW9yeTo6ZmFzdE1hcHBl
ZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgICAgICAgICAgaWYgKG1wcm90
ZWN0KG1fbWVtb3J5LCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpLCBQUk9UX1JFQUQgfCBQUk9U
X1dSSVRFKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIm1wcm90ZWN0IGZhaWxlZDogIiwg
c3RyZXJyb3IoZXJybm8pLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigp
LmZyZWVWaXJ0dWFsUGFnZXMobV9tZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CkBAIC0zNzEsMzQgKzM4MSw1MCBAQCBi
b29sIE1lbW9yeTo6YWRkcmVzc0lzSW5BY3RpdmVGYXN0TWVtb3J5KHZvaWQqIGFkZHJlc3MpCiAg
ICAgcmV0dXJuIG1lbW9yeU1hbmFnZXIoKS5jb250YWluc0FkZHJlc3MoYWRkcmVzcyk7CiB9CiAK
LWJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCitFeHBlY3RlZDxQ
YWdlQ291bnQsIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb24+IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQg
ZGVsdGEpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJvbUJ5
dGVzKG1fc2l6ZSkpOworICAgIGNvbnN0IFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBz
aXplSW5QYWdlcygpOwogCi0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyB0
byAiLCBuZXdTaXplLCAiIGZyb20gIiwgKnRoaXMpOworICAgIGlmICghZGVsdGEuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OkludmFsaWRE
ZWx0YSk7CisgICAgCisgICAgY29uc3QgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCA9IG9s
ZFBhZ2VDb3VudCArIGRlbHRhOworICAgIGlmICghbmV3UGFnZUNvdW50KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZSk7CiAKLSAg
ICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiBtYXhpbXVtKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBbJl0gKCkgeworICAgICAgICBtX2dyb3dTdWNjZXNz
Q2FsbGJhY2sob2xkUGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOworICAgICAgICByZXR1cm4gb2xk
UGFnZUNvdW50OworICAgIH07CiAKLSAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5
dGVzKCk7CisgICAgaWYgKGRlbHRhLnBhZ2VDb3VudCgpID09IDApCisgICAgICAgIHJldHVybiBz
dWNjZXNzKCk7CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93KCIsIGRl
bHRhLCAiKSB0byAiLCBuZXdQYWdlQ291bnQsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgUkVMRUFT
RV9BU1NFUlQobmV3UGFnZUNvdW50ID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisK
KyAgICBpZiAobWF4aW11bSgpICYmIG5ld1BhZ2VDb3VudCA+IG1heGltdW0oKSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW0p
OworCisgICAgc2l6ZV90IGRlc2lyZWRTaXplID0gbmV3UGFnZUNvdW50LmJ5dGVzKCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoZGVzaXJlZFNpemUgPiBtX3NpemUpOwogICAgIHNpemVfdCBleHRyYUJ5
dGVzID0gZGVzaXJlZFNpemUgLSBtX3NpemU7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXh0cmFCeXRl
cyk7Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ5QW5kR0MoCi0gICAgICAgIHZtLAorICAgIGJvb2wg
YWxsb2NhdGlvblN1Y2Nlc3MgPSB0cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IE1lbW9y
eVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLnRyeUFs
bG9jYXRlUGh5c2ljYWxCeXRlcyhleHRyYUJ5dGVzKTsKLSAgICAgICAgfSk7Ci0gICAgaWYgKCFz
dWNjZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorICAgICAgICB9LCBtX25v
dGlmeU1lbW9yeVByZXNzdXJlLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOworICAgIGlmICgh
YWxsb2NhdGlvblN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFp
bFJlYXNvbjo6T3V0T2ZNZW1vcnkpOworCiAgICAgc3dpdGNoIChtb2RlKCkpIHsKICAgICBjYXNl
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1h
eGltdW0oKS5ieXRlcygpICE9IDApOwotICAgICAgICAKKwogICAgICAgICB2b2lkKiBuZXdNZW1v
cnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6
OnBhZ2VTaXplKCksIGRlc2lyZWRTaXplKTsKICAgICAgICAgaWYgKCFuZXdNZW1vcnkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
R3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5KTsKKwogICAgICAgICBtZW1jcHkobmV3TWVtb3J5
LCBtX21lbW9yeSwgbV9zaXplKTsKICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PGNoYXIqPihu
ZXdNZW1vcnkpICsgbV9zaXplLCAwLCBkZXNpcmVkU2l6ZSAtIG1fc2l6ZSk7CiAgICAgICAgIGlm
IChtX21lbW9yeSkKQEAgLTQwNiw3ICs0MzIsNyBAQCBib29sIE1lbW9yeTo6Z3JvdyhWTSYgdm0s
IFBhZ2VDb3VudCBuZXdTaXplKQogICAgICAgICBtX21lbW9yeSA9IG5ld01lbW9yeTsKICAgICAg
ICAgbV9tYXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXplOwogICAgICAgICBtX3NpemUgPSBkZXNp
cmVkU2l6ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7
CiAgICAgfQogICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fbWVtb3J5KTsKQEAgLTQxNSwxNiArNDQxLDE3IEBAIGJvb2wgTWVtb3J5Ojpn
cm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCiAgICAgICAgIAogICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWFya2luZyBXZWJBc3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVy
KG1fbWVtb3J5KSwgIiBhcyByZWFkK3dyaXRlIGluIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YXJ0
QWRkcmVzcyksICIsICIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFCeXRlcyksICIp
Iik7CiAgICAgICAgIGlmIChtcHJvdGVjdChzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMsIFBST1Rf
UkVBRCB8IFBST1RfV1JJVEUpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
TWVtb3J5Ojpncm93IGluLXBsYWNlIGZhaWxlZCAiLCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBkYXRhTG9nKCJtcHJvdGVjdCBmYWlsZWQ6ICIsIHN0cmVy
cm9yKGVycm5vKSwgIlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgICAgIGNvbW1pdFplcm9QYWdlcyhzdGFydEFkZHJlc3MsIGV4
dHJhQnl0ZXMpOwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSB9Ci0gICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CisgICAgfQor
ICAgIH0KKwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAKIHZvaWQgTWVtb3J5OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgKaW5kZXggNjBhOWJiNy4uM2YxOGMxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaApAQCAtMjcsOCArMjcsMTEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAorI2luY2x1ZGUgIldhc21NZW1vcnlNb2RlLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5o
IgogCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
QEAgLTM4LDE4ICs0MSw4IEBAIGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIHNob3VsZCBz
dXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI2OTMKLWVudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3QgewotICAgIEJv
dW5kc0NoZWNraW5nLAotICAgIFNpZ25hbGluZwotfTsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IE51bWJlck9mTWVtb3J5TW9kZXMgPSAyOwotSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgY2hhciog
bWFrZVN0cmluZyhNZW1vcnlNb2RlKTsKLQogY2xhc3MgTWVtb3J5IDogcHVibGljIFJlZkNvdW50
ZWQ8TWVtb3J5PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU3LDggKzUwLDkgQEAgcHVibGljOgogICAgIHZvaWQg
ZHVtcChXVEY6OlByaW50U3RyZWFtJikgY29uc3Q7CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQotICAgIAotICAgIHN0YXRpYyBSZWZQ
dHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0pOworCisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBS
ZWZQdHI8TWVtb3J5PiBjcmVhdGUoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lk
KFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAogICAgIH5N
ZW1vcnkoKTsKIApAQCAtNzUsMjIgKzY5LDM0IEBAIHB1YmxpYzoKIAogICAgIE1lbW9yeU1vZGUg
bW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogCi0gICAgLy8gZ3JvdygpIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBKU1dlYkFzc2VtYmx5TWVtb3J5IG9iamVjdCBzaW5jZSB0
aGF0IG9iamVjdCBuZWVkcyB0byB1cGRhdGUgaW50ZXJuYWwKLSAgICAvLyBwb2ludGVycyB3aXRo
IHRoZSBjdXJyZW50IGJhc2UgYW5kIHNpemUuCi0gICAgYm9vbCBncm93KFZNJiwgUGFnZUNvdW50
KTsKKyAgICBlbnVtIGNsYXNzIEdyb3dGYWlsUmVhc29uIHsKKyAgICAgICAgSW52YWxpZERlbHRh
LAorICAgICAgICBJbnZhbGlkR3Jvd1NpemUsCisgICAgICAgIFdvdWxkRXhjZWVkTWF4aW11bSwK
KyAgICAgICAgT3V0T2ZNZW1vcnksCisgICAgfTsKKyAgICBFeHBlY3RlZDxQYWdlQ291bnQsIEdy
b3dGYWlsUmVhc29uPiBncm93KFBhZ2VDb3VudCk7CiAKICAgICB2b2lkIGNoZWNrKCkgeyAgQVNT
RVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkpOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9tZW1vcnkpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9CisKIHByaXZhdGU6Ci0gICAgTWVtb3J5KHZvaWQqIG1l
bW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVk
Q2FwYWNpdHksIE1lbW9yeU1vZGUpOwotICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0pOworICAgIE1lbW9yeSgpOworICAgIE1lbW9yeSh2b2lkKiBtZW1vcnks
IFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFj
aXR5LCBNZW1vcnlNb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVz
c3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RG
OjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxi
YWNrKTsKKyAgICBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBh
Z2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAotICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgbW92ZSB0aGVzZSB0byB0aGUgaW5zdGFuY2UgdG8gYXZvaWQgYSBsb2Fk
IG9uIGluc3RhbmNlLT5pbnN0YW5jZSBjYWxscy4KKyAgICAvLyBGSVhNRTogd2UgY2FjaGUgdGhl
c2Ugb24gdGhlIGluc3RhbmNlcyB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNl
IGNhbGxzLiBUaGlzIHdpbGwgcmVxdWlyZSB1cGRhdGluZyBhbGwgdGhlIGluc3RhbmNlcyB3aGVu
IGdyb3cgaXMgY2FsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc3MzA1CiAgICAgdm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6
ZSB7IDAgfTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsOwogICAgIFBhZ2VDb3VudCBtX21heGlt
dW07CiAgICAgc2l6ZV90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07CiAgICAgTWVtb3J5TW9kZSBt
X21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBtX25vdGlmeU1lbW9yeVByZXNzdXJlOworICAgIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnk7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VD
b3VudCwgUGFnZUNvdW50KT4gbV9ncm93U3VjY2Vzc0NhbGxiYWNrOwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCmluZGV4IGJmNTY1ZjAuLmI1YzM0YmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNw
cApAQCAtNTcsNyArNTcsNyBAQCBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkKICAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNQaW5uZWRSZWdpc3Rlcklu
Zm9GbGFnLCBbXSAoKSB7CiAgICAgICAgIFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiBz
aXplUmVnaXN0ZXJzOwogICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIgPSBJbnZhbGlk
R1BSUmVnOwotICAgICAgICBHUFJSZWcgd2FzbUNvbnRleHRQb2ludGVyID0gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyID0gSW52YWxpZEdQ
UlJlZzsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9u
ZSBtZW1vcnkgc2l6ZSByZWdpc3RlciwgYW5kIHdlIHNob3VsZCBhbGxvdyBkaWZmZXJlbnQKICAg
ICAgICAgLy8gICAgICAgIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHRvIGhhdmUgZGlmZmVyZW50IHBp
bnMuIFJpZ2h0IG5vdyB3ZSB0YWtlIGEgdmVjdG9yIHdpdGggb25seSBvbmUgZW50cnkuCkBAIC02
NSwyNyArNjUsMjcgQEAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpCiAgICAgICAgIC8vICAgICAgICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRT
aXplcyA9IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBpbm5lZFJlZ2lzdGVycyA9
IHBpbm5lZFNpemVzLnNpemUoKSArIDE7Ci0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRl
eHQoKSkKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgICAgICAr
K251bWJlck9mUGlubmVkUmVnaXN0ZXJzOwogICAgICAgICBWZWN0b3I8R1BSUmVnPiBwaW5uZWRS
ZWdzID0gZ2V0UGlubmVkUmVnaXN0ZXJzKG51bWJlck9mUGlubmVkUmVnaXN0ZXJzKTsKIAogICAg
ICAgICBiYXNlTWVtb3J5UG9pbnRlciA9IHBpbm5lZFJlZ3MudGFrZUxhc3QoKTsKLSAgICAgICAg
aWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgd2FzbUNvbnRleHRQb2lu
dGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOworICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKKyAgICAgICAgICAgIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyID0gcGlubmVk
UmVncy50YWtlTGFzdCgpOwogCiAgICAgICAgIEFTU0VSVChwaW5uZWRTaXplcy5zaXplKCkgPT0g
cGlubmVkUmVncy5zaXplKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGlu
bmVkU2l6ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBzaXplUmVnaXN0ZXJzLmFwcGVuZCh7
IHBpbm5lZFJlZ3NbaV0sIHBpbm5lZFNpemVzW2ldIH0pOwotICAgICAgICBzdGF0aWNQaW5uZWRS
ZWdpc3RlckluZm8uY29uc3RydWN0KFdURk1vdmUoc2l6ZVJlZ2lzdGVycyksIGJhc2VNZW1vcnlQ
b2ludGVyLCB3YXNtQ29udGV4dFBvaW50ZXIpOworICAgICAgICBzdGF0aWNQaW5uZWRSZWdpc3Rl
ckluZm8uY29uc3RydWN0KFdURk1vdmUoc2l6ZVJlZ2lzdGVycyksIGJhc2VNZW1vcnlQb2ludGVy
LCB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgfSk7CiAKICAgICByZXR1cm4gc3Rh
dGljUGlubmVkUmVnaXN0ZXJJbmZvLmdldCgpOwogfQogCi1QaW5uZWRSZWdpc3RlckluZm86OlBp
bm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVn
aXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIsIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50
ZXIpCitQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVk
U2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50
ZXIsIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcikKICAgICA6IHNpemVSZWdpc3Rl
cnMoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSkKICAgICAsIGJhc2VNZW1vcnlQb2ludGVyKGJhc2VN
ZW1vcnlQb2ludGVyKQotICAgICwgd2FzbUNvbnRleHRQb2ludGVyKHdhc21Db250ZXh0UG9pbnRl
cikKKyAgICAsIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKHdhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5SW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oCmluZGV4IDQyMzdiYWMuLjIzMzI5ZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0
LDcgQEAgc3RydWN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8gewogc3RydWN0IFBpbm5lZFJlZ2lz
dGVySW5mbyB7CiAgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdpc3Rl
cnM7CiAgICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyOwotICAgIEdQUlJlZyB3YXNtQ29udGV4
dFBvaW50ZXI7CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwogICAgIHN0
YXRpYyBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIGdldCgpOwogICAgIFBpbm5lZFJlZ2lzdGVy
SW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiwgR1BSUmVnLCBHUFJSZWcpOwog
CkBAIC01Miw4ICs1Miw4IEBAIHN0cnVjdCBQaW5uZWRSZWdpc3RlckluZm8gewogICAgIHsKICAg
ICAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwogICAgICAgICByZXN1bHQuc2V0KGJhc2VNZW1vcnlQ
b2ludGVyKTsKLSAgICAgICAgaWYgKHdhc21Db250ZXh0UG9pbnRlciAhPSBJbnZhbGlkR1BSUmVn
KQotICAgICAgICAgICAgcmVzdWx0LnNldCh3YXNtQ29udGV4dFBvaW50ZXIpOworICAgICAgICBp
ZiAod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXQod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwogICAgICAgICBpZiAo
bW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKICAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgaW5mbyA6IHNpemVSZWdpc3RlcnMpCiAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChp
bmZvLnNpemVSZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5TW9kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5TW9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiYzk4NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlN
b2RlLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU1l
bW9yeU1vZGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NvbnN0
IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hl
Y2tpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGlu
ZyI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
ICIiOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeU1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2Rl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmYzg5NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmgKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
SlNFeHBvcnRNYWNyb3MuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsK
KworLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKK2VudW0gY2xhc3MgTWVtb3J5
TW9kZSA6IHVpbnQ4X3QgeworICAgIEJvdW5kc0NoZWNraW5nLAorICAgIFNpZ25hbGluZworfTsK
Kworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7CitKU19F
WFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCmluZGV4IDhlMzY2ZjQuLjk5
MmUzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCkBAIC01
NiwyNyArNTYsMjYgQEAgc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtlVmFsaWRh
dGlvblJlc3VsdChCQlFQbGFuJiBwbGFuKQogCiBzdGF0aWMgUGxhbjo6Q29tcGxldGlvblRhc2sg
bWFrZVZhbGlkYXRpb25DYWxsYmFjayhNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYg
Y2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tU
eXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFZNKiB2bSwgUGxhbiYgcGxhbikg
eworICAgIHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldIChQbGFuJiBwbGFuKSB7CiAgICAgICAgIEFTU0VSVCgh
cGxhbi5oYXNXb3JrKCkpOwotICAgICAgICBBU1NFUlQodm0pOwotICAgICAgICBjYWxsYmFjay0+
cnVuKCp2bSwgbWFrZVZhbGlkYXRpb25SZXN1bHQoc3RhdGljX2Nhc3Q8QkJRUGxhbiY+KHBsYW4p
KSk7CisgICAgICAgIGNhbGxiYWNrLT5ydW4obWFrZVZhbGlkYXRpb25SZXN1bHQoc3RhdGljX2Nh
c3Q8QkJRUGxhbiY+KHBsYW4pKSk7CiAgICAgfSk7CiB9CiAKLU1vZHVsZTo6VmFsaWRhdGlvblJl
c3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJj
ZSkKK01vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhDb250ZXh0
KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpCiB7Ci0gICAgUmVmPEJCUVBsYW4+
IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oJnZtLCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBs
YW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgUmVmPEJCUVBsYW4+
IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBC
QlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSwgbnVsbHB0ciwgbnVsbHB0
cikpOwogICAgIHBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKICAgICByZXR1cm4gbWFr
ZVZhbGlkYXRpb25SZXN1bHQocGxhbi5nZXQoKSk7CiB9CiAKLXZvaWQgTW9kdWxlOjp2YWxpZGF0
ZUFzeW5jKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFs
aWRhdGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit2b2lkIE1vZHVsZTo6dmFsaWRhdGVBc3luYyhD
b250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNW
YWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBSZWY8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKCpuZXcgQkJRUGxhbigmdm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRh
dGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKKyAgICBS
ZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBXVEZNb3ZlKHNv
dXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2soV1RGTW92
ZShjYWxsYmFjaykpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgV2FzbTo6ZW5zdXJlV29ya2xp
c3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOwogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6
OmdldE9yQ3JlYXRlQ29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSkKK1JlZjxDb2RlQmxvY2s+IE1v
ZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBt
b2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7CiAgICAgUmVmUHRyPENvZGVCbG9j
az4gY29kZUJsb2NrOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTg3
LDIzICs4NiwyMyBAQCBSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2Nr
KE1lbW9yeU1vZGUgbW9kZSkKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBiYWNrIG9m
ZiByZXRyeWluZyBhdCBzb21lIHBvaW50OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzA2MDcKICAgICBpZiAoIWNvZGVCbG9jayB8fCAoY29kZUJsb2Nr
LT5jb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAg
ICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUobW9kZSwgY29uc3RfY2FzdDxNb2R1
bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpKTsKKyAgICAgICAgY29kZUJsb2Nr
ID0gQ29kZUJsb2NrOjpjcmVhdGUoY29udGV4dCwgbW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZv
cm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3Jh
cHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgICAgIG1fY29kZUJsb2Nrc1tzdGF0aWNf
Y2FzdDx1aW50OF90Pihtb2RlKV0gPSBjb2RlQmxvY2s7CiAgICAgfQogICAgIHJldHVybiBjb2Rl
QmxvY2sucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpjb21w
aWxlU3luYyhNZW1vcnlNb2RlIG1vZGUpCitSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVT
eW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFw
cGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQogewotICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRl
Q29kZUJsb2NrKG1vZGUpOworICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3Jl
YXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVy
KSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBjb2RlQmxvY2stPndhaXRVbnRpbEZpbmlzaGVk
KCk7CiAgICAgcmV0dXJuIGNvZGVCbG9jazsKIH0KIAotdm9pZCBNb2R1bGU6OmNvbXBpbGVBc3lu
YyhWTSYgdm0sIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2Fs
bGJhY2smJiB0YXNrKQordm9pZCBNb2R1bGU6OmNvbXBpbGVBc3luYyhDb250ZXh0KiBjb250ZXh0
LCBNZW1vcnlNb2RlIG1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYg
dGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewotICAgIFJlZjxDb2RlQmxvY2s+
IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKG1vZGUpOwotICAgIGNvZGVCbG9jay0+
Y29tcGlsZUFzeW5jKHZtLCBXVEZNb3ZlKHRhc2spKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBjb2Rl
QmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9jayhjb250ZXh0LCBtb2RlLCBXVEZNb3ZlKGNyZWF0
ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgY29kZUJsb2NrLT5j
b21waWxlQXN5bmMoY29udGV4dCwgV1RGTW92ZSh0YXNrKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKaW5kZXgg
YTFhZjc1OC4uYTZhZTI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUg
Ildhc21Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KQEAgLTM2LDE5ICszNywyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCitzdHJ1Y3QgQ29udGV4dDsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIGNsYXNz
IFBsYW47CiAKIHVzaW5nIFNpZ25hdHVyZUluZGV4ID0gdWludDMyX3Q7Ci0gICAgCisKIGNsYXNz
IE1vZHVsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGU+IHsKIHB1YmxpYzoK
ICAgICB1c2luZyBWYWxpZGF0aW9uUmVzdWx0ID0gV1RGOjpFeHBlY3RlZDxSZWZQdHI8TW9kdWxl
PiwgU3RyaW5nPjsKLSAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZNJiwgVmFsaWRhdGlv
blJlc3VsdCYmKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZhbGlkYXRpb25SZXN1
bHQmJik7CiAgICAgdXNpbmcgQXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2sgPSBSZWZQdHI8U2hhcmVk
VGFzazxDYWxsYmFja1R5cGU+PjsKIAotICAgIHN0YXRpYyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlk
YXRlU3luYyhWTSYsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7Ci0gICAgc3RhdGljIHZvaWQg
dmFsaWRhdGVBc3luYyhWTSYsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3lu
Y1ZhbGlkYXRpb25DYWxsYmFjayYmKTsKKyAgICBzdGF0aWMgVmFsaWRhdGlvblJlc3VsdCB2YWxp
ZGF0ZVN5bmMoQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7CisgICAgc3RhdGlj
IHZvaWQgdmFsaWRhdGVBc3luYyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBN
b2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgc3RhdGljIFJlZjxNb2R1
bGU+IGNyZWF0ZShSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24pCiAg
ICAgewpAQCAtNTgsMTQgKzYwLDE0IEBAIHB1YmxpYzoKICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlKSBjb25zdDsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9k
dWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
OyB9CiAKLSAgICBSZWY8Q29kZUJsb2NrPiBjb21waWxlU3luYyhNZW1vcnlNb2RlKTsKLSAgICB2
b2lkIGNvbXBpbGVBc3luYyhWTSYsIE1lbW9yeU1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxh
dGlvbkNhbGxiYWNrJiYpOworICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKENvbnRleHQq
LCBNZW1vcnlNb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9u
KTsKKyAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ29kZUJsb2Nr
OjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRo
cm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+TW9kdWxlKCk7CiAK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1f
Y29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0uZ2V0KCk7IH0KIHByaXZhdGU6
Ci0gICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSk7Cisg
ICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCosIE1lbW9yeU1v
ZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAg
TW9kdWxlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJik7CiAgICAgUmVmPE1vZHVsZUluZm9ybWF0
aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA2Yzk0OGI1Li42ZDQ0YWMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMjksNyAr
MjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIklkZW50aWZpZXJJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAjaW5jbHVkZSAiV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgi
CiAjaW5jbHVkZSAiV2FzbU9wcy5oIgpAQCAtMjY1LDcgKzI2NCw3IEBAIGF1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1h
eGltdW0pOwogICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKICAgICAgICAgcmV0dXJuIGxpbWl0
cy5nZXRVbmV4cGVjdGVkKCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighSlNXZWJBc3NlbWJs
eVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0aWFsKSwgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
aW5pdGlhbCA+IG1heFRhYmxlRW50cmllcywgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9m
ICIsIGluaXRpYWwsICIgaXMgdG9vIGJpZywgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJpZXMpOwog
CiAgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKaW5kZXggNzRjZjY1My4uY2NkZjcy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtMzEs
OSArMzEsMTAgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNPcGFx
dWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRl
ICJXYXNtTWFjaGluZVRocmVhZHMuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCkBAIC01MSwx
MCArNTIsMTAgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdQbGFuOjpPTUdQbGFuKFJlZjxNb2R1bGU+
IG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0
aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKG51bGxwdHIsIG1ha2VSZWYoY29uc3RfY2FzdDxN
b2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3Zl
KHRhc2spKQotICAgICwgbV9tb2R1bGUobW9kdWxlLmNvcHlSZWYoKSkKLSAgICAsIG1fY29kZUJs
b2NrKCptb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKSkKK09NR1BsYW46Ok9NR1BsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250
ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fbW9kdWxlKFdURk1vdmUo
bW9kdWxlKSkKKyAgICAsIG1fY29kZUJsb2NrKCptX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUp
KQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgc2V0TW9kZSht
b2RlKTsKQEAgLTE2MiwxMyArMTYzLDEzIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlv
bkVmZm9ydCkKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKIH0KIAotdm9pZCBydW5P
TUdQbGFuRm9ySW5kZXgoQ29udGV4dCogY29udGV4dCwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkK
K3ZvaWQgT01HUGxhbjo6cnVuRm9ySW5kZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5j
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjb250ZXh0LT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29udGV4dC0+
bWVtb3J5TW9kZSgpID09IGNvZGVCbG9jay0+bV9jb2RlQmxvY2stPm1vZGUoKSk7CisgICAgV2Fz
bTo6Q29kZUJsb2NrJiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+d2FzbUNvZGVCbG9jaygpOworICAg
IEFTU0VSVChpbnN0YW5jZS0+d2FzbU1lbW9yeSgpLT5tb2RlKCkgPT0gY29kZUJsb2NrLm1vZGUo
KSk7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+dGllclVwQ291bnQoZnVuY3Rp
b25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAoKSkgewotICAgICAgICBSZWY8UGxhbj4gcGxhbiA9
IGFkb3B0UmVmKCpuZXcgT01HUGxhbihjb250ZXh0LT5tb2R1bGUoKS0+bW9kdWxlKCksIGZ1bmN0
aW9uSW5kZXgsIGNvZGVCbG9jay0+bV9jb2RlQmxvY2stPm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFs
aXplKCkpKTsKKyAgICBpZiAoY29kZUJsb2NrLnRpZXJVcENvdW50KGZ1bmN0aW9uSW5kZXgpLnNo
b3VsZFN0YXJ0VGllclVwKCkpIHsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigq
bmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFu
Y2UtPndhc21Nb2R1bGUoKSksIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46
OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFu
LmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29uY3VycmVu
dEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAppbmRleCA3MTY0YTllLi5iODA4MjUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKQEAgLTI3LDcgKzI3LDYg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2Fz
bVBsYW4uaCIKQEAgLTQxLDE3ICs0MCwyMCBAQCBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBPTUdQ
bGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQbGFu
OwotICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5j
ZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4K
LSAgICBPTUdQbGFuKFJlZjxNb2R1bGU+LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlN
b2RlLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICFtX2NvbXBsZXRlZDsgfQogICAgIHZvaWQgd29yayhDb21waWxhdGlvbkVm
Zm9ydCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHN0YXRpYyB2b2lkIHJ1bkZvckluZGV4KEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworCiBwcml2YXRlOgogICAg
IC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBj
bGFzc2VzLi4uCiAgICAgdXNpbmcgQmFzZTo6bV9sb2NrOwogCisgICAgLy8gTm90ZTogQ29tcGxl
dGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lz
ZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgorICAgIE9NR1BsYW4oQ29udGV4dCos
IFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBs
ZXRpb25UYXNrJiYpOworCiAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9jb21wbGV0ZWQ7IH0KICAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIpIG92ZXJyaWRlCiAgICAgewpAQCAtNjUsOCArNjcsNiBAQCBwcml2YXRlOgog
ICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKIH07CiAKLXZvaWQgcnVuT01HUGxhbkZvcklu
ZGV4KENvbnRleHQqLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKLQogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAppbmRleCBlNDM4NDdjLi5lZjA1ZjMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDYgKzU3LDEx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBwYWdlQ291bnQgPD0gbWF4UGFnZUNv
dW50OwogICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzVmFsaWQobV9wYWdlQ291bnQpOworICAgIH0KIAogICAgIHN0YXRpYyBQYWdl
Q291bnQgZnJvbUJ5dGVzKHVpbnQ2NF90IGJ5dGVzKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBiYTI3Y2Y5Li5kMDYzY2MxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxs
ZWUuaCIKQEAgLTUxLDIwICs0OSwyNyBAQCBuYW1lc3BhY2UgV2FzbVBsYW5JbnRlcm5hbCB7CiBz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZt
LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK1Bs
YW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBD
b21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6
IG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShpbmZvKSkKKyAgICAsIG1fY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyKFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSkKKyAgICAsIG1fdGhyb3dX
YXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbikKICAgICAsIG1fc291cmNlKG1fbW9kdWxl
SW5mb3JtYXRpb24tPnNvdXJjZS5kYXRhKCkpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChtX21vZHVs
ZUluZm9ybWF0aW9uLT5zb3VyY2Uuc2l6ZSgpKQogewotICAgIG1fY29tcGxldGlvblRhc2tzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcih2bSwgV1RGTW92ZSh0YXNrKSkpOworICAgIG1fY29tcGxldGlv
blRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9
CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3Vy
Y2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK1BsYW46OlBsYW4oQ29udGV4dCogY29u
dGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
CisgICAgOiBQbGFuKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIG51bGxw
dHIsIG51bGxwdHIpCit7Cit9CisKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3Qg
dWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBDb21wbGV0aW9uVGFzayYmIHRh
c2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3Jt
YXRpb24oVmVjdG9yPHVpbnQ4X3Q+KCkpKSkKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAs
IG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKIHsKLSAgICBtX2NvbXBsZXRpb25UYXNrcy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIodm0sIFdURk1vdmUodGFzaykpKTsKKyAgICBtX2NvbXBsZXRp
b25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwog
fQogCiB2b2lkIFBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYp
CkBAIC03MiwxOCArNzcsMTggQEAgdm9pZCBQbGFuOjpydW5Db21wbGV0aW9uVGFza3MoY29uc3Qg
QWJzdHJhY3RMb2NrZXImKQogICAgIEFTU0VSVChpc0NvbXBsZXRlKCkgJiYgIWhhc1dvcmsoKSk7
CiAKICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX2NvbXBsZXRpb25UYXNrcykKLSAgICAgICAgdGFz
ay5zZWNvbmQtPnJ1bih0YXNrLmZpcnN0LCAqdGhpcyk7CisgICAgICAgIHRhc2suc2Vjb25kLT5y
dW4oKnRoaXMpOwogICAgIG1fY29tcGxldGlvblRhc2tzLmNsZWFyKCk7CiAgICAgbV9jb21wbGV0
ZWQubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgUGxhbjo6YWRkQ29tcGxldGlvblRhc2soVk0mIHZt
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCit2b2lkIFBsYW46OmFkZENvbXBsZXRpb25UYXNrKENv
bnRleHQqIGNvbnRleHQsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKIHsKICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwogICAgIGlmICghaXNDb21wbGV0ZSgpKQotICAgICAgICBtX2NvbXBs
ZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoJnZtLCBXVEZNb3ZlKHRhc2spKSk7Cisg
ICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0LCBX
VEZNb3ZlKHRhc2spKSk7CiAgICAgZWxzZQotICAgICAgICB0YXNrLT5ydW4oJnZtLCAqdGhpcyk7
CisgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CiB9CiAKIHZvaWQgUGxhbjo6d2FpdEZvckNvbXBs
ZXRpb24oKQpAQCAtOTQsMTkgKzk5LDE5IEBAIHZvaWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24o
KQogICAgIH0KIH0KIAotYm9vbCBQbGFuOjp0cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdChWTSYg
dm0pCitib29sIFBsYW46OnRyeVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYg
Y29udGV4dCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogCiAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgLy8gV2UgYWxsb3cgdGhlIGZpcnN0IGNvbXBsZXRp
b24gdGFzayB0byBub3QgaGF2ZSBhIHZtLgorICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZmlyc3Qg
Y29tcGxldGlvbiB0YXNrIHRvIG5vdCBoYXZlIGEgQ29udGV4dC4KICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG1fY29tcGxldGlvblRhc2tzLnNpemUoKTsgKytpKQogICAgICAgICAg
ICAgQVNTRVJUKG1fY29tcGxldGlvblRhc2tzW2ldLmZpcnN0KTsKICAgICB9CiAKICAgICBib29s
IHJlbW92ZWRBbnlUYXNrcyA9IGZhbHNlOwotICAgIG1fY29tcGxldGlvblRhc2tzLnJlbW92ZUFs
bE1hdGNoaW5nKFsmXSAoY29uc3Qgc3RkOjpwYWlyPFZNKiwgQ29tcGxldGlvblRhc2s+JiBwYWly
KSB7Ci0gICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFpci5maXJzdCA9PSAmdm07CisgICAg
bV9jb21wbGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBzdGQ6OnBhaXI8
Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiYgcGFpcikgeworICAgICAgICBib29sIHNob3VsZFJl
bW92ZSA9IHBhaXIuZmlyc3QgPT0gJmNvbnRleHQ7CiAgICAgICAgIHJlbW92ZWRBbnlUYXNrcyB8
PSBzaG91bGRSZW1vdmU7CiAgICAgICAgIHJldHVybiBzaG91bGRSZW1vdmU7CiAgICAgfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCAxMGY4YTFiLi43YTA3YmZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTI4LDggKzI4LDggQEAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgot
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRl
ICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNp
bmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KQEAgLTM5LDI1
ICszOSwyNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxMaW5rSW5mbzsKLWNsYXNz
IEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBX
YXNtIHsKIAorc3RydWN0IENvbnRleHQ7CisKIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8UGxhbj4gewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5
cGUoVk0qLCBQbGFuJik7CisgICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShQbGFuJik7CiAg
ICAgdXNpbmcgQ29tcGxldGlvblRhc2sgPSBSZWZQdHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+
PjsKLSAgICBzdGF0aWMgQ29tcGxldGlvblRhc2sgZG9udEZpbmFsaXplKCkgeyByZXR1cm4gY3Jl
YXRlU2hhcmVkVGFzazxDYWxsYmFja1R5cGU+KFtdKFZNKiwgUGxhbiYpIHsgfSk7IH0KLSAgICBQ
bGFuKFZNKiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJik7CisKKyAg
ICBzdGF0aWMgQ29tcGxldGlvblRhc2sgZG9udEZpbmFsaXplKCkgeyByZXR1cm4gY3JlYXRlU2hh
cmVkVGFzazxDYWxsYmFja1R5cGU+KFtdKFBsYW4mKSB7IH0pOyB9CisgICAgUGxhbihDb250ZXh0
KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgUGxhbihDb250ZXh0KiwgUmVm
PE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJik7CiAKICAgICAvLyBOb3RlOiBU
aGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFs
bHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBs
ZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNfRVhQ
T1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9yZGVy
aW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQogICAgIC8vIGNvbXBsZXRpb24g
dGFza3MgYmVpbmcgY2FsbGVkLgotICAgIHZvaWQgYWRkQ29tcGxldGlvblRhc2soVk0mLCBDb21w
bGV0aW9uVGFzayYmKTsKKyAgICB2b2lkIGFkZENvbXBsZXRpb25UYXNrKENvbnRleHQqLCBDb21w
bGV0aW9uVGFzayYmKTsKIAogICAgIHZvaWQgc2V0TW9kZShNZW1vcnlNb2RlIG1vZGUpIHsgbV9t
b2RlID0gbW9kZTsgfQogICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
ZTsgfQpAQCAtNzIsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdhaXRGb3JDb21wbGV0
aW9uKCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGNhbmNlbGxlZCB0aGUgcGxhbi4KLSAg
ICBib29sIHRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJik7CisgICAgYm9vbCB0cnlSZW1v
dmVDb250ZXh0QW5kQ2FuY2VsSWZMYXN0KENvbnRleHQmKTsKIAogcHJvdGVjdGVkOgogICAgIHZv
aWQgcnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CkBAIC04Myw3ICs4
NSwxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxl
SW5mb3JtYXRpb247CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFZNKiwgQ29tcGxldGlvblRhc2s+
LCAxPiBtX2NvbXBsZXRpb25UYXNrczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENvbnRleHQqLCBD
b21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRhc2tzOworCisgICAgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyOworICAgIFRocm93V2FzbUV4Y2VwdGlv
biBtX3Rocm93V2FzbUV4Y2VwdGlvbiB7IG51bGxwdHIgfTsKIAogICAgIGNvbnN0IHVpbnQ4X3Qq
IG1fc291cmNlOwogICAgIGNvbnN0IHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKaW5kZXggOGI2MDBlZC4uNmE0MmQ1
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
MTAgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5o
IgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCmluZGV4IGU0MTNiMjUuLmFhY2Vk
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCAr
NDMsNiBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZN
OwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIHVzaW5nIFNpZ25hdHVyZUFyZ0NvdW50ID0gdWludDMy
X3Q7CkBAIC0xNTYsNyArMTU0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
Oldhc206OlNpZ25hdHVyZUhhc2g+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEoKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gU2lnbmF0dXJlIGluZm9ybWF0aW9uIGlz
IGhlbGQgZ2xvYmFsbHkgYW5kIHNoYXJlZCBieSBWTXMgdG8gYWxsb3cgYWxsIHNpZ25hdHVyZXMg
dG8gYmUgdW5pcXVlLiBUaGlzIGlzIHJlcXVpcmVkIHdoZW4gd2FzbSBjYWxscyBhbm90aGVyIHdh
c20gaW5zdGFuY2UsIGFuZCBtdXN0IHdvcmsgd2hlbiBtb2R1bGVzIGFyZSBzaGFyZWQgYmV0d2Vl
biBtdWx0aXBsZSBWTXMuCisvLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxs
eSBhbmQgc2hhcmVkIGJ5IHRoZSBlbnRpcmUgcHJvY2VzcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJl
cyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIg
d2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3
ZWVuIG11bHRpcGxlIFZNcy4KIC8vIE5vdGU6IHNpZ25hdHVyZXMgYXJlIG5ldmVyIHJlbW92ZWQg
YmVjYXVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgYWNjb3VudGluZyBmb3IgYWxsIFdlYkFzc2VtYmx5
Lk1vZHVsZSBhbmQgd2hpY2ggc2lnbmF0dXJlcyB0aGV5IHVzZS4gVGhlIG1heGltdW0gbnVtYmVy
IG9mIHNpZ25hdHVyZXMgaXMgYm91bmRlZCwgYW5kIGlzbid0IHdvcnRoIHRoZSBjb3VudGluZyBv
dmVyaGVhZC4gV2UgY291bGQgY2xlYXIgZXZlcnl0aGluZyB3aGVuIHdlIHJlYWNoIHplcm8gb3V0
c3RhbmRpbmcgV2ViQXNzZW1ibHkuTW9kdWxlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2MDM3CiBjbGFzcyBTaWduYXR1cmVJbmZvcm1hdGlvbiB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU2lnbmF0dXJlSW5mb3JtYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNmRlZmFlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Fz
bVRhYmxlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlIDx3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK1JlZlB0cjxUYWJsZT4gVGFibGU6OmNyZWF0
ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQorewor
ICAgIGlmICghaXNWYWxpZFNpemUoaW5pdGlhbCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKFRhYmxl
KSkpIFRhYmxlKGluaXRpYWwsIG1heGltdW0pKTsKK30KKworVGFibGU6On5UYWJsZSgpCit7Cit9
CisKK1RhYmxlOjpUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBtYXhpbXVtKQoreworICAgIG1fc2l6ZSA9IGluaXRpYWw7CisgICAgbV9tYXhpbXVtID0gbWF4
aW11bTsKKyAgICBBU1NFUlQoaXNWYWxpZFNpemUobV9zaXplKSk7CisgICAgQVNTRVJUKCFtX21h
eGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOworCisgICAgLy8gRklYTUU6IEl0IG1pZ2h0
IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyBy
ZWNvbW1lbmRzIGRvaW5nIHNvLgorICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcg
dGhhdC4KKyAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9u
Pjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNp
emVfdD4oc2l6ZSgpKSk7CisgICAgbV9pbnN0YW5jZXMgPSBNYWxsb2NQdHI8SlNXZWJBc3NlbWJs
eUluc3RhbmNlKj46Om1hbGxvYyhzaXplb2YoSlNXZWJBc3NlbWJseUluc3RhbmNlKikgKiBzdGF0
aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBz
aXplKCk7ICsraSkgeworICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6
Q2FsbGFibGVGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaV0u
c2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSBy
ZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KKyAgICAgICAgbV9pbnN0YW5jZXMuZ2V0KClb
aV0gPSBudWxscHRyOworICAgIH0KK30KKworc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gVGFibGU6
Omdyb3codWludDMyX3QgZGVsdGEpCit7CisgICAgaWYgKGRlbHRhID09IDApCisgICAgICAgIHJl
dHVybiBzaXplKCk7CisKKyAgICB1c2luZyBDaGVja2VkID0gQ2hlY2tlZDx1aW50MzJfdCwgUmVj
b3JkT3ZlcmZsb3c+OworICAgIENoZWNrZWQgbmV3U2l6ZUNoZWNrZWQgPSBzaXplKCk7CisgICAg
bmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7CisgICAgdWludDMyX3QgbmV3U2l6ZTsKKyAgICBpZiAo
bmV3U2l6ZUNoZWNrZWQuc2FmZUdldChuZXdTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJm
bG93KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKG1heGltdW0oKSAm
JiBuZXdTaXplID4gKm1heGltdW0oKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoIWlzVmFsaWRTaXplKG5ld1NpemUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgeworICAgICAgICBDaGVja2VkIHJlYWxsb2NGdW5jdGlvbnNTaXplQ2hlY2tlZCA9
IG5ld1NpemVDaGVja2VkOworICAgICAgICByZWFsbG9jRnVuY3Rpb25zU2l6ZUNoZWNrZWQgKj0g
c2l6ZW9mKENhbGxhYmxlRnVuY3Rpb24pOworICAgICAgICB1aW50MzJfdCByZWFsbG9jRnVuY3Rp
b25zU2l6ZTsKKyAgICAgICAgaWYgKHJlYWxsb2NGdW5jdGlvbnNTaXplQ2hlY2tlZC5zYWZlR2V0
KHJlYWxsb2NGdW5jdGlvbnNTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgbV9mdW5jdGlvbnMucmVhbGxv
YyhyZWFsbG9jRnVuY3Rpb25zU2l6ZSk7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6
ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgp
W2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgfQorICAgIAorICAgIHsKKyAgICAg
ICAgQ2hlY2tlZCByZWFsbG9jSW5zdGFuY2VzU2l6ZUNoZWNrZWQgPSBuZXdTaXplQ2hlY2tlZDsK
KyAgICAgICAgcmVhbGxvY0luc3RhbmNlc1NpemVDaGVja2VkICo9IHNpemVvZihKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqKTsKKyAgICAgICAgdWludDMyX3QgcmVhbGxvY0luc3RhbmNlc1NpemU7Cisg
ICAgICAgIGlmIChyZWFsbG9jSW5zdGFuY2VzU2l6ZUNoZWNrZWQuc2FmZUdldChyZWFsbG9jSW5z
dGFuY2VzU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIG1faW5zdGFuY2VzLnJlYWxsb2MocmVhbGxvY0lu
c3RhbmNlc1NpemUpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdT
aXplOyArK2kpCisgICAgICAgICAgICBtX2luc3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7Cisg
ICAgfQorCisgICAgbV9zaXplID0gbmV3U2l6ZTsKKworICAgIHJldHVybiBuZXdTaXplOworfQor
Cit2b2lkIFRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0g
PSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgp
W2luZGV4XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7
IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1faW5zdGFuY2VzLmdl
dCgpW2luZGV4XSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgVGFibGU6OnNldEZ1bmN0aW9uKHVpbnQz
Ml90IGluZGV4LCBDYWxsYWJsZUZ1bmN0aW9uIGZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAg
ICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbjsKKyAgICBtX2luc3RhbmNlcy5n
ZXQoKVtpbmRleF0gPSBpbnN0YW5jZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OlRhYmxl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDhlYzgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUu
aApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbUxpbWl0cy5oIgorI2luY2x1ZGUgPHd0
Zi9NYWxsb2NQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hv
dWxkIGJlIFdhc206Okluc3RhbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorCituYW1l
c3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhYmxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFRhYmxlPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDcmVhdGVGYWlsIHsKKyAgICAgICAg
SW52YWxpZFNpemUsCisgICAgfTsKKyAgICBzdGF0aWMgUmVmUHRyPFRhYmxlPiBjcmVhdGUodWlu
dDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB+VGFibGUoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKyAgICB1aW50MzJfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
Z3Jvdyh1aW50MzJfdCBkZWx0YSkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZvaWQgY2xlYXJG
dW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9pZCBzZXRGdW5jdGlvbih1aW50MzJfdCwgQ2FsbGFi
bGVGdW5jdGlvbiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7IC8vIEZJWE1FIG1ha2UgdGhpcyBX
YXNtOjpJbnN0YW5jZS4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCisKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwg
bV9zaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1fZnVuY3Rpb25zKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFi
bGUsIG1faW5zdGFuY2VzKTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMy
X3Qgc2l6ZSkgeyByZXR1cm4gc2l6ZSA8IG1heFRhYmxlRW50cmllczsgfQorCitwcml2YXRlOgor
ICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW0pOworCisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOworICAgIHVpbnQz
Ml90IG1fc2l6ZTsKKyAgICBNYWxsb2NQdHI8Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7
CisgICAgLy8gY2FsbF9pbmRpcmVjdCBuZWVkcyB0byBkbyBhbiBJbnN0YW5jZSBjaGVjayB0byBw
b3RlbnRpYWxseSBjb250ZXh0IHN3aXRjaCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0byBhbm90
aGVyIGluc3RhbmNlLiBXZSBjYW4gaG9sZCByYXcgcG9pbnRlcnMgdG8gSW5zdGFuY2UgaGVyZSBi
ZWNhdXNlIHRoZSBlbWJlZGRlciBlbnN1cmVzIHRoYXQgVGFibGUga2VlcHMgYWxsIHRoZSBpbnN0
YW5jZXMgYWxpdmUuIFdlIGNvdWxkbid0IGhvbGQgYSBSZWYgaGVyZSBiZWNhdXNlIGl0IHdvdWxk
IGNhdXNlIGN5Y2xlcy4KKyAgICBNYWxsb2NQdHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4gbV9p
bnN0YW5jZXM7IC8vIEZJWE1FIG1ha2UgdGhpcyBhIFdhc206Okluc3RhbmNlLiBodHRwczovL3dl
YmtpdC5vcmcvYi8xNzc0NzIKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaHVua3MuY3BwCmluZGV4IDk3N2IwMWIuLmMyMzU5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBAIC0yOSwxMSArMjksOSBAQAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkZyYW1l
VHJhY2Vycy5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVEV4
Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgog
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21Db250
ZXh0LmgiCkBAIC00OCw0NiArNDYsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhj
ZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYKIAogICAg
IC8vIFRoZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVzdCBtb3ZlIEV4Y2VwdGlvblR5cGUgaW50
byB0aGUgYXJndW1lbnRHUFIxIGJlZm9yZSBqdW1waW5nIGhlcmUuCiAgICAgLy8gV2UncmUgYWxs
b3dlZCB0byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZS4gV2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVz
ZSBjYWxsZWUgc2F2ZXMuCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjph
cmd1bWVudEdQUjIsIENvbnRleHQ6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwogICAgIGppdC5qdW1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKICAgICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbm90IHJl
YWNoIHRoaXMuCiAKLSAgICB2b2lkKiAoKnRocm93V2FzbUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwg
V2FzbTo6RXhjZXB0aW9uVHlwZSwgV2FzbTo6Q29udGV4dCopID0gW10gKEV4ZWNTdGF0ZSogZXhl
YywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCkg
LT4gdm9pZCogewotICAgICAgICBWTSogdm0gPSB3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgewotICAg
ICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAg
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9i
YWxPYmplY3QoKTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yOyAKLSAgICAgICAgICAg
IGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCi0gICAgICAgICAgICAg
ICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3I6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlS
dW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlw
ZSh0eXBlKSk7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBl
cnJvcik7Ci0gICAgICAgIH0KLQotICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAg
ICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgQVNTRVJUKCEh
dm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IG1ha2UgdGhpcyBiZXR0ZXI6Ci0gICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQg
dGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKLSAg
ICAgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBW
TS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQotICAgICAgICAvLyB0aGlzIHNp
bmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQg
bWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCi0gICAgICAgIC8vIGZvciBleGNlcHRpb25zIGZp
cnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9y
ZSBqdW1waW5nCi0gICAgICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlk
IHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCi0gICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICAgICAgYml0
d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4od2FzbUNvbnRleHQtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsK
LSAgICAgICAgcmV0dXJuIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKLSAgICB9OwotCisg
ICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xl
dG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNt
RXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cih0aHJvd1dhc21FeGNlcHRpb24pKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBm
cm9tIFdhc20iKSk7CiB9CiAKQEAgLTExOSw4ICs4OSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikK
ICNlbmRpZgogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclBy
ZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNU
b1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsK
IAotICAgIGppdC5sb2FkV2FzbUNvbnRleHQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihydW5PTUdQbGFuRm9ySW5kZXgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBq
aXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB0
eXBlZGVmIHZvaWQgKCpSdW4pKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90KTsKKyAg
ICBSdW4gcnVuID0gT01HUGxhbjo6cnVuRm9ySW5kZXg7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocnVuKSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsK
IAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0
YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsK
QEAgLTE0Miw2ICsxMTQsMTkgQEAgVGh1bmtzJiBUaHVua3M6OnNpbmdsZXRvbigpCiAgICAgcmV0
dXJuICp0aHVua3M7CiB9CiAKK3ZvaWQgVGh1bmtzOjpzZXRUaHJvd1dhc21FeGNlcHRpb24oVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgLy8gVGhlIHRodW5rcyBhcmUgdW5pcXVlIGZvciB0aGUg
ZW50aXJlIHByb2Nlc3MsIHRoZXJlZm9yZSBjaGFuZ2luZyB0aGUgdGhyb3dpbmcgZnVuY3Rpb24g
Y2hhbmdlcyBpdCBmb3IgYWxsIHVzZXMgb2YgV2ViQXNzZW1ibHkuCisgICAgUkVMRUFTRV9BU1NF
UlQoIW1fdGhyb3dXYXNtRXhjZXB0aW9uIHx8IG1fdGhyb3dXYXNtRXhjZXB0aW9uID09IHRocm93
V2FzbUV4Y2VwdGlvbik7CisgICAgbV90aHJvd1dhc21FeGNlcHRpb24gPSB0aHJvd1dhc21FeGNl
cHRpb247Cit9CisKK1Rocm93V2FzbUV4Y2VwdGlvbiBUaHVua3M6OnRocm93V2FzbUV4Y2VwdGlv
bigpCit7CisgICAgcmV0dXJuIG1fdGhyb3dXYXNtRXhjZXB0aW9uOworfQorCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmgKaW5kZXggZGYxNGNhMi4uNTI5NzY0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUg
Ildhc21FbWJlZGRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBA
IC00Miw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAg
ICAgc3RhdGljIFRodW5rcyYgc2luZ2xldG9uKCk7CiAKKyAgICB2b2lkIHNldFRocm93V2FzbUV4
Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24pOworICAgIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24oKTsKKwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViKFRodW5r
R2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1Yihjb25zdCBBYnN0cmFj
dExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhp
c3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsKQEAgLTUwLDYgKzU0LDcgQEAgcHJpdmF0ZToKICAg
ICBUaHVua3MoKSA9IGRlZmF1bHQ7CiAKICAgICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY+IG1fc3R1YnM7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhy
b3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2NrOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggOWM1YjY4NC4u
MmZlMTMyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmts
aXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3Bw
CkBAIC0yMiw2ICsyMiw3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
KwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBAIC0x
NzIsMTMgKzE3MywxMyBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5
KFBsYW4mIHBsYW4pCiAgICAgcGxhbi53YWl0Rm9yQ29tcGxldGlvbigpOwogfQogCi12b2lkIFdv
cmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxs
UGxhbnNGb3JDb250ZXh0KENvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CiAgICAgVmVjdG9yPFF1ZXVlRWxlbWVudD4gZWxlbWVudHM7CiAgICAgd2hp
bGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9
IG1fcXVldWUuZGVxdWV1ZSgpOwotICAgICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxh
bi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAgICBib29sIGRpZENhbmNl
bCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0
KTsKICAgICAgICAgaWYgKCFkaWRDYW5jZWwpCiAgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQo
V1RGTW92ZShlbGVtZW50KSk7CiAgICAgfQpAQCAtMTg4LDcgKzE4OSw3IEBAIHZvaWQgV29ya2xp
c3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKIAogICAgIGZvciAoYXV0byYgdGhyZWFkIDog
bV90aHJlYWRzKSB7CiAgICAgICAgIGlmICh0aHJlYWQtPmVsZW1lbnQucGxhbikgewotICAgICAg
ICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1B
bmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQt
PmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsK
ICAgICAgICAgICAgIGlmIChkaWRDYW5jZWwpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBkZWFkbG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNh
bid0IGJsb2NrIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGEgbmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0
aGUgbG9jayB0byBkbyBzby4KICAgICAgICAgICAgICAgICB0aHJlYWQtPnN5bmNocm9uaXplLndh
aXQoKm1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
V29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCmlu
ZGV4IDZiNjkzNTIuLjc0OGE5ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Xb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21X
b3JrbGlzdC5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
LSNpbmNsdWRlICJWTS5oIgotCiAjaW5jbHVkZSA8cXVldWU+CiAKICNpbmNsdWRlIDx3dGYvQXV0
b21hdGljVGhyZWFkLmg+CkBAIC0zNywxMCArMzUsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENv
bnRleHQ7CiBjbGFzcyBQbGFuOwogCiBjbGFzcyBXb3JrbGlzdCB7CkBAIC01MCwxMyArNDcsMTAg
QEAgcHVibGljOgogICAgIH5Xb3JrbGlzdCgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbnF1ZXVlKFJlZjxQbGFuPik7Ci0gICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JWTShWTSYpOwor
ICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yQ29udGV4dChDb250ZXh0Jik7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYpOwogCi0gICAg
dm9pZCBhY3RpdmF0ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7Ci0gICAgdm9pZCBk
ZWFjdGl2ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7Ci0KICAgICBlbnVtIGNsYXNz
IFByaW9yaXR5IHsKICAgICAgICAgU2h1dGRvd24sCiAgICAgICAgIFN5bmNocm9ub3VzLApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmMyYjcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlv
bkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorewor
ICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRK
SVQ7CisKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlv
bj4oKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgIC8vIEZJWE1FIFN0
b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1MzIxCisgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
NjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0
aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3Jl
UHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9u
OworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92
ZUxvY2F0aW9uKTsKKyAgICB9KTsKKworICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlu
bmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9T
YXZlID0gcGlubmVkUmVncy50b1NhdmUobW9kZSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKTsKKyAgICAv
LyBUaGV5IHNob3VsZCBhbGwgYmUgY2FsbGVlIHNhdmVzLgorICAgIHRvU2F2ZS5maWx0ZXIoUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgQVNTRVJUKHRvU2F2ZS5udW1i
ZXJPZlNldEdQUnMoKSA9PSB0b1NhdmVTaXplKTsKKyNlbmRpZgorCisgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpP
ZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQpOworICAgIHJlc3VsdC0+ZW50cnlwb2lu
dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9TcGlsbDsKKworICAgIHVuc2lnbmVk
IHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yodm9pZCop
OworICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6
ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
Qyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAg
ICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBp
ZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAg
ICAgICArK251bUdQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpG
MzI6CisgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgKytudW1GUFJz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdG90YWxG
cmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygp
LCB0b3RhbEZyYW1lU2l6ZSk7CisgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHRvdGFsRnJhbWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKworICAgIC8vIFdlIHNhdmUgYWxsIHRoZXNlIHJlZ2lzdGVycyByZWdhcmRsZXNzIG9m
IGhhdmluZyBhIG1lbW9yeSBvciBub3QuCisgICAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHdlIHVz
ZSBvbmUgb2YgdGhlc2UgYXMgYSBzY3JhdGNoLiBUaGF0IHNhaWQsCisgICAgLy8gYWxtb3N0IGFs
bCByZWFsIHdhc20gcHJvZ3JhbXMgdXNlIG1lbW9yeSwgc28gaXQncyBub3QgcmVhbGx5CisgICAg
Ly8gd29ydGggb3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhhdCB0aGV5IGRvbid0LgorICAgIGZv
ciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxs
KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAg
ICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBqaXQu
c3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIG9mZnNldCkpOworICAgIH0KKworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNl
R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKworICAgIHsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMg
PSAwOworICAgICAgICBudW1GUFJzID0gMDsKKyAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0
IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCisgICAgICAgIC8vIHdlIGNhbiB1
c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwor
CisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisKKyAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBw
YXNzZXMgV2FzbTo6Q29udGV4dConcyBpbnN0YW5jZSBhcyB0aGUgZmlyc3QgSlMgYXJndW1lbnQg
d2hlbiB3ZSdyZQorICAgICAgICAvLyBub3QgdXNpbmcgZmFzdCBUTFMgdG8gaG9sZCB0aGUgV2Fz
bTo6Q29udGV4dConcyBpbnN0YW5jZS4KKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExT
KCkpIHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BS
KTsKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIH0KKworICAgICAgICBwdHJkaWZmX3Qgd2FzbU9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICAgICAg
c3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6
STMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51
bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkkzMikg
eworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkg
PT0gV2FzbTo6STMyKQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwg
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytudW1HUFJzOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdh
c206OkY2NDoKKyAgICAgICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWdu
YXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkp
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
c3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9
IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpCisgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsK
KyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVy
OworCisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
YmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnko
KSksIGJhc2VNZW1vcnkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBp
bm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXpl
KCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAv
LyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRl
cyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5
OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tp
XS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXpl
UmVnaXN0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJh
c2VNZW1vcnkpOworICAgIH0KKworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICBB
U1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkp
OworICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1
bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7CisgICAgfSk7CisKKworICAgIGZvciAo
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7
CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAg
QVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZf
dCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCBy
ZWcpOworICAgIH0KKworICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAg
IGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBqaXQubW92ZUZsb2F0VG8zMihGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJl
dHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGI5OGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFj
ZSBXYXNtIHsKKworc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVu
YW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKcmVu
YW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKc2ltaWxhcml0eSBp
bmRleCA2MiUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3Nl
bWJseS5oCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmgKaW5kZXggMGZhZjk3Ny4uYzU3OGRmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHkuaApAQCAtMjgsMzEgKzI4LDMxIEBACiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgotI2luY2x1ZGUgImpz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgotI2luY2x1ZGUg
ImpzL0pTV2ViQXNzZW1ibHlUYWJsZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJv
clByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNs
dWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9X
ZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlM
aW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TGlua0Vycm9y
UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5TW9kdWxlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpz
L1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5
VGFibGVDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0
b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBl
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVByb3RvdHlwZS5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHAKaW5kZXggZjkxZTZjNy4uMDgyNTE1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAK
QEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlN
b2R1bGUuaCIKLSNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIApAQCAtNDQsNyArNDQsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscAog
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKFZN
JiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUpCiB7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUlu
Zm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpOwotICAgIGF1
dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1
bmN0aW9uQ291bnQoKSkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVC
bG9jayksIG1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwKSkgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayh2bSwgV1RGTW92ZShjb2RlQmxvY2spLCBtb2R1bGVJbmZvcm1hdGlv
bik7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgbW9kdWxlKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtNTgsNyArNTgsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAg
IG1fd2FzbVRvSlNFeGl0U3R1YnMucmVzZXJ2ZUNhcGFjaXR5KG1fY29kZUJsb2NrLT5mdW5jdGlv
bkltcG9ydENvdW50KCkpOwogICAgIGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBv
cnRJbmRleCA8IG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7ICsraW1wb3J0SW5k
ZXgpIHsKICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuYXQoaW1wb3J0SW5k
ZXgpOwotICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9Kcygmdm0sIG1fY2FsbExp
bmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKKyAgICAgICAgYXV0byBiaW5k
aW5nID0gV2FzbTo6d2FzbVRvSlMoJnZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4
LCBpbXBvcnRJbmRleCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghYmluZGluZykpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoYmluZGluZy5lcnJvcigpKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206
OkJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeToKQEAgLTY4LDcgKzY4LDcgQEAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpD
b2RlQmxvY2s+JiYgY28KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KICAgICAgICAgbV93YXNtVG9KU0V4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQo
YmluZGluZy52YWx1ZSgpKTsKLSAgICAgICAgaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4
KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOworICAgICAgICBtX2NvZGVCbG9jay0+aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGlt
cG9ydEluZGV4KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOwogICAgIH0KIH0KIApAQCAtODMsMTEgKzgzLDYgQEAgdm9pZCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2Fz
dDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
On5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKCk7CiB9CiAKLWJvb2wgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6aXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAotewot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNTYWZlVG9SdW4obWVtb3J5LT5tZW1vcnkoKS5tb2Rl
KCkpOwotfQotCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsSUNzKFZN
JiB2bSkKIHsKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAppbmRleCA1MjcwM2Y4Li5hYmI4YzY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oCkBAIC02NCwzOSArNjQsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLndl
YkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CiAgICAgfQogCi0gICAgdW5zaWduZWQgZnVuY3Rpb25J
bXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENv
dW50KCk7IH0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVy
biBtX21vZHVsZS5nZXQoKTsgfQorICAgIFdhc206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyBy
ZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KIAotICAgIGJvb2wgaXNTYWZlVG9SdW4oSlNXZWJB
c3NlbWJseU1lbW9yeSopIGNvbnN0OworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSopOwogCi0gICAgLy8gVGhlc2UgdHdvIGNhbGxl
ZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVs
YXRlZC4KLQotICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBB
U1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAg
IH0KLSAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAgIH0KLQotICAgIFdhc206Oldhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0
SW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVy
biAmaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2
b2lkKikgKiBpbXBvcnRJbmRleDsKLSAgICB9Ci0KLSAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVC
bG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9Ci0KICAgICB2b2lkIGNsZWFySlND
YWxsSUNzKFZNJik7CiAKICAgICBib29sIHJ1bm5hYmxlKCkgY29uc3QgeyByZXR1cm4gIW1fZXJy
b3JNZXNzYWdlOyB9CkBAIC0xMTQsMjEgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRTdHVi
cygpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
Zih2b2lkKik+KHNpemVvZihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBv
cnRDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsg
c2l6ZW9mKHZvaWQqKSAqIGZ1bmN0aW9uSW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOwotICAgIH0K
LQotICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0g
ICAgewotICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDx2b2lkKio+KGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCkpOwot
ICAgIH0KLQogICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpV
bmNvbmRpdGlvbmFsRmluYWxpemVyIHsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpIG92ZXJyaWRlOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCBjNzdmYTA1Li5jNTJl
ZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTQ5LDEyICs0OSwxNyBAQCBTdHJ1Y3R1cmUqIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
IH0KIAotSlNXZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQorSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5z
dGFuY2U+JiYgaW5zdGFuY2UpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2lu
c3RhbmNlKFdURk1vdmUoaW5zdGFuY2UpKQogICAgICwgbV92bSgmdm0pCisgICAgLCBtX3dhc21N
b2R1bGUobV9pbnN0YW5jZS0+bW9kdWxlKCkpCisgICAgLCBtX3dhc21UYWJsZShtX2luc3RhbmNl
LT5tX3RhYmxlLmdldCgpKQorICAgICwgbV9nbG9iYWxzKG1faW5zdGFuY2UtPm1fZ2xvYmFscy5n
ZXQoKSkKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsK
LSAgICBtZW1zZXQoaW1wb3J0RnVuY3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICog
c2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKKyAgICAgICAgbmV3IChpbXBvcnRGdW5j
dGlvbkluZm8oaSkpIEltcG9ydEZ1bmN0aW9uSW5mbygpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QpCkBA
IC02MywxMiArNjgsMTAgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG1vZHVsZSk7
Ci0gICAgY29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IGdsb2JhbE1lbW9yeUJ5dGVTaXpl
KCk7Ci0gICAgbV9nbG9iYWxzID0gTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVt
b3J5U2l6ZSk7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1l
bW9yeVNpemUpOwotCiAgICAgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBt
b2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAgIG1fY2FsbGVlLnNldCh2bSwgdGhpcywgbW9kdWxl
LT5jYWxsZWUoKSk7CisgICAgCisgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRl
ZChtX2luc3RhbmNlLT5leHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsKIH0KIAogdm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtODgsNDAgKzkxLDQ0IEBA
IHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9t
ZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKLSAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5nbG9iYWxNZW1vcnlCeXRlU2l6ZSgpKTsKKyAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNl
LT5leHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0pOworICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbkluZm8oaSktPmltcG9ydEZ1bmN0aW9u
KTsgLy8gVGhpcyBhbHNvIGtlZXBzIHRoZSBmdW5jdGlvbnMnIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSBhbGl2ZS4KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRp
b24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNv
ZGVCbG9jaykKIHsKKyAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHdhc21Db2RlQmxv
Y2suY29weVJlZigpKTsKKyAgICBtX3dhc21Db2RlQmxvY2sgPSB3YXNtQ29kZUJsb2NrLnB0cigp
OworCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYg
KCF3YXNtQ29kZUJsb2NrLT5ydW5uYWJsZSgpKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2Jh
bE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCB3YXNtQ29kZUJsb2Nr
LT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFT
RV9BU1NFUlQod2FzbUNvZGVCbG9jay0+aXNTYWZlVG9SdW4obWVtb3J5TW9kZSgpKSk7Ci0gICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gbW9kdWxlKCktPmNvZGVCbG9jayht
ZW1vcnlNb2RlKCkpOwotICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBqc0NvZGVCbG9jayA9IG1fbW9kdWxlLT5jb2RlQmxvY2sobWVtb3J5TW9kZSgpKTsK
KyAgICBpZiAoanNDb2RlQmxvY2spIHsKICAgICAgICAgLy8gQSBDb2RlQmxvY2sgbWlnaHQgaGF2
ZSBhbHJlYWR5IGJlZW4gY29tcGlsZWQuIElmIHNvLCBpdCBtZWFucwogICAgICAgICAvLyB0aGF0
IHRoZSBDb2RlQmxvY2sgd2UgYXJlIHRyeWluZyB0byBjb21waWxlIG11c3QgYmUgdGhlIHNhbWUK
ICAgICAgICAgLy8gYmVjYXVzZSB3ZSB3aWxsIG5ldmVyIGNvbXBpbGUgYSBDb2RlQmxvY2sgYWdh
aW4gb25jZSBpdCdzCiAgICAgICAgIC8vIHJ1bm5hYmxlLgotICAgICAgICBBU1NFUlQoJmNvZGVC
bG9jay0+Y29kZUJsb2NrKCkgPT0gd2FzbUNvZGVCbG9jay5wdHIoKSk7Ci0gICAgICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICAgICAgQVNTRVJUKCZqc0NvZGVC
bG9jay0+Y29kZUJsb2NrKCkgPT0gd2FzbUNvZGVCbG9jay5wdHIoKSk7CisgICAgICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywganNDb2RlQmxvY2spOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgd2FzbUNvZGVC
bG9jay5jb3B5UmVmKCksIG1fbW9kdWxlLmdldCgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFj
b2RlQmxvY2stPnJ1bm5hYmxlKCkpKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLT5lcnJv
ck1lc3NhZ2UoKSkpOworICAgICAgICBqc0NvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmNyZWF0ZSh2bSwgV1RGTW92ZSh3YXNtQ29kZUJsb2NrKSwgbV9tb2R1bGUuZ2V0KCkpOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIWpzQ29kZUJsb2NrLT5ydW5uYWJsZSgpKSkgeworICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6
OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3Ry
dWN0dXJlKCksIGpzQ29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJs
b2NrKTsKLSAgICAgICAgbW9kdWxlKCktPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBj
b2RlQmxvY2spOworICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGpzQ29kZUJsb2Nr
KTsKKyAgICAgICAgbV9tb2R1bGUtPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBqc0Nv
ZGVCbG9jayk7CiAgICAgfQogCiAgICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNDYXN0PFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkKj4obV9tb2R1bGVOYW1lc3BhY2VPYmplY3QtPm1vZHVsZVJlY29y
ZCgpKTsKLSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbW9kdWxlKCksIHRoaXMpOworICAg
IG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBtX21vZHVsZS5nZXQoKSwgdGhpcyk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIEpTVmFsdWUgc3RhcnRSZXN1
bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwpAQCAtMTI5LDcgKzEzNiw3IEBAIHZv
aWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBSZWY8V2FzbTo6CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKIH0KIAotSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNN
b2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1
cmUpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRl
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwg
SlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSwgUmVm
PFdhc206Okluc3RhbmNlPiYmIGluc3RhbmNlKQogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE1OCw4ICsxNjUsOCBAQCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKUwogCiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9
IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpOwogICAgIC8vIEZJWE1FOiBU
aGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBP
T00gaGVyZS4KLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5m
b3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2
bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291
bnQoKSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxl
TmFtZXNwYWNlKTsKKyAgICBhdXRvKiBqc0luc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpKSkgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rp
b25Db3VudCgpLCBXVEZNb3ZlKGluc3RhbmNlKSk7CisgICAganNJbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24odm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKICAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVz
IGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3Jp
cHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRh
YmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KQEAgLTE5MCwxNSArMTk3LDIxIEBAIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZXhlYywgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydCBmdW5jdGlvbiIs
ICJtdXN0IGJlIGNhbGxhYmxlIikpKTsKIAorICAgICAgICAgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBjYWxsZWVJbnN0YW5jZSA9IG51bGxwdHI7CisgICAgICAgICAgICBXYXNtOjpXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCA9IG51bGxwdHI7CiAgICAgICAgICAg
ICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisKICAgICAg
ICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6
CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CiAgICAgICAg
ICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKICAg
ICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2Fz
bUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGEu
IElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGks
IHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgogICAgICAgICAgICAgICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYg
KHdhc21GdW5jdGlvbikKKyAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNp
Z25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUluc3RhbmNlID0gd2Fz
bUZ1bmN0aW9uLT5pbnN0YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB3YXNtRW50cnlwb2lu
dCA9IHdhc21GdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlt
cG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRl
eCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3Vy
ZV1dLgpAQCAtMjE1LDcgKzIyOCwxMCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAg
ICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVs
ZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0
YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCiAK
ICAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRl
eCk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25zKClbbnVtSW1wb3J0RnVu
Y3Rpb25zKytdLnNldCh2bSwgaW5zdGFuY2UsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEltcG9y
dEZ1bmN0aW9uSW5mbyogaW5mbyA9IGpzSW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhudW1J
bXBvcnRGdW5jdGlvbnMrKyk7CisgICAgICAgICAgICBpbmZvLT50YXJnZXRJbnN0YW5jZSA9IGNh
bGxlZUluc3RhbmNlOworICAgICAgICAgICAgaW5mby0+d2FzbUVudHJ5cG9pbnQgPSB3YXNtRW50
cnlwb2ludDsKKyAgICAgICAgICAgIGluZm8tPmltcG9ydEZ1bmN0aW9uLnNldCh2bSwganNJbnN0
YW5jZSwgZnVuY3Rpb24pOwogICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1w
b3J0cy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNDMsNyArMjU5LDggQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRv
IHRhYmxlcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9y
dHMuCi0gICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJs
ZSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwg
dGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFi
bGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTI3Myw4ICsyOTAsOCBA
QCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYg
dG8gbWVtb3JpZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8g
aW1wb3J0cy4KLSAgICAgICAgICAgIEFTU0VSVCghaW5zdGFuY2UtPm1fbWVtb3J5KTsKLSAgICAg
ICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLCBtZW1vcnkpOworICAg
ICAgICAgICAgQVNTRVJUKCFqc0luc3RhbmNlLT5tX21lbW9yeSk7CisgICAgICAgICAgICBqc0lu
c3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTI5MSwxMyArMzA4LDEzIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAg
ICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsKICAgICAg
ICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4
XS50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgICAgICBp
bnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVj
KSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVt
SW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0
YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJf
dD4odmFsdWUudG9GbG9hdChleGVjKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2Jh
bChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1i
ZXIoKSkpOworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFs
KG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJl
cigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTUsMTQgKzMz
MiwyMSBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkp
OwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBk
ZWZpbml0aW9uLgotICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2Fz
bTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCks
IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKworICAgICAg
ICAgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOworCisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpN
ZW1vcnk6OmNyZWF0ZShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsg
dm0uaGVhcC5jb2xsZWN0QXN5bmMoQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAg
ICAgICAgICBbJnZtXSAoKSB7IHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpG
dWxsKTsgfSwKKyAgICAgICAgICAgICAgICBbJnZtLCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3Vu
dCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnkt
Pmdyb3dTdWNjZXNzQ2FsbGJhY2sodm0sIG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7
CiAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwogCi0gICAgICAgICAgICBpbnN0YW5j
ZS0+bV9tZW1vcnkuc2V0KHZtLCBpbnN0YW5jZSwKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsK
KyAgICAgICAgICAgIGpzTWVtb3J5LT5hZG9wdChtZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgICAgICAgICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIGpzTWVtb3J5KTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0zMzYsMTkgKzM2MCwyNCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAg
ICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJs
ZUltcG9ydCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUg
YSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgotICAgICAgICAgICAgSlNXZWJB
c3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUo
KSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlu
aXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOwor
ICAgICAgICAgICAgUmVmUHRyPFdhc206OlRhYmxlPiB3YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6
Y3JlYXRlKG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICBp
ZiAoIXdhc21UYWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sICJjb3VsZG4ndCBjcmVhdGUgVGFibGUiKSk7
CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRh
YmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCB3YXNtVGFibGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFz
c2VtYmx5VGFibGUgd2UndmUgZGVmaW5lZC4KICAgICAgICAgICAgIC8vIElmIGl0J3MgZGVmaW5l
ZCB0byBiZSB0b28gbGFyZ2UsIHdlIHNob3VsZCBoYXZlIHRocm93biBhIHZhbGlkYXRpb24gZXJy
b3IuCiAgICAgICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAg
ICAgICBBU1NFUlQodGFibGUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZt
LCBpbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV90YWJsZS5zZXQo
dm0sIGpzSW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPm1fd2FzbVRh
YmxlID0gdGFibGUtPnRhYmxlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKCFp
bnN0YW5jZS0+bWVtb3J5KCkpIHsKKyAgICBpZiAoIWpzSW5zdGFuY2UtPm1lbW9yeSgpKSB7CiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0IHdhc20g
LT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0
cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCi0gICAgICAgIGluc3RhbmNlLT5tX21lbW9y
eS5zZXQodm0sIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSwgV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIDAsIDApLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAg
ICAgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSk7CisgICAgICAgIGpzTWVtb3J5LT5hZG9wdChXYXNtOjpNZW1vcnk6OmNyZWF0ZSgpLnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIGpzTWVt
b3J5KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsK
ICAgICB9CiAgICAgCkBAIC0zNjAsMjAgKzM4OSwxMyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBK
UwogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6
R2xvYmFsOjpJc0ltcG9ydCk7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9u
VHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9i
YWxzKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBp
bnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikp
OworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2Jh
bEluZGV4LCBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJNjRHbG9iYWwoZ2xvYmFsLmluaXRp
YWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0aWFsQml0c09y
SW1wb3J0TnVtYmVyKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLnNl
dEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOwot
Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotfQotCi1zaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbW9kdWxlLT5t
b2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAg
ICByZXR1cm4ganNJbnN0YW5jZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmlu
ZGV4IDNjZmU1NDkuLmQ1MjU1MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC0zMiw2ICszMiw4IEBACiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlN
ZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJXYXNt
Q29udGV4dC5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMzksNzUgKzQxLDk0IEBAIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xh
c3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5VG9KU0NhbGxlZTsKIAor
bmFtZXNwYWNlIFdhc20geworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgVGFibGU7IC8vIEZJWE1F
IHJlbW92ZSB0aGlzIGFmdGVyIHJlZmFjdG9yaW5nLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0
NzIKK30KKwogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIDogcHVibGljIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJh
c2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVj
U3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3Ry
dWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwg
RXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3Qs
IFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogICAgIHZvaWQgZmlu
YWxpemVDcmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSosIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYpOwot
Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGUuZ2V0KCk7IH0KLQotICAgIEpTT2JqZWN0KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgp
IHsgUkVMRUFTRV9BU1NFUlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4gaW1w
b3J0RnVuY3Rpb25zKClbaWR4XS5nZXQoKTsgfQotCisgICAgCisgICAgV2FzbTo6SW5zdGFuY2Um
IGluc3RhbmNlKCkgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQorICAgIFdhc206OkNvbnRl
eHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiAmbV92bS0+d2FzbUNvbnRleHQ7IH0KICAgICBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KCkgeyByZXR1cm4g
bV9tb2R1bGVOYW1lc3BhY2VPYmplY3QuZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5VGFibGUq
IHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQorICAgIFdlYkFzc2VtYmx5VG9KU0Nh
bGxlZSogd2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0K
IAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5Lmdl
dCgpOyB9Ci0gICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2
YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7
IH0KKyAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVl
KSB7IEFTU0VSVCghbWVtb3J5KCkpOyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgbV93
YXNtTWVtb3J5ID0gJm1lbW9yeSgpLT5tZW1vcnkoKTsgfQogICAgIFdhc206Ok1lbW9yeU1vZGUg
bWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAotICAg
IEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9Ci0K
LSAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9n
bG9iYWxzLmdldCgpW2ldOyB9Ci0gICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQotICAgIGZsb2F0IGxvYWRGMzJH
bG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2Fk
STMyR2xvYmFsKGkpKTsgfQotICAgIGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9Ci0g
ICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5n
ZXQoKVtpXSA9IGJpdHM7IH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnko
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX21lbW9y
eSk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsgfQorICAgIC8vIFRh
aWwgYWNjZXNzb3JzLgorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZUYWlsKCkgeyByZXR1cm4g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1aW50NjRfdCk+KHNpemVvZihKU1dlYkFz
c2VtYmx5SW5zdGFuY2UpKTsgfQorICAgIHN0cnVjdCBJbXBvcnRGdW5jdGlvbkluZm8geworICAg
ICAgICAvLyBUYXJnZXQgaW5zdGFuY2UgYW5kIGVudHJ5cG9pbnQgYXJlIG9ubHkgc2V0IGZvciB3
YXNtLT53YXNtIGNhbGxzLCBhbmQgYXJlIG90aGVyd2lzZSBudWxscHRyLiBUaGUgZW1iZWRkZXIt
c3BlY2lmaWMgbG9naWMgb2NjdXJzIHRocm91Z2ggaW1wb3J0IGZ1bmN0aW9uLgorICAgICAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIHRhcmdldEluc3RhbmNlIHsgbnVsbHB0ciB9OworICAgICAg
ICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCB7IG51bGxw
dHIgfTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBpbXBvcnRGdW5jdGlvbiB7IFdy
aXRlQmFycmllcjxKU09iamVjdD4oKSB9OworICAgIH07CisgICAgSW1wb3J0RnVuY3Rpb25JbmZv
KiBpbXBvcnRGdW5jdGlvbkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiAm
Yml0d2lzZV9jYXN0PEltcG9ydEZ1bmN0aW9uSW5mbyo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhp
cykgKyBvZmZzZXRPZlRhaWwoKSlbaW1wb3J0RnVuY3Rpb25OdW1dOyB9CisgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZlRhcmdldEluc3RhbmNlKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyBy
ZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRG
dW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgdGFyZ2V0
SW5zdGFuY2UpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50KHNp
emVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRG
dW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9G
KEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbUVudHJ5cG9pbnQpOyB9CisgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1
cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5j
dGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVu
Y3Rpb24pOyB9CisgICAgSlNPYmplY3QqIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGltcG9ydEZ1
bmN0aW9uTnVtKSB7IFJFTEVBU0VfQVNTRVJUKGltcG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1JbXBv
cnRGdW5jdGlvbnMpOyByZXR1cm4gaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVt
KS0+aW1wb3J0RnVuY3Rpb24uZ2V0KCk7IH0KKyAgICAKKyAgICAvLyBGSVhNRSByZW1vdmUgdGhl
c2UgYWZ0ZXIgcmVmYWN0b3JpbmcgdGhlbSBvdXQuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3
MgorICAgIFdhc206Ok1lbW9yeSYgaW50ZXJuYWxNZW1vcnkoKSB7IHJldHVybiBtZW1vcnkoKS0+
bWVtb3J5KCk7IH0KKyAgICBXYXNtOjpDb2RlQmxvY2smIHdhc21Db2RlQmxvY2soKSBjb25zdCB7
IHJldHVybiAqbV9pbnN0YW5jZS0+Y29kZUJsb2NrKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mV2FzbVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSwgbV93YXNtVGFibGUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkNhbGxlZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2Us
IG1fY2FsbGVlKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWTSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdm0pOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNv
ZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2Us
IG1fY29kZUJsb2NrKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtQ29kZUJs
b2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93
YXNtQ29kZUJsb2NrKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwg
bV9jYWNoZWRTdGFja0xpbWl0KTsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRG
dW5jdGlvbnMoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRl
QmFycmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9Ci0gICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlv
bk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1bmN0aW9u
TnVtICogc2l6ZW9mKHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikpOyB9Ci0KLSAgICBXZWJB
c3NlbWJseVRvSlNDYWxsZWUqIHdlYkFzc2VtYmx5VG9KU0NhbGxlZSgpIHsgcmV0dXJuIG1fY2Fs
bGVlLmdldCgpOyB9Ci0KLSAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyByZXR1
cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9Ci0gICAgdm9pZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZv
aWQqIGxpbWl0KSB7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZldhc21NZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21NZW1vcnkpOyB9CisgICAgdm9pZCogY2FjaGVkU3Rh
Y2tMaW1pdCgpIGNvbnN0IHsgUkVMRUFTRV9BU1NFUlQobV9pbnN0YW5jZS0+Y2FjaGVkU3RhY2tM
aW1pdCgpID09IG1fY2FjaGVkU3RhY2tMaW1pdCk7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7
IH0KKyAgICB2b2lkIHNldENhY2hlZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9pbnN0YW5j
ZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChsaW1pdCk7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0
OyB9CisgICAgV2FzbTo6TWVtb3J5KiB3YXNtTWVtb3J5KCkgeyByZXR1cm4gbV93YXNtTWVtb3J5
OyB9CisgICAgV2FzbTo6TW9kdWxlJiB3YXNtTW9kdWxlKCkgeyByZXR1cm4gbV93YXNtTW9kdWxl
OyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucywgUmVmPFdh
c206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3Nl
bWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNr
ZWQ8c2l6ZV90PiBudW1JbXBvcnRGdW5jdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gKG9m
ZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICog
bnVtSW1wb3J0RnVuY3Rpb25zKS51bnNhZmVHZXQoKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXRP
ZlRhaWwoKSArIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICogbnVtSW1wb3J0RnVuY3Rpb25z
KS51bnNhZmVHZXQoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVk0qIG1fdm07Ci0gICAgV3Jp
dGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9j
YXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsg
b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KLSAgICBzaXplX3QgZ2xvYmFsTWVtb3J5Qnl0
ZVNpemUoKSBjb25zdDsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7
IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQorCisgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2lu
c3RhbmNlOwogCisgICAgVk0qIG1fdm07CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlN
b2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
PiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+
IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5
TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBt
X3RhYmxlOwogICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseVRvSlNDYWxsZWU+IG1fY2FsbGVl
OwotICAgIE1hbGxvY1B0cjx1aW50NjRfdD4gbV9nbG9iYWxzOworICAgIAorICAgIC8vIEZJWE1F
IHJlbW92ZSB0aGVzZSBhZnRlciByZWZhY3RvcmluZyB0aGVtIG91dC4gaHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTc3NDcyCiAgICAgdm9pZCogbV9jYWNoZWRTdGFja0xpbWl0IHsgYml0d2lzZV9jYXN0
PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSB9OworICAgIFdh
c206OkNvZGVCbG9jayogbV93YXNtQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgIFdhc206Ok1v
ZHVsZSYgbV93YXNtTW9kdWxlOworICAgIFdhc206Ok1lbW9yeSogbV93YXNtTWVtb3J5IHsgbnVs
bHB0ciB9OworICAgIFdhc206OlRhYmxlKiBtX3dhc21UYWJsZSB7IG51bGxwdHIgfTsKKyAgICB1
aW50NjRfdCogbV9nbG9iYWxzIHsgbnVsbHB0ciB9OworCiAgICAgdW5zaWduZWQgbV9udW1JbXBv
cnRGdW5jdGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCmluZGV4IDIyM2M1OGIuLmQ2NDBhNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnku
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuY3BwCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0lu
Zm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTWVtb3J5Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5TWVtb3J5KSB9OwogCi1KU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBSZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnkqIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOwpAQCAtNTAsMTAgKzUwLDE2IEBAIEpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0CiAgICAg
aWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5
RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwogCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJB
c3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKG1lbW9yeSkpOwotICAgIGluc3Rh
bmNlLT5tX21lbW9yeS0+Y2hlY2soKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBhdXRvKiBtZW1vcnkgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJs
eU1lbW9yeSh2bSwgc3RydWN0dXJlKTsKKyAgICBtZW1vcnktPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZXR1cm4gbWVtb3J5OworfQorICAgIAordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojph
ZG9wdChSZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKK3sKKyAgICBtX21lbW9yeS5zd2FwKG1l
bW9yeSk7CisgICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgpID09IDEpOworICAgIG1fbWVt
b3J5LT5jaGVjaygpOwogfQogCiBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQpAQCAtNjEsMTMgKzY3LDEwIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1l
bW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dl
YkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQorSlNXZWJBc3NlbWJseU1lbW9y
eTo6SlNXZWJBc3NlbWJseU1lbW9yeShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICwgbV9tZW1vcnkoV1RGTW92ZShtZW1vcnkpKQor
ICAgICwgbV9tZW1vcnkoV2FzbTo6TWVtb3J5OjpjcmVhdGUoKS5yZWxlYXNlTm9uTnVsbCgpKQog
ewotICAgIEFTU0VSVChtX21lbW9yeS0+cmVmQ291bnQoKSA9PSAxKTsKLSAgICBtX21lbW9yeUJh
c2UgPSBtX21lbW9yeS0+bWVtb3J5KCk7Ci0gICAgbV9tZW1vcnlTaXplID0gbV9tZW1vcnktPnNp
emUoKTsKIH0KIAogSlNBcnJheUJ1ZmZlciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZmVyKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTg1LDUyICs4OCw0NSBAQCBK
U0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7
CiB9CiAKLVdhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwg
RXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlv
bnNPbkZhaWx1cmUpCitXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVsdGEpCiB7Ci0gICAgLy8gTm90ZTog
V2UgY2FuIG9ubHkgdXNlIGV4ZWMgaWYgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlIGlz
IHRydWUuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCkuc2l6ZUluUGFnZXMo
KTsKLQotICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgewotICAgICAg
ICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorICAgIGF1dG8gZ3Jvd24gPSBt
ZW1vcnkoKS5ncm93KFdhc206OlBhZ2VDb3VudChkZWx0YSkpOworICAgIGlmICghZ3Jvd24pIHsK
KyAgICAgICAgc3dpdGNoIChncm93bi5lcnJvcigpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6TWVt
b3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgogICAgICAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGRlbHRhIHRvIGJlIGEgdmFs
aWQgcGFnZSBjb3VudCIpKSk7Ci0gICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKLSAg
ICB9Ci0KLSAgICBXYXNtOjpQYWdlQ291bnQgbmV3U2l6ZSA9IG9sZFBhZ2VDb3VudCArIFdhc206
OlBhZ2VDb3VudChkZWx0YSk7Ci0gICAgaWYgKCFuZXdTaXplKSB7Ci0gICAgICAgIGlmIChzaG91
bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CiAgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUg
Z3Jvd24gc2l6ZSB0byBiZSBhIHZhbGlkIHBhZ2UgY291bnQiKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNl
ZWRNYXhpbXVtOgorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5n
cm93IHdvdWxkIGV4Y2VlZCB0aGUgbWVtb3J5J3MgZGVjbGFyZWQgbWF4aW11bSBzaXplIikpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7CiAgICAgfQog
Ci0gICAgaWYgKGRlbHRhKSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1lbW9yeSgpLmdyb3co
dm0sIG5ld1NpemUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX21lbW9yeUJhc2UgPT0gbWVtb3J5KCkubWVtb3J5KCkpOwotICAgICAgICAgICAgQVNTRVJU
KG1fbWVtb3J5U2l6ZSA9PSBtZW1vcnkoKS5zaXplKCkpOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKLSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLSAgICAg
ICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKLSAgICAgICAgfQotICAgICAgICBtX21l
bW9yeUJhc2UgPSBtZW1vcnkoKS5tZW1vcnkoKTsKLSAgICAgICAgbV9tZW1vcnlTaXplID0gbWVt
b3J5KCkuc2l6ZSgpOwotICAgIH0KKyAgICByZXR1cm4gZ3Jvd24udmFsdWUoKTsKK30KIAotICAg
IC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQg
bWlnaHQgbm93IGJlIHBvaW50aW5nCi0gICAgLy8gdG8gc3RhbGUgbWVtb3J5Lgordm9pZCBKU1dl
YkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKFZNJiB2bSwgV2FzbTo6UGFnZUNv
dW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkKK3sKKyAgICAv
LyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1p
Z2h0IG5vdyBiZSBwb2ludGluZyB0byBzdGFsZSBtZW1vcnkuCiAgICAgLy8gTmV1dGVyIHRoZSBv
bGQgYXJyYXkuCiAgICAgaWYgKG1fYnVmZmVyKSB7CiAgICAgICAgIG1fYnVmZmVyLT5uZXV0ZXIo
dm0pOwogICAgICAgICBtX2J1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIG1fYnVmZmVyV3JhcHBl
ci5jbGVhcigpOwogICAgIH0KLQorICAgIAogICAgIG1lbW9yeSgpLmNoZWNrKCk7Ci0KLSAgICB2
bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKFdhc206OlBhZ2VDb3VudChkZWx0YSku
Ynl0ZXMoKSk7Ci0gICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKKyAgICAKKyAgICB2bS5oZWFwLnJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld1BhZ2VDb3VudC5ieXRlcygpIC0gb2xkUGFnZUNv
dW50LmJ5dGVzKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAppbmRleCAxZDA2YzRjLi40YmJiY2NmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCkBAIC00OCwy
NiArNDgsMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLmVhZ2VybHlTd2VwdERlc3Ry
dWN0aWJsZU9iamVjdFNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVt
b3J5KiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5
PiYmKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1lbW9yeSogY3JlYXRlKEV4ZWNTdGF0ZSos
IFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKKyAgICB2b2lkIGFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYpOwogICAgIFdhc206Ok1l
bW9yeSYgbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVm
ZmVyKiBidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOwotICAgIFdhc206OlBhZ2VDb3Vu
dCBncm93KFZNJiwgRXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dF
eGNlcHRpb25zT25GYWlsdXJlKTsKLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1v
cnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1v
cnlCYXNlKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5U2l6ZSk7IH0KKyAg
ICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhWTSYsIEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhKTsK
KyAgICB2b2lkIGdyb3dTdWNjZXNzQ2FsbGJhY2soVk0mLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFn
ZUNvdW50LCBXYXNtOjpQYWdlQ291bnQgbmV3UGFnZUNvdW50KTsKIAogcHJpdmF0ZToKLSAgICBK
U1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4mJik7
CisgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAg
IHZvaWQqIG1fbWVtb3J5QmFzZTsKLSAgICBzaXplX3QgbV9tZW1vcnlTaXplOwogICAgIFJlZjxX
YXNtOjpNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBt
X2J1ZmZlcldyYXBwZXI7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5j
cHAKaW5kZXggYmFiMTE4MS4uNDBjMTAwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2Fz
bVBsYW4uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02MSw2ICs2Miw3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQog
CisKIEpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1vZHVsZT4mJiBtb2R1bGUpCiAgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCkBAIC05MSw2
ICs5MywzNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQogICAgIFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKCk7CiB9CiAKK2Nv
bnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJ
bmZvcm1hdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpOworfQorCitTeW1ib2xUYWJsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6ZXhwb3J0U3lt
Ym9sVGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgp
OworfQorCitXYXNtOjpTaWduYXR1cmVJbmRleCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KSBjb25zdAoreworICAgIHJldHVybiBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Cit9CisKK1dlYkFzc2VtYmx5VG9KU0Nh
bGxlZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y2FsbGVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jYWxsZWUuZ2V0KCk7Cit9CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpCit7CisgICAgcmV0dXJu
IG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsKK30KKworV2Fz
bTo6TW9kdWxlJiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGUoKQoreworICAgIHJldHVybiBt
X21vZHVsZS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxv
Y2soVk0mIHZtLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2Rl
KV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDNkYzY3YTMuLmI3MGI0Mjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmgKQEAgLTMwLDE1ICszMCwxOSBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmgiCi0jaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlN
b2RlLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBNb2R1bGU7Citz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiBjbGFzcyBQbGFuOwordXNpbmcgU2lnbmF0dXJlSW5k
ZXggPSB1aW50MzJfdDsKIH0KIAogY2xhc3MgU3ltYm9sVGFibGU7CkBAIC01MiwyMyArNTYsMjAg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHVi
KFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgV1RGOjpFeHBlY3RlZDxSZWZQdHI8V2FzbTo6
TW9kdWxlPiwgU3RyaW5nPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7IH0KLSAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9s
VGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9Ci0gICAg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXhTcGFjZSk7Ci0gICAgfQotICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogY2FsbGVlKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdDsKKyAgICBTeW1ib2xUYWJsZSog
ZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdDsKKyAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKSBjb25zdDsKKyAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIGNhbGxlZSgpIGNvbnN0Owog
Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUg
bW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLmdl
dCgpOyB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9y
eU1vZGUgbW9kZSk7CisgICAgdm9pZCBzZXRDb2RlQmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2Rl
LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7CiAKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHNvdXJjZSgpIGNvbnN0OwogCi0gICAgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKSB7IHJldHVybiBt
X21vZHVsZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgV2FzbTo6TWVtb3J5
TW9kZSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOworICAgIFdhc206Ok1vZHVsZSYgbW9kdWxl
KCk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmNwcAppbmRleCBmZjQ2ZDRkLi5hZGFhNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKQEAgLTI5LDMwICsyOSwy
MiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGlj
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVRh
YmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWJsZSIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseVRhYmxlKSB9Owog
Ci1KU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSkKK0pTV2ViQXNzZW1ibHlUYWJsZSogSlNX
ZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYgdGFibGUpCiB7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgYXV0byBleGNlcHRpb24gPSBb
Jl0gKEpTT2JqZWN0KiBlcnJvcikgewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBlcnJvcik7CisgICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxl
ZCgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUV2
YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3Nh
Z2UoKSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotCi0gICAgaWYgKCFnbG9i
YWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRF
cnJvck1lc3NhZ2UoKSkpOwotCi0gICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKLSAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICB9
CiAKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2Vi
QXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJl
LCBpbml0aWFsLCBtYXhpbXVtKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlU
YWJsZSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHRhYmxlKSk7CiAgICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC02MiwyMyArNTQsMTUg
QEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJs
eVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRpYWwsIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCitKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2Vi
QXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFi
bGU+JiYgdGFibGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhYmxlKFdU
Rk1vdmUodGFibGUpKQogewotICAgIG1fc2l6ZSA9IGluaXRpYWw7Ci0gICAgQVNTRVJUKGlzVmFs
aWRTaXplKG1fc2l6ZSkpOwotICAgIG1fbWF4aW11bSA9IG1heGltdW07Ci0gICAgQVNTRVJUKCFt
X21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOwotCiAgICAgLy8gRklYTUU6IEl0IG1p
Z2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3Bl
YyByZWNvbW1lbmRzIGRvaW5nIHNvLgogICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9p
bmcgdGhhdC4KLSAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0
PHNpemVfdD4obV9zaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAq
IHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG1fc2l6ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBX
YXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQo
KVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8v
IFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1fanNGdW5jdGlvbnMgPSBN
YWxsb2NQdHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkpOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgbmV3ICgmbV9qc0Z1bmN0
aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAgIH0KIH0KIAogdm9p
ZCBKU1dlYkFzc2VtYmx5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTk5LDcgKzgz
LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVj
dC0+bV9zaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3Qt
PnNpemUoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzRnVu
Y3Rpb25zLmdldCgpW2ldKTsKIH0KIApAQCAtMTA3LDQ3ICs5MSw0NCBAQCBib29sIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZs
b3c+IG5ld1NpemVDaGVja2VkID0gbV9zaXplOwotICAgIG5ld1NpemVDaGVja2VkICs9IGRlbHRh
OwotICAgIHVpbnQzMl90IG5ld1NpemU7Ci0gICAgaWYgKG5ld1NpemVDaGVja2VkLnNhZmVHZXQo
bmV3U2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+ICptYXhpbXVtKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzVmFsaWRTaXplKG5ld1NpemUpKQorCisgICAgc2l6
ZV90IG9sZFNpemUgPSBzaXplKCk7CisKKyAgICBhdXRvIGdyZXcgPSBtX3RhYmxlLT5ncm93KGRl
bHRhKTsKKyAgICBpZiAoIWdyZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnVu
Y3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nh
c3Q8c2l6ZV90PihuZXdTaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOwor
ICAgIHNpemVfdCBuZXdTaXplID0gZ3Jldy52YWx1ZSgpOworICAgIG1fanNGdW5jdGlvbnMucmVh
bGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBuZXdTaXplKTsKIAotICAgIGZv
ciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkgewotICAgICAgICBuZXcg
KCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworICAgIGZv
ciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQogICAgICAgICBuZXcgKCZt
X2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgfQot
ICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorSlNPYmplY3Qq
IEpTV2ViQXNzZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIHJldHVybiBtX2pzRnVuY3Rpb25z
LmdldCgpW2luZGV4XS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmNsZWFy
RnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBt
X3NpemUpOworICAgIG1fdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5kZXgpOwogICAgIG1fanNGdW5j
dGlvbnMuZ2V0KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAgIG1fZnVu
Y3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKLSAgICBBU1NF
UlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25h
dHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUu
CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQz
Ml90IGluZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbikKIHsKLSAgICBSRUxFQVNF
X0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+c2V0RnVuY3Rpb24oaW5kZXgs
IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCksIGZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAg
ICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKLSAg
ICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigp
OwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50
MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGZ1bmN0aW9uKQogewotICAg
IFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX3RhYmxlLT5zZXRGdW5jdGlv
bihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgZnVuY3Rpb24tPmluc3RhbmNl
KCkpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rp
b24pOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1
bmN0aW9uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAppbmRleCBkZjgzZTk3Li40NDg3
NTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSw1NyArMjksNDIgQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXYXNtTGltaXRzLmgiCisj
aW5jbHVkZSAiV2FzbVRhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL01h
bGxvY1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFdhc20gewotc3RydWN0
IENhbGxhYmxlRnVuY3Rpb247Ci19Ci0KIGNsYXNzIEpTV2ViQXNzZW1ibHlUYWJsZSA6IHB1Ymxp
YyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0
aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSogY3JlYXRl
KEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSog
Y3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQotICAgIHVpbnQz
Ml90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1Zh
bGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUo
c2l6ZSk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyBy
ZXR1cm4gbV90YWJsZS0+bWF4aW11bSgpOyB9CisgICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFibGUtPnNpemUoKTsgfQogICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBkZWx0YSkg
V0FSTl9VTlVTRURfUkVUVVJOOwotICAgIEpTT2JqZWN0KiBnZXRGdW5jdGlvbih1aW50MzJfdCBp
bmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKLSAg
ICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOwotICAgIH0KLSAg
ICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpOwotICAgIHZvaWQgc2V0RnVuY3Rp
b24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiopOwotICAgIHZvaWQg
c2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24qKTsKLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9zaXplKTsgfQotICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSlNGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eVRhYmxlLCBtX2pzRnVuY3Rpb25zKTsgfQorICAgIEpTT2JqZWN0KiBnZXRGdW5jdGlvbih1aW50
MzJfdCk7CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIHNldEZ1
bmN0aW9uKFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsKKyAgICB2b2lkIHNl
dEZ1bmN0aW9uKFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKik7CiAK
LSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKQotICAgIHsKLSAgICAg
ICAgLy8gVGhpcyB0b3BzIG91dCBhdCB+Mzg0IE1CIHdvcnRoIG9mIGRhdGEgaW4gdGhpcyBjbGFz
cy4KLSAgICAgICAgcmV0dXJuIHNpemUgPCAoMSA8PCAyNCk7Ci0gICAgfQorICAgIFdhc206OlRh
YmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUucHRyKCk7IH0KIAogcHJpdmF0ZToKLSAgICBK
U1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0m
LCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIE1hbGxvY1B0
cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICBSZWY8V2FzbTo6VGFi
bGU+IG1fdGFibGU7CiAgICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+IG1fanNG
dW5jdGlvbnM7Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOwotICAgIHVp
bnQzMl90IG1fc2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmM5MjA0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XYXNtVG9KUy5jcHAKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXYXNtVG9KUy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVk
ZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCisjaW5jbHVkZSAi
SklURXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
LmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRlICJXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldh
c21FeGNlcHRpb25UeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K3VzaW5nIEpJVCA9IENDYWxsSGVscGVyczsKKworc3RhdGljIHZvaWQgbWF0ZXJpYWxpemVJbXBv
cnRKU0NlbGwoSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJSZWcgcmVzdWx0KQor
eworICAgIC8vIFdlJ3JlIGNhbGxpbmcgb3V0IG9mIHRoZSBjdXJyZW50IFdlYkFzc2VtYmx5Lklu
c3RhbmNlLiBUaGF0IEluc3RhbmNlIGhhcyBhIGxpc3Qgb2YgYWxsIGl0cyBpbXBvcnQgZnVuY3Rp
b25zLgorICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShyZXN1bHQpOworICAgIGppdC5s
b2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOworfQorCitFeHBlY3RlZDxN
YWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSogdm0sIEJh
ZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rp
b24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24u
CisgICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCisgICAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50
aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCBKU0NDYWxs
aW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7CisgICAgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZUluZGV4KTsKKyAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7CisgICAgSklUIGppdDsKKworICAgIC8vIE5vdGU6IFdhc21CM0lSR2VuZXJhdG9yIGFzc3Vt
ZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVlIHNhdmUuCisgICAgLy8gSWYg
d2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gY2hhbmdlIFdhc21CM0lS
R2VuZXJhdG9yLgorCisgICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5n
IGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KKyAgICBBU1NFUlQoIWpzQ0MubV9n
cHJBcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKCFqc0NDLm1fZnByQXJncy5zaXplKCkpOworCisg
ICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LnN0b3JlNjQoSklUOjpUcnVz
dGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQorCisgICAgeworICAgICAgICBib29sIGhh
c0JhZEk2NFVzZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJl
dHVyblR5cGUoKSA9PSBJNjQ7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJn
TnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdOdW0pIHsKKyAgICAgICAgICAg
IFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAg
c3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBj
YXNlIEZ1bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAgY2FzZSBJNjQ6IHsKKyAg
ICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhc0JhZEk2
NFVzZSkgeworICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworCisgICAgICAgICAgICAvLyBTdG9yZSBDYWxsZWUuCisgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwor
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSklUOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAgICAgICAgICAgIGF1dG8g
Y2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxl
cigqdm0pOworCisgICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSkgLT4gdm9pZCB7CisgICAgICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpj
cmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVy
cm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0
eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOworICAgICAgICAgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOworICAgICAgICAgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBp
bnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZl
bnRpb24gc2F2ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4gV2UgdGhlcmVm
b3JlIGRvbid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB0
aGUgd2FzbSBjYWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KKyAgICBSZWdpc3RlclNl
dCBtaXNzaW5nQ2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAg
IG1pc3NpbmdDYWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzKTsK
KyAgICBBU1NFUlQobWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoIU9w
dGlvbnM6OnVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7CisgICAgICAgIFNj
cmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYXJn
Q291bnQgKiBzaXplb2YodWludDY0X3QpKTsKKyAgICAgICAgY2hhciogYnVmZmVyID0gYXJnQ291
bnQgPyBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IG51
bGxwdHI7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKKyAgICAgICAgdW5z
aWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBidWZmZXJPZmZzZXQg
PSAwOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAg
Y29uc3QgR1BSUmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7CisgICAgICAgIGppdC5z
dWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSksIE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8
IGFyZ0NvdW50OyArK2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0
dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAg
IGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjYXNlIEkzMjogeworICAg
ICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxs
ZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGdw
clJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOworICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxs
ZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRj
aC4KKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwor
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAgICAgICAgICAgICAgICAgICBm
ck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOworICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcgZnByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5t
X2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9m
cHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMs
IHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAg
ICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGZyT2Zmc2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6
ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0LmNv
bnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQu
bW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAg
ICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIEY2NDogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJS
ZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJn
cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3Nb
bWFyc2hhbGxlZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2Ug
cmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAg
ZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zm
c2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3Vi
bGVUbzY0KGZwclJlZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
c2NyYXRjaEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICArK21h
cnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVy
KTsKKyAgICAgICAgfQorICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaWYgKGFyZ0NvdW50KSB7CisgICAgICAgICAgICAvLyBUaGUgR0Mgc2hvdWxkIG5vdCBs
b29rIGF0IHRoaXMgYnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFsdWVzLgorICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXIt
PmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIH0KKworICAgICAgICB1aW50NjRfdCAoKmNhbGxG
dW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCopID0K
KyAgICAgICAgICAgIFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjYWxsZWUsIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAtPiB1aW50NjRfdCB7
IAorICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0g
PCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgeworICAgICAgICAgICAgICAg
ICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBhcmc7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJn
VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSTMyOgorICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
YnVmZmVyW2FyZ051bV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEYzMjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBGNjQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91Ymxl
PihidWZmZXJbYXJnTnVtXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
KyAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+bWV0aG9kVGFibGUo
KnZtKS0+Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworICAgICAgICAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
anNVbmRlZmluZWQoKSwgYXJncyk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCAwKTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlYWxSZXN1bHQ7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAg
ICAgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEkzMjogeworICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQudG9JbnQzMihleGVj
KSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocmVzdWx0
LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxSZXN1
bHQ7CisgICAgICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgICAgICAKKyAgICAgICAgbWF0ZXJpYWxp
emVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJz
ID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxvdy4iKTsKKyAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJ1ZmZlcikpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwor
ICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFz
c2VtYmx5SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisKKyAgICAgICAgLy8gZXhj
ZXB0aW9uIGhlcmUuCisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJhbWUpOworICAgICAgICBqaXQubW92ZShHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAg
dm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+
IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIGdlbmVy
aWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZv
ckNhdGNoKTsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNh
bGwoKTsKKyAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAg
ICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1
cm5UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRU
b0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGMzI6IHsKKyAg
ICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBS
SW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zs
b2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKKyAgICAgICAgaml0LnJldCgpOworCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOworICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoZXhjZXB0aW9uQ2FsbCwgZG9VbndpbmRpbmcpOworCisgICAgICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVp
XSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkp
OworICAgIH0KKworICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhIHN0YWNr
IGNoZWNrIGhlcmUgc2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKKyAgICAvLyB3aWxsIGRvIHRoZSBz
dGFjayBjaGVjayBmb3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMgdGhhdCBpdCBtaWdodCBtYWtl
CisgICAgLy8gYSBjYWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1ha2Ugc3VyZSBpdHMgc3RhY2sg
Y2hlY2sgaW5jbHVkZXMgc3BhY2UKKyAgICAvLyBmb3IgdXMgaGVyZS4KKworICAgIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsgMTsgLy8gVGhlcmUgaXMgYSAi
dGhpcyIgYXJndW1lbnQuCisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwor
ICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9y
Q2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAg
Y29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAgaml0LnN1YlB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwgTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBKSVQ6OkFkZHJlc3MgY2FsbGVlRnJhbWUg
PSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsK
KworICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVy
ZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndp
c2UgYmUgaHVnZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3CisgICAgCisgICAgLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUg
aW50ZWdlciBwYXJhbWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lzdGVyIGZvciB1c2UgYWZ0
ZXJ3YXJkcy4KKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKKyAg
ICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBjYWxs
ZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBh
cmdDb3VudDsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVy
ZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAg
ICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBj
YXNlIEFueWZ1bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgICAgICAgICAg
Y2FzZSBJMzI6IHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVnOworICAgICAgICAgICAg
ICAgIGlmIChtYXJzaGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAg
ICAgICAgICAgICAgICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5n
cHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Un
dmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZh
aWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZ3ByUmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKKyAgICAgICAgICAgICAg
ICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOyAvLyBDbGVhciBub24taW50
MzIgYW5kIG5vbi10YWcgYml0cy4KKyAgICAgICAgICAgICAgICBqaXQuYm94SW50MzIoZ3ByUmVn
LCBKU1ZhbHVlUmVncyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVG
cmFtZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVv
ZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEYzMjoKKyAgICAgICAgICAgIGNhc2UgRjY0OgorICAgICAgICAgICAgICAg
IC8vIFNraXBwZWQ6IGhhbmRsZWQgYmVsb3cuCisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxs
ZWRGUFJzID49IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBm
ck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxl
ZEZQUnM7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIC8vIEludGVnZXIgcmVnaXN0ZXJzIGhhdmUgYWxy
ZWFkeSBiZWVuIHNwaWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxhYmxlLgorICAgICAgICBHUFJS
ZWcgZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgYm9v
bCBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBmYWxzZTsKKyAgICAgICAgYXV0
byBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFzTWF0ZXJpYWxpemVkRG91Ymxl
RW5jb2RlT2Zmc2V0LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKKyAgICAgICAgICAgIGlmICghaGFz
TWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3RhdGlj
X2Fzc2VydChEb3VibGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4LCAiY29kZWdlbiBhc3N1bWVz
IHRoaXMgYmVsb3ciKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW0z
MigxKSwgZGVzdCk7CisgICAgICAgICAgICAgICAgaml0LmxzaGlmdDY0KEpJVDo6VHJ1c3RlZElt
bTMyKDQ4KSwgZGVzdCk7CisgICAgICAgICAgICAgICAgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5j
b2RlT2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB1
bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRG
UFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVT
bG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
KyAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CisgICAg
ICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAg
ICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAg
ICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAg
Y2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gSGFuZGxlZCBhYm92ZS4KKyAgICAgICAgICAgIGNhc2UgSTMyOgorICAgICAgICAgICAgICAg
IC8vIFNraXBwZWQ6IGhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxs
ZWRHUFJzID49IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBm
ck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxl
ZEdQUnM7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRjMyOiB7Cisg
ICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hh
bGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3Bp
bGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3Jh
dGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7
CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7CisgICAgICAgICAgICAgICAg
ICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJSZWcsIGZwclJlZyk7Cisg
ICAgICAgICAgICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOworICAgICAgICAgICAgICAgIGpp
dC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIG1hdGVy
aWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyk7CisgICAg
ICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zm
c2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBS
czsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgRjY0OiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAg
ICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnBy
KCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3Zl
IGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWls
YWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjph
cmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAg
ICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7CisgICAgICAg
ICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7CisgICAgICAgICAg
ICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BS
UmVnKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVn
LCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgY2Fs
bGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICArK21h
cnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaml0LmxvYWRXYXNtQ29udGV4dElu
c3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJ
bmZvOjpyZWdUMDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGgg
YmVsb3cuCisgICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBv
cnRKU0NlbGxHUFJSZWcpKTsKKworICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1w
b3J0SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7CisKKyAgICBqaXQuc3RvcmU2NChpbXBvcnRK
U0NlbGxHUFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIGppdC5zdG9yZTMy
KEpJVDo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhP
ZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7CisgICAgaml0LnN0b3JlNjQoSklUOjpU
cnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKKworICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBp
cyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4CisKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKCk7CisgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7Cisg
ICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVQ6OlRydXN0ZWRJbW1Q
dHIgaW5pdGlhbFJpZ2h0VmFsdWUoMCk7CisgICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJy
YW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQ
UlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOworICAgIEpJVDo6Q2FsbCBm
YXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAo
KTsKKyAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBp
biByZWdUMCBoZXJlLgorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJl
IGluIHJlZ1QyLgorICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAg
IGRvbmUubGluaygmaml0KTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9u
Q2hlY2tzOworCisgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2Fz
ZSBWb2lkOgorICAgICAgICAvLyBEaXNjYXJkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1
bmM6CisgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1i
ZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVy
biBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJNjQ6
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92
ZS4KKyAgICB9CisgICAgY2FzZSBJMzI6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBkb25lOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBzbG93UGF0aC5hcHBl
bmQoaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRv
UHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIHNsb3dQYXRoLmxpbmso
JmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAg
ICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwor
CisgICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0g
W10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCisgICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsK
KyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0kz
Mik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgRjMyOiB7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVy
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAg
ICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAvLyBX
ZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0LmNvbnZl
cnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNE
b3VibGUubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFn
VHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGppdC5hZGQ2
NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBk
b25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7
CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNl
cHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAg
ICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKKyAgICAgICAgICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1i
ZXIoZXhlYykpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
Y29udmVydFRvRjMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNo
SWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVl
UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Cisg
ICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisK
KyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAg
ICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5q
dW1wKCkpOworCisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBl
bmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgZG91YmxlICgqY29u
dmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdikgLT4gZG91YmxlIHsgCisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
ICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH07CisgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOworICAgICAgICB9KTsKKworICAg
ICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAg
ICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBpZiAo
IWV4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5r
KCZqaXQpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGF1dG8g
Y2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2
bSk7CisKKyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVj
U3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEh
dm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKworICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0
ZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRP
Zk1lbW9yeSk7CisKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2
bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSk7
CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKKyAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7CisK
KyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2
YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlKQoreworICAgIFZNKiB2bSA9IGluc3RhbmNlLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgeworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICAgICAg
SlNPYmplY3QqIGVycm9yOworICAgICAgICBpZiAodHlwZSA9PSBFeGNlcHRpb25UeXBlOjpTdGFj
a092ZXJmbG93KQorICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Io
ZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXJyb3IgPSBK
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3Qt
PldlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksIFdhc206OmVycm9yTWVzc2FnZUZv
ckV4Y2VwdGlvblR5cGUodHlwZSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBlcnJvcik7CisgICAgfQorCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Cisg
ICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NFUlQoISF2bS0+dGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMg
YmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3Ro
IG9wX2NhdGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKKyAgICAvLyByZXF1aXJlIGEg
Y2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJ
VCBkb2VzIG5vdCByZXF1aXJlCisgICAgLy8gdGhpcyBzaW5jZSBpdCBpcyBjb21waWxlZCB3aXRo
IGEgY29uc3RhbnQgVk0gcG9pbnRlci4pIFdlIGNvdWxkIG1ha2UgdGhlIGNhbGxpbmcgY29udmVu
dGlvbgorICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2gg
aW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCisgICAgLy8gdG8gdGhlIGV4
Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVy
cmlibGUgaGFjay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcwNDQwCisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPndlYkFzc2VtYmx5
VG9KU0NhbGxlZSgpKTsKKyAgICByZXR1cm4gdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93Owor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRv
SlMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyNGFhMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKQEAgLTAsMCArMSw0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCisjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIu
aCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlua0luZm87CitjbGFzcyBWTTsKKworbmFtZXNw
YWNlIFdhc20geworCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9KUyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWdu
YXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOworCit2b2lkKiB3YXNtVG9KU0V4Y2Vw
dGlvbihFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggMGQyNzc2NS4uYzU4NWYwOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAK
QEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIGNvbnN0IFdhc206OlNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IHdlIHRoaW5r
IHdlIGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2UgZXhwZWN0LgotICAg
IEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1
bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7CisgICAgQVNTRVJUKHdhc21G
dW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKS0+aXNTYWZlVG9SdW4o
d2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5tZW1vcnkoKS0+bWVtb3J5KCkubW9kZSgpKSk7CiAg
ICAgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZGlzYWxsb3dlZCBJNjQgdXNlLgog
CkBAIC04MiwxMSArODIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIFRyYWNlU2NvcGUg
dHJhY2VTY29wZShXZWJBc3NlbWJseUV4ZWN1dGVTdGFydCwgV2ViQXNzZW1ibHlFeGVjdXRlRW5k
KTsKIAogICAgIFZlY3RvcjxKU1ZhbHVlPiBib3hlZEFyZ3M7Ci0gICAgV2FzbTo6Q29udGV4dCog
d2FzbUNvbnRleHQgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7Ci0gICAgLy8gV2hlbiB3ZSBk
b24ndCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBqcwotICAgIC8vIGVu
dHJ5IHdyYXBwZXIgZXhwZWN0cyB0aGUgV2FzbUNvbnRleHQqIGFzIHRoZSBmaXJzdCBhcmd1bWVu
dC4KLSAgICBpZiAoIVdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIGJveGVk
QXJncy5hcHBlbmQod2FzbUNvbnRleHQpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAgLy8gV2hlbiB3ZSBkb24ndCB1
c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBKUworICAgIC8vIGVudHJ5IHdy
YXBwZXIgZXhwZWN0cyB0aGUgaW5zdGFuY2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgIGlm
ICghV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBib3hlZEFyZ3MuYXBwZW5k
KGluc3RhbmNlKTsKIAogICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnSW5kZXgpIHsKICAgICAgICAgSlNWYWx1
ZSBhcmcgPSBleGVjLT5hcmd1bWVudChhcmdJbmRleCk7CkBAIC0xMjcsNyArMTI3LDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjKQogICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0ciwgd2FzbUZ1
bmN0aW9uLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJncyk7CiAKICAgICAv
LyBGSVhNRSBEbyBhd2F5IHdpdGggdGhpcyBlbnRpcmUgZnVuY3Rpb24sIGFuZCBvbmx5IHVzZSB0
aGUgZW50cnlwb2ludCBnZW5lcmF0ZWQgYnkgQjMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjY0ODYKLSAgICBXYXNtOjpDb250ZXh0KiBwcmV2V2FzbUNvbnRleHQg
PSBXYXNtOjpsb2FkQ29udGV4dCh2bSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBwcmV2
SW5zdGFuY2UgPSB2bS53YXNtQ29udGV4dC5sb2FkKCk7CiAgICAgewogICAgICAgICAvLyBXZSBk
byB0aGUgc3RhY2sgY2hlY2sgaGVyZSBmb3IgdGhlIHdyYXBwZXIgZnVuY3Rpb24gYmVjYXVzZSB3
ZSBkb24ndAogICAgICAgICAvLyB3YW50IHRvIGVtaXQgYSBzdGFjayBjaGVjayBpbnNpZGUgZXZl
cnkgd3JhcHBlciBmdW5jdGlvbi4KQEAgLTEzNywyMiArMTM3LDIyIEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgaWYgKFVOTElLRUxZKChzcCA8IHN0YWNrU3BhY2VVc2VkKSB8fCAoKHNw
IC0gc3RhY2tTcGFjZVVzZWQpIDwgYml0d2lzZV9jYXN0PGludHB0cl90Pih2bS5zb2Z0U3RhY2tM
aW1pdCgpKSkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihleGVjLCBzY29wZSwgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKSk7CiAgICAg
fQotICAgIFdhc206OnN0b3JlQ29udGV4dCh2bSwgd2FzbUNvbnRleHQpOworICAgIHZtLndhc21D
b250ZXh0LnN0b3JlKGluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAgICBBU1NFUlQo
d2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKLSAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0
YW5jZSgpID09IFdhc206OmxvYWRDb250ZXh0KHZtKSk7CisgICAgQVNTRVJUKHdhc21GdW5jdGlv
bi0+aW5zdGFuY2UoKSA9PSB2bS53YXNtQ29udGV4dC5sb2FkKCkpOwogICAgIEVuY29kZWRKU1Zh
bHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0VudHJ5cG9pbnQo
KSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwogICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRo
aXMgaXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQncyBzdG9yZWQgaW4g
VmVjdG9yPEpTVmFsdWU+LgogICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qgc3RyaWN0bHkgbmVj
ZXNzYXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxkIGtlZXAgdGhlIGlu
c3RhbmNlCiAgICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4KLSAgICB3YXNtQ29u
dGV4dC0+dXNlKCk7Ci0gICAgaWYgKHByZXZXYXNtQ29udGV4dCAhPSB3YXNtQ29udGV4dCkgewor
ICAgIGluc3RhbmNlLT51c2UoKTsKKyAgICBpZiAocHJldkluc3RhbmNlICE9IGluc3RhbmNlKSB7
CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRyYSBzYWZldHkgaW5zdGVhZCBv
ZiBsZWF2aW5nIGEgY2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGluIHRoZXJlLiBJZiB3ZSBldmVy
IGZvcmdldCB0byBzZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbAogICAgICAgICAvLyBib3VuZHMs
IHRoaXMgd2lsbCBmb3JjZSBldmVyeSBzdGFjayBvdmVyZmxvdyBjaGVjayB0byBpbW1lZGlhdGVs
eQogICAgICAgICAvLyBmaXJlLgotICAgICAgICB3YXNtQ29udGV4dC0+c2V0Q2FjaGVkU3RhY2tM
aW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6
bWF4KCkpKTsKKyAgICAgICAgaW5zdGFuY2UtPnNldENhY2hlZFN0YWNrTGltaXQoYml0d2lzZV9j
YXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSk7CiAgICAg
fQotICAgIFdhc206OnN0b3JlQ29udGV4dCh2bSwgcHJldldhc21Db250ZXh0KTsKKyAgICB2bS53
YXNtQ29udGV4dC5zdG9yZShwcmV2SW5zdGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzd2l0Y2ggKHNpZ25hdHVy
ZS5yZXR1cm5UeXBlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGE5
ZDhmMGQuLjJmZGQ1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMzIs
MTIgKzMyLDE0IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTW9kdWxl
RW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2lu
Y2x1ZGUgIkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgorI2luY2x1ZGUg
Ildhc21Ub0pTLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUu
aCIKQEAgLTc1LDEwICs3NywxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleAogICAgIFN0cnVj
dHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1w
b3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1
bGUsIGltcG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUsIFdhc206Okluc3RhbmNlOjpjcmVh
dGUoUmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSkpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24o
dm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoaW5zdGFuY2UtPm1lbW9yeU1v
ZGUoKSkpOworICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBleGVjLCBtb2R1bGUt
Pm1vZHVsZSgpLmNvbXBpbGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2UtPm1lbW9yeU1v
ZGUoKSwgJldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Ondhc21Ub0pTRXhjZXB0
aW9uKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAK
aW5kZXggNjQ5ODliNS4uODZmODE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKQEAg
LTk2LDEzICs5NiwxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9CiAgICAg
fQogCi0gICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVh
dGUodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOworICAgIGF1dG8qIGpz
TWVtb3J5ID0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBS
ZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZShpbml0aWFs
UGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LAorICAgICAgICBbJnZtXSAoKSB7IHZtLmhlYXAu
Y29sbGVjdEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgIFsmdm1dICgp
IHsgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAg
ICBbJnZtLCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBh
Z2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2FsbGJhY2sodm0s
IG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAgaWYgKCFtZW1vcnkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0gICAgYXV0byoganNNZW1vcnkg
PSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKm1lbW9y
eS5sZWFrUmVmKCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotCisgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWVtb3J5KTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNZW1vcnlQcm90b3R5cGUuY3BwCmluZGV4IGU5OTRkYzguLjRmY2E4YzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eVByb3RvdHlwZS5jcHAKQEAgLTc3LDggKzc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQogICAg
IHVpbnQzMl90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAg
Ym9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSB0cnVlOwotICAgIFdhc206OlBh
Z2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhLCBzaG91bGRUaHJv
d0V4Y2VwdGlvbnNPbkZhaWx1cmUpOworICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1v
cnktPmdyb3codm0sIGV4ZWMsIGRlbHRhKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3Vs
dC5wYWdlQ291bnQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRleCA5NjEwMjRk
Li4xNjYxMDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtMTYxLDExICsxNjEs
MTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1vZHVsZUV4cG9y
dHMoRXhlY1N0YXRlKiBleGVjKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHRocm93U2Nv
cGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1
bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBzdHJ1
Y3R1cmUpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1
ZSh2bSwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0K
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlN
b2R1bGUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTc1LDE2ICsxNzYsMTYgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRl
KiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5v
dEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSIpKTsKIH0KIAotSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVh
dGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJ1ZmZlciwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
OjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291
cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBzY29wZS5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4
ZWMsIHN0cnVjdHVyZSwgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmModm0sIFdURk1vdmUoc291
cmNlKSkpOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBl
eGVjLCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2bS53YXNtQ29udGV4
dCwgV1RGTW92ZShidWZmZXIpKSk7CiB9CiAKIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3Iq
IFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuaAppbmRleCA2MDI1Yzk4Li4xM2FjYTNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVD
b25zdHJ1Y3Rvci5oCkBAIC0zMCw4ICszMCwxMSBAQAogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdl
YkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlOwogCiBjbGFzcyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewpAQCAtNDQsNyArNDcsNyBAQCBwdWJs
aWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVNb2R1
bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBidWZmZXIsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgVmVjdG9yPHVpbnQ4
X3Q+JiYgYnVmZmVyKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGNi
MWZlYzEuLjBhODY2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9p
ZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBVTlVTRURfUEFSQU0oc2NvcGUpOwogICAgIGF1dG8q
IGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAotICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2RlQmxvY2soKTsKKyAg
ICBXYXNtOjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5pbnN0YW5jZSgpLmNvZGVC
bG9jaygpOwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1h
dGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIFN5bWJvbFRhYmxlKiBl
eHBvcnRTeW1ib2xUYWJsZSA9IG1vZHVsZS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKQEAgLTE1Miw3
ICsxNTIsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSog
ZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAgICAgLy8gUmV0dXJu
IFRvSlNWYWx1ZSh2KS4KICAgICAgICAgICAgIHN3aXRjaCAoZ2xvYmFsLnR5cGUpIHsKICAgICAg
ICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBK
U1ZhbHVlKGluc3RhbmNlLT5sb2FkSTMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2Fk
STMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CkBAIC0xNjAsMTEgKzE2MCwxMSBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlLAogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5z
dGFuY2UtPmxvYWRGMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgICAgIGV4
cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRGMzJHbG9iYWwo
ZXhwLmtpbmRJbmRleCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBj
YXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShp
bnN0YW5jZS0+bG9hZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7CisgICAgICAgICAgICAgICAg
ZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEY2NEdsb2Jh
bChleHAua2luZEluZGV4KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0yMTcsMTIgKzIxNywxMiBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5tb2R1bGUoKTsKLSAgICBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5jb2RlQmxvY2soKTsK
LSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBt
b2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgV2FzbTo6TW9kdWxlJiBtb2R1bGUgPSBt
X2luc3RhbmNlLT5pbnN0YW5jZSgpLm1vZHVsZSgpOworICAgIFdhc206OkNvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKTsKKyAgICBjb25zdCBX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUubW9kdWxl
SW5mb3JtYXRpb24oKTsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gbV9pbnN0YW5j
ZS0+dGFibGUoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50OjpQdHI+JiBkYXRh
ID0gbV9pbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0YTsKKyAgICBj
b25zdCBWZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9IG1vZHVsZUluZm9ybWF0aW9u
LmRhdGE7CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBtX2luc3RhbmNlLT5t
ZW1vcnkoKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8SlNWYWx1ZT4gZXhjZXB0aW9uOwpAQCAtMjM5
LDcgKzIzOSw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAg
dWludDMyX3QgdGFibGVJbmRleCA9IGVsZW1lbnQub2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkKLSAg
ICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5sb2FkSTMy
R2xvYmFsKGVsZW1lbnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQorICAgICAgICAgICAg
ICAgID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEkz
Mkdsb2JhbChlbGVtZW50Lm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkKICAgICAgICAgICAg
ICAgICA6IGVsZW1lbnQub2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAgICAgICAgZm4oZWxl
bWVudCwgdGFibGVJbmRleCk7CkBAIC0yNTUsNyArMjU1LDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgIGZvciAo
Y29uc3QgV2FzbTo6U2VnbWVudDo6UHRyJiBzZWdtZW50IDogZGF0YSkgewogICAgICAgICAgICAg
dWludDMyX3Qgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkKLSAgICAg
ICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5sb2FkSTMyR2xv
YmFsKHNlZ21lbnQtPm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkKKyAgICAgICAgICAgICAg
ICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJMzJH
bG9iYWwoc2VnbWVudC0+b2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQogICAgICAgICAgICAg
ICAgIDogc2VnbWVudC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAgICAgICAgZm4obWVt
b3J5LCBzaXplSW5CeXRlcywgc2VnbWVudCwgb2Zmc2V0KTsKQEAgLTI5Myw3ICsyOTMsNyBAQCBK
U1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgICAgICAgICAvLyBmb3IgdGhlIGltcG9ydC4KICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAgICAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tpXTsKLSAgICAgICAg
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS5zaWduYXR1cmVJ
bmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBp
ZiAoZnVuY3Rpb25JbmRleCA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CiAg
ICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0
Kj4obV9pbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAg
ICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
UHJvdG90eXBlLmNwcAppbmRleCBlOWE2MzRhLi4xZmI5NDNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJK
U1RvV2FzbS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5o
IgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAj
aW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCisjaW5j
bHVkZSAiV2FzbVRvSlMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJX
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmgiCkBAIC05NCw3ICs5Niw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQog
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJlamVjdChleGVj
LCBzY29wZSwgcHJvbWlzZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdhc206Ok1vZHVsZTo6dmFs
aWRhdGVBc3luYyh2bSwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1v
ZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0XSAoVk0mIHZtLCBXYXNt
OjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBX
YXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKHNvdXJj
ZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtwcm9taXNl
LCBnbG9iYWxPYmplY3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJl
c3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2No
ZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBX
VEZNb3ZlKHJlc3VsdCksICZ2bV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICAgICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMTM1LDcgKzEzNyw3IEBA
IHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlhbGx5IHJlY29t
cGlsaW5nIGEgbW9kdWxlLiBXZSBmaXJzdCBnYXRoZXIgYWxsIHRoZSBpbXBvcnQvbWVtb3J5IGlu
Zm9ybWF0aW9uIHByaW9yIHRvIGNvbXBpbGluZyBjb2RlLgotICAgIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywg
bW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwg
aW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5z
dGFuY2VTdHJ1Y3R1cmUoKSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2FzbTo6TW9kdWxl
Pihtb2R1bGUtPm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJl
amVjdChleGVjLCBzY29wZSwgcHJvbWlzZSkpOwogCiAgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+
PiBkZXBlbmRlbmNpZXM7CkBAIC0xNDMsMTMgKzE0NSwxMyBAQCBzdGF0aWMgdm9pZCBpbnN0YW50
aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2Us
IEpTVwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGluc3RhbmNl
KSk7CiAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21p
c2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CiAgICAgLy8gTm90ZTogVGhpcyBjb21wbGV0aW9u
IHRhc2sgbWF5IG9yIG1heSBub3QgZ2V0IGNhbGxlZCBpbW1lZGlhdGVseS4KLSAgICBtb2R1bGUt
Pm1vZHVsZSgpLmNvbXBpbGVBc3luYyh2bSwgaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgY3JlYXRl
U2hhcmVkVGFzazxXYXNtOjpDb2RlQmxvY2s6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGluc3Rh
bmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kXSAoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYm
IHJlZkNvZGVCbG9jaykgbXV0YWJsZSB7CisgICAgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlQXN5
bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBjcmVhdGVTaGFyZWRU
YXNrPFdhc206OkNvZGVCbG9jazo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5zdGFuY2UsIG1v
ZHVsZSwgcmVzb2x2ZUtpbmQsICZ2bV0gKFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgcmVmQ29kZUJs
b2NrKSBtdXRhYmxlIHsKICAgICAgICAgUmVmUHRyPFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2Nr
ID0gV1RGTW92ZShyZWZDb2RlQmxvY2spOwogICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1l
ci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwg
cmVzb2x2ZUtpbmQsICZ2bSwgY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxvY2spXSAoKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlz
ZSwgaW5zdGFuY2UsIG1vZHVsZSwgY29kZUJsb2NrLnJlbGVhc2VOb25OdWxsKCksIHJlc29sdmVL
aW5kKTsKICAgICAgICAgfSk7Ci0gICAgfSkpOworICAgIH0pLCAmV2FzbTo6Y3JlYXRlSlNUb1dh
c21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pOwogfQogCiBzdGF0aWMgdm9pZCBj
b21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmplY3QqIGltcG9ydE9iamVjdCkK
QEAgLTE2NSw3ICsxNjcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcgogICAgIFZlY3Rvcjx1
aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGJ1
ZmZlcik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0KGV4ZWMsIHNjb3Bl
LCBwcm9taXNlKSk7CiAKLSAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmModm0sIFdURk1v
dmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4o
W3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0XSAoVk0mIHZtLCBXYXNtOjpNb2R1
bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgIFdhc206Ok1vZHVs
ZTo6dmFsaWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRl
U2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQm
JiByZXN1bHQpIG11dGFibGUgewogICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2No
ZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXSAoKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAgICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMjEzLDcgKzIx
NSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFs
aWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3QgYnl0ZVNpemU7CiAgICAgdWlu
dDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9m
ZnNldCwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgp
KTsKKyAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBiYXNlICsgYnl0ZU9mZnNldCwg
Ynl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKICAg
ICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB0aHJvdyBhbiBPT00gZXhjZXB0aW9uIGhlcmUg
aWYgd2UgZGV0ZWN0IHRoYXQgc29tZXRoaW5nIHdpbGwgT09NLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTUKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMTE4NjVmNS4uMmM1YmM3MCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IuY3BwCkBAIC05MCw4ICs5MCwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQog
ICAgICAgICB9CiAgICAgfQogCisgICAgUmVmUHRyPFdhc206OlRhYmxlPiB3YXNtVGFibGUgPSBX
YXNtOjpUYWJsZTo6Y3JlYXRlKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmICghd2FzbVRhYmxl
KSB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJjb3VsZG4ndCBjcmVhdGUgVGFibGUiKSkpKTsKKyAgICB9CisKICAgICB0aHJvd1Njb3Bl
LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWJs
ZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2Vt
Ymx5VGFibGVTdHJ1Y3R1cmUoKSwgaW5pdGlhbCwgbWF4aW11bSkpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21U
YWJsZS5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwCmluZGV4IDAyMWM2MTguLjY4ZTk1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE8KICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHModm0sIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uOjppbmZvKCkpLCAiV2Ugc2hvdWxkIG5ldmVyIGRvdWJsZSB3cmFwIGEgd3Jh
cHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9ICIiOwogICAgIE5hdGl2ZUV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3Is
IG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4o
dm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgeyBzaWdu
YXR1cmVJbmRleCwgaW5zdGFuY2UtPmNvZGVCbG9jaygpLT53YXNtVG9Kc0NhbGxTdHViRm9ySW1w
b3J0KGltcG9ydEluZGV4KSB9KTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVz
dWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIFdh
c206OkNhbGxhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgaW5zdGFuY2UtPndhc21Db2Rl
QmxvY2soKS53YXNtVG9KU0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSB9ICk7CiAgICAg
Y29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
LCBleGVjdXRhYmxlLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwg
aW5zdGFuY2UpOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjViMGI5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaApAQCAtMCwwICsxLDIgQEAKKyNwcmFn
bWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dhc21Nb2R1bGUuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmlu
ZGV4IDk3NWM5YzkuLjc4NDAzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNzksNiArNzksNyBAQAogI2luY2x1
ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1R5cGVk
QXJyYXlzLmg+CiAjaW5jbHVkZSA8d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg+CisjaW5j
bHVkZSA8d2FzbS9XYXNtTW9kdWxlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0tIAoy
LjkuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321828</attachid>
            <date>2017-09-26 09:56:19 -0700</date>
            <delta_ts>2017-09-26 10:09:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>430431</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAyYTNiNmM2YmEyODQwMGJmOThmNmY1NWQyZmI4ZTE5OTQ5ZjQ4MzkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NDcgKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDEyICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgICAgICAgICB8ICAyMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaCAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaCAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCAgICAgICAgICAgfCAxMjYgKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAgICAgICAgfCAgNzYgKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCAgICAgICAgICB8ICA1OSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oICAgICAgICAgICAgfCAg
IDUgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCAgICAgICAg
fCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oICAgICAg
ICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAg
ICAgICAgICB8IDIyNyArKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oICAgICAgICAgICB8ICA0OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgfCAgIDAKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4g
anN9L0pTV2ViQXNzZW1ibHkuaCAgIHwgIDUwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAgICAgICAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTE4ICsrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDg1ICsrLQogLi4uL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgfCAgNzYgKystCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggICB8ICAxMyAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAg
MzIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAg
fCAgMjUgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAgIHwgIDc1ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmggfCAgNDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCAgICAgICAgIHwgNjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8
ICAxOSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAg
ICAgfCAgIDUgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAg
ICAgICAgIHwgIDIyICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgICB8ICAxNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVj
dG9yLmNwcCAgICAgICAgfCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAgICAgICAgIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93YXNtL1dhc21Nb2R1bGUuaCB8ICAgMiArCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8ICAgMSArCiAxMTEgZmlsZXMgY2hhbmdlZCwgMzA3
NiBpbnNlcnRpb25zKCspLCAxNzQ0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeU1vZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAwJSkKIHJlbmFtZSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggKDYyJSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd2Fz
bS9XYXNtTW9kdWxlLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDgyZWYxNmQuLjZiNjc2N2UgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDkt
MjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRXhjZWVkaW5nIG1h
eCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyCisgICAg
ICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdlOiBpdCB1c2Vk
IHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIHRl
c3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qczoKKyAgICAgICAgKGFz
c2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAgKGFzc2Vy
dC50aHJvd3MpOgorCiAyMDE3LTA5LTIzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBpbmZpbml0ZSBsb29waW5nIHRlc3QyNjIgdGVzdApkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uN2ZlNmIxMyAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0IGJ1ZmZlciBv
ZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQqMTAyNCk7
CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5jZSBpdCBmYWls
cy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVycm9yLCAiT3V0
IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCks
IFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNlZWQgdGhlIG1l
bW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOyAKICAgICBhc3NlcnRFcShidWZmZXIuYnl0
ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnkuYnVmZmVyLCBidWZmZXIp
OwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pTVGVzdHMv
d2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0ZCAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rh
YmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQo
dGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBp
bml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRz
IG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0cyBoYXMg
YSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4g
aXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAy
KiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUncyBpbml0aWFs
IHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQgLyAyNzogVGFi
bGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBtYXhpbXVt
IDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAy
MTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAg
XTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDlkNzc4ZjEuLmJmOWMyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ1MCBAQAorMjAxNy0wOS0yNSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBh
cHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBl
dmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZW50YWlscyBjbGVhbmluZyB1cCBhbmQgc3BsaXR0
aW5nIGEgYnVuY2ggb2YgY29kZSB3aGljaCB3ZSBoYWQKKyAgICAgICAgaW50ZXJ0d2luZWQgYmV0
d2VlbiBDKysgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgSlMgb2JqZWN0cywgYW5kIHB1cmUgQysr
CisgICAgICAgIGltcGxlbWVudGF0aW9uIG9iamVjdHMuIFRoaXMgc3BlY2lmaWMgY2hhbmdlIGdv
ZXMgbW9zdCBvZiB0aGUgd2F5IHRvd2FyZHMKKyAgICAgICAgYWxsb3dpbmcgSlNDJ3MgV2ViQXNz
ZW1ibHkgdG8gd29yayB3aXRob3V0IFZNIC8gSlMsIHVwIHRvIGJ1dCBleGNsdWRpbmcKKyAgICAg
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlICh0aGVyZSdzIFdhc206Okluc3RhbmNlLCBidXQgaXQn
cyBub3QgKnRoZSogdGhpbmcKKyAgICAgICAgeWV0KS4gQmVjYXVzZSBvZiB0aGlzIHdlIHN0aWxs
IGhhdmUgYSBmZXcgRklYTUUgaWRlbnRpZnlpbmcgcGxhY2VzIHRoYXQgbmVlZCB0bworICAgICAg
ICBjaGFuZ2UuIEEgZm9sbG93LXVwIGNoYW5nZSB3aWxsIGdvIHRoZSByZXN0IG9mIHRoZSB3YXku
CisKKyAgICAgICAgSSB3ZW50IGFib3V0IHRoaXMgY2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkg
cG9zc2libGU6IGdyZXAgdGhlCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3dhc20gZGlyZWN0b3J5
IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNsdWRlIHRoZSAvanMvCisgICAg
ICAgIHN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1lbnRhdGlvbiBv
ZiBXZWJBc3NlbWJseSkuCisKKyAgICAgICAgTm9uZSBvZiB0aGlzIGNoYW5nZSByZW1vdmVzIHRo
ZSBuZWVkIGZvciBhIEpJVCBlbnRpdGxlbWVudCB0byBiZSBhYmxlIHRvIHVzZQorICAgICAgICBX
ZWJBc3NlbWJseS4gV2UgZG9uJ3QgaGF2ZSBhbiBpbnRlcnByZXRlciwgdGhlIHByb2Nlc3MgdGhl
cmVmb3JlIHN0aWxsIG5lZWRzIHRvCisgICAgICAgIGJlIGFsbG93ZWQgdG8gSklUIHRvIHVzZSB0
aGVzZSBwdXJlLUMrKyBBUElzLgorCisgICAgICAgIEludGVyZXN0aW5nIHRoaW5ncyB0byBub3Rl
OgorCisgICAgICAgICAgLSBSZW1vdmUgVk0gZnJvbSBQbGFuIGFuZCBhc3NvY2lhdGVkIHBsYWNl
cy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KKyAgICAgICAgICAgIHRoZSBjYWxs
YmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCisgICAgICAgICAgLSBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCisg
ICAgICAgICAgICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNv
bnN0cnVjdGlvbiB0aW1lIGZvciB0aGlzCisgICAgICAgICAgICBwdXJwb3NlOiBvbmUgdG8gbm90
aWZ5IG9mIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCisgICAgICAg
ICAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIg
Y3JlYXRlcyB0aGUgbWVtb3J5IHRvCisgICAgICAgICAgICBkaWN0YXRlIGhvdyB0byByZWFjdCB0
byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1iZWRkaW5nIHRoYXQncyB0bworICAg
ICAgICAgICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3RpdmVseSkuCisgICAg
ICAgICAgLSBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdhc206
Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCisgICAgICAgICAgICB0aGVyZSwgd2l0aCBhbiBl
bnVtIGNsYXNzIGZvciBmYWlsdXJlIHR5cGVzLgorICAgICAgICAgIC0gRXhjZWVkaW5nIG1heCBv
biBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRo
aXMKKyAgICAgICAgICAgIGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNl
ZCB0byB0aHJvdyBPT00gZXJyb3IuIFVwZGF0ZSB0aGUKKyAgICAgICAgICAgIGNvcnJlc3BvbmRp
bmcgdGVzdC4KKyAgICAgICAgICAtIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3Jvd19tZW1vcnkgb3Bj
b2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCisgICAgICAgICAgICByZWFjaCBk
aXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgorICAgICAgICAgIC0gSlNXZWJB
c3NlbWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNh
dXNlIGl0J3Mgb25seQorICAgICAgICAgICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20g
Z3Jvd19tZW1vcnkgYXMgYmVmb3JlKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9yeSBub3cgdGFr
ZXMgYSBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCisgICAg
ICAgICAgICB3cmFwcGVycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2Nl
ZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CisgICAgICAgICAgICBrbm93bmluZyBhbnl0aGluZyBh
Ym91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxpc3Qgb2YgY2FsbGJhY2tzCisg
ICAgICAgICAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xsIHdhbnQgdG8g
bm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAorICAgICAgICAgICAgdW5kZXIgYSBsb2NrKS4KKyAg
ICAgICAgICAtIFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9m
IHRydXRoIGFib3V0IGFkZHJlc3MgLyBzaXplLAorICAgICAgICAgICAgdXNlZCBkaXJlY3RseSBi
eSBnZW5lcmF0ZWQgY29kZSBpbnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCisgICAgICAg
ICAgLSBNb3ZlIHdhc21Ub0pTIGZyb20gdGhlIGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRv
IGl0cyBvd24gaGVhZGVyIHVuZGVyCisgICAgICAgICAgICB3YXNtL2pzLiBJdCdzIG9ubHkgdXNl
ZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwLCBhbmQgdXNlcyBWTSwKKyAg
ICAgICAgICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3NlbWJseS4KKyAgICAg
ICAgICAtIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVjdCBo
b2xkaW5nIGEKKyAgICAgICAgICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3Rl
YWQgb2YgYW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcworICAgICAgICAgICAgZG9lc24n
dCBhZGQgYW55dGhpbmcgdG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0
dWFsbHkgZ2V0cworICAgICAgICAgICAgcGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBU
TFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAgICAgIHBvdGVu
dGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVudGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hh
bmdlIGlzIHRvCisgICAgICAgICAgICBhbGxvdyBwYXNzaW5nIFdhc206OkNvbnRleHQgYXJvdW5k
IHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZNCisgICAgICAgICAgICBj
b250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3RpdmVseSB0
aGUgc2FtZSwgYnV0IHdpdGgKKyAgICAgICAgICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRk
aW5nIGlzIG11Y2ggYmV0dGVyIG9mZi4KKyAgICAgICAgICAtIE1vdmUgSlNXZWJBc3NlbWJseSBp
bnRvIHRoZSBKUyBmb2xkZXIuCisgICAgICAgICAgLSBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJs
b2NrIGRpcmVjdGx5IGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KKyAgICAgICAg
ICAtIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24gV2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyBy
YXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKKyAgICAgICAgICAgIGJlaW5nIG9uIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5FbWJlZGRlcgorICAgICAgICAg
ICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jaywgYW5kIGlzIHN0aWxsCisgICAgICAgICAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCisg
ICAgICAgICAgICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRv
IGNhbGwgYmFjayBpbnRvIHRoZQorICAgICAgICAgICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRk
aW5nIGFueSBpbmRpcmVjdGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQorICAgICAg
ICAgICAgdGhlIEIzIElSIGdlbmVyYXRvciBub3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2Nr
IGluc3RlYWQgb2YKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suCisgICAgICAg
ICAgLSBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24gY29tcGxldGlvbiBp
cyBub3cgbWFya2VkIGJ5IGl0cyBvd24KKyAgICAgICAgICAgIGF0b21pYzxib29sPiBmbGFnIGlu
c3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBhbmQK
KyAgICAgICAgICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVj
YXVzZSBiZWZvcmUgbXkgY2hhbmdlcworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayBkaWQgaXRzIG93biBjb21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQorICAgICAg
ICAgICAgV2FzbTo6Q29kZUJsb2NrLCB3aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0
IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRo
ZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2VyLCB0aGUgbG9jayB3YXMgYmVpbmcKKyAg
ICAgICAgICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2VydGlvbi4KKyAgICAgICAg
ICAtIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhyb3VnaCBh
IGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKKyAgICAgICAgICAgIGluIGF0IGNvbXBpbGF0aW9uIHRp
bWUsIGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4K
KyAgICAgICAgICAtIFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQg
aGFuZGxpbmcgdGh1bmtzLiBPbmx5IHRoZSBJUgorICAgICAgICAgICAgZ2VuZXJhdG9yIHNob3Vs
ZCBrbm93LCBhbmQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcK
KyAgICAgICAgICAgIHRodW5rIGlzIGdlbmVyYXRlZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQg
KG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5vdAorICAgICAgICAgICAgYWxsIG9mIHRoZW0g
Z2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KKyAgICAgICAgICAtIE1ha2UgZXhjZXB0aW9u
IHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNvZGVkCisgICAg
ICAgICAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKKyAgICAgICAgICAgIGNvZGUgd2hlbiBhIFdlYkFz
c2VtYmx5IGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBn
ZXQKKyAgICAgICAgICAgIGNhbGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNh
biBvbmx5IGhhdmUgYSBzaW5nbGUgb2YgdGhlc2UKKyAgICAgICAgICAgIGZ1bmN0aW9ucyAoaS5l
LiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJvY2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVy
IGlzIGEKKyAgICAgICAgICAgIHNpbmdsZXRvbi4gVGhhdCBjYW4gYmUgZml4ZWQgaW4gaW4gIzE3
NzQ3NS4KKyAgICAgICAgICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVyZSBhbGwgZW1iZWRk
ZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgorICAgICAgICAgIC0gU3BsaXQgdXAgSlNXZWJBc3NlbWJs
eVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKKyAgICAgICAgICAgIHJlZmNvdW50ZWQu
IEpTV2ViQXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGlu
IHRoZQorICAgICAgICAgICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBi
eSB0aGUgSklUIGNvZGUgdG8gbG9va3VwIHdoZXJlIHRvCisgICAgICAgICAgICBjYWxsIGFuZCBk
byB0aGUgaW5zdGFuY2UgY2hlY2sgKGZvciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlz
IGNyZWF0ZXMKKyAgICAgICAgICAgIGFuIGV4dHJhIGFsbG9jYXRpb24gZm9yIGFsbCB0aGUgaW5z
dGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhjaGFuZ2UKKyAgICAgICAgICAgIHJlbW92
ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUgaW5zdGFuY2UgdXNlZCB0
byBiZSBvYnRhaW5lZAorICAgICAgICAgICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4gQWxzbyBu
b3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKKyAgICAgICAgICAgIGlu
c3RhbmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRl
ciB0byB0aGUKKyAgICAgICAgICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ug
d291bGQgY2F1c2UgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICAgICAgICAtIEFkZCBXYXNtSW5zdGFu
Y2UuIEl0IGRvZXNuJ3QgZG8gbXVjaCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCisgICAgICAgICAg
LSBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBkb2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1w
b3J0ZWQgZnVuY3Rpb25zIGFzCisgICAgICAgICAgICBKU09iamVjdHMsIGl0IGFsc28gaGFzIHRo
ZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3YXNtCisgICAgICAgICAgICBl
bnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIgaW5zdGFuY2Un
cyBpbXBvcnRlZAorICAgICAgICAgICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAorICAgICAgICAgICAg
Y3JlYXRlcyBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBk
aXNhc3NvY2lhdGUKKyAgICAgICAgICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVt
YmVkZGVyLW5ldXRyYWwgdGhpbmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKKyAgICAgICAgICAgIHdp
biBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBnZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZklt
cG9ydEZ1bmN0aW9uIGZvcgorICAgICAgICAgICAgdGhlIGNhbGwgb3Bjb2RlICh3aGVuIHRoZSBj
YWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgICAg
ICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhpcyBpc24ndCBrbm93
biBhdCBjb21waWxlLXRpbWUKKyAgICAgICAgICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQgb24g
dGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgorICAgICAg
ICAgICAgdGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3Rh
bmNlIChvbmx5IHdhc20tPndhc20KKyAgICAgICAgICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2Ug
aXMgd2FzbUJpbmRpbmcgd2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCisgICAg
ICAgICAgICBmaWd1cmUgb3V0IHRoZSB3YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRo
ZW4gZ2V0cworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwKKyAgICAgICAgICAgIGNhbGwuIFRoZSBk
aXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5zdGFuY2UgY2FuIGJlCisg
ICAgICAgICAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBDb250ZXh0
IGlzLCBhbmQKKyAgICAgICAgICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVh
ZHkgZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKKyAgICAgICAgICAgIGNh
biBtb3ZlIHRoaXMgdGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRv
IFdhc206Okluc3RhbmNlLAorICAgICAgICAgICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGlu
IGFzIGFuIG9wYXF1ZSBwb2ludGVyIHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAorICAgICAg
ICAgICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdyaXRlQmFycmllcjxKU09iamVjdD4uCisgICAg
ICAgICAgLSBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJhbWUsIGFuZCBpbiBtYW55IHBs
YWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAorICAgICAgICAgICAgYXJvdW5kIGluc3RlYWQgb2Yg
Vk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1lcyB3aGljaAor
ICAgICAgICAgICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYworICAgICAgICAgICAgbG9jYXRpb24uIFRoYXQg
Y2hhbmdlIHdvbid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwg
YnV0CisgICAgICAgICAgICB3aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hp
bmVyeSBpbiBhIGdlbmVyaWMgbWFubmVyIHdpdGhvdXQKKyAgICAgICAgICAgIGhhdmluZyBhIFZN
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxp
Y2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW53aW5k
RXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0pOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogZGZnL0RGR09TUkVu
dHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxl
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2Fs
bGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0
YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWNT
dGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUgY29uc3QpOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAgICAoSlNDOjpOYXRpdmVDYWxsRnJhbWVU
cmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxG
cmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSk6
CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjp+TmF0aXZl
Q2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IpOgorICAgICAgICAoSlNDOjpTdGFj
a1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJl
YWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVySXNFbnRyeUZyYW1lIGNvbnN0KToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmg6CisgICAgICAgIChKU0M6OlZN
RW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVJl
Y29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAoSlNDOjpFbnRyeUZyYW1l
Ojp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRl
ck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlND
Ojp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAg
ICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9P
cHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6Cisg
ICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OkZyYW1lV2Fsa2VyKToKKyAg
ICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VUb1BhcmVudEZyYW1lKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6Cisg
ICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dTY29w
ZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZN
Lmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KToKKyAgICAgICAgKiBy
dW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjppc1NhbmVGcmFtZSk6CisgICAgICAg
IChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAgICAgICAoSlND
OjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2spOgorICAgICAgICAqIHdhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2FzbUJC
UVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6
Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmg6
CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRp
bmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNt
L1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpD
b2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29t
cGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpzZXRDb21waWxhdGlv
bkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFN0dWJzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNv
ZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yik6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCk6CisgICAgICAg
IChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0LmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUyk6CisgICAgICAgIChK
U0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250
ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAgICAgICAqIHdh
c20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIu
aC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtSW5z
dGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om1lbW9yeSk6
CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0YWJsZSk6CisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkU3RhY2tMaW1p
dCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRDYWNoZWRTdGFja0xp
bWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3Rlcklu
Zm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6CisgICAgICAgIChK
U0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9TYXZlIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlVmFsaWRhdGlvbkNh
bGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y29tcGls
ZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBh
cnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50
Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnJ1bkNv
bXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmFkZENvbXBsZXRpb25U
YXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNl
bElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgICogd2FzbS9XYXNtVGFi
bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJs
ZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChK
U0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFi
bGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpvZmZz
ZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAqIHdhc20vV2FzbVRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c2V0VGhyb3dXYXNtRXhjZXB0
aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtzOjp0aHJvd1dhc21FeGNlcHRpb24pOgor
ICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRl
eHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0Lmg6CisgICAgICAgICogd2FzbS9qcy9K
U1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDogQ29waWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaC4KKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Lmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmguCisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbnN0YW5jZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0NhbGxlZSk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVybmFsTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21UYWJsZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscyk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNhY2hlZFN0YWNrTGltaXQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldENhY2hlZFN0YWNrTGltaXQp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21NZW1vcnkpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21Nb2R1bGUpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUgY29uc3QpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9y
eSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKToKKyAgICAgICAg
KiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAuCisg
ICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KU0V4Y2VwdGlv
bik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJseUZ1bmN0aW9u
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5TWVt
b3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVs
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1v
ZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmg6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21waWxlRnVu
Yyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGlsZUFu
ZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMpOgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTctMDktMjUgIERldmluIFJvdXNzbyAg
PHdlYmtpdEBkZXZpbnJvdXNzby5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBD
b25zb2xlLmFkZEluc3BlY3RlZE5vZGUgdG8gRE9NLnNldEluc3BlY3RlZE5vZGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTc2MmY2OC4uOWVlNTdlZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEwODIsNyArMTA4Miw3IEBACiAJCTc5QzRCMTVFMUJBMjE1OEYw
MEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThG
MDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMz
M0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQ
Q1Jhbmdlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUQ1Q0Q1OTFDMTEwNkE5
MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNt
RXhjZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87
IH07CisJCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlEQUUyNzkxRTAz
QzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAzIC8q
IEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZFMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xNDYwLDcgKzE0NjAsNiBAQAogCQlBRDJGQ0MyMDFEQjU5Q0Iy
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMTQxREI1OUM1OTAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKIAkJQUQyRkND
MjExREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MxNTFEQjU5
QzU5MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAqLzsgfTsKIAkJ
QUQyRkNDMkQxREI4MzhGRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MyNzFEQjgzOEM0
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLzsgfTsKLQkJQUQyRkNDMzExREI4
M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5LmggKi87IH07CiAJCUFENDEyQjM0MUU3QjJFOUUwMDhBRjE1NyAvKiBXYXNtQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0MTJC
MzIxRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ0MjUyNTExRTVEMEUxNDAwOUQyQTk3IC8q
IEZ1bGxDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDQyNTI1MDFFNUQwREVCMDA5RDJBOTcgLyogRnVsbENvZGVPcmlnaW4uaCAqLzsg
fTsKIAkJQUQ0OTM3QzQxRERCRTYxNDAwNzdDODA3IC8qIEFic3RyYWN0TW9kdWxlUmVjb3JkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDMjFE
REJFNjBBMDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ2OCw2ICsxNDY3LDEzIEBACiAJ
CUFENDkzN0Q0MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDQTFEREQyNzM0
MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovOyB9OwogCQlBRDRCMURGQTFERjI0
NEUyMDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGlu
Zy5oICovOyB9OwogCQlBRDVCNDE2RjFFQkFGQjc3MDA4RUZBNDMgLyogV2FzbU5hbWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUI0MTZFMUVCQUZC
NjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUFENUMzNkREMUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUMz
NkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYg
LyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RTYxRjY5
RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMz
NkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9X
YXNtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUYzMUY2MjQ4MkUwMDEzMTND
MiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdhc21Ub0pTLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREQwOUFFRTFGNUY2
MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFRjFGN0EyNjNBMDAwQkNBQUYgLyogV2FzbU1lbW9y
eU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
NUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENzQzOEMwMUUwNDU3QTQwMEZE
MEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEODZB
OTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDg2QTkzRDFBQTREODdDMDAyRkU3N0Yg
LyogV2Vha0dDTWFwSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOEZG
Mzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDE1Niw5ICs0MTYyLDI1IEBACiAJ
CUFEMkZDQzE1MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0MyNjFEQjgz
OEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
RDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgcGF0aCA9
IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViQXNzZW1ibHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAv
KiBXYXNtRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Gb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0NzFGNEJB
Nzg2MDA2Njk5MTIgLyogV0FCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0QTFGNERFNjhDMDA2Njk5MTIgLyogV0FJbnN0
YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQUluc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFEM0YxRTRCMUY0REU2OEMwMDY2OTkxMiAvKiBXQVRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdBVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNEMx
RjRERTY4QzAwNjY5OTEyIC8qIFdBTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBTWVtb3J5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUyMUY0RjRBRTUwMDY2OTkxMiAv
KiBXQU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1lbW9yeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUzMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1vZHVs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUFEM0YxRTU0MUY0RjRBRTUwMDY2OTkxMiAvKiBXQUluc3RhbmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdBSW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXQVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNjQxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
RXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY1MUY1MEU1
N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUV4Y2Vw
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY4MUY1NDdDQjYw
MDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FN
ZW1vcnlEZXNjcmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQU1lbW9yeURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNkExRjU0N0NCNjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdBSW1wb3J0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZC
MUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
QVRhYmxlRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2
QzFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0FJbXBvcnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNG
MUU2RDFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0FUYWJsZURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDNGMUU3MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXQUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTcx
MUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
RnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQxMkIzMTFFN0Iy
RThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUQ0MTJCMzUxRTdCNTdDMDAwOEFGMTU3IC8qIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZUlmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MTczLDE1ICs0MTk1LDI4IEBACiAJCUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNt
QmluZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENEIxREY4MURGMjQ0RDcw
MDcxQUUzMiAvKiBXYXNtQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDVCNDE2RTFF
QkFGQjY1MDA4RUZBNDMgLyogV2FzbU5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbU5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REMx
RjY4OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtRW1i
ZWRkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REUxRjY5OUVCNjAw
MEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSW5zdGFu
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZERjFGNjk5RUI2MDAw
QkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21JbnN0YW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWJsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFi
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbU1lbW9yeU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU2lnbmF0dXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNpZ25hdHVy
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDg2QTkzRDFBQTREODdDMDAyRkU3
N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWFrR0NNYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOERE
NkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1RvV2Fz
bS5oOyBwYXRoID0ganMvSlNUb1dhc20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUQ4REQ2RDAxRjY3MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEpTVG9XYXNtLmNwcDsgcGF0aCA9IGpzL0pTVG9XYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5kZXhPck5hbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtSW5kZXhPck5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDlF
ODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEQjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QYWdlQ291bnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMjFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRvSlNDYWxs
ZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMzFERjhFQTAwMDA1
QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlU
b0pTQ2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUVFMUY1RjYy
M0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXYXNtVG9KUy5oOyBwYXRo
ID0ganMvV2FzbVRvSlMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRUYx
RjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdhc21U
b0pTLmNwcDsgcGF0aCA9IGpzL1dhc21Ub0pTLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRjMxRjYyNDgyRTAwMTMx
M0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBw
YXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQxOTEsNiArNDIyNiw4IEBACiAJCUFERTgwMjk2MUUwOEYxQzkwMDU4
REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7
IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJs
eUxpbmtFcnJvclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOUQx
RTA4RjIyNjAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JD
b25zdHJ1Y3Rvci5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQURGQzMwRjcxRjQ3QTdCODAwNjQ1
MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFzc2VtYmx5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY5MUY0N0E4QzAwMDY0NTFEMyAvKiBXQU1v
ZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0
aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OUY4OTM4MTg5MUFE
QjUwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyog
VG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0g
VG9vbEV4ZWN1dGFibGUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NjQ1LDYgKzU2ODIsMjYgQEAKIAkJCQk4NkYzRUVCNjE2ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1
bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVl
SlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5oICovLAorCQkJCUFEM0YxRTQ3MUY0QkE3ODYwMDY2OTkxMiAvKiBXQUJhc2UuaCAq
LywKKwkJCQlBRDNGMUU2NTFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uY3BwICovLAor
CQkJCUFEM0YxRTY0MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5oICovLAorCQkJCUFE
M0YxRTcxMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLywKKwkJCQlBRDNGMUU3
MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovLAorCQkJCUFEM0YxRTZDMUY1NDdD
QjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5jcHAgKi8sCisJCQkJQUQzRjFFNkExRjU0N0NC
NjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8sCisJCQkJQUQzRjFFNTQxRjRGNEFFNTAw
NjY5OTEyIC8qIFdBSW5zdGFuY2UuY3BwICovLAorCQkJCUFEM0YxRTRBMUY0REU2OEMwMDY2OTkx
MiAvKiBXQUluc3RhbmNlLmggKi8sCisJCQkJQUQzRjFFNTIxRjRGNEFFNTAwNjY5OTEyIC8qIFdB
TWVtb3J5LmNwcCAqLywKKwkJCQlBRDNGMUU0QzFGNERFNjhDMDA2Njk5MTIgLyogV0FNZW1vcnku
aCAqLywKKwkJCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9y
LmNwcCAqLywKKwkJCQlBRDNGMUU2OTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlw
dG9yLmggKi8sCisJCQkJQUQzRjFFNTMxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTW9kdWxlLmNwcCAq
LywKKwkJCQlBREZDMzBGOTFGNDdBOEMwMDA2NDUxRDMgLyogV0FNb2R1bGUuaCAqLywKKwkJCQlB
RDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8sCisJCQkJQUQzRjFFNEIx
RjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUuaCAqLywKKwkJCQlBRDNGMUU2RDFGNTQ3Q0I4MDA2
Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovLAorCQkJCUFEM0YxRTZCMUY1NDdDQjgw
MDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovLAorCQkJCUFERkMzMEY3MUY0N0E3Qjgw
MDY0NTFEMyAvKiBXZWJBc3NlbWJseS5oICovLAogCQkJCTVERTNEMEY0MEREOERERkIwMDQ2ODcx
NCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQVBJOwpAQCAt
NTk3OSw4ICs2MDM2LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAotCQkJCUFEMkZDQzJFMURCODM5
RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLywKLQkJCQlBRDJGQ0MyRjFEQjgzOUY3
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5
QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBFOTIxRDVBNEFCMzAw
OTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJNTNDQTczMDcxRUE1MzNEODAw
NzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAqLywKQEAgLTU5OTYsNiArNjA1MSw3IEBACiAJCQkJ
NTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCAqLywKIAkJCQlBRDQx
MkIzMTFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovLAogCQkJCUFENDEyQjMy
MUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICovLAorCQkJCUFENUMzNkRDMUY2ODhC
NUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLywKIAkJCQk3OURBRTI3OTFFMDNDODIyMDBC
NTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLywKIAkJCQk1MzgxQjkzNjFFNjBFOTY2MDA5
MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCiAJCQkJNTM4MUI5MzgxRTYw
RTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLywKQEAgLTYwMDQsNiAr
NjA2MCw4IEBACiAJCQkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBh
cnNlci5oICovLAogCQkJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuY3BwICovLAogCQkJCUFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCAqLywKKwkJCQlBRDVDMzZERTFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNw
cCAqLywKKwkJCQlBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8s
CiAJCQkJQUQwMDY1OUQxRUNBQzdGRTAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCAqLywKIAkJCQk1
M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLywKIAkJ
CQk1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8sCkBA
IC02MDExLDYgKzYwNjksOCBAQAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNt
TWVtb3J5LmggKi8sCiAJCQkJNzlCNzU5NzExREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAgKi8sCiAJCQkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oICovLAorCQkJCUFENUMzNkYwMUY3QTI2QkYwMDBCQ0FBRiAvKiBX
YXNtTWVtb3J5TW9kZS5jcHAgKi8sCisJCQkJQUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdh
c21NZW1vcnlNb2RlLmggKi8sCiAJCQkJNzkwMDgxMzYxRTk1QThFQzAwNTJEN0NEIC8qIFdhc21N
b2R1bGUuY3BwICovLAogCQkJCTc5MDA4MTM3MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxl
LmggKi8sCiAJCQkJNTNFNzc3RTExRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAgKi8sCkBAIC02MDMyLDYgKzYwOTIsOCBAQAogCQkJCTUzRjQwRTg0MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBD
MkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJB
IC8qIFdhc21TaWduYXR1cmUuaCAqLywKKwkJCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLywKKwkJCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3Bw
ICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggKi8sCiAJ
CQkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICovLApAQCAt
NzYzMiw2ICs3Njk0LDEwIEBACiAJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQUQ4REQ2RDAxRjY3
MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLywKKwkJCQlBRDhERDZDRjFGNjcwODlGMDAw
NEVCNTIgLyogSlNUb1dhc20uaCAqLywKKwkJCQlBREQwOUFGMjFGNjI0ODI5MDAxMzEzQzIgLyog
SlNXZWJBc3NlbWJseS5jcHAgKi8sCisJCQkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpT
V2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJCQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8q
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RG
RUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcCAqLywKQEAgLTc2NTEsNiAr
NzcxNyw4IEBACiAJCQkJQUQyRkNCQUQxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBRTFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseVRhYmxlLmNwcCAqLywKIAkJCQlBRDJGQ0JBRjFEQjU4REE0MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseVRhYmxlLmggKi8sCisJCQkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdh
c21Ub0pTLmNwcCAqLywKKwkJCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMu
aCAqLywKIAkJCQlBRDJGQ0JCMDFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQUQyRkNCQjExREI1OERBNDAwQjNFNzM2IC8q
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCMjFE
QjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3BwICov
LApAQCAtNzkyNiw2ICs3OTk0LDcgQEAKIAkJCQkwRkVDODVCQjFCRTE0NjJGMDA4MEZGNzQgLyog
QjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRGNjdEMjFEOUM2
RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzZFNTQ1MzFDNDY4
RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzMTlEQTA0MUMxQkU0MEQwMDFEMjYwQiAvKiBCM0xvd2VyTWFjcm9zQWZ0
ZXJPcHRpbWl6YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxRTFCREFDREFDMDA4
MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMTYsNiArODA4NSw3
IEBACiAJCQkJRTMyOERBRUIxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8q
IEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAx
RjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MjE5LDYgKzgyODksNyBAQAogCQkJCTBGQTU4MUJDMTUwRTk1MzAwMEI5QTJEOSAvKiBERkdOb2Rl
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3NTAwMEMyMzk2IC8qIERG
R051bGxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQUQ1QzM2REQxRjY4OEI2NTAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjlDRTkxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGRjFDOTBD
NTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTgzMjksOCArODQw
MCwxMCBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVz
c2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUExRjc1QUQ2QTAwMEJD
QUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M1NzFGMzNBNDUzMDBG
NTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzRFREJGNzFEQjVGRkM5MDBEQzg3QTUgLyogRnJh
bWVUcmFjZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTg3MzEsNyArODgwNCw2IEBACiAJCQkJQTc0
ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFr
U2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBRDJGQ0MzMTFEQjgzRDQ5MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlF
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUZENDg0
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjQsNiArODk5Niw3IEBACiAJCQkJ
QkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBL
ZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBS
ZWdFeHBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZEMUM4RjY1OTUwMDQ4MDE1
MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDNDBF
MTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTkw
OTMsNiArOTE2Niw3IEBACiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1
YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUw
IC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUYxRjdBMjYz
QTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1MkFB
MTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQz
QTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBmZDUyNmIyLi4yZDI4ZWU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MjYsNyArOTI2LDYgQEAgdG9vbHMvSlNEb2xsYXJWTVBy
b3RvdHlwZS5jcHAKIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCiB0b29scy9WTUluc3Bl
Y3Rvci5jcHAKIAotd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKIHdhc20vV2FzbUJCUVBsYW4uY3BwCiB3YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtOTM0
LDEyICs5MzMsMTYgQEAgd2FzbS9XYXNtQ2FsbGVlLmNwcAogd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uY3BwCiB3YXNtL1dhc21Db2RlQmxvY2suY3BwCiB3YXNtL1dhc21Db250ZXh0LmNwcAor
d2FzbS9XYXNtRW1iZWRkZXIuaAogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAogd2Fz
bS9XYXNtRm9ybWF0LmNwcAogd2FzbS9XYXNtSW5kZXhPck5hbWUuY3BwCit3YXNtL1dhc21JbnN0
YW5jZS5jcHAKK3dhc20vV2FzbUluc3RhbmNlLmgKIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNw
cAogd2FzbS9XYXNtTWVtb3J5LmNwcAogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCit3
YXNtL1dhc21NZW1vcnlNb2RlLmNwcAogd2FzbS9XYXNtTW9kdWxlLmNwcAogd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uY3BwCiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC05NDksMTAg
Kzk1MiwxNSBAQCB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQu
Y3BwCiB3YXNtL1dhc21QbGFuLmNwcAogd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAord2FzbS9XYXNt
VGFibGUuY3BwCit3YXNtL1dhc21UYWJsZS5oCiB3YXNtL1dhc21UaHVua3MuY3BwCiB3YXNtL1dh
c21WYWxpZGF0ZS5jcHAKIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCit3YXNtL2pzL0pTVG9XYXNt
LmNwcAord2FzbS9qcy9KU1RvV2FzbS5oCit3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAK
QEAgLTk2Miw2ICs5NzAsOCBAQCB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKK3dhc20vanMvV2FzbVRv
SlMuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmgKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5
cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA0MjI4
MGM1Li42ZGY0NDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTE3OSw3ICsxNzksNyBAQCBDYWxsU2l0ZUluZGV4
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6b3JpZ2luYWxDYWxsU2l0ZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gc3R1Ygogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4Y2Vw
dGlvbkhhbmRsZXIoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7Ci0gICAgaml0LT5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0pOworICAgIGppdC0+
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJm1fdm0udG9wRW50
cnlGcmFtZSk7CiAgICAgaWYgKG5lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oKSkg
ewogICAgICAgICAvLyBUbyB0aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4Y2Vw
dGlvbiBoYW5kbGluZwogICAgICAgICAvLyBjYWxsIHNpdGUsIHRoZXkgd2lsbCBleHBlY3QgdGhl
IE9TUiBleGl0IHRvIGJlIGFycml2ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCmluZGV4IDM0OGM2OGMuLjc3MTZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKICAqCkBAIC02NTIsOCArNjUyLDggQEAgdm9pZCBEZWJ1Z2dlcjo6c3RlcE91dE9m
RnVuY3Rpb24oKQogICAgIGlmICghbV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Vk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAg
ICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxs
RnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSkgOiBudWxscHRyOworICAgIEVudHJ5
RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgbV9wYXVzZU9u
Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSh0b3BFbnRyeUZyYW1lKSA6IG51bGxwdHI7CiAgICAgbV9wYXVzZU9uU3RlcE91dCA9
IHRydWU7CiAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG5v
dGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2
b2lkIERlYnVnZ2VyOjpyZXR1cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAo
IW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1l
KiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5
RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJh
bWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIGNhbGws
IHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdlIGFy
ZSByZXR1cm5pbmcgdG8uCiAgICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQgPSB0
cnVlOwpAQCAtODU2LDggKzg1Niw4IEBAIHZvaWQgRGVidWdnZXI6OnVud2luZEV2ZW50KENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1F
bnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50
cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAg
IC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYW4gZXhjZXB0aW9uIGxvY2F0aW9uIGxpa2UgYSBzdGVw
LW91dC4KICAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkK
QEAgLTg4Niw4ICs4ODYsOCBAQCB2b2lkIERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZN
RW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVu
dHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAg
ICAvLyBSZXR1cm5pbmcgZnJvbSBhIHByb2dyYW0sIGNvdWxkIGJlIGV2YWwoKSwgdGhlcmUgd2Fz
IGF0IGxlYXN0IG9uZSBleHByZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVybmlu
ZyB0by4KICAgICBtX3Bhc3RGaXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGQxOWRkYjcu
LmZmOTc4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAg
IC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBh
cmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpAQCAtMTYw
LDcgKzE2MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygp
CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAg
ICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0
aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNTgzYmY5OC4uMDIxZWFhYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTcsNyArMzE3
LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdp
c3RlclNldDo6YWxsRlBScygpKTsKIAogICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSByZWdp
c3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsKLSAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2
bUVudHJ5UmVjb3JkKHZtLT50b3BWTUVudHJ5RnJhbWUpOworICAgIFZNRW50cnlSZWNvcmQqIHJl
Y29yZCA9IHZtRW50cnlSZWNvcmQodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCBjdXJyZW50RW50cnkgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpOwogICAgICAg
ICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWcoKSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAzNDMzMDhjLi5jNzdlMDA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg1LDcgKzE4
NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdChFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7CiAg
ICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNl
IHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgogICAgICAgICAgICAgLy8gU28s
IHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAg
ICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKTsKKyAgICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBq
aXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIGppdC5hZGRQdHIoCkBAIC01Mzcs
NyArNTM3LDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwg
Vk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGppdC5lbWl0TWF0ZXJpYWxp
emVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCZ2bS50b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIERvIGFsbCBkYXRhIGZv
cm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCBiNzMyN2YzLi5lZDBh
ZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC0xMzUsNyAr
MTM1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50cnlKdW1w
RGVzdGluYXRpb24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BF
bnRyeUZyYW1lKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsK
IAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCmluZGV4IGZmMmNlNTYuLjAzZjAyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiAKICAg
ICAvLyBFbWl0IHRoZSBleGNlcHRpb24gaGFuZGxlci4KICAgICAqc3RhdGUuZXhjZXB0aW9uSGFu
ZGxlciA9IGppdC5sYWJlbCgpOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggN2MwMTgxZC4uYWFjODY4MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Myw3ICsxNDMsNyBAQCB2
b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlv
biA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKLSAgICAg
ICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtKTsKKyAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigmdm0udG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAxY2ViYzAxLi5lMGU1
OTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CkBAIC0yNjQsNyArMjY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJh
bWUpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAppbmRleCA4ZTA4MWQ3Li5jZWZjYWQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg2LDcgKzE4
Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIC8vIFRoZSBmaXJzdCB0aGluZyB3
ZSBuZWVkIHRvIGRvIGlzIHJlc3RhYmxpc2ggb3VyIGZyYW1lIGluIHRoZSBjYXNlIG9mIGFuIGV4
Y2VwdGlvbi4KICAgICBpZiAoZXhpdC5pc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoKTsgLy8gVGhlIGZpcnN0IHRp
bWUgd2UgaGl0IHRoaXMgZXhpdCwgbGlrZSBhdCBhbGwgb3RoZXIgdGltZXMsIHRoaXMgZmllbGQg
c2hvdWxkIGJlIG5vbi1udWxsLgotICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgIGppdC5yZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFt
ZSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgp
LCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CkBAIC00MTIsOCArNDEyLDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lz
dGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdp
c3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkgewotICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcFZNRW50cnlGcmFtZSwgR1BSSW5m
bzo6cmVnVDEpOwotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5m
bzo6cmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcEVudHJ5RnJhbWUsIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CiAgICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcg
PD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggOWZhMjlkMC4uYmU2MWE0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTQsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3Bl
LmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KQEAgLTIxNyw3ICsyMTgsNyBAQCBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjp3
YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgaWYgKCFjYWxsZWUoKS5pc1dhc20oKSkKICAgICAgICAgcmV0dXJuIGxleGljYWxH
bG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gV2FzbTo6bG9hZENvbnRleHQodm0pLT5nbG9iYWxP
YmplY3QoKTsKKyAgICByZXR1cm4gdm0ud2FzbUNvbnRleHQubG9hZCgpLT5nbG9iYWxPYmplY3Qo
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICByZXR1cm4gbGV4aWNhbEdsb2Jh
bE9iamVjdCgpOwpAQCAtMjM3LDI0ICsyMzgsMjQgQEAgYm9vbCBDYWxsRnJhbWU6OmlzQW55V2Fz
bUNhbGxlZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1DYWxsRnJhbWUqIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFtZSkKK0NhbGxGcmFtZSog
Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYgY3VyckVudHJ5RnJhbWUpCiB7Ci0g
ICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJyVk1FbnRyeUZyYW1lKSB7
Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29y
ZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAgY3VyclZNRW50cnlGcmFtZSA9IGN1cnJWTUVu
dHJ5UmVjb3JkLT5wcmV2VG9wVk1FbnRyeUZyYW1lKCk7CisgICAgaWYgKGNhbGxlckZyYW1lT3JF
bnRyeUZyYW1lKCkgPT0gY3VyckVudHJ5RnJhbWUpIHsKKyAgICAgICAgVk1FbnRyeVJlY29yZCog
Y3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAgICAg
ICAgY3VyckVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcEVudHJ5RnJhbWUo
KTsKICAgICAgICAgcmV0dXJuIGN1cnJWTUVudHJ5UmVjb3JkLT5wcmV2VG9wQ2FsbEZyYW1lKCk7
CiAgICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9y
Vk1FbnRyeUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxs
ZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsKIH0KIAotU1VQUFJFU1NfQVNBTiBDYWxsRnJhbWUqIENh
bGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFt
ZSkKK1NVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2FmZUNhbGxlckZyYW1l
KEVudHJ5RnJhbWUqJiBjdXJyRW50cnlGcmFtZSkKIHsKLSAgICBpZiAodW5zYWZlQ2FsbGVyRnJh
bWVPclZNRW50cnlGcmFtZSgpID09IGN1cnJWTUVudHJ5RnJhbWUpIHsKLSAgICAgICAgVk1FbnRy
eVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJWTUVudHJ5RnJh
bWUpOwotICAgICAgICBjdXJyVk1FbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnVuc2Fm
ZVByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAgICBpZiAodW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5
RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAgICAgICBWTUVudHJ5UmVjb3JkKiBjdXJy
Vk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyckVudHJ5RnJhbWUpOworICAgICAgICBj
dXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wRW50cnlGcmFt
ZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQtPnVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KHVuc2Fm
ZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENh
bGxGcmFtZSo+KHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCiBTb3VyY2VP
cmlnaW4gQ2FsbEZyYW1lOjpjYWxsZXJTb3VyY2VPcmlnaW4oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDYyMzA5YTAuLjZkNWQ3MjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTE0
MSwxMiArMTQxLDEyIEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBDYWxsRnJhbWUmIG9w
ZXJhdG9yPShjb25zdCBSZWdpc3RlciYgcikgeyAqc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlz
KSA9IHI7IHJldHVybiAqdGhpczsgfQogCi0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yVk1F
bnRyeUZyYW1lKCkpOyB9Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUo
KSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KLSAgICAg
ICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9Cisg
ICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsgfQorICAgICAgICB2b2lk
KiBjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZyYW1lQW5k
UEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVuc2FmZUNh
bGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVB
bmRQQygpLmNhbGxlckZyYW1lOyB9CiAKLSAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxsZXJG
cmFtZShWTUVudHJ5RnJhbWUqJik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYpOworICAgICAgICBDYWxsRnJhbWUqIHVuc2Fm
ZUNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBTb3VyY2VPcmlnaW4gY2FsbGVyU291cmNlT3JpZ2luKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAppbmRleCBjNWI2Yjgz
Li43NmFjZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
RnJhbWVUcmFjZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Zy
YW1lVHJhY2Vycy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBW
TUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIAogY2xhc3MgU3VzcGVuZEV4Y2VwdGlv
blNjb3BlIHsKIHB1YmxpYzoKQEAgLTc0LDMzICs3NCwzMyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAgICAgQVNT
RVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9jYXN0
PHZvaWQqPih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0tPnRv
cEVudHJ5RnJhbWUpKTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAg
ICB9CiB9OwogCiBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB7CiBwdWJs
aWM6Ci0gICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZShW
TSogdm0sIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
KyAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKFZNKiB2
bSwgRW50cnlGcmFtZSogRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAg
IDogbV92bSh2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFTU0VSVChj
YWxsRnJhbWUpOwotICAgICAgICBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50
cnlGcmFtZTsKKyAgICAgICAgbV9zYXZlZFRvcEVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFt
ZTsKICAgICAgICAgbV9zYXZlZFRvcENhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7Ci0gICAg
ICAgIHZtLT50b3BWTUVudHJ5RnJhbWUgPSB2bUVudHJ5RnJhbWU7CisgICAgICAgIHZtLT50b3BF
bnRyeUZyYW1lID0gRW50cnlGcmFtZTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxG
cmFtZTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5OYXRpdmVDYWxsRnJhbWVUcmFjZXJX
aXRoUmVzdG9yZSgpCiAgICAgewotICAgICAgICBtX3ZtLT50b3BWTUVudHJ5RnJhbWUgPSBtX3Nh
dmVkVG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX3ZtLT50b3BFbnRyeUZyYW1lID0gbV9zYXZl
ZFRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1fdm0tPnRvcENhbGxGcmFtZSA9IG1fc2F2ZWRUb3BD
YWxsRnJhbWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwotICAgIFZNRW50cnlG
cmFtZSogbV9zYXZlZFRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBtX3NhdmVkVG9w
RW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIG1fc2F2ZWRUb3BDYWxsRnJhbWU7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApp
bmRleCAxMzUzZTEwLi5hNTEzZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTY1Myw5ICs2NTMsOSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAK
LSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
aXNpdG9yKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodmlzaXRvcik7CiAKLSAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53aW5kaW5nID0gdmlz
aXRvci0+Y2FsbGVySXNWTUVudHJ5RnJhbWUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53
aW5kaW5nID0gdmlzaXRvci0+Y2FsbGVySXNFbnRyeUZyYW1lKCk7CiAgICAgICAgIGlmIChzaG91
bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
IApAQCAtNjYzLDcgKzY2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAgICB7CiAj
aWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSB2aXNpdG9y
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC02NzYsNyArNjc2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaW50cHRyX3QqIGZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdCo+KG1fY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9
IGN1cnJlbnRDYWxsZWVTYXZlcy0+c2l6ZSgpOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNv
cmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgVk1FbnRy
eVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRvcEVudHJ5RnJhbWUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZl
cy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGN1cnJlbnRF
bnRyeS5yZWcoKSkpCkBAIC03MDIsNyArNzAyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBpZiAodW53
aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIGlmIChjYWxsRnJh
bWUtPmNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUpCisg
ICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gdm0udG9w
RW50cnlGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGNhbGxG
cmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggODVkMTQ3YS4uMWRhOTNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxOCArNDQsMTggQEAgU3RhY2tWaXNpdG9yOjpT
dGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0pCiAgICAgQ2FsbEZyYW1l
KiB0b3BGcmFtZTsKICAgICBpZiAoc3RhcnRGcmFtZSkgewogICAgICAgICBBU1NFUlQodm0pOwot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKKyAg
ICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKICAgICAgICAg
dG9wRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgICAgICAKLSAgICAgICAgaWYgKHRvcEZy
YW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKSA9PSBzdGF0
aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7Ci0gICAgICAgICAgICB0b3BGcmFtZSA9IHZtRW50
cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKLSAg
ICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUu
bV9WTUVudHJ5RnJhbWUpLT5tX3ByZXZUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIGlmICh0b3BG
cmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFtZS5tX2VudHJ5RnJhbWUpID09IHN0YXRp
Y19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKKyAgICAgICAgICAgIHRvcEZyYW1lID0gdm1FbnRy
eVJlY29yZChtX2ZyYW1lLm1fZW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKKyAgICAg
ICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fZW50
cnlGcmFtZSktPm1fcHJldlRvcEVudHJ5RnJhbWU7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gMDsKKyAgICAgICAgbV9mcmFtZS5tX2Vu
dHJ5RnJhbWUgPSAwOwogICAgICAgICB0b3BGcmFtZSA9IDA7CiAgICAgfQotICAgIG1fZnJhbWUu
bV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IGZhbHNlOworICAgIG1fZnJhbWUubV9jYWxsZXJJc0Vu
dHJ5RnJhbWUgPSBmYWxzZTsKICAgICByZWFkRnJhbWUodG9wRnJhbWUpOwogCiAgICAgLy8gRmlu
ZCB0aGUgZnJhbWUgdGhlIGNhbGxlciB3YW50cyB0byBzdGFydCB1bndpbmRpbmcgZnJvbS4KQEAg
LTc1LDE0ICs3NSwxNCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSgpCiAgICAg
ICAgICAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCAmaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIpOwogICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG1fZnJhbWUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZTsK
KyAgICAgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlckVudHJ5
RnJhbWU7CiAgICAgICAgICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUuY2FsbEZy
YW1lKCksIGNhbGxlckNvZGVPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2ZyYW1l
Lm1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX0NhbGxlckVudHJ5RnJhbWU7CiAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUo
KSk7CiB9CiAKQEAgLTE1Miw5ICsxNTIsOSBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklu
bGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaQogewog
ICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpOwotICAgIG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fVk1F
bnRyeUZyYW1lOwotICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUobV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSk7Ci0gICAgbV9mcmFtZS5tX2NhbGxl
cklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSAhPSBtX2ZyYW1l
Lm1fVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX2VudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX2NhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZShtX2ZyYW1lLm1fQ2FsbGVyRW50cnlGcmFtZSk7CisgICAgbV9mcmFtZS5tX2Nh
bGxlcklzRW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lICE9IG1fZnJhbWUu
bV9lbnRyeUZyYW1lOwogICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwogCiAgICAg
Q2FsbGVlQml0cyBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwpAQCAtNTAwLDcgKzUwMCw3
IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBJbmRl
bnRlciBpbmRlbnQsIHN0ZDo6ZnVuY3Rpb248CiAKICAgICAgICAgICAgIGluZGVudC0tOwogICAg
ICAgICB9Ci0gICAgICAgIG91dC5wcmludChpbmRlbnQsICJ2bUVudHJ5RnJhbWU6ICIsIFJhd1Bv
aW50ZXIodm1FbnRyeUZyYW1lKCkpLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KGluZGVudCwg
IkVudHJ5RnJhbWU6ICIsIFJhd1BvaW50ZXIobV9lbnRyeUZyYW1lKSwgIlxuIik7CiAgICAgICAg
IGluZGVudC0tOwogICAgIH0KICAgICBvdXQucHJpbnQoaW5kZW50LCAifVxuIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5kZXggOGFk
MDk0MC4uNzA3OWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAg
ICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAgc2l6
ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsgfQotICAgICAgICBib29sIGNhbGxlcklzVk1FbnRyeUZyYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc1ZNRW50cnlGcmFtZTsgfQorICAgICAgICBib29s
IGNhbGxlcklzRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNFbnRyeUZyYW1l
OyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxlckZyYW1lOyB9CiAgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsZWU7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jazsgfQpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgQ2xvbmVk
QXJndW1lbnRzKiBjcmVhdGVBcmd1bWVudHMoKTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2bUVu
dHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX1ZNRW50cnlGcmFtZTsgfQogICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CiAgICAgICAg
IAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBJbmRlbnRlciA9IEluZGVudGVyKCkp
IGNvbnN0OwpAQCAtMTE0LDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICNlbmRpZgogICAgICAgICBDYWxsRnJhbWUqIG1fY2Fs
bEZyYW1lOwotICAgICAgICBWTUVudHJ5RnJhbWUqIG1fVk1FbnRyeUZyYW1lOwotICAgICAgICBW
TUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICBFbnRyeUZyYW1lKiBt
X2VudHJ5RnJhbWU7CisgICAgICAgIEVudHJ5RnJhbWUqIG1fQ2FsbGVyRW50cnlGcmFtZTsKICAg
ICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwogICAgICAgICBDYWxsZWVCaXRzIG1fY2Fs
bGVlOwogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtMTIzLDcgKzEyMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAg
ICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIFdhc206OkluZGV4T3JO
YW1lIG1fd2FzbUZ1bmN0aW9uSW5kZXhPck5hbWU7Ci0gICAgICAgIGJvb2wgbV9jYWxsZXJJc1ZN
RW50cnlGcmFtZSA6IDE7CisgICAgICAgIGJvb2wgbV9jYWxsZXJJc0VudHJ5RnJhbWUgOiAxOwog
ICAgICAgICBib29sIG1faXNXYXNtRnJhbWUgOiAxOwogCiAgICAgICAgIGZyaWVuZCBjbGFzcyBT
dGFja1Zpc2l0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvVk1FbnRyeVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZN
RW50cnlSZWNvcmQuaAppbmRleCBmMzZjMmJlLi4wMTAzYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjks
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFZNRW50cnlGcmFtZTsKK3N0cnVjdCBF
bnRyeUZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKQEAgLTQwLDcgKzQwLDcg
QEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgICAqLwogICAgIFZNKiBtX3ZtOwogICAgIEV4
ZWNTdGF0ZSogbV9wcmV2VG9wQ2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFtZSogbV9wcmV2VG9w
Vk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fcHJldlRvcEVudHJ5RnJhbWU7CiAKICNp
ZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAg
ICBpbnRwdHJfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW05VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTXTsKQEAgLTQ5LDIwICs0OSwyMCBAQCBzdHJ1Y3QgVk1FbnRyeVJlY29yZCB7
CiAgICAgRXhlY1N0YXRlKiBwcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wQ2Fs
bEZyYW1lOyB9CiAgICAgU1VQUFJFU1NfQVNBTiBFeGVjU3RhdGUqIHVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BDYWxsRnJhbWU7IH0KIAotICAgIFZNRW50cnlGcmFt
ZSogcHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcFZNRW50cnlGcmFtZTsg
fQotICAgIFNVUFBSRVNTX0FTQU4gVk1FbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wVk1FbnRyeUZy
YW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wVk1FbnRyeUZyYW1lOyB9CisgICAgRW50cnlGcmFtZSog
cHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BFbnRyeUZyYW1lOyB9CisgICAg
U1VQUFJFU1NfQVNBTiBFbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wRW50cnlGcmFtZSgpIHsgcmV0
dXJuIG1fcHJldlRvcEVudHJ5RnJhbWU7IH0KIH07CiAKLWV4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChWTUVudHJ5RnJhbWUqKTsKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChFbnRyeUZyYW1lKik7CiAKLXN0cnVjdCBWTUVudHJ5RnJhbWUgewor
c3RydWN0IEVudHJ5RnJhbWUgewogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9DQUxMRUVf
U0FWRVNfUkVHSVNURVJTID4gMAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgdm1FbnRyeVJlY29yZE9m
ZnNldCgpCiAgICAgewotICAgICAgICBWTUVudHJ5RnJhbWUqIGZha2VWTUVudHJ5RnJhbWUgPSBy
ZWludGVycHJldF9jYXN0PFZNRW50cnlGcmFtZSo+KDB4MTAwMCk7Ci0gICAgICAgIFZNRW50cnlS
ZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZVZNRW50cnlGcmFtZSk7CisgICAgICAg
IEVudHJ5RnJhbWUqIGZha2VFbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxFbnRyeUZyYW1l
Kj4oMHgxMDAwKTsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29y
ZChmYWtlRW50cnlGcmFtZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGZha2VWTUVudHJ5RnJhbWUpKTsKKyAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYWtlRW50
cnlGcmFtZSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlck9mZnNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKaW5kZXggOGQzMWY3YS4uMzcxOWJhNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoVk0mIHZtLCBHUFJSZWcgc2NyYXRjaDAs
IEdQUlJlZyBzY3JhdGNoMSwKIH0KICNlbmRpZgogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSkK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqKiB0b3BFbnRyeUZyYW1lKQogewogI2lmIE5VTUJF
Ul9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7
CkBAIC02MDUsOCArNjA1LDggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0KICAgICB9CiAgICAg
QVNTRVJUKHNjcmF0Y2ggIT0gSW52YWxpZEdQUlJlZyk7CiAKLSAgICBsb2FkUHRyKCZ2bS50b3BW
TUVudHJ5RnJhbWUsIHNjcmF0Y2gpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZy
YW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBs
b2FkUHRyKHRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
RW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7
CiAKICAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMgZXhjZXB0IGZvciB0aGUgc2NyYXRj
aC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CkBA
IC03NzgsNDEgKzc3OCw0MSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1
ZVRvQm9vbGVhbihWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZQogfQogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dChH
UFJSZWcgZHN0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KEdQUlJlZyBkc3QpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6
dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0
VExTKCkpIHsKICAgICAgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRMU09mZnNldEZvcktleShXVEZf
V0FTTV9DT05URVhUX0tFWSksIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
LSAgICBtb3ZlKFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRQb2lu
dGVyLCBkc3QpOworICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNt
Q29udGV4dEluc3RhbmNlUG9pbnRlciwgZHN0KTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnN0b3JlV2FzbUNvbnRleHQoR1BSUmVnIHNyYykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYykKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNf
SklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKFdh
c206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBzdG9yZVRvVExTUHRyKHNyYywg
ZmFzdFRMU09mZnNldEZvcktleShXVEZfV0FTTV9DT05URVhUX0tFWSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkud2FzbUNvbnRleHRQb2ludGVyKTsKKyAgICBtb3ZlKHNyYywgV2FzbTo6UGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiB9CiAKLWJv
b2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lz
dGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAg
aWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6
OnVzZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIGxvYWRGcm9tVExTUHRyTmVlZHNNYWNyb1Nj
cmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEFz
c2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIo
KQorYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYg
KFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIHN0b3JlVG9UTFNQdHJOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CkBAIC04NzUsMTAgKzg3NSwx
MCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKFZNJiB2bSwgVl9EZWJ1Z09wZXJh
dGlvbl9FUFAgZnVuY3Rpb24sIHZvaWQqIGFyZwogICAgIH0KIH0KIAotdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNh
dmVzQnVmZmVyKQogewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
QnVmZmVyT2Zmc2V0KCkpLCBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBjYWxs
ZWVTYXZlc0J1ZmZlcik7CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2
ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVy
U2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhNjhjMzY5
Li5jYzcwYTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTM2MCwyOCArMzYwLDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSKQogICAgIHsKICNp
ZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHZtR1BSLCBWTTo6dG9wVk1FbnRyeUZyYW1lT2Zmc2V0KCkpLCB2bUdQUik7Ci0gICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZt
R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBWTTo6dG9wRW50cnlGcmFtZU9m
ZnNldCgpKSwgdm1HUFIpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwodm1HUFIpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHZt
R1BSKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0p
CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihF
bnRyeUZyYW1lKiogdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAg
ICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQ
UlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0
cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAgICAgICAgbG9hZFB0
cih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVTRURf
UEFSQU0odm0pOwogICAgICAgICBVTlVTRURfUEFSQU0odXNlZFJlZ2lzdGVycyk7CiAjZW5kaWYK
ICAgICB9CiAKLSAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcihWTSYpOworICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiopOwogCi0gICAgdm9pZCBjb3B5Q2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCisgICAgdm9pZCBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50
cnlGcmFtZSoqIHRvcEVudHJ5RnJhbWUsIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAg
ewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJS
ZWcgdGVtcDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoMCk7CkBAIC0zOTIsOCArMzkyLDgg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogCiAgICAgICAgIC8vIENv
cHkgc2F2ZWQgY2FsbGVlU2F2ZXMgb24gc3RhY2sgb3IgdW5zYXZlZCBjYWxsZWVTYXZlcyBpbiBy
ZWdpc3RlciB0byB2bSBjYWxsZWVTYXZlIGJ1ZmZlcgotICAgICAgICBsb2FkUHRyKCZ2bS50b3BW
TUVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVudHJ5
RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHRlbXAxKTsKKyAgICAg
ICAgbG9hZFB0cih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVt
cDEpOwogCiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZN
OjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOwpAQCAtNDAxLDEyICs0MDEsMTIgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25l
ZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBS
ZWdpc3RlckF0T2Zmc2V0IHZtRW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KHZtRW50cnkucmVnKCkpKQorICAgICAgICAg
ICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAg
ICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogY3VycmVudEZy
YW1lRW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmZpbmQodm1FbnRyeS5yZWcoKSk7CisgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxs
ZWVTYXZlcy0+ZmluZChlbnRyeS5yZWcoKSk7CiAKLSAgICAgICAgICAgIGlmICh2bUVudHJ5LnJl
ZygpLmlzR1BSKCkpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKSB7CiAg
ICAgICAgICAgICAgICAgR1BSUmVnIHJlZ1RvU3RvcmU7CiAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRGcmFtZUVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgY2FsbGVlU2F2
ZSBmcm9tIHN0YWNrIGludG8gdGVtcCByZWdpc3RlcgpAQCAtNDE0LDkgKzQxNCw5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBjdXJyZW50RnJhbWVFbnRyeS0+b2Zmc2V0KCkpLCByZWdUb1N0b3JlKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBzdG9yZSBjYWxsZWUg
c2F2ZSBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICByZWdUb1N0b3JlID0gdm1FbnRyeS5y
ZWcoKS5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnVG9TdG9yZSA9IGVudHJ5LnJlZygp
LmdwcigpOwogCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0
ZW1wMSwgdm1FbnRyeS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1Rv
U3RvcmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvU3RvcmU7CiAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnRGcmFtZUVudHJ5KSB7CkBAIC00MjUsOSArNDI1LDkgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIGZwUmVnVG9TdG9yZSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3Qgc3RvcmUgY2FsbGVl
IHNhdmUgZGlyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gdm1FbnRy
eS5yZWcoKS5mcHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gZW50cnku
cmVnKCkuZnByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1RvU3RvcmUs
IEFkZHJlc3ModGVtcDEsIHZtRW50cnkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBzdG9y
ZURvdWJsZShmcFJlZ1RvU3RvcmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBAIC0xNjQ0LDE0ICsxNjQ0LDE0IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHZvaWQgbG9hZFdh
c21Db250ZXh0KEdQUlJlZyBkc3QpOwotICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dChHUFJSZWcg
c3JjKTsKLSAgICBzdGF0aWMgYm9vbCBsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJl
Z2lzdGVyKCk7Ci0gICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3Jh
dGNoUmVnaXN0ZXIoKTsKKyAgICB2b2lkIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBk
c3QpOworICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBzcmMpOworICAg
IHN0YXRpYyBib29sIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdp
c3RlcigpOworICAgIHN0YXRpYyBib29sIHN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2Fs
bGVlU2F2ZXNCdWZmZXIpOworICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CiAKICAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9iYXNlbGluZUNvZGVCbG9jazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA1ZWNmM2E2Li43Yzk0Y2JhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBKSVQ6OmVtaXRF
bnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFk
ZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1l
bnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRF
eGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CiAKLSAg
ICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3Rl
clRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQpOwog
ICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQ
UikpOwpAQCAtODg1LDcgKzg4NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAg
IC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBh
cmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KIApAQCAtOTA1
LDcgKzkwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkK
ICAgICAgICAgbV9leGNlcHRpb25IYW5kbGVyID0gbGFiZWwoKTsKICAgICAgICAgbV9leGNlcHRp
b25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAg
ICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRo
ZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggY2EyZGI4Yy4uZjIwMThjYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYs
OCArNTYsOCBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFt
ZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgCiAgICAgRXhlY1N0YXRlKiBzaGFkb3dD
aGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVud2lu
ZEZyb21DYWxsZXJGcmFtZSkgewotICAgICAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9
IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgRW50cnlG
cmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgICAgICBzaGFkb3dD
aGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwog
ICAgIH0KICAgICB2bS0+c2hhZG93Q2hpY2tlbigpLmxvZygqdm0sIHNoYWRvd0NoaWNrZW5Ub3BG
cmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aHJvd1BhY2tldCgpKTsKICAgICAKQEAgLTg0
LDcgKzg0LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJh
bWUsIFVud2luZFN0YXJ0IHVud2luZFN0YXJ0KQogICAgIH0gZWxzZQogICAgICAgICBjYXRjaFJv
dXRpbmUgPSBMTEludDo6Z2V0Q29kZVB0cihoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbik7CiAgICAg
Ci0gICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgQVNTRVJUKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2
bS0+dG9wRW50cnlGcmFtZSkpOwogCiAgICAgdm0tPmNhbGxGcmFtZUZvckNhdGNoID0gY2FsbEZy
YW1lOwogICAgIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyA9IGNhdGNoUm91dGluZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDliNDE2NmEuLmNiNjRi
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNDU1LDcg
KzQ1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BF
bnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UaHJvdywgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KCkpOwpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIHJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgcmVzdG9yZUNh
bGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlG
cmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2Fk
NjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJh
bWVSZWdpc3Rlcik7CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xv
b3BfaGludChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGkK
ICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9t
RnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVu
dHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1f
Ynl0ZWNvZGVPZmZzZXQpOwogICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hU
ZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBhMTIyOGQzLi42MDdhNDg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03NjUsNyArNzY1LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBj
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50
cnlGcmFtZSk7CiAgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
cmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgp
KTsKQEAgLTgyNiw3ICs4MjYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fc3RyaW5nKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0o
KSk7CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSks
IHJlZ1QzKTsKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUgZm9y
IHRoZSBoYW5kbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggYzA0Y2RjNC4uZTYzOTkzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xMDMsMTQgKzEwMywxNCBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqCiAgICAgVk0qIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4
ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVj
LT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7CiAgICAg
ICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZN
RW50cnlGcmFtZTsKKyAgICAgICAgZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOwogICAg
IH0KIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1F
bnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgdGhyb3dTdGFj
a092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKIH0KIApAQCAtMTIwLDEwICsxMjAs
MTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93RGl2aWRlRXJyb3IoRXhlY1N0
YXRlKiBleGVjKQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4
ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVj
LT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldp
dGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxs
ZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0
aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1l
LCBBU0NJSUxpdGVyYWwoIkRpdmlzaW9uIGJ5IHplcm8gb3IgZGl2aXNpb24gb3ZlcmZsb3cuIikp
KTsKIH0KQEAgLTEzMywxMCArMTMzLDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25U
aHJvd091dE9mQm91bmRzQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7
CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlG
cmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOwor
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1l
KTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1F
bnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5k
bGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFt
ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1lLCBBU0NJSUxpdGVyYWwoIk91dC1vZi1i
b3VuZHMgYWNjZXNzLiIpKSk7CiB9CkBAIC0xNDksOSArMTQ5LDkgQEAgaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIGlu
dDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4
ZWMsICp2bSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAwKSB7Ci0g
ICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsK
LSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50
cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNl
cih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1l
KTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsK
ICAgICB9CiAKQEAgLTE2NSw5ICsxNjUsOSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29uc3RydWN0QXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICBpbnQzMl90IG1p
c3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAqdm0s
IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAwKSB7Ci0gICAg
ICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAg
ICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlG
cmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUqIGVudHJ5
RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsK
ICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApp
bmRleCA5MmU0MmIxLi5lNDM5NjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCkBAIC02Niw3ICs2Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZtKQogICAgIC8v
IGV2ZW4gdGhvdWdoIHdlIHdvbid0IHVzZSBpdC4KICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAKLSAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwor
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0t
PnRvcEVudHJ5RnJhbWUpOwogCiAgICAgaml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29r
dXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMzYyLDcgKzM2
Miw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZN
KiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBrCiAgICAgLy8gSGFuZGxlIGFuIGV4Y2VwdGlv
bgogICAgIGV4Y2VwdGlvbkhhbmRsZXIubGluaygmaml0KTsKIAotICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFt
ZSk7CiAgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlciwg
JnZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZTlhMGQyYS4uMzUwMzVkYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKQEAgLTE4NzIsOCArMTg3Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25QcmludFN0ZEVycihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHByaW50CiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBWTUVudHJ5RnJhbWUqIHRv
cFZNRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBFeGVjU3RhdGUqIGNhbGxl
ckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZy
YW1lKiB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKKyAgICBFeGVjU3RhdGUqIGNh
bGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgaWYgKGNh
bGxlckZyYW1lKQogICAgICAgICB2bS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFtZShjYWxsZXJG
cmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDczNWU3
MWIuLjM2NjRlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcApAQCAtNDgxLDEzICs0ODEsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3Rh
Y2tfY2hlY2spCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZy
YW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5
RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7
CiAgICAgICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0u
dG9wVk1FbnRyeUZyYW1lOworICAgICAgICB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFt
ZTsKICAgICB9Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKCZ2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
V2l0aFJlc3RvcmUgdHJhY2VyKCZ2bSwgdG9wRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogCiAg
ICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50VGh1bmtzLmNwcAppbmRleCAzNmY2NDg2Li41Mjk2N2UzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyArMTE2
LDcgQEAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvTmF0aXZlKHZvaWQqIGV4ZWN1dGFibGVBZGRy
ZXNzLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAotZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKFZN
RW50cnlGcmFtZSogZW50cnlGcmFtZSkKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29yZCogdm1FbnRy
eVJlY29yZChFbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQogewogICAgIC8vIFRoZSBDIExvb3AgZG9l
c24ndCBoYXZlIGFueSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMsIHNvIHRoZSBWTUVudHJ5UmVjb3Jk
IGlzIGFsbG9jYXRlZCBhdCB0aGUgYmFzZSBvZiB0aGUgZnJhbWUuCiAgICAgaW50cHRyX3Qgc3Rh
Y2tBbGlnbm1lbnQgPSBzdGFja0FsaWdubWVudEJ5dGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggNWRkZTY2NC4u
N2JmMWVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQpAQCAtNjU5LDcgKzY1OSw3IEBAIGVuZAogCiBtYWNybyBjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLCB0ZW1wKQogICAgIGlm
IEFSTTY0IG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCi0gICAgICAgIGxvYWRwIFZNOjp0b3BWTUVu
dHJ5RnJhbWVbdm1dLCB0ZW1wCisgICAgICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwg
dGVtcAogICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAsIHRlbXApCiAgICAgICAgIGxlYXAgVk1F
bnRyeVJlY29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlclt0ZW1wXSwgdGVtcAogICAgICAg
ICBpZiBBUk02NApAQCAtNzAxLDcgKzcwMSw3IEBAIGVuZAogCiBtYWNybyByZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAgICAgaWYg
QVJNNjQgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRvcFZNRW50
cnlGcmFtZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1dLCB0
ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBWTUVu
dHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAgICAgICAg
IGlmIEFSTTY0CkBAIC0xMTQ0LDcgKzExNDQsNyBAQCBpZiBub3QgQ19MT09QCiAgICAgICAgIHN0
b3JlcCBhZGRyZXNzLCBWTTo6bV9sYXN0U3RhY2tUb3Bbdm1dCiAgICAgICAgIHJldAogICAgIAot
ICAgICMgVk1FbnRyeVJlY29yZCogdm1FbnRyeVJlY29yZChjb25zdCBWTUVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUpCisgICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0IEVudHJ5
RnJhbWUqIGVudHJ5RnJhbWUpCiAgICAgZ2xvYmFsIF92bUVudHJ5UmVjb3JkCiAgICAgX3ZtRW50
cnlSZWNvcmQ6CiAgICAgICAgIGlmIFg4NiBvciBYODZfV0lOCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4
IDExNGE5NzguLjMzMDkwZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMjUsOCArMTI1LDggQEAg
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29yZDo6
bV92bVtzcF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9yZXAg
dDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBWTTo6
dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1f
cHJldlRvcFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0s
IHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3Nw
XQogCiAgICAgIyBBbGlnbiBzdGFjayBwb2ludGVyCiAgICAgaWYgWDg2X1dJTiBvciBNSVBTCkBA
IC0xODksOCArMTg5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJl
dlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9wQ2FsbEZyYW1lW3Q1
XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0sIHQ0
Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAgIGxvYWRwIFZNRW50
cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0b3JlcCB0NCwgVk06
OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNmciwgQ2Fs
bGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTI0MSw3ICsyNDEsNyBAQCBtYWNybyBkb1ZNRW50
cnkobWFrZUNhbGwpCiAKIC5jb3B5QXJnc0RvbmU6CiAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2Fs
bEZyYW1lW3ZtXQotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAg
c3RvcmVwIGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBtYWtlQ2FsbChlbnRyeSwg
dDMsIHQ0KQogCkBAIC0yNTUsOCArMjU1LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQog
ICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlS
ZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9w
Q2FsbEZyYW1lW3Q1XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlG
cmFtZVtzcF0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAg
IGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0
b3JlcCB0NCwgVk06OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBz
dWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTMyNCw4ICszMjQsOCBAQCBf
aGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtz
cF0sIHQzCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwg
dDUKICAgICBzdG9yZXAgdDUsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAgVk1FbnRy
eVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDUKLSAgICBzdG9yZXAgdDUsIFZN
Ojp0b3BWTUVudHJ5RnJhbWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
RW50cnlGcmFtZVtzcF0sIHQ1CisgICAgc3RvcmVwIHQ1LCBWTTo6dG9wRW50cnlGcmFtZVt0M10K
IAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXpl
LCB0MwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQppbmRleCBlMzdhMGY2Li45NTkwOTMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMTI5
LDggKzEyOSw4IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBzdG9yZXAgdm0sIFZN
RW50cnlSZWNvcmQ6Om1fdm1bc3BdCiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2bV0sIHQ0
CiAgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3BdCi0g
ICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTUVu
dHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdCisgICAgbG9hZHAgVk06OnRvcEVu
dHJ5RnJhbWVbdm1dLCB0NAorICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
RW50cnlGcmFtZVtzcF0KIAogICAgIGxvYWRpIFByb3RvQ2FsbEZyYW1lOjpwYWRkZWRBcmdDb3Vu
dFtwcm90b0NhbGxGcmFtZV0sIHQ0CiAgICAgYWRkcCBDYWxsRnJhbWVIZWFkZXJTbG90cywgdDQs
IHQ0CkBAIC0xNzEsOCArMTcxLDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxv
YWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bdDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6
Om1fcHJldlRvcENhbGxGcmFtZVt0NF0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRyYVRl
bXBSZWcsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJhVGVt
cFJlZywgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjpt
X3ByZXZUb3BFbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJhVGVt
cFJlZywgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0
ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjIwLDcgKzIyMCw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtl
Q2FsbCkKICAgICBlbHNlCiAgICAgICAgIHN0b3JlcCBzcCwgVk06OnRvcENhbGxGcmFtZVt2bV0K
ICAgICBlbmQKLSAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIHN0
b3JlcCBjZnIsIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXQogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoZXh0cmFUZW1wUmVnLCAweGJhZDBkYzAyKQogCkBAIC0yMzYsOCArMjM2LDggQEAg
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1b
dDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0NF0s
IHQyCiAgICAgc3RvcmVwIHQyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQotICAgIGxvYWRwIFZNRW50
cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0NF0sIHQyCi0gICAgc3RvcmVwIHQyLCBW
TTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRv
cEVudHJ5RnJhbWVbdDRdLCB0MgorICAgIHN0b3JlcCB0MiwgVk06OnRvcEVudHJ5RnJhbWVbdm1d
CiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjc2LDcg
KzI3Niw2IEBAIG1hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1wKQogICAgIGVu
ZAogZW5kCiAKLQogX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIENhbGxlZVtj
ZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwpAQCAtMjkxLDggKzI5MCw4IEBA
IF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3Zt
W3QyXSwgdDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbdDJd
LCBleHRyYVRlbXBSZWcKICAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wQ2FsbEZyYW1l
W3QzXQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0Ml0s
IGV4dHJhVGVtcFJlZwotICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BWTUVudHJ5RnJh
bWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0Ml0s
IGV4dHJhVGVtcFJlZworICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BFbnRyeUZyYW1l
W3QzXQogCiAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHNwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYTVhNTNjNi4uMmEyYmJk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQwNiw3
ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICAg
ICAgT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSA9IGZhbHNlOwogCiAgICAgaWYgKCFPcHRpb25z
Ojp1c2VXZWJBc3NlbWJseSgpKQotICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RU
TFMoKSA9IGZhbHNlOworICAgICAgICBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQo
KSA9IGZhbHNlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKQogICAg
ICAgICB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDNjZWM1NTIuLjg0NzVjMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ2Nyw4ICs0NjcsNyBAQCB0eXBlZGVmIGNv
bnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZhc3RN
ZW1vcnlSZWR6b25lUGFnZXMsIDEyOCwgTm9ybWFsLCAiV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmll
cyB1c2UgNEdpQiB2aXJ0dWFsIGFsbG9jYXRpb25zLCBwbHVzIGEgcmVkem9uZSAoY291bnRlZCBh
cyBtdWx0aXBsZSBvZiA2NEtpQiBXZWJBc3NlbWJseSBwYWdlcykgYXQgdGhlIGVuZCB0byBjYXRj
aCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZCAzMi1iaXQsIGFueXRoaW5nIGJleW9uZCB0
aGUgcmVkem9uZSBpcyBleHBsaWNpdGx5IGJvdW5kcy1jaGVja2VkIikgXAogICAgIHYoYm9vbCwg
Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9yeSBmb3Igd2FzbS4i
KSBcCiAgICAgdih1bnNpZ25lZCwgbWF4TnVtV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMsIDQsIE5v
cm1hbCwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0cnVl
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwg
c3RvcmFnZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikgXAotICAgIHYo
Ym9vbCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlIChh
bmQgZmFzdCBUTFMgaXMgZW5hYmxlZCksIHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0IFRM
Uy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAorICAgIHYoYm9v
bCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3
aWxsIHN0b3JlIGNvbnRleHQgaW4gZmFzdCBUTFMuIElmIGZhbHNlLCB3ZSB3aWxsIHBpbiBpdCB0
byBhIHJlZ2lzdGVyLiIpIFwKICAgICB2KGJvb2wsIHVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRv
SlNDYWxscywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgQ2FsbExpbmtJbmZv
IHRvIGlubGluZSBjYWNoZSBXYXNtIHRvIEpTIGNhbGxzLiIpIFwKICAgICB2KGJvb2wsIHVzZU9i
amVjdFJlc3RTcHJlYWQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZW5hYmxlIE9i
amVjdCBSZXN0L1NwcmVhZCBmZWF0dXJlLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxsb2Nh
dGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5v
cm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9u
IHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4IGE0
YmU5NWIuLjNiY2Y2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBGcmFt
ZVdhbGtlcihWTSYgdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBjb25zdCBBYnN0cmFjdExvY2tl
ciYgY29kZUJsb2NrU2V0TG9ja2VyLCBjb25zdCBBYnN0cmFjdExvY2tlciYgbWFjaGluZVRocmVh
ZHNMb2NrZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX2NhbGxGcmFtZShjYWxs
RnJhbWUpCi0gICAgICAgICwgbV92bUVudHJ5RnJhbWUodm0udG9wVk1FbnRyeUZyYW1lKQorICAg
ICAgICAsIG1fZW50cnlGcmFtZSh2bS50b3BFbnRyeUZyYW1lKQogICAgICAgICAsIG1fY29kZUJs
b2NrU2V0TG9ja2VyKGNvZGVCbG9ja1NldExvY2tlcikKICAgICAgICAgLCBtX21hY2hpbmVUaHJl
YWRzTG9ja2VyKG1hY2hpbmVUaHJlYWRzTG9ja2VyKQogICAgIHsKQEAgLTEzMCw3ICsxMzAsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgU1VQUFJFU1NfQVNBTgogICAgIHZvaWQgYWR2YW5jZVRvUGFyZW50
RnJhbWUoKQogICAgIHsKLSAgICAgICAgbV9jYWxsRnJhbWUgPSBtX2NhbGxGcmFtZS0+dW5zYWZl
Q2FsbGVyRnJhbWUobV92bUVudHJ5RnJhbWUpOworICAgICAgICBtX2NhbGxGcmFtZSA9IG1fY2Fs
bEZyYW1lLT51bnNhZmVDYWxsZXJGcmFtZShtX2VudHJ5RnJhbWUpOwogICAgIH0KIAogICAgIGJv
b2wgaXNBdFRvcCgpIGNvbnN0CkBAIC0xODgsNyArMTg4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAg
Vk0mIG1fdm07CiAgICAgRXhlY1N0YXRlKiBtX2NhbGxGcmFtZTsKLSAgICBWTUVudHJ5RnJhbWUq
IG1fdm1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fZW50cnlGcmFtZTsKICAgICBjb25z
dCBBYnN0cmFjdExvY2tlciYgbV9jb2RlQmxvY2tTZXRMb2NrZXI7CiAgICAgY29uc3QgQWJzdHJh
Y3RMb2NrZXImIG1fbWFjaGluZVRocmVhZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxpbmdPdXQg
eyBmYWxzZSB9OwpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJv
Y2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgLy8gV2UgcmV1c2Ug
TExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0byBjaGVj
ayBmb3IgYm90aCBqaXQgdHlwZXMuCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhbHNv
IGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZlbiB0
aG91Z2gKICAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUgcmVhc29u
IHRoYXQgdGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZHIGZyYW1l
LAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0
IGEgVk1FbnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAgICAgICAg
ICAvLyBhbmQgd2UgZW5kIHVwIGhhdmluZyB0byB1bndpbmQgcGFzdCBhbiBFbnRyeUZyYW1lLCB3
ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExM
SW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0
IHRoaXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5jcHAKaW5kZXggMDZlOTMwMy4uNGM2NWQ2MiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDEzIEBAIFRo
cm93U2NvcGU6On5UaHJvd1Njb3BlKCkKIAogICAgIGJvb2wgd2lsbEJlSGFuZGxlQnlMTEludE9y
SklUID0gZmFsc2U7CiAgICAgdm9pZCogcHJldmlvdXNTY29wZSA9IG1fcHJldmlvdXNTY29wZTsK
LSAgICB2b2lkKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKKyAgICB2
b2lkKiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOwogCi0gICAgLy8gSWYgdGhl
IHRvcFZNRW50cnlGcmFtZSB3YXMgcHVzaGVkIG9uIHRoZSBzdGFjayBhZnRlciB0aGUgcHJldmlv
dXNTY29wZSB3YXMgaW5zdGFudGlhdGVkLAorICAgIC8vIElmIHRoZSB0b3BFbnRyeUZyYW1lIHdh
cyBwdXNoZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBpbnN0YW50
aWF0ZWQsCiAgICAgLy8gdGhlbiB0aGlzIHRocm93U2NvcGUgd2lsbCBiZSByZXR1cm5pbmcgdG8g
TExJTlQgb3IgSklUIGNvZGUgdGhhdCBhbHdheXMgZG8gYW4gZXhjZXB0aW9uCiAgICAgLy8gY2hl
Y2suIEluIHRoYXQgY2FzZSwgc2tpcCB0aGUgc2ltdWxhdGVkIHRocm93IGJlY2F1c2UgdGhlIExM
SW50IGFuZCBKSVQgd2lsbCBiZQogICAgIC8vIGNoZWNraW5nIGZvciB0aGUgZXhjZXB0aW9uIHRo
ZWlyIG93biB3YXkgaW5zdGVhZCBvZiBjYWxsaW5nIFRocm93U2NvcGU6OmV4Y2VwdGlvbigpLgot
ICAgIGlmICh0b3BWTUVudHJ5RnJhbWUgJiYgcHJldmlvdXNTY29wZSA+IHRvcFZNRW50cnlGcmFt
ZSkKKyAgICBpZiAodG9wRW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wRW50cnlGcmFt
ZSkKICAgICAgICAgd2lsbEJlSGFuZGxlQnlMTEludE9ySklUID0gdHJ1ZTsKICAgICAKICAgICBp
ZiAoIXdpbGxCZUhhbmRsZUJ5TExJbnRPckpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAppbmRleCAxODFlM2I3Li4zZWU1MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogI2VuZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0
YSgwKQotICAgICwgdG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCisgICAgLCB0b3BFbnRyeUZyYW1l
KG51bGxwdHIpCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQogICAg
ICwgcHJvbWlzZURlZmVycmVkVGltZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRU
aW1lcj4oKnRoaXMpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVs
dCA/IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkgOiBuZXcgQXRvbWljU3Ry
aW5nVGFibGUpCkBAIC0zNjgsNyArMzY4LDcgQEAgVk06On5WTSgpCiAgICAgcHJvbWlzZURlZmVy
cmVkVGltZXItPnN0b3BSdW5uaW5nVGFza3MoKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgaWYgKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSkKLSAgICAgICAgV2FzbTo6ZW5z
dXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JWTSgqdGhpcyk7CisgICAgICAgIFdhc206OmVu
c3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yQ29udGV4dCh3YXNtQ29udGV4dCk7CiAjZW5k
aWYKICAgICBpZiAoVU5MSUtFTFkobV93YXRjaGRvZykpCiAgICAgICAgIG1fd2F0Y2hkb2ctPndp
bGxEZXN0cm95Vk0odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5NTU4
NTk0Li45Mjc3MTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU1LDYgKzU1
LDcgQEAKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJW
TUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIldhc21Db250
ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRl
ckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgpAQCAtMzI5
LDE0ICszMzAsMTMgQEAgcHVibGljOgogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnRE
YXRhKiBjbGllbnREYXRhOwotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOworICAg
IEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWU7CiAgICAgLy8gTk9URTogV2hlbiB0aHJvd2luZyBh
biBleGNlcHRpb24gd2hpbGUgcm9sbGluZyBiYWNrIHRoZSBjYWxsIGZyYW1lLCB0aGlzIG1heSBi
ZSBlcXVhbCB0bwotICAgIC8vIHRvcFZNRW50cnlGcmFtZS4KKyAgICAvLyB0b3BFbnRyeUZyYW1l
LgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHZvaWQqLCBiZWNhdXNlIGl0IG1pZ2h0
IG5vdCBwb2ludCB0byBhIENhbGxGcmFtZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNDQxCiAgICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWUgeyBu
dWxscHRyIH07Ci0gICAgLy8gRklYTUU6IFNhdmUgdGhpcyBzdGF0ZSBlbHNld2hlcmUgdG8gYWxs
b3cgUElDLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NzczCi0g
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBX
YXNtOjpDb250ZXh0IHdhc21Db250ZXh0OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVy
ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVj
dHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1
Y3R1cmU7CkBAIC01MDEsOSArNTAxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFZNLCB0YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHB0cmRpZmZfdCB0b3BWTUVudHJ5RnJhbWVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZm
X3QgdG9wRW50cnlGcmFtZU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFZNLCB0b3BWTUVudHJ5RnJhbWUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFZNLCB0b3BFbnRyeUZyYW1lKTsKICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91
c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9u
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCBkZWFh
NDQ5Li44NzNkMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNw
cApAQCAtODksNyArODksNyBAQCBpbmxpbmUgQ2FsbEZyYW1lKiBzYW5pdGl6ZWRUb3BDYWxsRnJh
bWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUpCiAgICAgcmV0dXJuIHRvcENhbGxGcmFtZTsKIH0K
IAotc3RhdGljIGJvb2wgaXNTYW5lRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSwgVk1FbnRyeUZyYW1lKiBlbnRyeUZyYW1lLCBTdGFja0JvdW5kcyBzdGFja0Jv
dW5kcykKK3N0YXRpYyBib29sIGlzU2FuZUZyYW1lKENhbGxGcmFtZSogZnJhbWUsIENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0YWNr
Qm91bmRzKQogewogICAgIGlmIChyZWludGVycHJldF9jYXN0PHZvaWQqPihmcmFtZSkgPj0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW50cnlGcmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTEyMSwxOCArMTIxLDE4IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3Bv
aW50cyhTaWduYWxDb250ZXh0JiBjb250ZXh0LCBTdGFja0JvdW5kcyBzdGFjCiAgICAgfQogCiAg
ICAgQ29kZUJsb2NrKiBmb3VuZENvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgVk1FbnRyeUZyYW1l
KiB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50
cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJhbWU7CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY2Fs
bGVlIHRvIHN0YXJ0IHdpdGguIFNvLCB1c2UgdGhlIGVuZCBvZiB0aGUgc3RhY2sgdG8ga2VlcCB0
aGUKICAgICAvLyBpc1NhbmVGcmFtZSgpIGNoZWNrZXIgYmVsb3cgaGFwcHkgZm9yIHRoZSBmaXJz
dCBpdGVyYXRpb24uIEl0IHdpbGwgc3RpbGwgY2hlY2sKICAgICAvLyB0byBlbnN1cmUgdGhhdCB0
aGUgYWRkcmVzcyBpcyBpbiB0aGUgc3RhY2tCb3VuZHMuCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVG
cmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4oc3RhY2tCb3VuZHMuZW5kKCkpOwog
Ci0gICAgaWYgKCF2bUVudHJ5RnJhbWUgfHwgIWNhbGxGcmFtZSkKKyAgICBpZiAoIWVudHJ5RnJh
bWUgfHwgIWNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOyAvLyBOb3QgcnVubmluZyBKUyBjb2Rl
LiBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICBkbyB7Ci0gICAg
ICAgIGlmICghaXNTYW5lRnJhbWUoY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgdm1FbnRyeUZyYW1l
LCBzdGFja0JvdW5kcykpCisgICAgICAgIGlmICghaXNTYW5lRnJhbWUoY2FsbEZyYW1lLCBjYWxs
ZWVGcmFtZSwgZW50cnlGcmFtZSwgc3RhY2tCb3VuZHMpKQogICAgICAgICAgICAgcmV0dXJuOyAv
LyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICAgICAgQ29kZUJs
b2NrKiBjYW5kaWRhdGVDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTQy
LDkgKzE0Miw5IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhTaWdu
YWxDb250ZXh0JiBjb250ZXh0LCBTdGFja0JvdW5kcyBzdGFjCiAgICAgICAgIH0KIAogICAgICAg
ICBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZTsKLSAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1l
LT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogCi0gICAgfSB3aGlsZSAoY2FsbEZyYW1lICYm
IHZtRW50cnlGcmFtZSk7CisgICAgfSB3aGlsZSAoY2FsbEZyYW1lICYmIGVudHJ5RnJhbWUpOwog
CiAgICAgaWYgKCFmb3VuZENvZGVCbG9jaykgewogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBqdXN0
IGVudGVyZWQgdGhlIGZyYW1lIGFuZCB0aGUgY29kZUJsb2NrIHBvaW50ZXIgaXMgbm90CkBAIC0x
ODEsMTcgKzE4MSwxNyBAQCB2b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFj
ayhMb2NrZXI8TG9jaz4mLCBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZQogCiAgICAgbV9uZWVkVG9J
bnZhbGlkYXRlZENvZGVCbG9ja3MgPSBmYWxzZTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRy
eUZyYW1lID0gdm0oKS50b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSA9IHZtKCkudG9wRW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHRvcENh
bGxGcmFtZTsKIAotICAgIGlmICghdm1FbnRyeUZyYW1lKQorICAgIGlmICghZW50cnlGcmFtZSkK
ICAgICAgICAgcmV0dXJuOyAvLyBOb3QgcnVubmluZyBKUyBjb2RlLiBOb3RoaW5nIHRvIGludmFs
aWRhdGUuCiAKICAgICB3aGlsZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgaWYgKGNvZGVCbG9jayAm
JiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAg
ICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMp
OwotICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFt
ZSk7CisgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFt
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKaW5kZXggYWQ3ZDYyMS4uYWY2Y2ZlOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNDksOCArNDksNiBA
QAogI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iu
aCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaXJ0
dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKQEAgLTE3
OCw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1Nf
Xyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1v
ZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50Kik7CisgICAgQjNJUkdlbmVy
YXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rp
b24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxh
dGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNt
RXhjZXB0aW9uKTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFy
Z3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC0yNDcsNyArMjQ1LDcgQEAgcHJp
dmF0ZToKIAogICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNP
ZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CiAKLSAgICB2b2lkIHJlc3RvcmVXYXNt
Q29udGV4dChQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgVmFsdWUqKTsKKyAgICB2b2lkIHJlc3Rv
cmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwog
ICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3Jt
YXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKIAogICAg
IE9yaWdpbiBvcmlnaW4oKTsKQEAgLTI2Nyw3ICsyNjUsNyBAQCBwcml2YXRlOgogICAgIEluc2Vy
dGlvblNldCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzOwogICAgIEdQUlJlZyBtX21lbW9yeUJh
c2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IElu
dmFsaWRHUFJSZWcgfTsKLSAgICBHUFJSZWcgbV93YXNtQ29udGV4dEdQUiB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJl
ZyB9OwogICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2UgfTsKIAogICAgIFZhbHVlKiBtX2lu
c3RhbmNlVmFsdWUgeyBudWxscHRyIH07IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93
IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4K
QEAgLTI5MSwzNyArMjg5LDM3IEBAIGludDMyX3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVy
UGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZzCiAgICAgcmV0dXJu
IG9mZnNldDsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHQoUHJv
Y2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVmFsdWUqIGFyZykKK3ZvaWQgQjNJUkdl
bmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNp
Y0Jsb2NrKiBibG9jaywgVmFsdWUqIGFyZykKIHsKLSAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRl
eHQoKSkgeworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7Ci0gICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0
b3JlV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCisgICAgICAgIGlmIChD
Q2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVn
aXN0ZXIoKSkKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1h
Y3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0
cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiAgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0Nh
bGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dChwYXJhbXNbMF0uZ3ByKCkpOwor
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2Ny
YXRjaChqaXQsIENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4
dEluc3RhbmNlKHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9i
YmVycyB3YXNtQ29udGV4dCByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVl
ZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBGSVhNRTogQmVjYXVz
ZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBh
bmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxs
ZXIgc2lkZS4KICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcg
dG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
Pihwcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOwogICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVj
dHM6Om5vbmUoKTsKICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgZWZmZWN0
cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBlZmZlY3RzOwotICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2Fz
bUNvbnRleHRHUFIpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldCht
X3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFu
Y2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKLSAgICBHUFJSZWcgd2FzbUNvbnRl
eHRHUFIgPSBtX3dhc21Db250ZXh0R1BSOworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNl
R1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtKSB7Ci0gICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4
dEdQUik7CisgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3Rh
bmNlR1BSKTsKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFs
RnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBj
b21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVy
VXApCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRp
b24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0
aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9tb2Rl
KG1vZGUpCiAgICAgLCBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCkBAIC0zMzks
OSArMzM3LDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICBtX21lbW9yeUJhc2VHUFIg
PSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwogICAgIG1fcHJvYy5waW5SZWdpc3Rlciht
X21lbW9yeUJhc2VHUFIpOwogCi0gICAgbV93YXNtQ29udGV4dEdQUiA9IHBpbm5lZFJlZ3Mud2Fz
bUNvbnRleHRQb2ludGVyOwotICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAg
ICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRHUFIpOworICAgIG1fd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7Cisg
ICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rl
cihtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogCiAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9k
ZTo6U2lnbmFsaW5nKSB7CiAgICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5zaXplUmVnaXN0ZXJz
WzBdLnNpemVPZmZzZXQpOwpAQCAtMzUwLDYgKzM0OCw5IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlCiAgICAgICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIp
OwogICAgIH0KIAorICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCisgICAgICAgIFRodW5rczo6
c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CisK
ICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVj
a0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7CiAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CkBAIC0zNjMsNiArMzY0LDE2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAgIH0pOworCisgICAgICAg
IHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxp
bmc6CisgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRv
bid0IGRvIGFuIGV4cGxpY2l0IGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNlIHRoZXkgY2FuIHJlbHkg
b24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIEZhdWx0
U2lnbmFsSGFuZGxlciBub25ldGhlbGVzcyBuZWVkcyB0aGUgdGh1bmsgdG8gZXhpc3Qgc28gdGhh
dCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFU
aHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJh
dG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUlu
UHJvbG9ndWUoJmNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2lu
KCksIG1fY3VycmVudEJsb2NrKTsKQEAgLTM3MywxMiArMzg0LDEyIEBAIEIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlCiAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVjazsK
ICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2lu
dGVyKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0Ojpt
YWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRl
eHQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNs
b2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBu
ZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgICAgICBpZiAoIUNvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRv
V2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMg
bm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUu
CiAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcg
dG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgICAgICAg
ICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOwogICAg
ICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVl
UmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7CisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hl
Y2stPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0YW5j
ZUdQUik7CiAgICAgICAgIH0KICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnMgPSAyOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKQEAgLTQwMSw3ICs0MTIsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2Vu
ZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVy
ZQogICAgICAgICAgICAgYm9vbCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKICAgICAgICAg
ICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNp
emUgPj0gbWluaW11bVBhcmVudENoZWNrU2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CiAKLSAg
ICAgICAgICAgIEdQUlJlZyBjb250ZXh0ID0gdXNlRmFzdFRMU0ZvckNvbnRleHQoKSA/IHBhcmFt
c1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRHUFI7CisgICAgICAgICAgICBHUFJSZWcgY29udGV4
dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gcGFyYW1zWzBdLmdwcigpIDogbV93
YXNtQ29udGV4dEluc3RhbmNlR1BSOwogCiAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFm
IGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMg
d2l0aGluCiAgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIg
d291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgpAQCAtNDExLDEwICs0MjIsMTAgQEAg
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSBwYXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9
IHBhcmFtcy5ncFNjcmF0Y2goMSk7CiAKLSAgICAgICAgICAgICAgICBpZiAodXNlRmFzdFRMU0Zv
ckNvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNl
KTsKIAotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
b250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4
dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1p
dCgpKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIGZwLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAgIGlm
IChVTkxJS0VMWShuZWVkVW5kZXJmbG93Q2hlY2spKQpAQCAtNDIzLDEwICs0MzQsMTAgQEAgQjNJ
UkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
UHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292
ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xl
dG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpKTsKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2Vz
SW5zdGFuY2VWYWx1ZSAmJiB1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7
CiAgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhl
IGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgotICAgICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIEND
YWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGNvbnRleHQpOworICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQs
IENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShj
b250ZXh0SW5zdGFuY2UpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAv
LyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0
byBiZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVs
eSBzYWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZl
bnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCiAgICAgICAgICAgICB9CkBAIC00MzgsNyArNDQ5
LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKIAogdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0
b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5
LCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7
Ci0gICAgcmVzdG9yZVdhc21Db250ZXh0KHByb2MsIGJsb2NrLCBpbnN0YW5jZSk7CisgICAgcmVz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKIAogICAgIGlm
ICghIW1lbW9yeSkgewogICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJl
Z3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAgLTQ1OCwxMiArNDY5LDEyIEBAIHZv
aWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVt
b3J5SW5mb3JtYXRpb24mIG1lbW9yCiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBw
aW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAg
Y29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwogICAgICAg
ICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKICAgICAgICAgICAgIEFTU0VSVCgh
c2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdl
IHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVs
YXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVS
ZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1v
cnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXpl
UmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSks
IGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVS
ZWdzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVS
ZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfSk7CkBAIC01NDEs
MjQgKzU1MiwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFy
dGlhbFJlc3VsdAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lv
blR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkgKENvbnRleHQqLCBpbnQzMl90KSA9IFtdIChDb250
ZXh0KiB3YXNtQ29udGV4dCwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7Ci0gICAgICAgIFZN
JiB2bSA9ICp3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHdhc21NZW1v
cnkgPSB3YXNtQ29udGV4dC0+bWVtb3J5KCk7Ci0KKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSko
SlNXZWJBc3NlbWJseUluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7CiAgICAgICAgIGlmIChk
ZWx0YSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgYm9vbCBzaG91bGRU
aHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSBmYWxzZTsKLSAgICAgICAgLy8gZ3JvdygpIGRvZXMg
bm90IHJlcXVpcmUgRXhlY1N0YXRlKiBpZiBpdCBkb2Vzbid0IHRocm93IGV4Y2VwdGlvbnMuCi0g
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG51bGxwdHI7Ci0gICAgICAgIFBhZ2VDb3VudCByZXN1
bHQgPSB3YXNtTWVtb3J5LT5ncm93KHZtLCBleGVjLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGVs
dGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwotICAgICAgICBzY29wZS5yZWxl
YXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+aW50ZXJuYWxNZW1v
cnkoKS5ncm93KFBhZ2VDb3VudChkZWx0YSkpOworICAgICAgICBpZiAoIWdyb3duKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5
OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6
Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CisgICAgICAgICAgICBjYXNlIE1lbW9y
eTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToKKyAgICAgICAgICAgIGNhc2Ug
TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5wYWdlQ291bnQoKTsKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7
CiAgICAgfTsKIAogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxW
YWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCkBAIC01NzIsMTMgKzU4MSwxMyBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9y
eShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUq
IG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2Fm
ZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSk7
CisgICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNl
VmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
Zldhc21NZW1vcnkoKSkpOwogCi0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3Rh
dGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4obnVsbHB0ciktPm1lbW9yeSgpLT5tZW1v
cnkoKS5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhp
cyBzaXplIik7Ci0gICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBz
YWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOwor
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHN0YXRpY19jYXN0PFdhc206Ok1lbW9y
eSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxp
ZXMgb24gdGhpcyBzaXplIik7CisgICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5
T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7
CiAgICAgCiAgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKLSAgICBzdGF0
aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMSA8PCBzaGlmdFZhbHVlLCAiVGhpcyBt
dXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgc3RhdGlj
X2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMg
bXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOwogICAgIFZhbHVl
KiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNo
ciwgb3JpZ2luKCksCiAgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKQEAgLTEwNjksMTQg
KzEwNzgsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBtX21heE51bUpTQ2Fs
bEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIAogICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNh
biBiZSBsaW5rZWQgaGVyZSwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwgYmVj
YXVzZSBhbGwgaW1wb3J0IHN0dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0aW9u
IHN0YXJ0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2Mgot
ICAgICAgICBWYWx1ZSogZnVuY3Rpb25JbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0
YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZJbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSoganNU
eXBlT2ZJbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQ4Wiwgb3JpZ2luKCksIGZ1bmN0aW9uSW1wb3J0LCBzYWZlQ2FzdDxpbnQzMl90PihK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSk7Ci0gICAgICAgIFZhbHVlKiBpc1dhc21DYWxs
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2lu
KCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKyAgICAgICAg
VmFsdWUqIHRhcmdldEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1
ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFy
Z2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFsdWUqIGlzV2FzbUNhbGwg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmln
aW4oKSwgdGFyZ2V0SW5zdGFuY2UsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogaXNXYXNt
QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgQmFzaWNCbG9jayogaXNKU0Jsb2Nr
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJCbG9j
ayA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24g
PSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVx
dWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNKU0Jsb2NrKSk7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6
QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2Nr
KSwgRnJlcXVlbnRlZEJsb2NrKGlzRW1iZWRkZXJCbG9jaykpOwogCiAgICAgICAgIFZhbHVlKiB3
YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2Ms
IGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAg
ICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTA5NywxNSAr
MTEwNSwxNSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIFVwc2lsb25WYWx1ZSog
d2FzbUNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlz
V2FzbUJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNt
Q2FsbFJlc3VsdCk7CiAgICAgICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIAotICAgICAgICAvLyBGSVhN
RTogTGV0cyByZW1vdmUgdGhpcyBpbmRpcmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmllbmRs
eSBJQworICAgICAgICAvLyBGSVhNRTogTGV0J3MgcmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24gYnkg
Y3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkgSUMKICAgICAgICAgLy8gZm9yIGNhbGxzIG91dCB0byBK
Uy4gVGhpcyBzaG91bGRuJ3QgYmUgdGhhdCBoYXJkIHRvIGRvLiBXZSBjb3VsZCBwcm9iYWJseQog
ICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIElDIHRvIGJlIG92ZXIgV2FzbTo6Q29udGV4dCouCiAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzNzUK
LSAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mQ29kZUJsb2NrKCkpKTsKLSAgICAgICAgVmFsdWUqIGp1bXBEZXN0aW5hdGlvbiA9
IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAgICBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY29kZUJsb2NrLCBzYWZlQ2FzdDxpbnQzMl90
PihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihmdW5j
dGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSoganNDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNKU0Jsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIFZhbHVlKiBjb2RlQmxvY2sgPSBpc0VtYmVk
ZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50
MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21Db2RlQmxvY2soKSkpOwor
ICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9uID0gaXNFbWJlZGRlckJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKKyAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLCBjb2RlQmxvY2ssIHNhZmVDYXN0PGludDMyX3Q+KENvZGVCbG9jazo6b2Zmc2V0
T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFs
dWUqIGVtYmVkZGVyQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2Fs
bChtX3Byb2MsIGlzRW1iZWRkZXJCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVy
blR5cGUpLAogICAgICAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsK
ICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7
CkBAIC0xMTE5LDggKzExMjcsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMy
X3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAg
ICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3By
KCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIFVwc2ls
b25WYWx1ZSoganNDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxw
dHIgOiBpc0pTQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IGpzQ2FsbFJlc3VsdCk7Ci0gICAgICAgIGlzSlNCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFVwc2lsb25W
YWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51
bGxwdHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlv
bik7CiAKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CiAKQEAgLTExMjks
NyArMTEzNyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICByZXN1bHQgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQ
aGksIHRvQjNUeXBlKHJldHVyblR5cGUpLCBvcmlnaW4oKSk7CiAgICAgICAgICAgICB3YXNtQ2Fs
bFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOwotICAgICAgICAgICAganNDYWxsUmVzdWx0
VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7CisgICAgICAgICAgICBlbWJlZGRlckNhbGxSZXN1bHRV
cHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBjYWxs
IGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBv
ciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCkBAIC0xMTY1LDE3ICsxMTczLDE3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBz
dGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFy
Z3Muc2l6ZSgpKSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
OwotICAgIEV4cHJlc3Npb25UeXBlIGpzRnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lvblR5
cGUgaW5zdGFuY2VzQnVmZmVyOwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25C
dWZmZXJTaXplOwogICAgIHsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLAotICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQz
Ml90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSkpOworICAgICAgICAg
ICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mV2FzbVRhYmxlKCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50
MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7Ci0gICAgICAg
IGpzRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgdGFi
bGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1bmN0
aW9ucygpKSk7CisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbTo6VGFi
bGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsKKyAgICAgICAgaW5zdGFuY2VzQnVmZmVyID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihX
YXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0
aW9uQnVmZmVyU2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0
PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAgICAg
ICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZTaXplKCkp
KTsKICAgICB9CiAKICAgICAvLyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlz
IHZhbGlkLgpAQCAtMTE5NSw2ICsxMjAzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
LCBvZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBp
bml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUlu
ZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KKyAgICAvLyBGSVhNRTogd2hlbiB3
ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1
c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NzIxMAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENhbGxhYmxl
RnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDMyX3QpLCAiTG9hZCBjb2Rl
Z2VuIGFzc3VtZXMgaTMyIik7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEludDMyLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oT0JK
RUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZUluZGV4KSkpOwogICAgIHsK
QEAgLTEyMjMsMTkgKzEyMzIsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICB7CiAg
ICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIE11bCwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KSwKLSAgICAg
ICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+KSkpOwotICAgICAgICBWYWx1ZSoganNPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQs
IG9yaWdpbigpLCBqc0Z1bmN0aW9uQnVmZmVyLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGNvbnN0
YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXYXNtOjpJbnN0YW5jZSopKSk7CisgICAgICAgIFZh
bHVlKiBuZXdDb250ZXh0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigp
LCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkpOwogCiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRl
eHRTd2l0Y2ggPSBtX3Byb2MuYWRkQmxvY2soKTsKIAotICAgICAgICBWYWx1ZSogbmV3Q29udGV4
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBqc09iamVjdCwgc2FmZUNhc3Q8
aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mSW5zdGFuY2UoKSkpOwot
ICAgICAgICBWYWx1ZSogaXNTYW1lQ29udGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAotICAgICAgICAgICAgbmV3Q29udGV4dCwg
aW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgVmFsdWUqIGlzU2FtZUNvbnRleHRJbnN0YW5jZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LAorICAgICAgICAgICAgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOwogICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJy
YW5jaCwgb3JpZ2luKCksCi0gICAgICAgICAgICBpc1NhbWVDb250ZXh0LCBGcmVxdWVudGVkQmxv
Y2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOworICAg
ICAgICAgICAgaXNTYW1lQ29udGV4dEluc3RhbmNlLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0
aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOwogCiAgICAgICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0xMjQzLDI2ICsxMjUwLDI2IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcyMTgxCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKICAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29udGV4dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0SW5zdGFuY2UsIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VW
YWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRl
eHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dCA9IHBh
cmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBw
YXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0g
cGFyYW1zWzFdLmdwcigpOwogICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBw
aW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAg
R1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAg
ICAgICAgQVNTRVJUKG5ld0NvbnRleHQgIT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dCwgQ29udGV4dDo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dCwgQ29udGV4
dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVdh
c21Db250ZXh0KG5ld0NvbnRleHQpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG5ld0NvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgICAgICAgICBBU1NFUlQobmV3
Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdD
b250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3
Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBBU1NFUlQoc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgQVNTRVJU
KHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0KTsKKyAgICAgICAgICAgIEFT
U0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKICAg
ICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJs
eU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBN
ZW1vcnkgc2l6ZS4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFz
ZU1lbW9yeSk7IC8vIFdhc21NZW1vcnk6OnZvaWQqLgorICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZT
aXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNt
OjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5
Ojp2b2lkKi4KICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKQEAg
LTEzMzksMTk0ICsxMzQ2LDYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3Rv
cjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3MKICAgICBkYXRhTG9n
TG4oKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1v
cnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCi17Ci0gICAgQ0NhbGxIZWxwZXJz
JiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKLQotICAgIGF1dG8g
cmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwotICAgIGppdC5l
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotCi0gICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNv
ZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEK
LSAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdp
dGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtl
ZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2Fs
bGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOwotICAg
IH0pOwotCi0gICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKTsKLSAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdz
LnRvU2F2ZShtb2RlKTsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCB0b1Nh
dmVTaXplID0gdG9TYXZlLm51bWJlck9mU2V0R1BScygpOwotICAgIC8vIFRoZXkgc2hvdWxkIGFs
bCBiZSBjYWxsZWUgc2F2ZXMuCi0gICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKLSAgICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09
IHRvU2F2ZVNpemUpOwotI2VuZGlmCi0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3Rl
cnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpG
cmFtZVBvaW50ZXJCYXNlZCk7Ci0gICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdp
c3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwotCi0gICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUg
PSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7Ci0gICAgdG90YWxGcmFt
ZVNpemUgKz0gV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwotICAg
IHRvdGFsRnJhbWVTaXplIC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICB1bnNpZ25l
ZCBudW1HUFJzID0gMDsKLSAgICB1bnNpZ25lZCBudW1GUFJzID0gMDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAg
IHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6STY0
OgotICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAg
dG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVtR1BSczsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgY2Fz
ZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXpl
ICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXpl
KTsKLSAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFt
ZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8g
V2Ugc2F2ZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5
IG9yIG5vdC4KLSAgICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBh
cyBhIHNjcmF0Y2guIFRoYXQgc2FpZCwKLSAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9n
cmFtcyB1c2UgbWVtb3J5LCBzbyBpdCdzIG5vdCByZWFsbHkKLSAgICAvLyB3b3J0aCBvcHRpbWl6
aW5nIGZvciB0aGUgY2FzZSB0aGF0IHRoZXkgZG9uJ3QuCi0gICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BS
UmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwotICAgICAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihyZWcsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7
Ci0gICAgfQotCi0gICAgR1BSUmVnIHdhc21Db250ZXh0R1BSID0gcGlubmVkUmVncy53YXNtQ29u
dGV4dFBvaW50ZXI7Ci0KLSAgICB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxs
ZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOwotICAgICAgICBudW1HUFJzID0gMDsKLSAgICAgICAgbnVtRlBScyA9IDA7Ci0gICAg
ICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHNldCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0aGlz
LiBTbwotICAgICAgICAvLyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cgc2lu
Y2Ugd2Ugc2F2ZWQgaXQgYWJvdmUuCi0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcGlubmVk
UmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKLQotICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0g
ICAgICAgIC8vIHZtRW50cnlUb1dhc20gcGFzc2VzIFdhc206OkNvbnRleHQqIGFzIHRoZSBmaXJz
dCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCi0gICAgICAgIC8vIG5vdCB1c2luZyBmYXN0IFRMUyB0
byBob2xkIHRoZSBXYXNtOjpDb250ZXh0Ki4KLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29u
dGV4dCgpKSB7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNvbnRleHRHUFIpOwot
ICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewotICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6
Ci0gICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKLSAgICAgICAgICAgICAgICBpZiAobnVtR1BS
cyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBX
YXNtOjpJMzIpCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICArK251bUdQUnM7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6
RjY0OgotICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlv
bigpLm1fZnByQXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVy
ZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6
ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnBy
QXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoISFpbmZvLm1lbW9yeSkgewotICAg
ICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0K
LSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0R1BSLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGJhc2VNZW1vcnkpOwotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAg
ICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKLSAg
ICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1l
cyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJz
IHJlbGF0aXZlIHRvIDAuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVS
ZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5
LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0g
ICAgfQotCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNo
YWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rp
b25JbmRleCArIGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlv
bkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNw
YWNlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1
bmN0aW9uSW5kZXhTcGFjZSB9KTsKLSAgICB9KTsKLQotCi0gICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BS
UmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwotICAgICAgICBBU1NFUlQocmVnICE9
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJl
Z0F0T2Zmc2V0Lm9mZnNldCgpOwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7Ci0gICAgfQot
Ci0gICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBXYXNtOjpG
MzI6Ci0gICAgICAgIGppdC5tb3ZlRmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2FzbTo6
RjY0OgotICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7
Ci0gICAgaml0LnJldCgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogYXV0byBCM0lSR2Vu
ZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KIHsKICAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1f
cGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdP
ZmZzZXQoKSk7CkBAIC0xNTM0LDcgKzEzNTMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdp
bigpIC0+IE9yaWdpbgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwog
fQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBj
b25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVt
b3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlv
bkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25N
b2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQq
IHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBh
dXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAt
MTU1OCwxMSArMTM3NywxMSBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/IE9w
dGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlv
bnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJh
dG9yIGNvbnRleHQoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7
Ci0gICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0
aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOworICAgIEIzSVJHZW5l
cmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRp
ZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBh
cnNlKCkpOwogCi0gICAgY29udGV4dC5pbnNlcnRDb25zdGFudHMoKTsKKyAgICBpckdlbmVyYXRv
ci5pbnNlcnRDb25zdGFudHMoKTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgp
OwogICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggZTJjNmFkYi4uNjliZTQ0OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlw
cm9kdWN0cy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21FbWJl
ZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5m
b3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKQEAgLTU0LDkgKzU1LDcg
QEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpP
cGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7CiB9OwogCi1FeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwor
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9u
ID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAyMmVkZDE2Li5kMGVhZmExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yOSw4ICsy
OSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlv
bi5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcu
aCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCkBAIC01MywyMSArNTEsMjEgQEAgbmFtZXNwYWNl
IFdhc21CQlFQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwogfQogCi1CQlFQbGFuOjpCQlFQbGFuKFZNKiB2bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBp
bmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQmFzZSh2
bSwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywg
Q29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJl
ZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAg
OiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIFdURk1vdmUoY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9zdGF0ZShT
dGF0ZTo6VmFsaWRhdGVkKQogICAgICwgbV9hc3luY1dvcmsod29yaykKIHsKIH0KIAotQkJRUGxh
bjo6QkJRUGxhbihWTSogdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdv
cmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJCUVBsYW4odm0sIGFkb3B0UmVmKCpu
ZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFz
aykpCitCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYm
IHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24g
dGhyb3dXYXNtRXhjZXB0aW9uKQorICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigqbmV3
IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRhc2sp
LCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKIHsK
ICAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0q
IHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29y
ayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKHZtLCBzb3VyY2UsIHNv
dXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29u
dGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dv
cmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBzb3Vy
Y2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKICAgICAsIG1fc3RhdGUoU3RhdGU6Oklu
aXRpYWwpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewpAQCAtMjY5LDcgKzI2Nyw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAK
ICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVw
ID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rp
b25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOworICAg
ICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBp
bGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVu
Z3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0s
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFN
b2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAg
ICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTI4NSw3ICsyODMsNyBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogCiAg
ICAgICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5k
ZXgpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVu
Y3Rpb25JbmRleCwgY3JlYXRlSlNUb1dhc21XcmFwcGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5j
dGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbklu
ZGV4KSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVz
dWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIApAQCAtMzE0LDE0ICszMTIsMTQg
QEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQog
ICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1
Y3RzKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChhdXRvIGpzVG9XYXNtSW50
ZXJuYWxGdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25J
bmRleCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRl
eCkpIHsKICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNF
bnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2Yg
ZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJp
bmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAganNUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29t
cGlsYXRpb24+KAorICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlv
bi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0
aW9uPigKICAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkph
dmFTY3JpcHQtPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwg
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuanNFbnRy
eXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmgKaW5kZXggMzU5ZjEzYi4uYzZlYTQ5NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNt
TW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldh
c21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQxLDggKzQx
LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWxsTGlua0luZm87Ci1jbGFzcyBKU0ds
b2JhbE9iamVjdDsKLWNsYXNzIEpTUHJvbWlzZURlZmVycmVkOwogCiBuYW1lc3BhY2UgV2FzbSB7
CiAKQEAgLTUwLDEyICs0OCwxMyBAQCBjbGFzcyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4g
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQbGFuOwogICAgIGVudW0gQXN5bmNXb3JrIDog
dWludDhfdCB7IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9uIH07CisKICAgICAvLyBOb3RlOiBDb21w
bGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3
aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgQkJRUGxhbihWTSosIFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dv
cmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJ
bmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJR
UGxhbihDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRh
c2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAg
Ly8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUg
bm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0
ZXN0cwogICAgIC8vIEZJWE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ug
c2hvdWxkIHJlbW92ZSBBc3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VY
UE9SVF9QUklWQVRFIEJCUVBsYW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBBc3luY1dv
cmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29u
dGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2sm
Jik7CiAKICAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIApAQCAtMTQxLDcgKzE0
MCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNt
VG9XYXNtRXhpdFN0dWJzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5
cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0gICAg
SGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBl
bmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2pzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAg
SGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBl
bmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7
CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwog
ICAgIFZlY3RvcjxUaWVyVXBDb3VudD4gbV90aWVyVXBDb3VudHM7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKaW5kZXggMWI4YjU2Zi4uNDQ0
NzkwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5J
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5Jbmxp
bmVzLmgKQEAgLTM5LDEwICszOSwxMCBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVz
KGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogICAgIEFTU0VSVCghZmFpbGVkKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbklu
ZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25J
bmRleCkgewogCi0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGpzRW50cnlwb2ludENhbGxl
ZTsKLSAgICAgICAgaWYgKGF1dG8ganNUb1dhc21GdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAganNF
bnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShqc1RvV2FzbUZ1
bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoanNUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRz
Ojpib3hXYXNtKGpzRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOworICAgICAgICBSZWZQdHI8V2Fz
bTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CisgICAgICAgIGlmIChhdXRvIGVt
YmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMu
Z2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21G
dW5jdGlvbi0+ZW50cnlwb2ludCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2Fs
bGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKQEAgLTUwLDcgKzUwLDcg
QEAgdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFj
aykKICAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNt
OjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi5nZXQoZnVuY3Rpb25J
bmRleFNwYWNlKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5j
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBv
aW50Q2FsbGVlLnB0cigpKSk7CiAKLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbklu
ZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRD
YWxsZWUpKTsKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3Zl
KGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUp
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cAppbmRleCA2N2NjZjVlLi40OTEwYzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwCkBAIC0yOSw1OTYgKzI5LDE0IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJz
LmgiCi0jaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCi0jaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlRodW5r
R2VuZXJhdG9ycy5oIgotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgotI2luY2x1
ZGUgIldhc21Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgSklUID0gQ0NhbGxIZWxwZXJz
OwogCi1zdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWdu
ZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCi17Ci0gICAgLy8gV2UncmUgY2FsbGluZyBv
dXQgb2YgdGhlIGN1cnJlbnQgV2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFuY2UgaGFz
IGEgbGlzdCBvZiBhbGwgaXRzIGltcG9ydCBmdW5jdGlvbnMuCi0gICAgaml0LmxvYWRXYXNtQ29u
dGV4dChyZXN1bHQpOwotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCBy
ZXN1bHQpOwotfQotCi1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCi17Ci0g
ICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5
IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCi0gICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRv
IHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCi0gICAg
Y29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKTsKLSAgICBjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdD
b252ZW50aW9uKCk7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICB1bnNpZ25lZCBhcmdDb3VudCA9
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7Ci0gICAgSklUIGppdDsKLQotICAgIC8vIE5vdGU6
IFdhc21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEg
Y2FsbGVlIHNhdmUuCi0gICAgLy8gSWYgd2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNv
IG5lZWQgdG8gY2hhbmdlIFdhc21CM0lSR2VuZXJhdG9yLgotCi0gICAgLy8gQmVsb3csIHdlIGFz
c3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFj
ay4KLSAgICBBU1NFUlQoIWpzQ0MubV9ncHJBcmdzLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFqc0ND
Lm1fZnByQXJncy5zaXplKCkpOwotCi0gICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0g
ICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29k
ZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQot
Ci0gICAgewotICAgICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOwotICAgICAgICBoYXNC
YWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJldHVyblR5cGUoKSA9PSBJNjQ7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsg
KythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVu
dChhcmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1
bmM6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAg
ICAgICAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkgewotICAgICAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgICAg
IGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOwotCi0gICAgICAgICAgICAvLyBTdG9yZSBDYWxsZWUuCi0gICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIp
OwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAgICAgICAgIGF1
dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigqdm0pOwotCi0gICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSos
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAg
ICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5n
bG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvcklu
c3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVj
dG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFz
IHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOwotICAg
ICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwot
Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOwotICAgICAg
ICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2
YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxs
aW5nIGNvbnZlbnRpb24gc2F2ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4g
V2UgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVy
cyBzaW5jZSB0aGUgd2FzbSBjYWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KLSAgICBS
ZWdpc3RlclNldCBtaXNzaW5nQ2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0
ZXJzOwotICAgIG1pc3NpbmdDYWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVn
aXN0ZXJzKTsKLSAgICBBU1NFUlQobWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7Ci0KLSAg
ICBpZiAoIU9wdGlvbnM6OnVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7Ci0g
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoYXJnQ291bnQgKiBzaXplb2YodWludDY0X3QpKTsKLSAgICAgICAgY2hhciogYnVmZmVy
ID0gYXJnQ291bnQgPyBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKSA6IG51bGxwdHI7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAg
ICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBidWZm
ZXJPZmZzZXQgPSAwOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
LSAgICAgICAgY29uc3QgR1BSUmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7Ci0gICAg
ICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZVB0
cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7
IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAg
ICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjYXNlIEkz
MjogewotICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYg
KG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOwot
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUg
YXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOwotICAgICAgICAgICAg
ICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOwot
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zmc2V0
KTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAg
ICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8
IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3
YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBh
cmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAg
ICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKLSAgICAgICAgICAg
ICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAg
ICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUND
Lm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5t
X2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50
cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAg
ICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0g
c2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0
Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAg
ICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6ZW9m
KFJlZ2lzdGVyKTsKLSAgICAgICAgfQotICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgaWYgKGFyZ0NvdW50KSB7Ci0gICAgICAgICAgICAvLyBUaGUgR0Mgc2hv
dWxkIG5vdCBsb29rIGF0IHRoaXMgYnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFsdWVz
LgotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0
Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50NjRf
dCAoKmNhbGxGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1aW50
NjRfdCopID0KLSAgICAgICAgICAgIFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjYWxs
ZWUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAtPiB1
aW50NjRfdCB7IAotICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAg
ICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAg
ICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAw
OyBhcmdOdW0gPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgewotICAgICAg
ICAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhcmc7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5j
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
STMyOgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oYnVmZmVyW2FyZ051bV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNlX2Nh
c3Q8ZG91YmxlPihidWZmZXJbYXJnTnVtXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBl
bmQoYXJnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKLSAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+bWV0
aG9kVGFibGUoKnZtKS0+Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAgICAg
ICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBlLCBj
YWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJl
YWxSZXN1bHQ7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgICAgIGNhc2UgQW55
ZnVuYzoKLSAgICAgICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQudG9J
bnQzMihleGVjKSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBGMzI6
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4ocmVzdWx0LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlYWxSZXN1bHQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgaml0LmxvYWRX
YXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAg
ICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICAgICAgCi0gICAgICAgIG1hdGVyaWFs
aXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVy
cyA+PSA0LCAiV2UgcmVseSBvbiB0aGlzIHdpdGggdGhlIGNhbGwgYmVsb3cuIik7Ci0gICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmVJbmRleCksIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihidWZmZXIpKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
LSAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBB
c3NlbWJseUhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwotCi0gICAgICAgIC8vIGV4
Y2VwdGlvbiBoZXJlLgotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgdm9pZCAoKmRvVW53
aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0s
IGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoKTsKLSAgICAg
ICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAgICBub0V4Y2VwdGlv
bi5saW5rKCZqaXQpOwotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsK
LSAgICAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgIGpp
dC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86
OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAgICAg
aml0LnJldCgpOwotCi0gICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQotICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0
aW9uQ2FsbCwgZG9VbndpbmRpbmcpOwotCi0gICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9y
dEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOwotICAgIH0KLQot
ICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUg
c2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKLSAgICAvLyB3aWxsIGRvIHRoZSBzdGFjayBjaGVjayBm
b3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMgdGhhdCBpdCBtaWdodCBtYWtlCi0gICAgLy8gYSBj
YWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1ha2Ugc3VyZSBpdHMgc3RhY2sgY2hlY2sgaW5jbHVk
ZXMgc3BhY2UKLSAgICAvLyBmb3IgdXMgaGVyZS4KLQotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJl
ck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsgMTsgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1l
bnQuCi0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVv
ZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgY29uc3QgdW5zaWdu
ZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRC
eXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0gICAgaml0LnN1YlB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICBKSVQ6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLQotICAgIC8vIEZJ
WE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBh
cmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBm
b3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NTQ3Ci0gICAgCi0gICAgLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUgaW50ZWdlciBwYXJh
bWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lzdGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4KLSAg
ICB7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWdu
ZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNl
dCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKyth
cmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChh
cmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6
Ci0gICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6IHsK
LSAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJz
aGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAg
ICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBz
cGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNj
cmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BS
MDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZ3ByUmVnKTsKLSAgICAgICAgICAgICAgICAg
ICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKLSAgICAgICAgICAgICAgICBqaXQuemVyb0V4
dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOyAvLyBDbGVhciBub24taW50MzIgYW5kIG5vbi10
YWcgYml0cy4KLSAgICAgICAgICAgICAgICBqaXQuYm94SW50MzIoZ3ByUmVnLCBKU1ZhbHVlUmVn
cyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IEYzMjoKLSAgICAgICAgICAgIGNhc2UgRjY0OgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6
IGhhbmRsZWQgYmVsb3cuCi0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzID49IHdh
c21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICB7Ci0gICAgICAgIC8vIEludGVnZXIgcmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNw
aWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxhYmxlLgotICAgICAgICBHUFJSZWcgZG91YmxlRW5j
b2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgYm9vbCBoYXNNYXRlcmlh
bGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBmYWxzZTsKLSAgICAgICAgYXV0byBtYXRlcmlhbGl6
ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0
LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKLSAgICAgICAgICAgIGlmICghaGFzTWF0ZXJpYWxpemVk
RG91YmxlRW5jb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChEb3Vi
bGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4LCAiY29kZWdlbiBhc3N1bWVzIHRoaXMgYmVsb3ci
KTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW0zMigxKSwgZGVzdCk7
Ci0gICAgICAgICAgICAgICAgaml0LmxzaGlmdDY0KEpJVDo6VHJ1c3RlZEltbTMyKDQ4KSwgZGVz
dCk7Ci0gICAgICAgICAgICAgICAgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkR1BScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKLSAg
ICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFy
Z3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5z
aWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJn
TnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBl
IGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRj
aCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBG
dW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBh
Ym92ZS4KLSAgICAgICAgICAgIGNhc2UgSTMyOgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6
IGhhbmRsZWQgYWJvdmUuCi0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdh
c21DQy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgICAgICAg
ICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3
YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2Fz
bUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJn
dW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAg
ICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0
ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJSZWcsIGZwclJlZyk7Ci0gICAgICAgICAgICAg
ICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91Ymxl
VG82NChmcHJSZWcsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91Ymxl
RW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAg
aml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAg
ICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVG
cmFtZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVv
ZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7Ci0g
ICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hh
bGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3Bp
bGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3Jh
dGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAg
ICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0
Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJp
YWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAgICAg
ICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsK
LSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJz
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1
bWVudEdQUjApOwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJh
bWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0K
LSAgICBHUFJSZWcgaW1wb3J0SlNDZWxsR1BSUmVnID0gR1BSSW5mbzo6cmVnVDA7IC8vIENhbGxl
ZSBuZWVkcyB0byBiZSBpbiByZWdUMCBmb3Igc2xvdyBwYXRoIGJlbG93LgotICAgIEFTU0VSVCgh
d2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQoaW1wb3J0SlNDZWxsR1BSUmVnKSk7Ci0K
LSAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQsIGltcG9ydEluZGV4LCBpbXBvcnRKU0Nl
bGxHUFJSZWcpOwotCi0gICAgaml0LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihu
dW1iZXJPZlBhcmFtZXRlcnMpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5
bG9hZE9mZnNldCkpOwotICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5k
ZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAvLyBGSVhN
RSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVnaXN0
ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTQ4OAotCi0gICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9z
LmFkZCgpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
Q29kZU9yaWdpbigpLCBpbXBvcnRKU0NlbGxHUFJSZWcpOwotICAgIEpJVDo6RGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVl
KDApOwotICAgIEpJVDo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBpbXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ss
IGluaXRpYWxSaWdodFZhbHVlKTsKLSAgICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNh
bGwoKTsKLSAgICBKSVQ6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7Ci0gICAgc2xvd1BhdGgubGlu
aygmaml0KTsKLSAgICAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJ
bmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMi4KLSAgICBKSVQ6
OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKLSAgICBkb25lLmxpbmsoJmppdCk7Ci0K
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKLQotICAgIHN3aXRj
aCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewotICAgIGNhc2UgVm9pZDoKLSAgICAgICAgLy8g
RGlzY2FyZC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jOgotICAgIGNhc2UgQW55ZnVu
YzoKLSAgICAgICAgLy8gRm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRo
IHRoZXNlIHR5cGVzIGluIHRoZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHku
TW9kdWxlIHZhbGlkYXRpb24gZXJyb3IuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSTY0OiB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAgfQotICAgIGNhc2Ug
STMyOiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKLQotICAgICAgICBzbG93UGF0aC5hcHBlbmQo
aml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVU
YWdSZWdpc3RlcnMpKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdElu
dDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVn
aXN0ZXJzKSk7Ci0gICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBkb25lLmFwcGVuZChq
aXQuanVtcCgpKTsKLQotICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAg
ICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBpbnQzMl90ICgq
Y29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICAgICAgICAgIHJldHVybiB2LnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9JMzIpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEYzMjogewotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIGF1
dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgYXV0byBpc0RvdWJsZSA9IGpp
dC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwg
RG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKLSAgICAg
ICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRv
bmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7Ci0g
ICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0Rv
dWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwot
ICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7Ci0KLSAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwotICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAg
YXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChq
aXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBmbG9hdCAoKmNvbnZlcnRU
b0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHYpIC0+IGZsb2F0IHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAg
fTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsK
LSAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICBhdXRvIGlz
RG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBXZSdyZSBhbiBp
bnQzMgotICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRv
RG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7
Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxp
bmsoJmppdCk7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1i
ZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGpp
dC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBu
b3RBTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQu
Y2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhj
ZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRl
KiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7
IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIHJldHVybiB2LnRv
TnVtYmVyKGV4ZWMpOwotICAgICAgICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgY29udmVydFRvRjY0KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1w
dHkoKSkgewotICAgICAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKLSAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGppdC5q
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5n
KShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMp
OwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAg
fTsKLQotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOwotICAg
ICAgICB9KTsKLSAgICB9Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChVTkxJS0VMWShwYXRj
aEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0Nh
bGwpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9j
YXRpb25PZih0YXJnZXRUb0NoZWNrKSk7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0
aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKLSAgICBj
YWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRo
QmVnaW4sIGhvdFBhdGhPdGhlcik7Ci0KLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5k
ZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Ci19Ci0KIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWdu
ZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRS
ZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAgLTYzMywyNCArNTEsMjMgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1
bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
ICE9IHNjcmF0Y2gpOwogICAgIEdQUlJlZyBzaXplUmVnQXNTY3JhdGNoID0gc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyOwogCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8Q29udGV4dCwg
SlNXZWJBc3NlbWJseUluc3RhbmNlPjo6dmFsdWUsICJUaGlzIGlzIGFzc3VtZWQgaW4gdGhlIGNv
ZGUgYmVsb3cuIik7CiAgICAgLy8gQjMncyBjYWxsIGNvZGVnZW4gZW5zdXJlcyB0aGF0IHRoZSBK
U0NlbGwgaXMgYSBXZWJBc3NlbWJseUZ1bmN0aW9uLgotICAgIGppdC5sb2FkV2FzbUNvbnRleHQo
c2l6ZVJlZ0FzU2NyYXRjaCk7IC8vIE9sZCBJbnN0YW5jZSoKLSAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
ZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOwotCi0gICAgLy8gR2V0IHRo
ZSBjYWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0
LiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNl
LgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAg
IGppdC5zdG9yZVdhc21Db250ZXh0KGJhc2VNZW1vcnkpOworICAgIGppdC5sb2FkV2FzbUNvbnRl
eHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgorICAgIC8vIEdl
dCB0aGUgY2FsbGVlJ3MgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYW5kIHNldCBpdCBhcyBXYXNtQ29u
dGV4dCdzIGluc3RhbmNlLiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBp
dHMgb3duIEluc3RhbmNlLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNT
Y3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoaW1w
b3J0SW5kZXgpKSwgYmFzZU1lbW9yeSk7IC8vIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSouCisgICAg
Ly8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2Fz
bSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCisgICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludChpbXBvcnRJbmRleCkpLCBzY3JhdGNoKTsgLy8gV2Fz
bTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24uCisgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJ
bnN0YW5jZShiYXNlTWVtb3J5KTsKIAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXpl
UmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tM
aW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRjaCk7CiAgICAgaml0LnN0b3JlUHRyKHNpemVSZWdBc1Nj
cmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CiAKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5n
IGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXZWJBc3NlbWJseS5JbnN0YW5jZSBoYXZlIHRoZSBzYW1l
IHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIg
YXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgotICAgIGppdC5sb2FkUHRyKEpJ
VDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICBB
U1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNz
dW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0
ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1v
cnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6
ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsgLy8gV2FzbU1lbW9yeTo6dm9pZCouCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6dm9pZCouCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IHNpemVSZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5z
aXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5z
aXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CkBAIC02NTgsNyArNzUsNiBAQCBFeHBlY3RlZDxNYWNy
b0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGlt
cG9ydEluZGV4KQogICAgIH0KIAogICAgIC8vIFRhaWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUgV2Vi
QXNzZW1ibHkgZnVuY3Rpb24uCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gs
IFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24o
KSksIHNjcmF0Y2gpOwogICAgIGppdC5sb2FkUHRyKHNjcmF0Y2gsIHNjcmF0Y2gpOwogICAgIGpp
dC5qdW1wKHNjcmF0Y2gpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
aAppbmRleCA0ZTI2MmJhLi5mZWM2YmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsOSArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21G
b3JtYXQuaCIKLSNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDQsNyArNDIsNiBAQCBlbnVtIGNsYXNzIEJpbmRpbmdG
YWlsdXJlIHsKIH07CiAKIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpOwotRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSnMoVk0qLCBCYWc8Q2FsbExp
bmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydElu
ZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAppbmRleCA3MGZlZmIwLi5lNTEzNjdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcApAQCAtMzEsMjAg
KzMxLDMxIEBACiAKICNpbmNsdWRlICJXYXNtQkJRUGxhbklubGluZXMuaCIKICNpbmNsdWRlICJX
YXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Xb3Jr
bGlzdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1Db2RlQmxvY2s6
OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZv
cm1hdGlvbikKK1JlZjxDb2RlQmxvY2s+IENvZGVCbG9jazo6Y3JlYXRlKENvbnRleHQqIGNvbnRl
eHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2Fz
bUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCit7CisgICAgc2l6ZV90IGltcG9ydEZ1bmN0
aW9uQ291bnQgPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAg
YXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBmYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplKGlt
cG9ydEZ1bmN0aW9uQ291bnQpKSkgQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIG1vZHVsZUluZm9y
bWF0aW9uLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbXBvcnRGdW5jdGlvbkNvdW50OyArK2kp
CisgICAgICAgIHJlc3VsdC0+aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGkpID0gbnVsbHB0cjsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKnJlc3VsdCk7Cit9CisKK0NvZGVCbG9jazo6Q29kZUJsb2Nr
KENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZUluZm9ybWF0aW9uLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldy
YXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBtX2Nh
bGxlZUNvdW50KG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRnVuY3Rpb25Db3VudCgpKQogICAg
ICwgbV9tb2RlKG1vZGUpCiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9
IHRoaXM7Ci0gICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKG51bGxwdHIsIG1ha2VS
ZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVk
VGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShw
cm90ZWN0ZWRUaGlzKV0gKFZNKiwgUGxhbiYpIHsKKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgQkJRUGxhbihjb250ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6
RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgewogICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZh
aWxlZCgpKSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNz
YWdlKCk7Ci0gICAgICAgICAgICBtX3BsYW4gPSBudWxscHRyOworICAgICAgICAgICAgc2V0Q29t
cGlsYXRpb25GaW5pc2hlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAg
LTY2LDEwICs3NywxMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKICAgICAgICAgbV93YXNtVG9XYXNt
Q2FsbHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOwogICAgICAgICBt
X3RpZXJVcENvdW50cyA9IG1fcGxhbi0+dGFrZVRpZXJVcENvdW50cygpOwogCi0gICAgICAgIG1f
cGxhbiA9IG51bGxwdHI7Ci0gICAgfSkpKTsKLQorICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlz
aGVkKCk7CisgICAgfSksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNt
RXhjZXB0aW9uKSk7CiAgICAgbV9wbGFuLT5zZXRNb2RlKG1vZGUpOworCiAgICAgYXV0byYgd29y
a2xpc3QgPSBXYXNtOjplbnN1cmVXb3JrbGlzdCgpOwogICAgIC8vIE5vdGUsIGltbWVkaWF0ZWx5
IGFmdGVyIHdlIGVucXVldWUgdGhlIHBsYW4sIHRoZXJlIGlzIGEgY2hhbmNlIHRoZSBhYm92ZSBj
YWxsYmFjayB3aWxsIGJlIGNhbGxlZC4KICAgICB3b3JrbGlzdC5lbnF1ZXVlKG1ha2VSZWYoKm1f
cGxhbi5nZXQoKSkpOwpAQCAtOTIsNyArMTAzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OndhaXRVbnRp
bEZpbmlzaGVkKCkKICAgICAvLyBlbHNlLCBpZiB3ZSBkb24ndCBoYXZlIGEgcGxhbiwgd2UncmUg
YWxyZWFkeSBjb21waWxlZC4KIH0KIAotdm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyhWTSYg
dm0sIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCit2b2lkIENvZGVCbG9jazo6Y29t
cGlsZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRh
c2spCiB7CiAgICAgUmVmUHRyPFBsYW4+IHBsYW47CiAgICAgewpAQCAtMTA0LDEyICsxMTUsMTEg
QEAgdm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25D
YWxsYmFjayYmIHRhc2spCiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8ga2VlcCBhIFJlZlB0
ciBvbiB0aGUgUGxhbiBiZWNhdXNlIHRoZSB3b3JrbGlzdCB3aWxsIGtlZXAKICAgICAgICAgLy8g
YSBSZWZQdHIgb24gdGhlIFBsYW4gdW50aWwgdGhlIHBsYW4gZmluaXNoZXMgbm90aWZ5aW5nIGFs
bCBvZiBpdHMgY2FsbGJhY2tzLgogICAgICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRU
aGlzID0gdGhpczsKLSAgICAgICAgcGxhbi0+YWRkQ29tcGxldGlvblRhc2sodm0sIGNyZWF0ZVNo
YXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgdGFzayA9IFdURk1vdmUodGFzayks
IHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0qIHZtLCBQbGFuJikg
ewotICAgICAgICAgICAgQVNTRVJUKHZtKTsKLSAgICAgICAgICAgIHRhc2stPnJ1bigqdm0sIG1h
a2VSZWYoKnRoaXMpKTsKKyAgICAgICAgcGxhbi0+YWRkQ29tcGxldGlvblRhc2soY29udGV4dCwg
Y3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92
ZSh0YXNrKSwgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikg
eworICAgICAgICAgICAgdGFzay0+cnVuKG1ha2VSZWYoKnRoaXMpKTsKICAgICAgICAgfSkpOwog
ICAgIH0gZWxzZQotICAgICAgICB0YXNrLT5ydW4odm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAg
ICAgdGFzay0+cnVuKG1ha2VSZWYoKnRoaXMpKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6OmlzU2Fm
ZVRvUnVuKE1lbW9yeU1vZGUgbWVtb3J5TW9kZSkKQEAgLTEzMCw2ICsxNDAsMTMgQEAgYm9vbCBD
b2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1lbW9yeU1vZGUgbWVtb3J5TW9kZSkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKKwordm9pZCBDb2RlQmxvY2s6OnNldENvbXBpbGF0aW9uRmluaXNoZWQoKQor
eworICAgIG1fcGxhbiA9IG51bGxwdHI7CisgICAgbV9jb21waWxhdGlvbkZpbmlzaGVkLnN0b3Jl
KHRydWUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9j
ay5oCmluZGV4IDJkYmY3ZTQuLjAyMDEwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29kZUJsb2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNt
RW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM3LDExICszOCwxMCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3Mg
Q2FsbGVlOworc3RydWN0IENvbnRleHQ7CiBjbGFzcyBCQlFQbGFuOwogY2xhc3MgT01HUGxhbjsK
IHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKQEAgLTUxLDIwICs1MSw0MiBAQCBlbnVtIGNsYXNz
IE1lbW9yeU1vZGUgOiB1aW50OF90OwogICAgIAogY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9jaz4gewogcHVibGljOgotICAgIHR5cGVkZWYgdm9p
ZCBDYWxsYmFja1R5cGUoVk0mLCBSZWY8Q29kZUJsb2NrPiYmKTsKKyAgICB0eXBlZGVmIHZvaWQg
Q2FsbGJhY2tUeXBlKFJlZjxDb2RlQmxvY2s+JiYpOwogICAgIHVzaW5nIEFzeW5jQ29tcGlsYXRp
b25DYWxsYmFjayA9IFJlZlB0cjxXVEY6OlNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBlPj47Ci0gICAg
c3RhdGljIFJlZjxDb2RlQmxvY2s+IGNyZWF0ZShNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9y
bWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKKyAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3Jl
YXRlKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVk
ZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworCisgICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZkltcG9ydFN0dWJzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6ZW9mKENvZGVCbG9jaykpOworICAgIH0KKwor
ICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IGZ1bmN0aW9u
SW1wb3J0Q291bnQpCisgICAgeworICAgICAgICByZXR1cm4gKG9mZnNldE9mSW1wb3J0U3R1YnMo
KSArIHNpemVvZih2b2lkKikgKiBmdW5jdGlvbkltcG9ydENvdW50KS51bnNhZmVHZXQoKTsKKyAg
ICB9CisKKyAgICB2b2lkKiYgaW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKHVuc2lnbmVkIGltcG9y
dEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29kZUJsb2NrKG1v
ZGUsIG1vZHVsZUluZm9ybWF0aW9uKSk7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZv
aWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRvRW1i
ZWRkZXJTdHViKGltcG9ydEluZGV4KSk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCop
ICogaW1wb3J0SW5kZXg7CisgICAgfQorCisgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gd2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKKyAgICAgICAgcmV0dXJuICZpbXBvcnRX
YXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpOwogICAgIH0KIAogICAgIHZvaWQgd2FpdFVu
dGlsRmluaXNoZWQoKTsKLSAgICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIEFzeW5jQ29tcGlsYXRp
b25DYWxsYmFjayYmKTsKKyAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0KiwgQXN5bmNDb21w
aWxhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgYm9vbCBjb21waWxhdGlvbkZpbmlzaGVkKCkKICAg
ICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgcmV0
dXJuICFtX3BsYW47CisgICAgICAgIHJldHVybiBtX2NvbXBpbGF0aW9uRmluaXNoZWQubG9hZCgp
OwogICAgIH0KICAgICBib29sIHJ1bm5hYmxlKCkgeyByZXR1cm4gY29tcGlsYXRpb25GaW5pc2hl
ZCgpICYmICFtX2Vycm9yTWVzc2FnZTsgfQogCkBAIC03OCw5ICsxMDAsMTIgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVy
biBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9CisgICAgCisgICAgLy8gVGhlc2UgdHdv
IGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVu
IHBvcHVsYXRlZC4KIAogICAgIENhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBB
U1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJ
bmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKIApAQCAt
OTAsNiArMTE1LDcgQEAgcHVibGljOgogICAgIH0KICAgICBDYWxsZWUmIHdhc21FbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2Up
CiAgICAgeworICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAg
ICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1w
b3J0Q291bnQoKTsKICAgICAgICAgaWYgKG1fb3B0aW1pemVkQ2FsbGVlc1tjYWxsZWVJbmRleF0p
CkBAIC0xMTcsNyArMTQzLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
T01HUGxhbjsKIAotICAgIENvZGVCbG9jayhNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYp
OworICAgIENvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24m
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICB2b2lk
IHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50Owog
ICAgIE1lbW9yeU1vZGUgbV9tb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9jYWxs
ZWVzOwpAQCAtMTI4LDYgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBSZWZQdHI8
QkJRUGxhbj4gbV9wbGFuOworICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5p
c2hlZCB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIExvY2sgbV9s
b2NrOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250
ZXh0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAppbmRl
eCBmZWExNmRlLi5lMDU5ZmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29udGV4dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
bnRleHQuY3BwCkBAIC0yOCwzMCArMjgsNDEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAotI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisj
aW5jbHVkZSAiT3B0aW9ucy5oIgorCiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL0Zh
c3RUTFMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotQ29udGV4dCog
bG9hZENvbnRleHQoVk0mIHZtKQorYm9vbCBDb250ZXh0Ojp1c2VGYXN0VExTKCkKK3sKKyNpZiBF
TkFCTEUoRkFTVF9UTFNfSklUKQorICAgIHJldHVybiBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2Fz
bUNvbnRleHQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogQ29udGV4dDo6bG9hZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKEZB
U1RfVExTX0pJVCkKLSAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxDb250ZXh0Kj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KFdU
Rl9XQVNNX0NPTlRFWFRfS0VZKSk7CisgICAgaWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihfcHRocmVhZF9nZXRzcGVj
aWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKICNlbmRpZgotICAgIHJldHVybiB2
bS53YXNtQ29udGV4dDsKKyAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLXZvaWQgc3RvcmVDb250
ZXh0KFZNJiB2bSwgQ29udGV4dCogY29udGV4dCkKK3ZvaWQgQ29udGV4dDo6c3RvcmUoSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpLCB2b2lkKiBzb2Z0U3RhY2tMaW1pdCkKIHsKICNpZiBFTkFCTEUo
RkFTVF9UTFNfSklUKQotICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICBf
cHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVksIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oY29udGV4dCkpOworICAgIGlmICh1c2VGYXN0VExTKCkpCisgICAgICAgIF9w
dGhyZWFkX3NldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9j
YXN0PHZvaWQqPihpKSk7CiAjZW5kaWYKLSAgICB2bS53YXNtQ29udGV4dCA9IGNvbnRleHQ7Ci0g
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIGNvbnRleHQtPnNldENhY2hlZFN0YWNrTGltaXQodm0u
c29mdFN0YWNrTGltaXQoKSk7CisgICAgaW5zdGFuY2UgPSBpOworICAgIGlmIChpbnN0YW5jZSkK
KyAgICAgICAgaW5zdGFuY2UtPnNldENhY2hlZFN0YWNrTGltaXQoc29mdFN0YWNrTGltaXQpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db250ZXh0LmgKaW5kZXggM2NmNjVmYi4uYzJiNTFkZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCkBAIC0yNywzNyArMjcsMjAgQEAKIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgotI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOworY2xhc3Mg
SlNXZWJBc3NlbWJseUluc3RhbmNlOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLS8vIEZJWE1FOiBX
ZSBtaWdodCB3YW50IHRoaXMgdG8gYmUgc29tZXRoaW5nIGVsc2UgYXQgc29tZSBwb2ludDoKLS8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAyNjAKLXVzaW5nIENv
bnRleHQgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7Ci0KLWlubGluZSBib29sIHVzZUZhc3RUTFMo
KQotewotI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgcmV0dXJuIE9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RmFzdFRMUygpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0K
K3N0cnVjdCBDb250ZXh0IHsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlIHsg
bnVsbHB0ciB9OwogCi1pbmxpbmUgYm9vbCB1c2VGYXN0VExTRm9yQ29udGV4dCgpCi17Ci0gICAg
aWYgKHVzZUZhc3RUTFMoKSkKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JX
YXNtQ29udGV4dCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KKyAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGxvYWQoKSBjb25zdDsKKyAgICB2b2lkIHN0b3JlKEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSosIHZvaWQqIHNvZnRTdGFja0xpbWl0KTsKIAotQ29udGV4dCogbG9hZENvbnRleHQoVk0mKTsK
LXZvaWQgc3RvcmVDb250ZXh0KFZNJiwgQ29udGV4dCopOworICAgIHN0YXRpYyBib29sIHVzZUZh
c3RUTFMoKTsKK307CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMjI4Nzk0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21FbWJlZGRlci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBFeGVjU3RhdGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMg
c2hvdWxkIGJlIFdhc206Okluc3RhbmNlLCBzbyBzaG91bGQgdXNlIGJlbG93LiBodHRwczovL3dl
YmtpdC5vcmcvYi8xNzc0NzIKKworbmFtZXNwYWNlIFdhc20geworCitzdHJ1Y3QgQ29tcGlsYXRp
b25Db250ZXh0Oworc3RydWN0IEludGVybmFsRnVuY3Rpb247CitzdHJ1Y3QgTW9kdWxlSW5mb3Jt
YXRpb247CitjbGFzcyBTaWduYXR1cmU7CitzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsK
KworLy8gQ3JlYXRlIHdyYXBwZXIgY29kZSB0byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNz
ZW1ibHkuCit1c2luZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90KT47CisKKy8vIENhbGxlZCBhcyBzb29u
IGFzIGFuIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMg
dG8gY29udGludWUgYXQuCit1c2luZyBUaHJvd1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhl
Y1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwCmluZGV4IDJiMWQ4MjguLmNjMWU3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0zMCwx
MSArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRl
ICJNYWNoaW5lQ29udGV4dC5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2Vw
dGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5r
cy5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1Np
Z25hbHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNp
Z25hbEhhbmRsZXIuaAppbmRleCAzODEyODM2Li5lNWUwN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCkBAIC0yNyw4ICsy
Nyw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20g
ewogCiB2b2lkIHJlZ2lzdGVyQ29kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBiMjIyMjE3Li5lN2IzZGY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC00NCwxNCArNDQsMTUgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTRnVuY3Rpb247Ci0KIG5hbWVzcGFjZSBCMyB7
CiBjbGFzcyBDb21waWxhdGlvbjsKIH0KIAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29t
cGlsYXRpb25Db250ZXh0Oworc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOworCiBpbmxpbmUgYm9v
bCBpc1ZhbHVlVHlwZShUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zNGJlMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgorCisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNp
bmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIHsKK3Np
emVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZShNb2R1bGUmIG1vZHVsZSkKK3sKKyAgICByZXR1cm4g
bW9kdWxlLm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0
ZXIpOworfQorfQorCitJbnN0YW5jZTo6SW5zdGFuY2UoUmVmPE1vZHVsZT4mJiBtb2R1bGUpCisg
ICAgOiBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCisgICAgLCBtX2dsb2JhbHMoTWFsbG9jUHRy
PHVpbnQ2NF90Pjo6bWFsbG9jKGdsb2JhbE1lbW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdldCgpKSkp
Cit7Cit9CisKK0luc3RhbmNlOjp+SW5zdGFuY2UoKSB7IH0KKworc2l6ZV90IEluc3RhbmNlOjpl
eHRyYU1lbW9yeUFsbG9jYXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsb2JhbE1lbW9yeUJ5
dGVTaXplKG1fbW9kdWxlLmdldCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUluc3RhbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3
OGE3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21J
bnN0YW5jZS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5j
bHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21UYWJsZS5oIgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEluc3RhbmNlIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPEluc3RhbmNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJbnN0YW5j
ZT4gY3JlYXRlKFJlZjxNb2R1bGU+JiYgbW9kdWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW5zdGFuY2UoV1RGTW92ZShtb2R1bGUpKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZmluYWxpemVDcmVhdGlvbihSZWY8Q29kZUJsb2NrPiYmIGNvZGVCbG9jaykKKyAgICB7
CisgICAgICAgIG1fY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxvY2spOworICAgIH0KKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5JbnN0YW5jZSgpOworCisgICAgc2l6ZV90IGV4dHJhTWVtb3J5
QWxsb2NhdGVkKCkgY29uc3Q7CisKKyAgICBNb2R1bGUmIG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9k
dWxlLmdldCgpOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVC
bG9jay5nZXQoKTsgfQorICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0
KCk7IH0KKyAgICBUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisKKyAg
ICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxzLmdldCgpW2ldOyB9CisgICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQorICAgIGZsb2F0IGxvYWRGMzJHbG9i
YWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMy
R2xvYmFsKGkpKTsgfQorICAgIGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9CisgICAg
dm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQo
KVtpXSA9IGJpdHM7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZFN0YWNr
TGltaXQpOyB9CisgICAgdm9pZCogY2FjaGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBs
aW1pdCkgeyBtX2NhY2hlZFN0YWNrTGltaXQgPSBsaW1pdDsgfQorCisgICAgZnJpZW5kIGNsYXNz
IEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOyAvLyBGSVhNRSByZW1vdmUgdGhpcyBvbmNlIHJl
ZmFjdG9yZWQgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyLgorCitwcml2YXRlOgorICAgIElu
c3RhbmNlKFJlZjxNb2R1bGU+JiYpOworICAgIAorICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOwor
ICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fY29kZUJsb2NrOworICAgIFJlZlB0cjxNZW1vcnk+IG1f
bWVtb3J5OworICAgIFJlZlB0cjxUYWJsZT4gbV90YWJsZTsKKyAgICBNYWxsb2NQdHI8dWludDY0
X3Q+IG1fZ2xvYmFsczsKKyAgICB2b2lkKiBtX2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpIH07Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBjNWY0
OGU5Li4wZGM3NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNw
cApAQCAtMjgsMTMgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNs
dWRlICJWTS5oIgotI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgi
CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNp
bmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgorI2luY2x1
ZGUgPHd0Zi9QYWdlQmxvY2suaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bXV0ZXg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTUxLDE5ICs1NywxOSBAQCBO
RVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRu
dEdldEZhc3RNZW1vcnkoKSB7IENSQQogc3RydWN0IE1lbW9yeVJlc3VsdCB7CiAgICAgZW51bSBL
aW5kIHsKICAgICAgICAgU3VjY2VzcywKLSAgICAgICAgU3VjY2Vzc0FuZEFzeW5jR0MsCi0gICAg
ICAgIFN5bmNHQ0FuZFJldHJ5CisgICAgICAgIFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3Vy
ZSwKKyAgICAgICAgU3luY1RyeVRvUmVjbGFpbU1lbW9yeQogICAgIH07Ci0gICAgCisKICAgICBz
dGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmcoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgU3VjY2VzczoKICAgICAgICAgICAgIHJldHVybiAi
U3VjY2VzcyI7Ci0gICAgICAgIGNhc2UgU3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICBy
ZXR1cm4gIlN1Y2Nlc3NBbmRBc3luY0dDIjsKLSAgICAgICAgY2FzZSBTeW5jR0NBbmRSZXRyeToK
LSAgICAgICAgICAgIHJldHVybiAiU3luY0dDQW5kUmV0cnkiOworICAgICAgICBjYXNlIFN1Y2Nl
c3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZToKKyAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0Fu
ZE5vdGlmeU1lbW9yeVByZXNzdXJlIjsKKyAgICAgICAgY2FzZSBTeW5jVHJ5VG9SZWNsYWltTWVt
b3J5OgorICAgICAgICAgICAgcmV0dXJuICJTeW5jVHJ5VG9SZWNsYWltTWVtb3J5IjsKICAgICAg
ICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTk4LDE3ICsxMDQsMTcgQEAgcHVibGljOgogICAgICAgICBNZW1vcnlS
ZXN1bHQgcmVzdWx0ID0gWyZdIHsKICAgICAgICAgICAgIGF1dG8gaG9sZGVyID0gaG9sZExvY2so
bV9sb2NrKTsKICAgICAgICAgICAgIGlmIChtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50
KQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVz
dWx0OjpTeW5jR0NBbmRSZXRyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3Vs
dChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBHaWdhY2FnZTo6dHJ5QWxsb2NhdGVW
aXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMo
KSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVt
b3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5j
VHJ5VG9SZWNsYWltTWVtb3J5KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9tZW1vcmll
cy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIE1lbW9y
eVJlc3VsdCgKICAgICAgICAgICAgICAgICByZXN1bHQsCi0gICAgICAgICAgICAgICAgbV9tZW1v
cmllcy5zaXplKCkgPj0gbV9tYXhDb3VudCAvIDIgPyBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3NBbmRB
c3luY0dDIDogTWVtb3J5UmVzdWx0OjpTdWNjZXNzKTsKKyAgICAgICAgICAgICAgICBtX21lbW9y
aWVzLnNpemUoKSA+PSBtX21heENvdW50IC8gMiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5v
dGlmeU1lbW9yeVByZXNzdXJlIDogTWVtb3J5UmVzdWx0OjpTdWNjZXNzKTsKICAgICAgICAgfSgp
OwogICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ1dlYkFzc2VtYmx5TWVtb3J5KCkp
CkBAIC0xNTMsMTIgKzE1OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdDo6S2lu
ZCByZXN1bHQgPSBbJl0gewogICAgICAgICAgICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xv
Y2spOwogICAgICAgICAgICAgaWYgKG1fcGh5c2ljYWxCeXRlcyArIGJ5dGVzID4gbWVtb3J5TGlt
aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRy
eTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3BoeXNpY2FsQnl0ZXMgKz0gYnl0
ZXM7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX3BoeXNpY2FsQnl0ZXMgPj0gbWVt
b3J5TGltaXQoKSAvIDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3Vj
Y2Vzc0FuZEFzeW5jR0M7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3Vj
Y2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBy
ZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzOwogICAgICAgICB9KCk7CkBAIC0yMDUsNyArMjEx
LDcgQEAgc3RhdGljIE1lbW9yeU1hbmFnZXImIG1lbW9yeU1hbmFnZXIoKQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotYm9vbCB0cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9j
YXRlKQorYm9vbCB0cnlBbGxvY2F0ZShjb25zdCBGdW5jJiBhbGxvY2F0ZSwgY29uc3QgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgY29uc3QgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KQogewogICAgIHVuc2lnbmVkIG51bVRy
aWVzID0gMjsKICAgICBib29sIGRvbmUgPSBmYWxzZTsKQEAgLTIxNCwxNCArMjIwLDE2IEBAIGJv
b2wgdHJ5QW5kR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKICAgICAgICAgY2FzZSBN
ZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M6CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M6
Ci0gICAgICAgICAgICB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OworICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNz
dXJlOgorICAgICAgICAgICAgaWYgKG5vdGlmeU1lbW9yeVByZXNzdXJlKQorICAgICAgICAgICAg
ICAgIG5vdGlmeU1lbW9yeVByZXNzdXJlKCk7CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0
cnk6CisgICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5Ogog
ICAgICAgICAgICAgaWYgKGkgKyAxID09IG51bVRyaWVzKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OworICAgICAgICAgICAgaWYgKHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpCisgICAgICAgICAgICAg
ICAgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMzAsMzIgKzIzOCwzMiBAQCBib29sIHRyeUFuZEdDKFZNJiB2bSwgY29u
c3QgRnVuYyYgYWxsb2NhdGUpCiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1jb25zdCBj
aGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkKK01lbW9yeTo6TWVtb3J5KCkKIHsKLSAg
ICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiBy
ZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKLSAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzog
cmV0dXJuICJTaWduYWxpbmciOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiAiIjsKIH0KIAotTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDb3VudCBtYXhpbXVtKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBGdW5jdGlvbjx2b2lkKCk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1
cmUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0
aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCiAg
ICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAgICwg
bV9ub3RpZnlNZW1vcnlQcmVzc3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+
Pihub3RpZnlNZW1vcnlQcmVzc3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnko
c3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9y
eSkpCisgICAgLCBtX2dyb3dTdWNjZXNzQ2FsbGJhY2soc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rp
b248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkKIHsK
ICAgICBBU1NFUlQoIWluaXRpYWwuYnl0ZXMoKSk7CiAgICAgQVNTRVJUKG1fbW9kZSA9PSBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZyk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9y
eTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwogfQogCi1NZW1vcnk6Ok1lbW9yeSh2b2lk
KiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1h
cHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUpCitNZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1v
cnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENh
cGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQ
cmVzc3VyZSwgRnVuY3Rpb248dm9pZCgpPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6
RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFj
aykKICAgICA6IG1fbWVtb3J5KG1lbW9yeSkKICAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkp
CiAgICAgLCBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAg
ICwgbV9tYXBwZWRDYXBhY2l0eShtYXBwZWRDYXBhY2l0eSkKICAgICAsIG1fbW9kZShtb2RlKQor
ICAgICwgbV9ub3RpZnlNZW1vcnlQcmVzc3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2
b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xhaW1N
ZW1vcnkoc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSkpCisgICAgLCBtX2dyb3dTdWNjZXNzQ2FsbGJhY2soc3RkOjpmb3J3YXJkPFdURjo6
RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNr
KSkKIHsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGlu
ZyAiLCAqdGhpcyk7CiB9CkBAIC0yNzUsNyArMjgzLDEyIEBAIHN0YXRpYyB2b2lkIGNvbW1pdFpl
cm9QYWdlcyh2b2lkKiBzdGFydEFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICNlbmRpZgog
fQogCi1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeSgpKTsKK30KKyAgICAKK1JlZlB0cjxN
ZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11
bSwgRnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2b2lk
KCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3Vu
dCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKQogewogICAgIEFTU0VSVChpbml0
aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwp
OyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCkBAIC0yODMsMzMg
KzI5NiwyNyBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICBjb25zdCBzaXplX3QgaW5pdGlhbEJ5
dGVzID0gaW5pdGlhbC5ieXRlcygpOwogICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtQnl0ZXMgPSBt
YXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogMDsKIAotICAgIC8vIFdlIG5lZWQgdG8gYmUgc3Vy
ZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCi0gICAgaWYgKFVOTElLRUxZ
KCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2Vu
ZXJhdG9yKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgaWYgKG1heGltdW0gJiYg
IW1heGltdW1CeXRlcykgewogICAgICAgICAvLyBVc2VyIHNwZWNpZmllZCBhIHplcm8gbWF4aW11
bSwgaW5pdGlhbCBzaXplIG11c3QgYWxzbyBiZSB6ZXJvLgogICAgICAgICBSRUxFQVNFX0FTU0VS
VCghaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5p
dGlhbCwgbWF4aW11bSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0
aWFsLCBtYXhpbXVtLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlN
ZW1vcnlQcmVzc3VyZSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KHN5bmNU
cnlUb1JlY2xhaW1NZW1vcnkpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VD
b3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKSk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgZG9uZSA9IHRyeUFuZEdDKAotICAgICAgICB2bSwKKyAgICBib29sIGRvbmUgPSB0
cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAg
ICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlUGh5c2ljYWxCeXRlcyhp
bml0aWFsQnl0ZXMpOwotICAgICAgICB9KTsKKyAgICAgICAgfSwgbm90aWZ5TWVtb3J5UHJlc3N1
cmUsIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgIGlmICghZG9uZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgIGNoYXIqIGZhc3RNZW1vcnkgPSBudWxscHRyOwog
ICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSkgewotICAgICAgICB0
cnlBbmRHQygKLSAgICAgICAgICAgIHZtLAorICAgICAgICB0cnlBbGxvY2F0ZSgKICAgICAgICAg
ICAgIFsmXSAoKSAtPiBNZW1vcnlSZXN1bHQ6OktpbmQgewogICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gbWVtb3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKCk7CiAgICAg
ICAgICAgICAgICAgZmFzdE1lbW9yeSA9IGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2VQ
dHIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQua2luZDsKLSAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSwgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIHN5bmNUcnlUb1JlY2xhaW1N
ZW1vcnkpOwogICAgIH0KICAgICAKICAgICBpZiAoZmFzdE1lbW9yeSkgewpAQCAtMzIwLDE1ICsz
MjcsMTUgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQg
aW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiAgICAgICAgIH0KIAogICAgICAgICBjb21taXRa
ZXJvUGFnZXMoZmFzdE1lbW9yeSwgaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGZhc3RNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIE1l
bW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIE1lbW9yeU1vZGU6OlNpZ25hbGluZykpOworCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGZhc3RNZW1vcnksIGluaXRpYWwsIG1heGlt
dW0sIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIE1lbW9yeU1vZGU6OlNpZ25hbGluZywgc3Rk
Ojpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBz
dGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5
KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+
Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogICAgIH0KICAgICAKICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnkoKSkpCiAgICAgICAgIHdl
YkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKTsKIAogICAgIGlmICghaW5pdGlhbEJ5dGVz
KQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0sIHN0
ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwg
c3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9y
eSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQp
Pj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKICAgICAKICAgICB2b2lkKiBzbG93TWVtb3J5ID0g
R2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RGOjpwYWdl
U2l6ZSgpLCBpbml0aWFsQnl0ZXMpOwogICAgIGlmICghc2xvd01lbW9yeSkgewpAQCAtMzM2LDcg
KzM0Myw3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgbWVtc2V0KHNsb3dNZW1vcnksIDAsIGluaXRpYWxCeXRlcyk7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xvd01lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgaW5pdGlh
bEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTWVtb3J5KHNsb3dNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIGluaXRpYWxCeXRlcywg
TWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcsIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248
dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0
aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsK
IH0KIAogTWVtb3J5Ojp+TWVtb3J5KCkKQEAgLTM0NSw3ICszNTIsMTAgQEAgTWVtb3J5Ojp+TWVt
b3J5KCkKICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVQaHlzaWNhbEJ5dGVzKG1fc2l6ZSk7
CiAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CiAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2ln
bmFsaW5nOgotICAgICAgICAgICAgbXByb3RlY3QobV9tZW1vcnksIE1lbW9yeTo6ZmFzdE1hcHBl
ZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgICAgICAgICAgaWYgKG1wcm90
ZWN0KG1fbWVtb3J5LCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpLCBQUk9UX1JFQUQgfCBQUk9U
X1dSSVRFKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIm1wcm90ZWN0IGZhaWxlZDogIiwg
c3RyZXJyb3IoZXJybm8pLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigp
LmZyZWVWaXJ0dWFsUGFnZXMobV9tZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CkBAIC0zNzEsMzQgKzM4MSw1MCBAQCBi
b29sIE1lbW9yeTo6YWRkcmVzc0lzSW5BY3RpdmVGYXN0TWVtb3J5KHZvaWQqIGFkZHJlc3MpCiAg
ICAgcmV0dXJuIG1lbW9yeU1hbmFnZXIoKS5jb250YWluc0FkZHJlc3MoYWRkcmVzcyk7CiB9CiAK
LWJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCitFeHBlY3RlZDxQ
YWdlQ291bnQsIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb24+IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQg
ZGVsdGEpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJvbUJ5
dGVzKG1fc2l6ZSkpOworICAgIGNvbnN0IFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBz
aXplSW5QYWdlcygpOwogCi0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyB0
byAiLCBuZXdTaXplLCAiIGZyb20gIiwgKnRoaXMpOworICAgIGlmICghZGVsdGEuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OkludmFsaWRE
ZWx0YSk7CisgICAgCisgICAgY29uc3QgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCA9IG9s
ZFBhZ2VDb3VudCArIGRlbHRhOworICAgIGlmICghbmV3UGFnZUNvdW50KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZSk7CiAKLSAg
ICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiBtYXhpbXVtKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBbJl0gKCkgeworICAgICAgICBtX2dyb3dTdWNjZXNz
Q2FsbGJhY2sob2xkUGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOworICAgICAgICByZXR1cm4gb2xk
UGFnZUNvdW50OworICAgIH07CiAKLSAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5
dGVzKCk7CisgICAgaWYgKGRlbHRhLnBhZ2VDb3VudCgpID09IDApCisgICAgICAgIHJldHVybiBz
dWNjZXNzKCk7CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93KCIsIGRl
bHRhLCAiKSB0byAiLCBuZXdQYWdlQ291bnQsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgUkVMRUFT
RV9BU1NFUlQobmV3UGFnZUNvdW50ID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisK
KyAgICBpZiAobWF4aW11bSgpICYmIG5ld1BhZ2VDb3VudCA+IG1heGltdW0oKSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW0p
OworCisgICAgc2l6ZV90IGRlc2lyZWRTaXplID0gbmV3UGFnZUNvdW50LmJ5dGVzKCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoZGVzaXJlZFNpemUgPiBtX3NpemUpOwogICAgIHNpemVfdCBleHRyYUJ5
dGVzID0gZGVzaXJlZFNpemUgLSBtX3NpemU7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXh0cmFCeXRl
cyk7Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ5QW5kR0MoCi0gICAgICAgIHZtLAorICAgIGJvb2wg
YWxsb2NhdGlvblN1Y2Nlc3MgPSB0cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IE1lbW9y
eVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLnRyeUFs
bG9jYXRlUGh5c2ljYWxCeXRlcyhleHRyYUJ5dGVzKTsKLSAgICAgICAgfSk7Ci0gICAgaWYgKCFz
dWNjZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorICAgICAgICB9LCBtX25v
dGlmeU1lbW9yeVByZXNzdXJlLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOworICAgIGlmICgh
YWxsb2NhdGlvblN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFp
bFJlYXNvbjo6T3V0T2ZNZW1vcnkpOworCiAgICAgc3dpdGNoIChtb2RlKCkpIHsKICAgICBjYXNl
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1h
eGltdW0oKS5ieXRlcygpICE9IDApOwotICAgICAgICAKKwogICAgICAgICB2b2lkKiBuZXdNZW1v
cnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6
OnBhZ2VTaXplKCksIGRlc2lyZWRTaXplKTsKICAgICAgICAgaWYgKCFuZXdNZW1vcnkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
R3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5KTsKKwogICAgICAgICBtZW1jcHkobmV3TWVtb3J5
LCBtX21lbW9yeSwgbV9zaXplKTsKICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PGNoYXIqPihu
ZXdNZW1vcnkpICsgbV9zaXplLCAwLCBkZXNpcmVkU2l6ZSAtIG1fc2l6ZSk7CiAgICAgICAgIGlm
IChtX21lbW9yeSkKQEAgLTQwNiw3ICs0MzIsNyBAQCBib29sIE1lbW9yeTo6Z3JvdyhWTSYgdm0s
IFBhZ2VDb3VudCBuZXdTaXplKQogICAgICAgICBtX21lbW9yeSA9IG5ld01lbW9yeTsKICAgICAg
ICAgbV9tYXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXplOwogICAgICAgICBtX3NpemUgPSBkZXNp
cmVkU2l6ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7
CiAgICAgfQogICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fbWVtb3J5KTsKQEAgLTQxNSwxNiArNDQxLDE3IEBAIGJvb2wgTWVtb3J5Ojpn
cm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCiAgICAgICAgIAogICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWFya2luZyBXZWJBc3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVy
KG1fbWVtb3J5KSwgIiBhcyByZWFkK3dyaXRlIGluIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YXJ0
QWRkcmVzcyksICIsICIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFCeXRlcyksICIp
Iik7CiAgICAgICAgIGlmIChtcHJvdGVjdChzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMsIFBST1Rf
UkVBRCB8IFBST1RfV1JJVEUpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
TWVtb3J5Ojpncm93IGluLXBsYWNlIGZhaWxlZCAiLCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBkYXRhTG9nKCJtcHJvdGVjdCBmYWlsZWQ6ICIsIHN0cmVy
cm9yKGVycm5vKSwgIlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgICAgIGNvbW1pdFplcm9QYWdlcyhzdGFydEFkZHJlc3MsIGV4
dHJhQnl0ZXMpOwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSB9Ci0gICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CisgICAgfQor
ICAgIH0KKwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAKIHZvaWQgTWVtb3J5OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgKaW5kZXggNjBhOWJiNy4uM2YxOGMxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaApAQCAtMjcsOCArMjcsMTEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAorI2luY2x1ZGUgIldhc21NZW1vcnlNb2RlLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5o
IgogCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
QEAgLTM4LDE4ICs0MSw4IEBAIGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIHNob3VsZCBz
dXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI2OTMKLWVudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3QgewotICAgIEJv
dW5kc0NoZWNraW5nLAotICAgIFNpZ25hbGluZwotfTsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IE51bWJlck9mTWVtb3J5TW9kZXMgPSAyOwotSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgY2hhciog
bWFrZVN0cmluZyhNZW1vcnlNb2RlKTsKLQogY2xhc3MgTWVtb3J5IDogcHVibGljIFJlZkNvdW50
ZWQ8TWVtb3J5PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU3LDggKzUwLDkgQEAgcHVibGljOgogICAgIHZvaWQg
ZHVtcChXVEY6OlByaW50U3RyZWFtJikgY29uc3Q7CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQotICAgIAotICAgIHN0YXRpYyBSZWZQ
dHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0pOworCisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBS
ZWZQdHI8TWVtb3J5PiBjcmVhdGUoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lk
KFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAogICAgIH5N
ZW1vcnkoKTsKIApAQCAtNzUsMjIgKzY5LDM0IEBAIHB1YmxpYzoKIAogICAgIE1lbW9yeU1vZGUg
bW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogCi0gICAgLy8gZ3JvdygpIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBKU1dlYkFzc2VtYmx5TWVtb3J5IG9iamVjdCBzaW5jZSB0
aGF0IG9iamVjdCBuZWVkcyB0byB1cGRhdGUgaW50ZXJuYWwKLSAgICAvLyBwb2ludGVycyB3aXRo
IHRoZSBjdXJyZW50IGJhc2UgYW5kIHNpemUuCi0gICAgYm9vbCBncm93KFZNJiwgUGFnZUNvdW50
KTsKKyAgICBlbnVtIGNsYXNzIEdyb3dGYWlsUmVhc29uIHsKKyAgICAgICAgSW52YWxpZERlbHRh
LAorICAgICAgICBJbnZhbGlkR3Jvd1NpemUsCisgICAgICAgIFdvdWxkRXhjZWVkTWF4aW11bSwK
KyAgICAgICAgT3V0T2ZNZW1vcnksCisgICAgfTsKKyAgICBFeHBlY3RlZDxQYWdlQ291bnQsIEdy
b3dGYWlsUmVhc29uPiBncm93KFBhZ2VDb3VudCk7CiAKICAgICB2b2lkIGNoZWNrKCkgeyAgQVNT
RVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkpOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9tZW1vcnkpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9CisKIHByaXZhdGU6Ci0gICAgTWVtb3J5KHZvaWQqIG1l
bW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVk
Q2FwYWNpdHksIE1lbW9yeU1vZGUpOwotICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0pOworICAgIE1lbW9yeSgpOworICAgIE1lbW9yeSh2b2lkKiBtZW1vcnks
IFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFj
aXR5LCBNZW1vcnlNb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVz
c3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RG
OjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxi
YWNrKTsKKyAgICBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBh
Z2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAotICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgbW92ZSB0aGVzZSB0byB0aGUgaW5zdGFuY2UgdG8gYXZvaWQgYSBsb2Fk
IG9uIGluc3RhbmNlLT5pbnN0YW5jZSBjYWxscy4KKyAgICAvLyBGSVhNRTogd2UgY2FjaGUgdGhl
c2Ugb24gdGhlIGluc3RhbmNlcyB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNl
IGNhbGxzLiBUaGlzIHdpbGwgcmVxdWlyZSB1cGRhdGluZyBhbGwgdGhlIGluc3RhbmNlcyB3aGVu
IGdyb3cgaXMgY2FsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc3MzA1CiAgICAgdm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6
ZSB7IDAgfTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsOwogICAgIFBhZ2VDb3VudCBtX21heGlt
dW07CiAgICAgc2l6ZV90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07CiAgICAgTWVtb3J5TW9kZSBt
X21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBtX25vdGlmeU1lbW9yeVByZXNzdXJlOworICAgIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnk7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VD
b3VudCwgUGFnZUNvdW50KT4gbV9ncm93U3VjY2Vzc0NhbGxiYWNrOwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCmluZGV4IGJmNTY1ZjAuLmI1YzM0YmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNw
cApAQCAtNTcsNyArNTcsNyBAQCBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkKICAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNQaW5uZWRSZWdpc3Rlcklu
Zm9GbGFnLCBbXSAoKSB7CiAgICAgICAgIFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiBz
aXplUmVnaXN0ZXJzOwogICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIgPSBJbnZhbGlk
R1BSUmVnOwotICAgICAgICBHUFJSZWcgd2FzbUNvbnRleHRQb2ludGVyID0gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyID0gSW52YWxpZEdQ
UlJlZzsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9u
ZSBtZW1vcnkgc2l6ZSByZWdpc3RlciwgYW5kIHdlIHNob3VsZCBhbGxvdyBkaWZmZXJlbnQKICAg
ICAgICAgLy8gICAgICAgIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHRvIGhhdmUgZGlmZmVyZW50IHBp
bnMuIFJpZ2h0IG5vdyB3ZSB0YWtlIGEgdmVjdG9yIHdpdGggb25seSBvbmUgZW50cnkuCkBAIC02
NSwyNyArNjUsMjcgQEAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpCiAgICAgICAgIC8vICAgICAgICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRT
aXplcyA9IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBpbm5lZFJlZ2lzdGVycyA9
IHBpbm5lZFNpemVzLnNpemUoKSArIDE7Ci0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRl
eHQoKSkKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgICAgICAr
K251bWJlck9mUGlubmVkUmVnaXN0ZXJzOwogICAgICAgICBWZWN0b3I8R1BSUmVnPiBwaW5uZWRS
ZWdzID0gZ2V0UGlubmVkUmVnaXN0ZXJzKG51bWJlck9mUGlubmVkUmVnaXN0ZXJzKTsKIAogICAg
ICAgICBiYXNlTWVtb3J5UG9pbnRlciA9IHBpbm5lZFJlZ3MudGFrZUxhc3QoKTsKLSAgICAgICAg
aWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgd2FzbUNvbnRleHRQb2lu
dGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOworICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKKyAgICAgICAgICAgIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyID0gcGlubmVk
UmVncy50YWtlTGFzdCgpOwogCiAgICAgICAgIEFTU0VSVChwaW5uZWRTaXplcy5zaXplKCkgPT0g
cGlubmVkUmVncy5zaXplKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGlu
bmVkU2l6ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBzaXplUmVnaXN0ZXJzLmFwcGVuZCh7
IHBpbm5lZFJlZ3NbaV0sIHBpbm5lZFNpemVzW2ldIH0pOwotICAgICAgICBzdGF0aWNQaW5uZWRS
ZWdpc3RlckluZm8uY29uc3RydWN0KFdURk1vdmUoc2l6ZVJlZ2lzdGVycyksIGJhc2VNZW1vcnlQ
b2ludGVyLCB3YXNtQ29udGV4dFBvaW50ZXIpOworICAgICAgICBzdGF0aWNQaW5uZWRSZWdpc3Rl
ckluZm8uY29uc3RydWN0KFdURk1vdmUoc2l6ZVJlZ2lzdGVycyksIGJhc2VNZW1vcnlQb2ludGVy
LCB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgfSk7CiAKICAgICByZXR1cm4gc3Rh
dGljUGlubmVkUmVnaXN0ZXJJbmZvLmdldCgpOwogfQogCi1QaW5uZWRSZWdpc3RlckluZm86OlBp
bm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVn
aXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIsIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50
ZXIpCitQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVk
U2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50
ZXIsIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcikKICAgICA6IHNpemVSZWdpc3Rl
cnMoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSkKICAgICAsIGJhc2VNZW1vcnlQb2ludGVyKGJhc2VN
ZW1vcnlQb2ludGVyKQotICAgICwgd2FzbUNvbnRleHRQb2ludGVyKHdhc21Db250ZXh0UG9pbnRl
cikKKyAgICAsIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKHdhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5SW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oCmluZGV4IDQyMzdiYWMuLjIzMzI5ZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0
LDcgQEAgc3RydWN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8gewogc3RydWN0IFBpbm5lZFJlZ2lz
dGVySW5mbyB7CiAgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdpc3Rl
cnM7CiAgICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyOwotICAgIEdQUlJlZyB3YXNtQ29udGV4
dFBvaW50ZXI7CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwogICAgIHN0
YXRpYyBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIGdldCgpOwogICAgIFBpbm5lZFJlZ2lzdGVy
SW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiwgR1BSUmVnLCBHUFJSZWcpOwog
CkBAIC01Miw4ICs1Miw4IEBAIHN0cnVjdCBQaW5uZWRSZWdpc3RlckluZm8gewogICAgIHsKICAg
ICAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwogICAgICAgICByZXN1bHQuc2V0KGJhc2VNZW1vcnlQ
b2ludGVyKTsKLSAgICAgICAgaWYgKHdhc21Db250ZXh0UG9pbnRlciAhPSBJbnZhbGlkR1BSUmVn
KQotICAgICAgICAgICAgcmVzdWx0LnNldCh3YXNtQ29udGV4dFBvaW50ZXIpOworICAgICAgICBp
ZiAod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXQod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwogICAgICAgICBpZiAo
bW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKICAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgaW5mbyA6IHNpemVSZWdpc3RlcnMpCiAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChp
bmZvLnNpemVSZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5TW9kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5TW9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiYzk4NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlN
b2RlLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU1l
bW9yeU1vZGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NvbnN0
IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hl
Y2tpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGlu
ZyI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
ICIiOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeU1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2Rl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmYzg5NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmgKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
SlNFeHBvcnRNYWNyb3MuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsK
KworLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKK2VudW0gY2xhc3MgTWVtb3J5
TW9kZSA6IHVpbnQ4X3QgeworICAgIEJvdW5kc0NoZWNraW5nLAorICAgIFNpZ25hbGluZworfTsK
Kworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7CitKU19F
WFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCmluZGV4IDhlMzY2ZjQuLjk5
MmUzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCkBAIC01
NiwyNyArNTYsMjYgQEAgc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtlVmFsaWRh
dGlvblJlc3VsdChCQlFQbGFuJiBwbGFuKQogCiBzdGF0aWMgUGxhbjo6Q29tcGxldGlvblRhc2sg
bWFrZVZhbGlkYXRpb25DYWxsYmFjayhNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYg
Y2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tU
eXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFZNKiB2bSwgUGxhbiYgcGxhbikg
eworICAgIHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldIChQbGFuJiBwbGFuKSB7CiAgICAgICAgIEFTU0VSVCgh
cGxhbi5oYXNXb3JrKCkpOwotICAgICAgICBBU1NFUlQodm0pOwotICAgICAgICBjYWxsYmFjay0+
cnVuKCp2bSwgbWFrZVZhbGlkYXRpb25SZXN1bHQoc3RhdGljX2Nhc3Q8QkJRUGxhbiY+KHBsYW4p
KSk7CisgICAgICAgIGNhbGxiYWNrLT5ydW4obWFrZVZhbGlkYXRpb25SZXN1bHQoc3RhdGljX2Nh
c3Q8QkJRUGxhbiY+KHBsYW4pKSk7CiAgICAgfSk7CiB9CiAKLU1vZHVsZTo6VmFsaWRhdGlvblJl
c3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJj
ZSkKK01vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhDb250ZXh0
KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpCiB7Ci0gICAgUmVmPEJCUVBsYW4+
IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oJnZtLCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBs
YW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgUmVmPEJCUVBsYW4+
IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBC
QlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSwgbnVsbHB0ciwgbnVsbHB0
cikpOwogICAgIHBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKICAgICByZXR1cm4gbWFr
ZVZhbGlkYXRpb25SZXN1bHQocGxhbi5nZXQoKSk7CiB9CiAKLXZvaWQgTW9kdWxlOjp2YWxpZGF0
ZUFzeW5jKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFs
aWRhdGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit2b2lkIE1vZHVsZTo6dmFsaWRhdGVBc3luYyhD
b250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNW
YWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBSZWY8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKCpuZXcgQkJRUGxhbigmdm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRh
dGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKKyAgICBS
ZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBXVEZNb3ZlKHNv
dXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2soV1RGTW92
ZShjYWxsYmFjaykpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgV2FzbTo6ZW5zdXJlV29ya2xp
c3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOwogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6
OmdldE9yQ3JlYXRlQ29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSkKK1JlZjxDb2RlQmxvY2s+IE1v
ZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBt
b2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7CiAgICAgUmVmUHRyPENvZGVCbG9j
az4gY29kZUJsb2NrOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTg3
LDIzICs4NiwyMyBAQCBSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2Nr
KE1lbW9yeU1vZGUgbW9kZSkKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBiYWNrIG9m
ZiByZXRyeWluZyBhdCBzb21lIHBvaW50OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzA2MDcKICAgICBpZiAoIWNvZGVCbG9jayB8fCAoY29kZUJsb2Nr
LT5jb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAg
ICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUobW9kZSwgY29uc3RfY2FzdDxNb2R1
bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpKTsKKyAgICAgICAgY29kZUJsb2Nr
ID0gQ29kZUJsb2NrOjpjcmVhdGUoY29udGV4dCwgbW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZv
cm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3Jh
cHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgICAgIG1fY29kZUJsb2Nrc1tzdGF0aWNf
Y2FzdDx1aW50OF90Pihtb2RlKV0gPSBjb2RlQmxvY2s7CiAgICAgfQogICAgIHJldHVybiBjb2Rl
QmxvY2sucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpjb21w
aWxlU3luYyhNZW1vcnlNb2RlIG1vZGUpCitSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVT
eW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFw
cGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQogewotICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRl
Q29kZUJsb2NrKG1vZGUpOworICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3Jl
YXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVy
KSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBjb2RlQmxvY2stPndhaXRVbnRpbEZpbmlzaGVk
KCk7CiAgICAgcmV0dXJuIGNvZGVCbG9jazsKIH0KIAotdm9pZCBNb2R1bGU6OmNvbXBpbGVBc3lu
YyhWTSYgdm0sIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2Fs
bGJhY2smJiB0YXNrKQordm9pZCBNb2R1bGU6OmNvbXBpbGVBc3luYyhDb250ZXh0KiBjb250ZXh0
LCBNZW1vcnlNb2RlIG1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYg
dGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewotICAgIFJlZjxDb2RlQmxvY2s+
IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKG1vZGUpOwotICAgIGNvZGVCbG9jay0+
Y29tcGlsZUFzeW5jKHZtLCBXVEZNb3ZlKHRhc2spKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBjb2Rl
QmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9jayhjb250ZXh0LCBtb2RlLCBXVEZNb3ZlKGNyZWF0
ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgY29kZUJsb2NrLT5j
b21waWxlQXN5bmMoY29udGV4dCwgV1RGTW92ZSh0YXNrKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKaW5kZXgg
YTFhZjc1OC4uYTZhZTI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUg
Ildhc21Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KQEAgLTM2LDE5ICszNywyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCitzdHJ1Y3QgQ29udGV4dDsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIGNsYXNz
IFBsYW47CiAKIHVzaW5nIFNpZ25hdHVyZUluZGV4ID0gdWludDMyX3Q7Ci0gICAgCisKIGNsYXNz
IE1vZHVsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGU+IHsKIHB1YmxpYzoK
ICAgICB1c2luZyBWYWxpZGF0aW9uUmVzdWx0ID0gV1RGOjpFeHBlY3RlZDxSZWZQdHI8TW9kdWxl
PiwgU3RyaW5nPjsKLSAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZNJiwgVmFsaWRhdGlv
blJlc3VsdCYmKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZhbGlkYXRpb25SZXN1
bHQmJik7CiAgICAgdXNpbmcgQXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2sgPSBSZWZQdHI8U2hhcmVk
VGFzazxDYWxsYmFja1R5cGU+PjsKIAotICAgIHN0YXRpYyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlk
YXRlU3luYyhWTSYsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7Ci0gICAgc3RhdGljIHZvaWQg
dmFsaWRhdGVBc3luYyhWTSYsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3lu
Y1ZhbGlkYXRpb25DYWxsYmFjayYmKTsKKyAgICBzdGF0aWMgVmFsaWRhdGlvblJlc3VsdCB2YWxp
ZGF0ZVN5bmMoQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7CisgICAgc3RhdGlj
IHZvaWQgdmFsaWRhdGVBc3luYyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBN
b2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgc3RhdGljIFJlZjxNb2R1
bGU+IGNyZWF0ZShSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24pCiAg
ICAgewpAQCAtNTgsMTQgKzYwLDE0IEBAIHB1YmxpYzoKICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlKSBjb25zdDsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9k
dWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
OyB9CiAKLSAgICBSZWY8Q29kZUJsb2NrPiBjb21waWxlU3luYyhNZW1vcnlNb2RlKTsKLSAgICB2
b2lkIGNvbXBpbGVBc3luYyhWTSYsIE1lbW9yeU1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxh
dGlvbkNhbGxiYWNrJiYpOworICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKENvbnRleHQq
LCBNZW1vcnlNb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9u
KTsKKyAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ29kZUJsb2Nr
OjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRo
cm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+TW9kdWxlKCk7CiAK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1f
Y29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0uZ2V0KCk7IH0KIHByaXZhdGU6
Ci0gICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSk7Cisg
ICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCosIE1lbW9yeU1v
ZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAg
TW9kdWxlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJik7CiAgICAgUmVmPE1vZHVsZUluZm9ybWF0
aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA2Yzk0OGI1Li42ZDQ0YWMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMjksNyAr
MjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIklkZW50aWZpZXJJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAjaW5jbHVkZSAiV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgi
CiAjaW5jbHVkZSAiV2FzbU9wcy5oIgpAQCAtMjY1LDcgKzI2NCw3IEBAIGF1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1h
eGltdW0pOwogICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKICAgICAgICAgcmV0dXJuIGxpbWl0
cy5nZXRVbmV4cGVjdGVkKCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighSlNXZWJBc3NlbWJs
eVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0aWFsKSwgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
aW5pdGlhbCA+IG1heFRhYmxlRW50cmllcywgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9m
ICIsIGluaXRpYWwsICIgaXMgdG9vIGJpZywgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJpZXMpOwog
CiAgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKaW5kZXggNzRjZjY1My4uY2NkZjcy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtMzEs
OSArMzEsMTAgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNPcGFx
dWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRl
ICJXYXNtTWFjaGluZVRocmVhZHMuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCkBAIC01MSwx
MCArNTIsMTAgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdQbGFuOjpPTUdQbGFuKFJlZjxNb2R1bGU+
IG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0
aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKG51bGxwdHIsIG1ha2VSZWYoY29uc3RfY2FzdDxN
b2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3Zl
KHRhc2spKQotICAgICwgbV9tb2R1bGUobW9kdWxlLmNvcHlSZWYoKSkKLSAgICAsIG1fY29kZUJs
b2NrKCptb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKSkKK09NR1BsYW46Ok9NR1BsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250
ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fbW9kdWxlKFdURk1vdmUo
bW9kdWxlKSkKKyAgICAsIG1fY29kZUJsb2NrKCptX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUp
KQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgc2V0TW9kZSht
b2RlKTsKQEAgLTE2MiwxMyArMTYzLDEzIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlv
bkVmZm9ydCkKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKIH0KIAotdm9pZCBydW5P
TUdQbGFuRm9ySW5kZXgoQ29udGV4dCogY29udGV4dCwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkK
K3ZvaWQgT01HUGxhbjo6cnVuRm9ySW5kZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5j
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjb250ZXh0LT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29udGV4dC0+
bWVtb3J5TW9kZSgpID09IGNvZGVCbG9jay0+bV9jb2RlQmxvY2stPm1vZGUoKSk7CisgICAgV2Fz
bTo6Q29kZUJsb2NrJiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+d2FzbUNvZGVCbG9jaygpOworICAg
IEFTU0VSVChpbnN0YW5jZS0+d2FzbU1lbW9yeSgpLT5tb2RlKCkgPT0gY29kZUJsb2NrLm1vZGUo
KSk7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+dGllclVwQ291bnQoZnVuY3Rp
b25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAoKSkgewotICAgICAgICBSZWY8UGxhbj4gcGxhbiA9
IGFkb3B0UmVmKCpuZXcgT01HUGxhbihjb250ZXh0LT5tb2R1bGUoKS0+bW9kdWxlKCksIGZ1bmN0
aW9uSW5kZXgsIGNvZGVCbG9jay0+bV9jb2RlQmxvY2stPm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFs
aXplKCkpKTsKKyAgICBpZiAoY29kZUJsb2NrLnRpZXJVcENvdW50KGZ1bmN0aW9uSW5kZXgpLnNo
b3VsZFN0YXJ0VGllclVwKCkpIHsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigq
bmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFu
Y2UtPndhc21Nb2R1bGUoKSksIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46
OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFu
LmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29uY3VycmVu
dEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAppbmRleCA3MTY0YTllLi5iODA4MjUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKQEAgLTI3LDcgKzI3LDYg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2Fz
bVBsYW4uaCIKQEAgLTQxLDE3ICs0MCwyMCBAQCBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBPTUdQ
bGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQbGFu
OwotICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5j
ZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4K
LSAgICBPTUdQbGFuKFJlZjxNb2R1bGU+LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlN
b2RlLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICFtX2NvbXBsZXRlZDsgfQogICAgIHZvaWQgd29yayhDb21waWxhdGlvbkVm
Zm9ydCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHN0YXRpYyB2b2lkIHJ1bkZvckluZGV4KEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworCiBwcml2YXRlOgogICAg
IC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBj
bGFzc2VzLi4uCiAgICAgdXNpbmcgQmFzZTo6bV9sb2NrOwogCisgICAgLy8gTm90ZTogQ29tcGxl
dGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lz
ZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgorICAgIE9NR1BsYW4oQ29udGV4dCos
IFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBs
ZXRpb25UYXNrJiYpOworCiAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9jb21wbGV0ZWQ7IH0KICAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIpIG92ZXJyaWRlCiAgICAgewpAQCAtNjUsOCArNjcsNiBAQCBwcml2YXRlOgog
ICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKIH07CiAKLXZvaWQgcnVuT01HUGxhbkZvcklu
ZGV4KENvbnRleHQqLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKLQogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAppbmRleCBlNDM4NDdjLi5lZjA1ZjMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDYgKzU3LDEx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBwYWdlQ291bnQgPD0gbWF4UGFnZUNv
dW50OwogICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzVmFsaWQobV9wYWdlQ291bnQpOworICAgIH0KIAogICAgIHN0YXRpYyBQYWdl
Q291bnQgZnJvbUJ5dGVzKHVpbnQ2NF90IGJ5dGVzKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBiYTI3Y2Y5Li5kMDYzY2MxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxs
ZWUuaCIKQEAgLTUxLDIwICs0OSwyNyBAQCBuYW1lc3BhY2UgV2FzbVBsYW5JbnRlcm5hbCB7CiBz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZt
LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK1Bs
YW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBD
b21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6
IG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShpbmZvKSkKKyAgICAsIG1fY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyKFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSkKKyAgICAsIG1fdGhyb3dX
YXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbikKICAgICAsIG1fc291cmNlKG1fbW9kdWxl
SW5mb3JtYXRpb24tPnNvdXJjZS5kYXRhKCkpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChtX21vZHVs
ZUluZm9ybWF0aW9uLT5zb3VyY2Uuc2l6ZSgpKQogewotICAgIG1fY29tcGxldGlvblRhc2tzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcih2bSwgV1RGTW92ZSh0YXNrKSkpOworICAgIG1fY29tcGxldGlv
blRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9
CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3Vy
Y2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK1BsYW46OlBsYW4oQ29udGV4dCogY29u
dGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
CisgICAgOiBQbGFuKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIG51bGxw
dHIsIG51bGxwdHIpCit7Cit9CisKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3Qg
dWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBDb21wbGV0aW9uVGFzayYmIHRh
c2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3Jt
YXRpb24oVmVjdG9yPHVpbnQ4X3Q+KCkpKSkKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAs
IG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKIHsKLSAgICBtX2NvbXBsZXRpb25UYXNrcy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIodm0sIFdURk1vdmUodGFzaykpKTsKKyAgICBtX2NvbXBsZXRp
b25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwog
fQogCiB2b2lkIFBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYp
CkBAIC03MiwxOCArNzcsMTggQEAgdm9pZCBQbGFuOjpydW5Db21wbGV0aW9uVGFza3MoY29uc3Qg
QWJzdHJhY3RMb2NrZXImKQogICAgIEFTU0VSVChpc0NvbXBsZXRlKCkgJiYgIWhhc1dvcmsoKSk7
CiAKICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX2NvbXBsZXRpb25UYXNrcykKLSAgICAgICAgdGFz
ay5zZWNvbmQtPnJ1bih0YXNrLmZpcnN0LCAqdGhpcyk7CisgICAgICAgIHRhc2suc2Vjb25kLT5y
dW4oKnRoaXMpOwogICAgIG1fY29tcGxldGlvblRhc2tzLmNsZWFyKCk7CiAgICAgbV9jb21wbGV0
ZWQubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgUGxhbjo6YWRkQ29tcGxldGlvblRhc2soVk0mIHZt
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCit2b2lkIFBsYW46OmFkZENvbXBsZXRpb25UYXNrKENv
bnRleHQqIGNvbnRleHQsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKIHsKICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwogICAgIGlmICghaXNDb21wbGV0ZSgpKQotICAgICAgICBtX2NvbXBs
ZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoJnZtLCBXVEZNb3ZlKHRhc2spKSk7Cisg
ICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0LCBX
VEZNb3ZlKHRhc2spKSk7CiAgICAgZWxzZQotICAgICAgICB0YXNrLT5ydW4oJnZtLCAqdGhpcyk7
CisgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CiB9CiAKIHZvaWQgUGxhbjo6d2FpdEZvckNvbXBs
ZXRpb24oKQpAQCAtOTQsMTkgKzk5LDE5IEBAIHZvaWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24o
KQogICAgIH0KIH0KIAotYm9vbCBQbGFuOjp0cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdChWTSYg
dm0pCitib29sIFBsYW46OnRyeVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYg
Y29udGV4dCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogCiAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgLy8gV2UgYWxsb3cgdGhlIGZpcnN0IGNvbXBsZXRp
b24gdGFzayB0byBub3QgaGF2ZSBhIHZtLgorICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZmlyc3Qg
Y29tcGxldGlvbiB0YXNrIHRvIG5vdCBoYXZlIGEgQ29udGV4dC4KICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG1fY29tcGxldGlvblRhc2tzLnNpemUoKTsgKytpKQogICAgICAgICAg
ICAgQVNTRVJUKG1fY29tcGxldGlvblRhc2tzW2ldLmZpcnN0KTsKICAgICB9CiAKICAgICBib29s
IHJlbW92ZWRBbnlUYXNrcyA9IGZhbHNlOwotICAgIG1fY29tcGxldGlvblRhc2tzLnJlbW92ZUFs
bE1hdGNoaW5nKFsmXSAoY29uc3Qgc3RkOjpwYWlyPFZNKiwgQ29tcGxldGlvblRhc2s+JiBwYWly
KSB7Ci0gICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFpci5maXJzdCA9PSAmdm07CisgICAg
bV9jb21wbGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBzdGQ6OnBhaXI8
Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiYgcGFpcikgeworICAgICAgICBib29sIHNob3VsZFJl
bW92ZSA9IHBhaXIuZmlyc3QgPT0gJmNvbnRleHQ7CiAgICAgICAgIHJlbW92ZWRBbnlUYXNrcyB8
PSBzaG91bGRSZW1vdmU7CiAgICAgICAgIHJldHVybiBzaG91bGRSZW1vdmU7CiAgICAgfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCAxMGY4YTFiLi43YTA3YmZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTI4LDggKzI4LDggQEAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgot
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRl
ICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNp
bmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KQEAgLTM5LDI1
ICszOSwyNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxMaW5rSW5mbzsKLWNsYXNz
IEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBX
YXNtIHsKIAorc3RydWN0IENvbnRleHQ7CisKIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8UGxhbj4gewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5
cGUoVk0qLCBQbGFuJik7CisgICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShQbGFuJik7CiAg
ICAgdXNpbmcgQ29tcGxldGlvblRhc2sgPSBSZWZQdHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+
PjsKLSAgICBzdGF0aWMgQ29tcGxldGlvblRhc2sgZG9udEZpbmFsaXplKCkgeyByZXR1cm4gY3Jl
YXRlU2hhcmVkVGFzazxDYWxsYmFja1R5cGU+KFtdKFZNKiwgUGxhbiYpIHsgfSk7IH0KLSAgICBQ
bGFuKFZNKiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJik7CisKKyAg
ICBzdGF0aWMgQ29tcGxldGlvblRhc2sgZG9udEZpbmFsaXplKCkgeyByZXR1cm4gY3JlYXRlU2hh
cmVkVGFzazxDYWxsYmFja1R5cGU+KFtdKFBsYW4mKSB7IH0pOyB9CisgICAgUGxhbihDb250ZXh0
KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgUGxhbihDb250ZXh0KiwgUmVm
PE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJik7CiAKICAgICAvLyBOb3RlOiBU
aGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFs
bHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBs
ZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNfRVhQ
T1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9yZGVy
aW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQogICAgIC8vIGNvbXBsZXRpb24g
dGFza3MgYmVpbmcgY2FsbGVkLgotICAgIHZvaWQgYWRkQ29tcGxldGlvblRhc2soVk0mLCBDb21w
bGV0aW9uVGFzayYmKTsKKyAgICB2b2lkIGFkZENvbXBsZXRpb25UYXNrKENvbnRleHQqLCBDb21w
bGV0aW9uVGFzayYmKTsKIAogICAgIHZvaWQgc2V0TW9kZShNZW1vcnlNb2RlIG1vZGUpIHsgbV9t
b2RlID0gbW9kZTsgfQogICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
ZTsgfQpAQCAtNzIsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdhaXRGb3JDb21wbGV0
aW9uKCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGNhbmNlbGxlZCB0aGUgcGxhbi4KLSAg
ICBib29sIHRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJik7CisgICAgYm9vbCB0cnlSZW1v
dmVDb250ZXh0QW5kQ2FuY2VsSWZMYXN0KENvbnRleHQmKTsKIAogcHJvdGVjdGVkOgogICAgIHZv
aWQgcnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CkBAIC04Myw3ICs4
NSwxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxl
SW5mb3JtYXRpb247CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFZNKiwgQ29tcGxldGlvblRhc2s+
LCAxPiBtX2NvbXBsZXRpb25UYXNrczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENvbnRleHQqLCBD
b21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRhc2tzOworCisgICAgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyOworICAgIFRocm93V2FzbUV4Y2VwdGlv
biBtX3Rocm93V2FzbUV4Y2VwdGlvbiB7IG51bGxwdHIgfTsKIAogICAgIGNvbnN0IHVpbnQ4X3Qq
IG1fc291cmNlOwogICAgIGNvbnN0IHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKaW5kZXggOGI2MDBlZC4uNmE0MmQ1
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
MTAgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5o
IgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCmluZGV4IGU0MTNiMjUuLmFhY2Vk
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCAr
NDMsNiBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZN
OwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIHVzaW5nIFNpZ25hdHVyZUFyZ0NvdW50ID0gdWludDMy
X3Q7CkBAIC0xNTYsNyArMTU0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
Oldhc206OlNpZ25hdHVyZUhhc2g+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEoKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gU2lnbmF0dXJlIGluZm9ybWF0aW9uIGlz
IGhlbGQgZ2xvYmFsbHkgYW5kIHNoYXJlZCBieSBWTXMgdG8gYWxsb3cgYWxsIHNpZ25hdHVyZXMg
dG8gYmUgdW5pcXVlLiBUaGlzIGlzIHJlcXVpcmVkIHdoZW4gd2FzbSBjYWxscyBhbm90aGVyIHdh
c20gaW5zdGFuY2UsIGFuZCBtdXN0IHdvcmsgd2hlbiBtb2R1bGVzIGFyZSBzaGFyZWQgYmV0d2Vl
biBtdWx0aXBsZSBWTXMuCisvLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxs
eSBhbmQgc2hhcmVkIGJ5IHRoZSBlbnRpcmUgcHJvY2VzcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJl
cyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIg
d2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3
ZWVuIG11bHRpcGxlIFZNcy4KIC8vIE5vdGU6IHNpZ25hdHVyZXMgYXJlIG5ldmVyIHJlbW92ZWQg
YmVjYXVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgYWNjb3VudGluZyBmb3IgYWxsIFdlYkFzc2VtYmx5
Lk1vZHVsZSBhbmQgd2hpY2ggc2lnbmF0dXJlcyB0aGV5IHVzZS4gVGhlIG1heGltdW0gbnVtYmVy
IG9mIHNpZ25hdHVyZXMgaXMgYm91bmRlZCwgYW5kIGlzbid0IHdvcnRoIHRoZSBjb3VudGluZyBv
dmVyaGVhZC4gV2UgY291bGQgY2xlYXIgZXZlcnl0aGluZyB3aGVuIHdlIHJlYWNoIHplcm8gb3V0
c3RhbmRpbmcgV2ViQXNzZW1ibHkuTW9kdWxlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2MDM3CiBjbGFzcyBTaWduYXR1cmVJbmZvcm1hdGlvbiB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU2lnbmF0dXJlSW5mb3JtYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNmRlZmFlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Fz
bVRhYmxlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlIDx3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK1JlZlB0cjxUYWJsZT4gVGFibGU6OmNyZWF0
ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQorewor
ICAgIGlmICghaXNWYWxpZFNpemUoaW5pdGlhbCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKFRhYmxl
KSkpIFRhYmxlKGluaXRpYWwsIG1heGltdW0pKTsKK30KKworVGFibGU6On5UYWJsZSgpCit7Cit9
CisKK1RhYmxlOjpUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBtYXhpbXVtKQoreworICAgIG1fc2l6ZSA9IGluaXRpYWw7CisgICAgbV9tYXhpbXVtID0gbWF4
aW11bTsKKyAgICBBU1NFUlQoaXNWYWxpZFNpemUobV9zaXplKSk7CisgICAgQVNTRVJUKCFtX21h
eGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOworCisgICAgLy8gRklYTUU6IEl0IG1pZ2h0
IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyBy
ZWNvbW1lbmRzIGRvaW5nIHNvLgorICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcg
dGhhdC4KKyAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9u
Pjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNp
emVfdD4oc2l6ZSgpKSk7CisgICAgbV9pbnN0YW5jZXMgPSBNYWxsb2NQdHI8SlNXZWJBc3NlbWJs
eUluc3RhbmNlKj46Om1hbGxvYyhzaXplb2YoSlNXZWJBc3NlbWJseUluc3RhbmNlKikgKiBzdGF0
aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBz
aXplKCk7ICsraSkgeworICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6
Q2FsbGFibGVGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaV0u
c2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSBy
ZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KKyAgICAgICAgbV9pbnN0YW5jZXMuZ2V0KClb
aV0gPSBudWxscHRyOworICAgIH0KK30KKworc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gVGFibGU6
Omdyb3codWludDMyX3QgZGVsdGEpCit7CisgICAgaWYgKGRlbHRhID09IDApCisgICAgICAgIHJl
dHVybiBzaXplKCk7CisKKyAgICB1c2luZyBDaGVja2VkID0gQ2hlY2tlZDx1aW50MzJfdCwgUmVj
b3JkT3ZlcmZsb3c+OworICAgIENoZWNrZWQgbmV3U2l6ZUNoZWNrZWQgPSBzaXplKCk7CisgICAg
bmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7CisgICAgdWludDMyX3QgbmV3U2l6ZTsKKyAgICBpZiAo
bmV3U2l6ZUNoZWNrZWQuc2FmZUdldChuZXdTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJm
bG93KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKG1heGltdW0oKSAm
JiBuZXdTaXplID4gKm1heGltdW0oKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoIWlzVmFsaWRTaXplKG5ld1NpemUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgeworICAgICAgICBDaGVja2VkIHJlYWxsb2NGdW5jdGlvbnNTaXplQ2hlY2tlZCA9
IG5ld1NpemVDaGVja2VkOworICAgICAgICByZWFsbG9jRnVuY3Rpb25zU2l6ZUNoZWNrZWQgKj0g
c2l6ZW9mKENhbGxhYmxlRnVuY3Rpb24pOworICAgICAgICB1aW50MzJfdCByZWFsbG9jRnVuY3Rp
b25zU2l6ZTsKKyAgICAgICAgaWYgKHJlYWxsb2NGdW5jdGlvbnNTaXplQ2hlY2tlZC5zYWZlR2V0
KHJlYWxsb2NGdW5jdGlvbnNTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgbV9mdW5jdGlvbnMucmVhbGxv
YyhyZWFsbG9jRnVuY3Rpb25zU2l6ZSk7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6
ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgp
W2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgfQorICAgIAorICAgIHsKKyAgICAg
ICAgQ2hlY2tlZCByZWFsbG9jSW5zdGFuY2VzU2l6ZUNoZWNrZWQgPSBuZXdTaXplQ2hlY2tlZDsK
KyAgICAgICAgcmVhbGxvY0luc3RhbmNlc1NpemVDaGVja2VkICo9IHNpemVvZihKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqKTsKKyAgICAgICAgdWludDMyX3QgcmVhbGxvY0luc3RhbmNlc1NpemU7Cisg
ICAgICAgIGlmIChyZWFsbG9jSW5zdGFuY2VzU2l6ZUNoZWNrZWQuc2FmZUdldChyZWFsbG9jSW5z
dGFuY2VzU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIG1faW5zdGFuY2VzLnJlYWxsb2MocmVhbGxvY0lu
c3RhbmNlc1NpemUpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdT
aXplOyArK2kpCisgICAgICAgICAgICBtX2luc3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7Cisg
ICAgfQorCisgICAgbV9zaXplID0gbmV3U2l6ZTsKKworICAgIHJldHVybiBuZXdTaXplOworfQor
Cit2b2lkIFRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0g
PSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgp
W2luZGV4XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7
IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1faW5zdGFuY2VzLmdl
dCgpW2luZGV4XSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgVGFibGU6OnNldEZ1bmN0aW9uKHVpbnQz
Ml90IGluZGV4LCBDYWxsYWJsZUZ1bmN0aW9uIGZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAg
ICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbjsKKyAgICBtX2luc3RhbmNlcy5n
ZXQoKVtpbmRleF0gPSBpbnN0YW5jZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OlRhYmxl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDhlYzgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUu
aApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbUxpbWl0cy5oIgorI2luY2x1ZGUgPHd0
Zi9NYWxsb2NQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hv
dWxkIGJlIFdhc206Okluc3RhbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorCituYW1l
c3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhYmxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFRhYmxlPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDcmVhdGVGYWlsIHsKKyAgICAgICAg
SW52YWxpZFNpemUsCisgICAgfTsKKyAgICBzdGF0aWMgUmVmUHRyPFRhYmxlPiBjcmVhdGUodWlu
dDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB+VGFibGUoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKyAgICB1aW50MzJfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
Z3Jvdyh1aW50MzJfdCBkZWx0YSkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZvaWQgY2xlYXJG
dW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9pZCBzZXRGdW5jdGlvbih1aW50MzJfdCwgQ2FsbGFi
bGVGdW5jdGlvbiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7IC8vIEZJWE1FIG1ha2UgdGhpcyBX
YXNtOjpJbnN0YW5jZS4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCisKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwg
bV9zaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1fZnVuY3Rpb25zKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFi
bGUsIG1faW5zdGFuY2VzKTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMy
X3Qgc2l6ZSkgeyByZXR1cm4gc2l6ZSA8IG1heFRhYmxlRW50cmllczsgfQorCitwcml2YXRlOgor
ICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW0pOworCisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOworICAgIHVpbnQz
Ml90IG1fc2l6ZTsKKyAgICBNYWxsb2NQdHI8Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7
CisgICAgLy8gY2FsbF9pbmRpcmVjdCBuZWVkcyB0byBkbyBhbiBJbnN0YW5jZSBjaGVjayB0byBw
b3RlbnRpYWxseSBjb250ZXh0IHN3aXRjaCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0byBhbm90
aGVyIGluc3RhbmNlLiBXZSBjYW4gaG9sZCByYXcgcG9pbnRlcnMgdG8gSW5zdGFuY2UgaGVyZSBi
ZWNhdXNlIHRoZSBlbWJlZGRlciBlbnN1cmVzIHRoYXQgVGFibGUga2VlcHMgYWxsIHRoZSBpbnN0
YW5jZXMgYWxpdmUuIFdlIGNvdWxkbid0IGhvbGQgYSBSZWYgaGVyZSBiZWNhdXNlIGl0IHdvdWxk
IGNhdXNlIGN5Y2xlcy4KKyAgICBNYWxsb2NQdHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4gbV9p
bnN0YW5jZXM7IC8vIEZJWE1FIG1ha2UgdGhpcyBhIFdhc206Okluc3RhbmNlLiBodHRwczovL3dl
YmtpdC5vcmcvYi8xNzc0NzIKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaHVua3MuY3BwCmluZGV4IDk3N2IwMWIuLmMyMzU5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBAIC0yOSwxMSArMjksOSBAQAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkZyYW1l
VHJhY2Vycy5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVEV4
Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgog
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21Db250
ZXh0LmgiCkBAIC00OCw0NiArNDYsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhj
ZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYKIAogICAg
IC8vIFRoZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVzdCBtb3ZlIEV4Y2VwdGlvblR5cGUgaW50
byB0aGUgYXJndW1lbnRHUFIxIGJlZm9yZSBqdW1waW5nIGhlcmUuCiAgICAgLy8gV2UncmUgYWxs
b3dlZCB0byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZS4gV2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVz
ZSBjYWxsZWUgc2F2ZXMuCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjph
cmd1bWVudEdQUjIsIENvbnRleHQ6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwogICAgIGppdC5qdW1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKICAgICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbm90IHJl
YWNoIHRoaXMuCiAKLSAgICB2b2lkKiAoKnRocm93V2FzbUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwg
V2FzbTo6RXhjZXB0aW9uVHlwZSwgV2FzbTo6Q29udGV4dCopID0gW10gKEV4ZWNTdGF0ZSogZXhl
YywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCkg
LT4gdm9pZCogewotICAgICAgICBWTSogdm0gPSB3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgewotICAg
ICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAg
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9i
YWxPYmplY3QoKTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yOyAKLSAgICAgICAgICAg
IGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCi0gICAgICAgICAgICAg
ICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3I6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlS
dW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlw
ZSh0eXBlKSk7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBl
cnJvcik7Ci0gICAgICAgIH0KLQotICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAg
ICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgQVNTRVJUKCEh
dm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IG1ha2UgdGhpcyBiZXR0ZXI6Ci0gICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQg
dGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKLSAg
ICAgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBW
TS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQotICAgICAgICAvLyB0aGlzIHNp
bmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQg
bWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCi0gICAgICAgIC8vIGZvciBleGNlcHRpb25zIGZp
cnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9y
ZSBqdW1waW5nCi0gICAgICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlk
IHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCi0gICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICAgICAgYml0
d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4od2FzbUNvbnRleHQtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsK
LSAgICAgICAgcmV0dXJuIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKLSAgICB9OwotCisg
ICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xl
dG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNt
RXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cih0aHJvd1dhc21FeGNlcHRpb24pKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBm
cm9tIFdhc20iKSk7CiB9CiAKQEAgLTExOSw4ICs4OSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikK
ICNlbmRpZgogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclBy
ZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNU
b1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsK
IAotICAgIGppdC5sb2FkV2FzbUNvbnRleHQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihydW5PTUdQbGFuRm9ySW5kZXgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBq
aXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB0
eXBlZGVmIHZvaWQgKCpSdW4pKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90KTsKKyAg
ICBSdW4gcnVuID0gT01HUGxhbjo6cnVuRm9ySW5kZXg7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocnVuKSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsK
IAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0
YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsK
QEAgLTE0Miw2ICsxMTQsMTkgQEAgVGh1bmtzJiBUaHVua3M6OnNpbmdsZXRvbigpCiAgICAgcmV0
dXJuICp0aHVua3M7CiB9CiAKK3ZvaWQgVGh1bmtzOjpzZXRUaHJvd1dhc21FeGNlcHRpb24oVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgLy8gVGhlIHRodW5rcyBhcmUgdW5pcXVlIGZvciB0aGUg
ZW50aXJlIHByb2Nlc3MsIHRoZXJlZm9yZSBjaGFuZ2luZyB0aGUgdGhyb3dpbmcgZnVuY3Rpb24g
Y2hhbmdlcyBpdCBmb3IgYWxsIHVzZXMgb2YgV2ViQXNzZW1ibHkuCisgICAgUkVMRUFTRV9BU1NF
UlQoIW1fdGhyb3dXYXNtRXhjZXB0aW9uIHx8IG1fdGhyb3dXYXNtRXhjZXB0aW9uID09IHRocm93
V2FzbUV4Y2VwdGlvbik7CisgICAgbV90aHJvd1dhc21FeGNlcHRpb24gPSB0aHJvd1dhc21FeGNl
cHRpb247Cit9CisKK1Rocm93V2FzbUV4Y2VwdGlvbiBUaHVua3M6OnRocm93V2FzbUV4Y2VwdGlv
bigpCit7CisgICAgcmV0dXJuIG1fdGhyb3dXYXNtRXhjZXB0aW9uOworfQorCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmgKaW5kZXggZGYxNGNhMi4uNTI5NzY0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUg
Ildhc21FbWJlZGRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBA
IC00Miw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAg
ICAgc3RhdGljIFRodW5rcyYgc2luZ2xldG9uKCk7CiAKKyAgICB2b2lkIHNldFRocm93V2FzbUV4
Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24pOworICAgIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24oKTsKKwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViKFRodW5r
R2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1Yihjb25zdCBBYnN0cmFj
dExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhp
c3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsKQEAgLTUwLDYgKzU0LDcgQEAgcHJpdmF0ZToKICAg
ICBUaHVua3MoKSA9IGRlZmF1bHQ7CiAKICAgICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY+IG1fc3R1YnM7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhy
b3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2NrOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggOWM1YjY4NC4u
MmZlMTMyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmts
aXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3Bw
CkBAIC0yMiw2ICsyMiw3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
KwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBAIC0x
NzIsMTMgKzE3MywxMyBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5
KFBsYW4mIHBsYW4pCiAgICAgcGxhbi53YWl0Rm9yQ29tcGxldGlvbigpOwogfQogCi12b2lkIFdv
cmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxs
UGxhbnNGb3JDb250ZXh0KENvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CiAgICAgVmVjdG9yPFF1ZXVlRWxlbWVudD4gZWxlbWVudHM7CiAgICAgd2hp
bGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9
IG1fcXVldWUuZGVxdWV1ZSgpOwotICAgICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxh
bi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAgICBib29sIGRpZENhbmNl
bCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0
KTsKICAgICAgICAgaWYgKCFkaWRDYW5jZWwpCiAgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQo
V1RGTW92ZShlbGVtZW50KSk7CiAgICAgfQpAQCAtMTg4LDcgKzE4OSw3IEBAIHZvaWQgV29ya2xp
c3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKIAogICAgIGZvciAoYXV0byYgdGhyZWFkIDog
bV90aHJlYWRzKSB7CiAgICAgICAgIGlmICh0aHJlYWQtPmVsZW1lbnQucGxhbikgewotICAgICAg
ICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1B
bmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQt
PmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsK
ICAgICAgICAgICAgIGlmIChkaWRDYW5jZWwpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBkZWFkbG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNh
bid0IGJsb2NrIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGEgbmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0
aGUgbG9jayB0byBkbyBzby4KICAgICAgICAgICAgICAgICB0aHJlYWQtPnN5bmNocm9uaXplLndh
aXQoKm1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
V29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCmlu
ZGV4IDZiNjkzNTIuLjc0OGE5ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Xb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21X
b3JrbGlzdC5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
LSNpbmNsdWRlICJWTS5oIgotCiAjaW5jbHVkZSA8cXVldWU+CiAKICNpbmNsdWRlIDx3dGYvQXV0
b21hdGljVGhyZWFkLmg+CkBAIC0zNywxMCArMzUsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENv
bnRleHQ7CiBjbGFzcyBQbGFuOwogCiBjbGFzcyBXb3JrbGlzdCB7CkBAIC01MCwxMyArNDcsMTAg
QEAgcHVibGljOgogICAgIH5Xb3JrbGlzdCgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbnF1ZXVlKFJlZjxQbGFuPik7Ci0gICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JWTShWTSYpOwor
ICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yQ29udGV4dChDb250ZXh0Jik7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYpOwogCi0gICAg
dm9pZCBhY3RpdmF0ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7Ci0gICAgdm9pZCBk
ZWFjdGl2ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7Ci0KICAgICBlbnVtIGNsYXNz
IFByaW9yaXR5IHsKICAgICAgICAgU2h1dGRvd24sCiAgICAgICAgIFN5bmNocm9ub3VzLApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmMyYjcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlv
bkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorewor
ICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRK
SVQ7CisKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlv
bj4oKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgIC8vIEZJWE1FIFN0
b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1MzIxCisgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
NjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0
aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3Jl
UHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9u
OworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92
ZUxvY2F0aW9uKTsKKyAgICB9KTsKKworICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlu
bmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9T
YXZlID0gcGlubmVkUmVncy50b1NhdmUobW9kZSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKTsKKyAgICAv
LyBUaGV5IHNob3VsZCBhbGwgYmUgY2FsbGVlIHNhdmVzLgorICAgIHRvU2F2ZS5maWx0ZXIoUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgQVNTRVJUKHRvU2F2ZS5udW1i
ZXJPZlNldEdQUnMoKSA9PSB0b1NhdmVTaXplKTsKKyNlbmRpZgorCisgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpP
ZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQpOworICAgIHJlc3VsdC0+ZW50cnlwb2lu
dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9TcGlsbDsKKworICAgIHVuc2lnbmVk
IHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yodm9pZCop
OworICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6
ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
Qyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAg
ICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBp
ZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAg
ICAgICArK251bUdQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpG
MzI6CisgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgKytudW1GUFJz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdG90YWxG
cmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygp
LCB0b3RhbEZyYW1lU2l6ZSk7CisgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHRvdGFsRnJhbWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKworICAgIC8vIFdlIHNhdmUgYWxsIHRoZXNlIHJlZ2lzdGVycyByZWdhcmRsZXNzIG9m
IGhhdmluZyBhIG1lbW9yeSBvciBub3QuCisgICAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHdlIHVz
ZSBvbmUgb2YgdGhlc2UgYXMgYSBzY3JhdGNoLiBUaGF0IHNhaWQsCisgICAgLy8gYWxtb3N0IGFs
bCByZWFsIHdhc20gcHJvZ3JhbXMgdXNlIG1lbW9yeSwgc28gaXQncyBub3QgcmVhbGx5CisgICAg
Ly8gd29ydGggb3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhhdCB0aGV5IGRvbid0LgorICAgIGZv
ciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxs
KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAg
ICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBqaXQu
c3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIG9mZnNldCkpOworICAgIH0KKworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNl
R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKworICAgIHsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMg
PSAwOworICAgICAgICBudW1GUFJzID0gMDsKKyAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0
IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCisgICAgICAgIC8vIHdlIGNhbiB1
c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwor
CisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisKKyAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBw
YXNzZXMgV2FzbTo6Q29udGV4dConcyBpbnN0YW5jZSBhcyB0aGUgZmlyc3QgSlMgYXJndW1lbnQg
d2hlbiB3ZSdyZQorICAgICAgICAvLyBub3QgdXNpbmcgZmFzdCBUTFMgdG8gaG9sZCB0aGUgV2Fz
bTo6Q29udGV4dConcyBpbnN0YW5jZS4KKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExT
KCkpIHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BS
KTsKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIH0KKworICAgICAgICBwdHJkaWZmX3Qgd2FzbU9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICAgICAg
c3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6
STMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51
bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkkzMikg
eworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkg
PT0gV2FzbTo6STMyKQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwg
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytudW1HUFJzOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdh
c206OkY2NDoKKyAgICAgICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWdu
YXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkp
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
c3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9
IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpCisgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsK
KyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVy
OworCisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
YmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnko
KSksIGJhc2VNZW1vcnkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBp
bm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXpl
KCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAv
LyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRl
cyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5
OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tp
XS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXpl
UmVnaXN0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJh
c2VNZW1vcnkpOworICAgIH0KKworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICBB
U1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkp
OworICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1
bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7CisgICAgfSk7CisKKworICAgIGZvciAo
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7
CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAg
QVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZf
dCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCBy
ZWcpOworICAgIH0KKworICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAg
IGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBqaXQubW92ZUZsb2F0VG8zMihGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJl
dHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGI5OGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFj
ZSBXYXNtIHsKKworc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVu
YW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKcmVu
YW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKc2ltaWxhcml0eSBp
bmRleCA2MiUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3Nl
bWJseS5oCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmgKaW5kZXggMGZhZjk3Ny4uYzU3OGRmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHkuaApAQCAtMjgsMzEgKzI4LDMxIEBACiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgotI2luY2x1ZGUgImpz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgotI2luY2x1ZGUg
ImpzL0pTV2ViQXNzZW1ibHlUYWJsZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJv
clByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNs
dWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9X
ZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlM
aW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TGlua0Vycm9y
UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5TW9kdWxlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpz
L1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5
VGFibGVDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0
b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBl
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVByb3RvdHlwZS5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHAKaW5kZXggZjkxZTZjNy4uMDgyNTE1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAK
QEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlN
b2R1bGUuaCIKLSNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIApAQCAtNDQsNyArNDQsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscAog
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKFZN
JiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUpCiB7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUlu
Zm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpOwotICAgIGF1
dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1
bmN0aW9uQ291bnQoKSkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVC
bG9jayksIG1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwKSkgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayh2bSwgV1RGTW92ZShjb2RlQmxvY2spLCBtb2R1bGVJbmZvcm1hdGlv
bik7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgbW9kdWxlKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtNTgsNyArNTgsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAg
IG1fd2FzbVRvSlNFeGl0U3R1YnMucmVzZXJ2ZUNhcGFjaXR5KG1fY29kZUJsb2NrLT5mdW5jdGlv
bkltcG9ydENvdW50KCkpOwogICAgIGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBv
cnRJbmRleCA8IG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7ICsraW1wb3J0SW5k
ZXgpIHsKICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuYXQoaW1wb3J0SW5k
ZXgpOwotICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9Kcygmdm0sIG1fY2FsbExp
bmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKKyAgICAgICAgYXV0byBiaW5k
aW5nID0gV2FzbTo6d2FzbVRvSlMoJnZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4
LCBpbXBvcnRJbmRleCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghYmluZGluZykpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoYmluZGluZy5lcnJvcigpKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206
OkJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeToKQEAgLTY4LDcgKzY4LDcgQEAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpD
b2RlQmxvY2s+JiYgY28KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KICAgICAgICAgbV93YXNtVG9KU0V4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQo
YmluZGluZy52YWx1ZSgpKTsKLSAgICAgICAgaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4
KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOworICAgICAgICBtX2NvZGVCbG9jay0+aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGlt
cG9ydEluZGV4KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOwogICAgIH0KIH0KIApAQCAtODMsMTEgKzgzLDYgQEAgdm9pZCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2Fz
dDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
On5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKCk7CiB9CiAKLWJvb2wgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6aXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAotewot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNTYWZlVG9SdW4obWVtb3J5LT5tZW1vcnkoKS5tb2Rl
KCkpOwotfQotCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsSUNzKFZN
JiB2bSkKIHsKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAppbmRleCA1MjcwM2Y4Li5hYmI4YzY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oCkBAIC02NCwzOSArNjQsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLndl
YkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CiAgICAgfQogCi0gICAgdW5zaWduZWQgZnVuY3Rpb25J
bXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENv
dW50KCk7IH0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVy
biBtX21vZHVsZS5nZXQoKTsgfQorICAgIFdhc206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyBy
ZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KIAotICAgIGJvb2wgaXNTYWZlVG9SdW4oSlNXZWJB
c3NlbWJseU1lbW9yeSopIGNvbnN0OworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSopOwogCi0gICAgLy8gVGhlc2UgdHdvIGNhbGxl
ZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVs
YXRlZC4KLQotICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBB
U1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAg
IH0KLSAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAgIH0KLQotICAgIFdhc206Oldhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0
SW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVy
biAmaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2
b2lkKikgKiBpbXBvcnRJbmRleDsKLSAgICB9Ci0KLSAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVC
bG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9Ci0KICAgICB2b2lkIGNsZWFySlND
YWxsSUNzKFZNJik7CiAKICAgICBib29sIHJ1bm5hYmxlKCkgY29uc3QgeyByZXR1cm4gIW1fZXJy
b3JNZXNzYWdlOyB9CkBAIC0xMTQsMjEgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRTdHVi
cygpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
Zih2b2lkKik+KHNpemVvZihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBv
cnRDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsg
c2l6ZW9mKHZvaWQqKSAqIGZ1bmN0aW9uSW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOwotICAgIH0K
LQotICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0g
ICAgewotICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDx2b2lkKio+KGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCkpOwot
ICAgIH0KLQogICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpV
bmNvbmRpdGlvbmFsRmluYWxpemVyIHsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpIG92ZXJyaWRlOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCBjNzdmYTA1Li5jNTJl
ZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTQ5LDEyICs0OSwxNyBAQCBTdHJ1Y3R1cmUqIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
IH0KIAotSlNXZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQorSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5z
dGFuY2U+JiYgaW5zdGFuY2UpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2lu
c3RhbmNlKFdURk1vdmUoaW5zdGFuY2UpKQogICAgICwgbV92bSgmdm0pCisgICAgLCBtX3dhc21N
b2R1bGUobV9pbnN0YW5jZS0+bW9kdWxlKCkpCisgICAgLCBtX3dhc21UYWJsZShtX2luc3RhbmNl
LT5tX3RhYmxlLmdldCgpKQorICAgICwgbV9nbG9iYWxzKG1faW5zdGFuY2UtPm1fZ2xvYmFscy5n
ZXQoKSkKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsK
LSAgICBtZW1zZXQoaW1wb3J0RnVuY3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICog
c2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKKyAgICAgICAgbmV3IChpbXBvcnRGdW5j
dGlvbkluZm8oaSkpIEltcG9ydEZ1bmN0aW9uSW5mbygpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QpCkBA
IC02MywxMiArNjgsMTAgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG1vZHVsZSk7
Ci0gICAgY29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IGdsb2JhbE1lbW9yeUJ5dGVTaXpl
KCk7Ci0gICAgbV9nbG9iYWxzID0gTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVt
b3J5U2l6ZSk7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1l
bW9yeVNpemUpOwotCiAgICAgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBt
b2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAgIG1fY2FsbGVlLnNldCh2bSwgdGhpcywgbW9kdWxl
LT5jYWxsZWUoKSk7CisgICAgCisgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRl
ZChtX2luc3RhbmNlLT5leHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsKIH0KIAogdm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtODgsNDAgKzkxLDQ0IEBA
IHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9t
ZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKLSAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5nbG9iYWxNZW1vcnlCeXRlU2l6ZSgpKTsKKyAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNl
LT5leHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0pOworICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbkluZm8oaSktPmltcG9ydEZ1bmN0aW9u
KTsgLy8gVGhpcyBhbHNvIGtlZXBzIHRoZSBmdW5jdGlvbnMnIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSBhbGl2ZS4KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRp
b24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNv
ZGVCbG9jaykKIHsKKyAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHdhc21Db2RlQmxv
Y2suY29weVJlZigpKTsKKyAgICBtX3dhc21Db2RlQmxvY2sgPSB3YXNtQ29kZUJsb2NrLnB0cigp
OworCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYg
KCF3YXNtQ29kZUJsb2NrLT5ydW5uYWJsZSgpKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2Jh
bE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCB3YXNtQ29kZUJsb2Nr
LT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFT
RV9BU1NFUlQod2FzbUNvZGVCbG9jay0+aXNTYWZlVG9SdW4obWVtb3J5TW9kZSgpKSk7Ci0gICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gbW9kdWxlKCktPmNvZGVCbG9jayht
ZW1vcnlNb2RlKCkpOwotICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBqc0NvZGVCbG9jayA9IG1fbW9kdWxlLT5jb2RlQmxvY2sobWVtb3J5TW9kZSgpKTsK
KyAgICBpZiAoanNDb2RlQmxvY2spIHsKICAgICAgICAgLy8gQSBDb2RlQmxvY2sgbWlnaHQgaGF2
ZSBhbHJlYWR5IGJlZW4gY29tcGlsZWQuIElmIHNvLCBpdCBtZWFucwogICAgICAgICAvLyB0aGF0
IHRoZSBDb2RlQmxvY2sgd2UgYXJlIHRyeWluZyB0byBjb21waWxlIG11c3QgYmUgdGhlIHNhbWUK
ICAgICAgICAgLy8gYmVjYXVzZSB3ZSB3aWxsIG5ldmVyIGNvbXBpbGUgYSBDb2RlQmxvY2sgYWdh
aW4gb25jZSBpdCdzCiAgICAgICAgIC8vIHJ1bm5hYmxlLgotICAgICAgICBBU1NFUlQoJmNvZGVC
bG9jay0+Y29kZUJsb2NrKCkgPT0gd2FzbUNvZGVCbG9jay5wdHIoKSk7Ci0gICAgICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICAgICAgQVNTRVJUKCZqc0NvZGVC
bG9jay0+Y29kZUJsb2NrKCkgPT0gd2FzbUNvZGVCbG9jay5wdHIoKSk7CisgICAgICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywganNDb2RlQmxvY2spOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgd2FzbUNvZGVC
bG9jay5jb3B5UmVmKCksIG1fbW9kdWxlLmdldCgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFj
b2RlQmxvY2stPnJ1bm5hYmxlKCkpKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLT5lcnJv
ck1lc3NhZ2UoKSkpOworICAgICAgICBqc0NvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmNyZWF0ZSh2bSwgV1RGTW92ZSh3YXNtQ29kZUJsb2NrKSwgbV9tb2R1bGUuZ2V0KCkpOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIWpzQ29kZUJsb2NrLT5ydW5uYWJsZSgpKSkgeworICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6
OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3Ry
dWN0dXJlKCksIGpzQ29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJs
b2NrKTsKLSAgICAgICAgbW9kdWxlKCktPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBj
b2RlQmxvY2spOworICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGpzQ29kZUJsb2Nr
KTsKKyAgICAgICAgbV9tb2R1bGUtPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBqc0Nv
ZGVCbG9jayk7CiAgICAgfQogCiAgICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNDYXN0PFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkKj4obV9tb2R1bGVOYW1lc3BhY2VPYmplY3QtPm1vZHVsZVJlY29y
ZCgpKTsKLSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbW9kdWxlKCksIHRoaXMpOworICAg
IG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBtX21vZHVsZS5nZXQoKSwgdGhpcyk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIEpTVmFsdWUgc3RhcnRSZXN1
bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwpAQCAtMTI5LDcgKzEzNiw3IEBAIHZv
aWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBSZWY8V2FzbTo6CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKIH0KIAotSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNN
b2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1
cmUpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRl
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwg
SlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSwgUmVm
PFdhc206Okluc3RhbmNlPiYmIGluc3RhbmNlKQogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE1OCw4ICsxNjUsOCBAQCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKUwogCiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9
IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpOwogICAgIC8vIEZJWE1FOiBU
aGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBP
T00gaGVyZS4KLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5m
b3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2
bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291
bnQoKSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxl
TmFtZXNwYWNlKTsKKyAgICBhdXRvKiBqc0luc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpKSkgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rp
b25Db3VudCgpLCBXVEZNb3ZlKGluc3RhbmNlKSk7CisgICAganNJbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24odm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKICAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVz
IGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3Jp
cHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRh
YmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KQEAgLTE5MCwxNSArMTk3LDIxIEBAIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZXhlYywgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydCBmdW5jdGlvbiIs
ICJtdXN0IGJlIGNhbGxhYmxlIikpKTsKIAorICAgICAgICAgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBjYWxsZWVJbnN0YW5jZSA9IG51bGxwdHI7CisgICAgICAgICAgICBXYXNtOjpXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCA9IG51bGxwdHI7CiAgICAgICAgICAg
ICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisKICAgICAg
ICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6
CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CiAgICAgICAg
ICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKICAg
ICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2Fz
bUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGEu
IElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGks
IHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgogICAgICAgICAgICAgICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYg
KHdhc21GdW5jdGlvbikKKyAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNp
Z25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUluc3RhbmNlID0gd2Fz
bUZ1bmN0aW9uLT5pbnN0YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB3YXNtRW50cnlwb2lu
dCA9IHdhc21GdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlt
cG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRl
eCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3Vy
ZV1dLgpAQCAtMjE1LDcgKzIyOCwxMCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAg
ICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVs
ZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0
YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCiAK
ICAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRl
eCk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25zKClbbnVtSW1wb3J0RnVu
Y3Rpb25zKytdLnNldCh2bSwgaW5zdGFuY2UsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEltcG9y
dEZ1bmN0aW9uSW5mbyogaW5mbyA9IGpzSW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhudW1J
bXBvcnRGdW5jdGlvbnMrKyk7CisgICAgICAgICAgICBpbmZvLT50YXJnZXRJbnN0YW5jZSA9IGNh
bGxlZUluc3RhbmNlOworICAgICAgICAgICAgaW5mby0+d2FzbUVudHJ5cG9pbnQgPSB3YXNtRW50
cnlwb2ludDsKKyAgICAgICAgICAgIGluZm8tPmltcG9ydEZ1bmN0aW9uLnNldCh2bSwganNJbnN0
YW5jZSwgZnVuY3Rpb24pOwogICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1w
b3J0cy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNDMsNyArMjU5LDggQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRv
IHRhYmxlcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9y
dHMuCi0gICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJs
ZSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwg
dGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFi
bGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTI3Myw4ICsyOTAsOCBA
QCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYg
dG8gbWVtb3JpZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8g
aW1wb3J0cy4KLSAgICAgICAgICAgIEFTU0VSVCghaW5zdGFuY2UtPm1fbWVtb3J5KTsKLSAgICAg
ICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLCBtZW1vcnkpOworICAg
ICAgICAgICAgQVNTRVJUKCFqc0luc3RhbmNlLT5tX21lbW9yeSk7CisgICAgICAgICAgICBqc0lu
c3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTI5MSwxMyArMzA4LDEzIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAg
ICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsKICAgICAg
ICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4
XS50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgICAgICBp
bnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVj
KSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVt
SW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0
YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJf
dD4odmFsdWUudG9GbG9hdChleGVjKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2Jh
bChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1i
ZXIoKSkpOworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFs
KG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJl
cigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTUsMTQgKzMz
MiwyMSBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkp
OwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBk
ZWZpbml0aW9uLgotICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2Fz
bTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCks
IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKworICAgICAg
ICAgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOworCisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpN
ZW1vcnk6OmNyZWF0ZShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsg
dm0uaGVhcC5jb2xsZWN0QXN5bmMoQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAg
ICAgICAgICBbJnZtXSAoKSB7IHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpG
dWxsKTsgfSwKKyAgICAgICAgICAgICAgICBbJnZtLCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3Vu
dCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnkt
Pmdyb3dTdWNjZXNzQ2FsbGJhY2sodm0sIG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7
CiAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwogCi0gICAgICAgICAgICBpbnN0YW5j
ZS0+bV9tZW1vcnkuc2V0KHZtLCBpbnN0YW5jZSwKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsK
KyAgICAgICAgICAgIGpzTWVtb3J5LT5hZG9wdChtZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgICAgICAgICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIGpzTWVtb3J5KTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0zMzYsMTkgKzM2MCwyNCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAg
ICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJs
ZUltcG9ydCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUg
YSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgotICAgICAgICAgICAgSlNXZWJB
c3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUo
KSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlu
aXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOwor
ICAgICAgICAgICAgUmVmUHRyPFdhc206OlRhYmxlPiB3YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6
Y3JlYXRlKG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICBp
ZiAoIXdhc21UYWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sICJjb3VsZG4ndCBjcmVhdGUgVGFibGUiKSk7
CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRh
YmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCB3YXNtVGFibGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFz
c2VtYmx5VGFibGUgd2UndmUgZGVmaW5lZC4KICAgICAgICAgICAgIC8vIElmIGl0J3MgZGVmaW5l
ZCB0byBiZSB0b28gbGFyZ2UsIHdlIHNob3VsZCBoYXZlIHRocm93biBhIHZhbGlkYXRpb24gZXJy
b3IuCiAgICAgICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAg
ICAgICBBU1NFUlQodGFibGUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZt
LCBpbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV90YWJsZS5zZXQo
dm0sIGpzSW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPm1fd2FzbVRh
YmxlID0gdGFibGUtPnRhYmxlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKCFp
bnN0YW5jZS0+bWVtb3J5KCkpIHsKKyAgICBpZiAoIWpzSW5zdGFuY2UtPm1lbW9yeSgpKSB7CiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0IHdhc20g
LT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0
cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCi0gICAgICAgIGluc3RhbmNlLT5tX21lbW9y
eS5zZXQodm0sIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSwgV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIDAsIDApLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAg
ICAgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSk7CisgICAgICAgIGpzTWVtb3J5LT5hZG9wdChXYXNtOjpNZW1vcnk6OmNyZWF0ZSgpLnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIGpzTWVt
b3J5KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsK
ICAgICB9CiAgICAgCkBAIC0zNjAsMjAgKzM4OSwxMyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBK
UwogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6
R2xvYmFsOjpJc0ltcG9ydCk7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9u
VHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9i
YWxzKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBp
bnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikp
OworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2Jh
bEluZGV4LCBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJNjRHbG9iYWwoZ2xvYmFsLmluaXRp
YWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0aWFsQml0c09y
SW1wb3J0TnVtYmVyKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLnNl
dEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOwot
Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotfQotCi1zaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbW9kdWxlLT5t
b2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAg
ICByZXR1cm4ganNJbnN0YW5jZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmlu
ZGV4IDNjZmU1NDkuLmQ1MjU1MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC0zMiw2ICszMiw4IEBACiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlN
ZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJXYXNt
Q29udGV4dC5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMzksNzUgKzQxLDk0IEBAIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xh
c3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5VG9KU0NhbGxlZTsKIAor
bmFtZXNwYWNlIFdhc20geworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgVGFibGU7IC8vIEZJWE1F
IHJlbW92ZSB0aGlzIGFmdGVyIHJlZmFjdG9yaW5nLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0
NzIKK30KKwogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIDogcHVibGljIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJh
c2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVj
U3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3Ry
dWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwg
RXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3Qs
IFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogICAgIHZvaWQgZmlu
YWxpemVDcmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSosIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYpOwot
Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGUuZ2V0KCk7IH0KLQotICAgIEpTT2JqZWN0KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgp
IHsgUkVMRUFTRV9BU1NFUlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4gaW1w
b3J0RnVuY3Rpb25zKClbaWR4XS5nZXQoKTsgfQotCisgICAgCisgICAgV2FzbTo6SW5zdGFuY2Um
IGluc3RhbmNlKCkgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQorICAgIFdhc206OkNvbnRl
eHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiAmbV92bS0+d2FzbUNvbnRleHQ7IH0KICAgICBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KCkgeyByZXR1cm4g
bV9tb2R1bGVOYW1lc3BhY2VPYmplY3QuZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5VGFibGUq
IHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQorICAgIFdlYkFzc2VtYmx5VG9KU0Nh
bGxlZSogd2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0K
IAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5Lmdl
dCgpOyB9Ci0gICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2
YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7
IH0KKyAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVl
KSB7IEFTU0VSVCghbWVtb3J5KCkpOyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgbV93
YXNtTWVtb3J5ID0gJm1lbW9yeSgpLT5tZW1vcnkoKTsgfQogICAgIFdhc206Ok1lbW9yeU1vZGUg
bWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAotICAg
IEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9Ci0K
LSAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9n
bG9iYWxzLmdldCgpW2ldOyB9Ci0gICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQotICAgIGZsb2F0IGxvYWRGMzJH
bG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2Fk
STMyR2xvYmFsKGkpKTsgfQotICAgIGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9Ci0g
ICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5n
ZXQoKVtpXSA9IGJpdHM7IH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnko
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX21lbW9y
eSk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsgfQorICAgIC8vIFRh
aWwgYWNjZXNzb3JzLgorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZUYWlsKCkgeyByZXR1cm4g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1aW50NjRfdCk+KHNpemVvZihKU1dlYkFz
c2VtYmx5SW5zdGFuY2UpKTsgfQorICAgIHN0cnVjdCBJbXBvcnRGdW5jdGlvbkluZm8geworICAg
ICAgICAvLyBUYXJnZXQgaW5zdGFuY2UgYW5kIGVudHJ5cG9pbnQgYXJlIG9ubHkgc2V0IGZvciB3
YXNtLT53YXNtIGNhbGxzLCBhbmQgYXJlIG90aGVyd2lzZSBudWxscHRyLiBUaGUgZW1iZWRkZXIt
c3BlY2lmaWMgbG9naWMgb2NjdXJzIHRocm91Z2ggaW1wb3J0IGZ1bmN0aW9uLgorICAgICAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIHRhcmdldEluc3RhbmNlIHsgbnVsbHB0ciB9OworICAgICAg
ICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCB7IG51bGxw
dHIgfTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBpbXBvcnRGdW5jdGlvbiB7IFdy
aXRlQmFycmllcjxKU09iamVjdD4oKSB9OworICAgIH07CisgICAgSW1wb3J0RnVuY3Rpb25JbmZv
KiBpbXBvcnRGdW5jdGlvbkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiAm
Yml0d2lzZV9jYXN0PEltcG9ydEZ1bmN0aW9uSW5mbyo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhp
cykgKyBvZmZzZXRPZlRhaWwoKSlbaW1wb3J0RnVuY3Rpb25OdW1dOyB9CisgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZlRhcmdldEluc3RhbmNlKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyBy
ZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRG
dW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgdGFyZ2V0
SW5zdGFuY2UpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50KHNp
emVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRG
dW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9G
KEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbUVudHJ5cG9pbnQpOyB9CisgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1
cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5j
dGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVu
Y3Rpb24pOyB9CisgICAgSlNPYmplY3QqIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGltcG9ydEZ1
bmN0aW9uTnVtKSB7IFJFTEVBU0VfQVNTRVJUKGltcG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1JbXBv
cnRGdW5jdGlvbnMpOyByZXR1cm4gaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVt
KS0+aW1wb3J0RnVuY3Rpb24uZ2V0KCk7IH0KKyAgICAKKyAgICAvLyBGSVhNRSByZW1vdmUgdGhl
c2UgYWZ0ZXIgcmVmYWN0b3JpbmcgdGhlbSBvdXQuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3
MgorICAgIFdhc206Ok1lbW9yeSYgaW50ZXJuYWxNZW1vcnkoKSB7IHJldHVybiBtZW1vcnkoKS0+
bWVtb3J5KCk7IH0KKyAgICBXYXNtOjpDb2RlQmxvY2smIHdhc21Db2RlQmxvY2soKSBjb25zdCB7
IHJldHVybiAqbV9pbnN0YW5jZS0+Y29kZUJsb2NrKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mV2FzbVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSwgbV93YXNtVGFibGUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkNhbGxlZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2Us
IG1fY2FsbGVlKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWTSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdm0pOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNv
ZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2Us
IG1fY29kZUJsb2NrKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtQ29kZUJs
b2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93
YXNtQ29kZUJsb2NrKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwg
bV9jYWNoZWRTdGFja0xpbWl0KTsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRG
dW5jdGlvbnMoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRl
QmFycmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9Ci0gICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlv
bk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1bmN0aW9u
TnVtICogc2l6ZW9mKHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikpOyB9Ci0KLSAgICBXZWJB
c3NlbWJseVRvSlNDYWxsZWUqIHdlYkFzc2VtYmx5VG9KU0NhbGxlZSgpIHsgcmV0dXJuIG1fY2Fs
bGVlLmdldCgpOyB9Ci0KLSAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyByZXR1
cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9Ci0gICAgdm9pZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZv
aWQqIGxpbWl0KSB7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZldhc21NZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21NZW1vcnkpOyB9CisgICAgdm9pZCogY2FjaGVkU3Rh
Y2tMaW1pdCgpIGNvbnN0IHsgUkVMRUFTRV9BU1NFUlQobV9pbnN0YW5jZS0+Y2FjaGVkU3RhY2tM
aW1pdCgpID09IG1fY2FjaGVkU3RhY2tMaW1pdCk7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7
IH0KKyAgICB2b2lkIHNldENhY2hlZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9pbnN0YW5j
ZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChsaW1pdCk7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0
OyB9CisgICAgV2FzbTo6TWVtb3J5KiB3YXNtTWVtb3J5KCkgeyByZXR1cm4gbV93YXNtTWVtb3J5
OyB9CisgICAgV2FzbTo6TW9kdWxlJiB3YXNtTW9kdWxlKCkgeyByZXR1cm4gbV93YXNtTW9kdWxl
OyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucywgUmVmPFdh
c206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3Nl
bWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNr
ZWQ8c2l6ZV90PiBudW1JbXBvcnRGdW5jdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gKG9m
ZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICog
bnVtSW1wb3J0RnVuY3Rpb25zKS51bnNhZmVHZXQoKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXRP
ZlRhaWwoKSArIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICogbnVtSW1wb3J0RnVuY3Rpb25z
KS51bnNhZmVHZXQoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVk0qIG1fdm07Ci0gICAgV3Jp
dGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9j
YXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsg
b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KLSAgICBzaXplX3QgZ2xvYmFsTWVtb3J5Qnl0
ZVNpemUoKSBjb25zdDsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7
IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQorCisgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2lu
c3RhbmNlOwogCisgICAgVk0qIG1fdm07CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlN
b2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
PiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+
IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5
TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBt
X3RhYmxlOwogICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseVRvSlNDYWxsZWU+IG1fY2FsbGVl
OwotICAgIE1hbGxvY1B0cjx1aW50NjRfdD4gbV9nbG9iYWxzOworICAgIAorICAgIC8vIEZJWE1F
IHJlbW92ZSB0aGVzZSBhZnRlciByZWZhY3RvcmluZyB0aGVtIG91dC4gaHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTc3NDcyCiAgICAgdm9pZCogbV9jYWNoZWRTdGFja0xpbWl0IHsgYml0d2lzZV9jYXN0
PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSB9OworICAgIFdh
c206OkNvZGVCbG9jayogbV93YXNtQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgIFdhc206Ok1v
ZHVsZSYgbV93YXNtTW9kdWxlOworICAgIFdhc206Ok1lbW9yeSogbV93YXNtTWVtb3J5IHsgbnVs
bHB0ciB9OworICAgIFdhc206OlRhYmxlKiBtX3dhc21UYWJsZSB7IG51bGxwdHIgfTsKKyAgICB1
aW50NjRfdCogbV9nbG9iYWxzIHsgbnVsbHB0ciB9OworCiAgICAgdW5zaWduZWQgbV9udW1JbXBv
cnRGdW5jdGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCmluZGV4IDIyM2M1OGIuLmQ2NDBhNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnku
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuY3BwCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0lu
Zm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTWVtb3J5Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5TWVtb3J5KSB9OwogCi1KU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBSZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnkqIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOwpAQCAtNTAsMTAgKzUwLDE2IEBAIEpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0CiAgICAg
aWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5
RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwogCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJB
c3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKG1lbW9yeSkpOwotICAgIGluc3Rh
bmNlLT5tX21lbW9yeS0+Y2hlY2soKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBhdXRvKiBtZW1vcnkgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJs
eU1lbW9yeSh2bSwgc3RydWN0dXJlKTsKKyAgICBtZW1vcnktPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZXR1cm4gbWVtb3J5OworfQorICAgIAordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojph
ZG9wdChSZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKK3sKKyAgICBtX21lbW9yeS5zd2FwKG1l
bW9yeSk7CisgICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgpID09IDEpOworICAgIG1fbWVt
b3J5LT5jaGVjaygpOwogfQogCiBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQpAQCAtNjEsMTMgKzY3LDEwIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1l
bW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dl
YkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQorSlNXZWJBc3NlbWJseU1lbW9y
eTo6SlNXZWJBc3NlbWJseU1lbW9yeShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICwgbV9tZW1vcnkoV1RGTW92ZShtZW1vcnkpKQor
ICAgICwgbV9tZW1vcnkoV2FzbTo6TWVtb3J5OjpjcmVhdGUoKS5yZWxlYXNlTm9uTnVsbCgpKQog
ewotICAgIEFTU0VSVChtX21lbW9yeS0+cmVmQ291bnQoKSA9PSAxKTsKLSAgICBtX21lbW9yeUJh
c2UgPSBtX21lbW9yeS0+bWVtb3J5KCk7Ci0gICAgbV9tZW1vcnlTaXplID0gbV9tZW1vcnktPnNp
emUoKTsKIH0KIAogSlNBcnJheUJ1ZmZlciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZmVyKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTg1LDUyICs4OCw0NSBAQCBK
U0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7
CiB9CiAKLVdhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwg
RXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlv
bnNPbkZhaWx1cmUpCitXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVsdGEpCiB7Ci0gICAgLy8gTm90ZTog
V2UgY2FuIG9ubHkgdXNlIGV4ZWMgaWYgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlIGlz
IHRydWUuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCkuc2l6ZUluUGFnZXMo
KTsKLQotICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgewotICAgICAg
ICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorICAgIGF1dG8gZ3Jvd24gPSBt
ZW1vcnkoKS5ncm93KFdhc206OlBhZ2VDb3VudChkZWx0YSkpOworICAgIGlmICghZ3Jvd24pIHsK
KyAgICAgICAgc3dpdGNoIChncm93bi5lcnJvcigpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6TWVt
b3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgogICAgICAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGRlbHRhIHRvIGJlIGEgdmFs
aWQgcGFnZSBjb3VudCIpKSk7Ci0gICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKLSAg
ICB9Ci0KLSAgICBXYXNtOjpQYWdlQ291bnQgbmV3U2l6ZSA9IG9sZFBhZ2VDb3VudCArIFdhc206
OlBhZ2VDb3VudChkZWx0YSk7Ci0gICAgaWYgKCFuZXdTaXplKSB7Ci0gICAgICAgIGlmIChzaG91
bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CiAgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUg
Z3Jvd24gc2l6ZSB0byBiZSBhIHZhbGlkIHBhZ2UgY291bnQiKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNl
ZWRNYXhpbXVtOgorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5n
cm93IHdvdWxkIGV4Y2VlZCB0aGUgbWVtb3J5J3MgZGVjbGFyZWQgbWF4aW11bSBzaXplIikpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7CiAgICAgfQog
Ci0gICAgaWYgKGRlbHRhKSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1lbW9yeSgpLmdyb3co
dm0sIG5ld1NpemUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX21lbW9yeUJhc2UgPT0gbWVtb3J5KCkubWVtb3J5KCkpOwotICAgICAgICAgICAgQVNTRVJU
KG1fbWVtb3J5U2l6ZSA9PSBtZW1vcnkoKS5zaXplKCkpOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKLSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLSAgICAg
ICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKLSAgICAgICAgfQotICAgICAgICBtX21l
bW9yeUJhc2UgPSBtZW1vcnkoKS5tZW1vcnkoKTsKLSAgICAgICAgbV9tZW1vcnlTaXplID0gbWVt
b3J5KCkuc2l6ZSgpOwotICAgIH0KKyAgICByZXR1cm4gZ3Jvd24udmFsdWUoKTsKK30KIAotICAg
IC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQg
bWlnaHQgbm93IGJlIHBvaW50aW5nCi0gICAgLy8gdG8gc3RhbGUgbWVtb3J5Lgordm9pZCBKU1dl
YkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKFZNJiB2bSwgV2FzbTo6UGFnZUNv
dW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkKK3sKKyAgICAv
LyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1p
Z2h0IG5vdyBiZSBwb2ludGluZyB0byBzdGFsZSBtZW1vcnkuCiAgICAgLy8gTmV1dGVyIHRoZSBv
bGQgYXJyYXkuCiAgICAgaWYgKG1fYnVmZmVyKSB7CiAgICAgICAgIG1fYnVmZmVyLT5uZXV0ZXIo
dm0pOwogICAgICAgICBtX2J1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIG1fYnVmZmVyV3JhcHBl
ci5jbGVhcigpOwogICAgIH0KLQorICAgIAogICAgIG1lbW9yeSgpLmNoZWNrKCk7Ci0KLSAgICB2
bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKFdhc206OlBhZ2VDb3VudChkZWx0YSku
Ynl0ZXMoKSk7Ci0gICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKKyAgICAKKyAgICB2bS5oZWFwLnJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld1BhZ2VDb3VudC5ieXRlcygpIC0gb2xkUGFnZUNv
dW50LmJ5dGVzKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAppbmRleCAxZDA2YzRjLi40YmJiY2NmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCkBAIC00OCwy
NiArNDgsMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLmVhZ2VybHlTd2VwdERlc3Ry
dWN0aWJsZU9iamVjdFNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVt
b3J5KiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5
PiYmKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1lbW9yeSogY3JlYXRlKEV4ZWNTdGF0ZSos
IFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKKyAgICB2b2lkIGFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYpOwogICAgIFdhc206Ok1l
bW9yeSYgbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVm
ZmVyKiBidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOwotICAgIFdhc206OlBhZ2VDb3Vu
dCBncm93KFZNJiwgRXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dF
eGNlcHRpb25zT25GYWlsdXJlKTsKLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1v
cnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1v
cnlCYXNlKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5U2l6ZSk7IH0KKyAg
ICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhWTSYsIEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhKTsK
KyAgICB2b2lkIGdyb3dTdWNjZXNzQ2FsbGJhY2soVk0mLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFn
ZUNvdW50LCBXYXNtOjpQYWdlQ291bnQgbmV3UGFnZUNvdW50KTsKIAogcHJpdmF0ZToKLSAgICBK
U1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4mJik7
CisgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAg
IHZvaWQqIG1fbWVtb3J5QmFzZTsKLSAgICBzaXplX3QgbV9tZW1vcnlTaXplOwogICAgIFJlZjxX
YXNtOjpNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBt
X2J1ZmZlcldyYXBwZXI7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5j
cHAKaW5kZXggYmFiMTE4MS4uNDBjMTAwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2Fz
bVBsYW4uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02MSw2ICs2Miw3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQog
CisKIEpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1vZHVsZT4mJiBtb2R1bGUpCiAgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCkBAIC05MSw2
ICs5MywzNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQogICAgIFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKCk7CiB9CiAKK2Nv
bnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJ
bmZvcm1hdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpOworfQorCitTeW1ib2xUYWJsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6ZXhwb3J0U3lt
Ym9sVGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgp
OworfQorCitXYXNtOjpTaWduYXR1cmVJbmRleCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KSBjb25zdAoreworICAgIHJldHVybiBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Cit9CisKK1dlYkFzc2VtYmx5VG9KU0Nh
bGxlZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y2FsbGVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jYWxsZWUuZ2V0KCk7Cit9CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpCit7CisgICAgcmV0dXJu
IG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsKK30KKworV2Fz
bTo6TW9kdWxlJiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGUoKQoreworICAgIHJldHVybiBt
X21vZHVsZS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxv
Y2soVk0mIHZtLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2Rl
KV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDNkYzY3YTMuLjAxYjVkMDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmgKQEAgLTMwLDE1ICszMCwxOSBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmgiCi0jaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlN
b2RlLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBNb2R1bGU7Citz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiBjbGFzcyBQbGFuOwordXNpbmcgU2lnbmF0dXJlSW5k
ZXggPSB1aW50MzJfdDsKIH0KIAogY2xhc3MgU3ltYm9sVGFibGU7CkBAIC01MiwyMyArNTYsMjAg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHVi
KFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgV1RGOjpFeHBlY3RlZDxSZWZQdHI8V2FzbTo6
TW9kdWxlPiwgU3RyaW5nPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7IH0KLSAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9s
VGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9Ci0gICAg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXhTcGFjZSk7Ci0gICAgfQotICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogY2FsbGVlKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdDsKKyAgICBTeW1ib2xUYWJsZSog
ZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdDsKKyAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKSBjb25zdDsKKyAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIGNhbGxlZSgpIGNvbnN0Owog
Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUg
bW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLmdl
dCgpOyB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9y
eU1vZGUgbW9kZSk7CisgICAgdm9pZCBzZXRDb2RlQmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2Rl
LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7CiAKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHNvdXJjZSgpIGNvbnN0OwogCi0gICAgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKSB7IHJldHVybiBt
X21vZHVsZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgV2FzbTo6TWVtb3J5
TW9kZSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFdh
c206Ok1vZHVsZSYgbW9kdWxlKCk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAppbmRleCBmZjQ2ZDRkLi5hZGFhNzQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAKQEAgLTI5LDMwICsyOSwyMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0lu
Zm8gSlNXZWJBc3NlbWJseVRhYmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWJsZSIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJB
c3NlbWJseVRhYmxlKSB9OwogCi1KU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJs
ZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSkKK0pTV2Vi
QXNzZW1ibHlUYWJsZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYgdGFibGUp
CiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
YXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAg
YXV0byBleGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBlcnJvcikgewotICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgaWYgKCFnbG9iYWxPYmplY3Qt
PndlYkFzc2VtYmx5RW5hYmxlZCgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5
RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
OwotCi0gICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndl
YkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwotCi0gICAgaWYgKCFpc1ZhbGlkU2l6
ZShpbml0aWFsKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpKTsKKyAgICB9CiAKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlU
YWJsZSh2bSwgc3RydWN0dXJlLCBpbml0aWFsLCBtYXhpbXVtKTsKKyAgICBhdXRvKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVh
cCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHRhYmxlKSk7CiAg
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9
CkBAIC02MiwyMyArNTQsMTUgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlU
YWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVp
bnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCitKU1dlYkFz
c2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYgdGFibGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
CisgICAgLCBtX3RhYmxlKFdURk1vdmUodGFibGUpKQogewotICAgIG1fc2l6ZSA9IGluaXRpYWw7
Ci0gICAgQVNTRVJUKGlzVmFsaWRTaXplKG1fc2l6ZSkpOwotICAgIG1fbWF4aW11bSA9IG1heGlt
dW07Ci0gICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOwotCiAg
ICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4
aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgogICAgIC8vIEJ1dCBmb3Ig
bm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4KLSAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxX
YXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucyA9
IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVu
Y3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIEFTU0VS
VChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6
OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAg
IG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxv
YyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNp
emUoKSkpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAg
ICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pigp
OwotICAgIH0KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKQEAgLTk5LDcgKzgzLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGhpc09iamVjdC0+bV9zaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRoaXNPYmplY3QtPnNpemUoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2pzRnVuY3Rpb25zLmdldCgpW2ldKTsKIH0KIApAQCAtMTA3LDQ3ICs5MSw0
NCBAQCBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKIHsKICAg
ICBpZiAoZGVsdGEgPT0gMCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgQ2hlY2tlZDx1aW50
MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IG5ld1NpemVDaGVja2VkID0gbV9zaXplOwotICAgIG5ld1Np
emVDaGVja2VkICs9IGRlbHRhOwotICAgIHVpbnQzMl90IG5ld1NpemU7Ci0gICAgaWYgKG5ld1Np
emVDaGVja2VkLnNhZmVHZXQobmV3U2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+ICpt
YXhpbXVtKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzVmFsaWRTaXplKG5l
d1NpemUpKQorCisgICAgc2l6ZV90IG9sZFNpemUgPSBzaXplKCk7CisKKyAgICBhdXRvIGdyZXcg
PSBtX3RhYmxlLT5ncm93KGRlbHRhKTsKKyAgICBpZiAoIWdyZXcpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1fZnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVu
Y3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9u
cy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNp
emVfdD4obmV3U2l6ZSkpOworICAgIHNpemVfdCBuZXdTaXplID0gZ3Jldy52YWx1ZSgpOworICAg
IG1fanNGdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBu
ZXdTaXplKTsKIAotICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsr
aSkgewotICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVG
dW5jdGlvbigpOworICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytp
KQogICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+KCk7Ci0gICAgfQotICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorSlNPYmplY3QqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24odWludDMy
X3QgaW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIHJl
dHVybiBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFz
c2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgIG1fdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5k
ZXgpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPEpTT2Jq
ZWN0PigpOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVu
Y3Rpb24oKTsKLSAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUlu
ZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlz
IGluIGNvbXBpbGVkIGNvZGUuCiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5j
dGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
bikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+
c2V0RnVuY3Rpb24oaW5kZXgsIGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCksIGZ1bmN0aW9u
LT5pbnN0YW5jZSgpKTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRo
aXMsIGZ1bmN0aW9uKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbi0+
Y2FsbGFibGVGdW5jdGlvbigpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVu
Y3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24q
IGZ1bmN0aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBt
X3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwg
ZnVuY3Rpb24tPmluc3RhbmNlKCkpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNl
dCh2bSwgdGhpcywgZnVuY3Rpb24pOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1
bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaApp
bmRleCBkZjgzZTk3Li40NDg3NTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw1NyArMjksNDIgQEAKIAogI2luY2x1ZGUg
IkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRl
ICJXYXNtTGltaXRzLmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNw
YWNlIFdhc20gewotc3RydWN0IENhbGxhYmxlRnVuY3Rpb247Ci19Ci0KIGNsYXNzIEpTV2ViQXNz
ZW1ibHlUYWJsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlUYWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3Qg
aW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisgICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlUYWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgUmVm
PFdhc206OlRhYmxlPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0g
ICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
aW11bTsgfQotICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBXYXNtOjpU
YWJsZTo6aXNWYWxpZFNpemUoc2l6ZSk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
YXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+bWF4aW11bSgpOyB9CisgICAgdWludDMy
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUtPnNpemUoKTsgfQogICAgIGJvb2wgZ3Jv
dyh1aW50MzJfdCBkZWx0YSkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIEpTT2JqZWN0KiBnZXRG
dW5jdGlvbih1aW50MzJfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlu
ZGV4IDwgbV9zaXplKTsKLSAgICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhd
LmdldCgpOwotICAgIH0KLSAgICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpOwot
ICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5j
dGlvbiopOwotICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsKLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZT
aXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9zaXpl
KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KLSAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSlNGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX2pzRnVuY3Rpb25zKTsgfQorICAgIEpTT2JqZWN0
KiBnZXRGdW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90
KTsKKyAgICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5RnVuY3Rp
b24qKTsKKyAgICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKik7CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBz
aXplKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyB0b3BzIG91dCBhdCB+Mzg0IE1CIHdvcnRoIG9m
IGRhdGEgaW4gdGhpcyBjbGFzcy4KLSAgICAgICAgcmV0dXJuIHNpemUgPCAoMSA8PCAyNCk7Ci0g
ICAgfQorICAgIFdhc206OlRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUucHRyKCk7IH0K
IAogcHJpdmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50
MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKKyAgICBKU1dl
YkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAotICAgIE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsK
KyAgICBSZWY8V2FzbTo6VGFibGU+IG1fdGFibGU7CiAgICAgTWFsbG9jUHRyPFdyaXRlQmFycmll
cjxKU09iamVjdD4+IG1fanNGdW5jdGlvbnM7Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
bV9tYXhpbXVtOwotICAgIHVpbnQzMl90IG1fc2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MjA0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKQEAgLTAsMCArMSw2NTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFj
ZXJzLmgiCisjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUg
Ik5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIK
KyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4
dC5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIEpJVCA9IENDYWxsSGVscGVyczsKKworc3RhdGljIHZv
aWQgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4
LCBHUFJSZWcgcmVzdWx0KQoreworICAgIC8vIFdlJ3JlIGNhbGxpbmcgb3V0IG9mIHRoZSBjdXJy
ZW50IFdlYkFzc2VtYmx5Lkluc3RhbmNlLiBUaGF0IEluc3RhbmNlIGhhcyBhIGxpc3Qgb2YgYWxs
IGl0cyBpbXBvcnQgZnVuY3Rpb25zLgorICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShy
ZXN1bHQpOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQp
OworfQorCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3
YXNtVG9KUyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCit7CisgICAgLy8g
RklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBj
YWxsaW5nIGNvbnZlbnRpb24uCisgICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCisgICAgY29uc3Qg
V2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsK
KyAgICBjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50
aW9uKCk7CisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCk7CisgICAgSklUIGppdDsKKworICAgIC8vIE5vdGU6IFdhc21C
M0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVl
IHNhdmUuCisgICAgLy8gSWYgd2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQg
dG8gY2hhbmdlIFdhc21CM0lSR2VuZXJhdG9yLgorCisgICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0
aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KKyAg
ICBBU1NFUlQoIWpzQ0MubV9ncHJBcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKCFqc0NDLm1fZnBy
QXJncy5zaXplKCkpOworCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0
LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nr
cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQorCisgICAg
eworICAgICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRV
c2UgfD0gc2lnbmF0dXJlLnJldHVyblR5cGUoKSA9PSBJNjQ7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdO
dW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdO
dW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFZv
aWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1bmM6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAg
ICAgY2FzZSBJNjQ6IHsKKyAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGhhc0JhZEk2NFVzZSkgeworICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CisgICAg
ICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworCisgICAgICAgICAgICAvLyBTdG9yZSBDYWxsZWUuCisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJh
bWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisK
KyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQuanVt
cFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJ
NjQpKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSog
ZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkgLT4gdm9pZCB7CisgICAgICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKKyAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGlu
c3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3Ig
PSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJv
ckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBh
bGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9u
IikpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBlcnJvcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Vu
d2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZv
ckNhdGNoKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZN
ZW1vcnkpOworCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQp
OworICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3Nl
bWJseS0+SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydElu
ZGV4KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRo
ZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gc2F2ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxl
ZSBzYXZlZC4gV2UgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3Jl
IHJlZ2lzdGVycyBzaW5jZSB0aGUgd2FzbSBjYWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhp
cy4KKyAgICBSZWdpc3RlclNldCBtaXNzaW5nQ2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVT
YXZlUmVnaXN0ZXJzOworICAgIG1pc3NpbmdDYWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxs
ZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBBU1NFUlQobWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHko
KSk7CisKKyAgICBpZiAoIU9wdGlvbnM6OnVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxs
cygpKSB7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRj
aEJ1ZmZlckZvclNpemUoYXJnQ291bnQgKiBzaXplb2YodWludDY0X3QpKTsKKyAgICAgICAgY2hh
ciogYnVmZmVyID0gYXJnQ291bnQgPyBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+
ZGF0YUJ1ZmZlcigpKSA6IG51bGxwdHI7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJz
ID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNp
Z25lZCBidWZmZXJPZmZzZXQgPSAwOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKTsKKyAgICAgICAgY29uc3QgR1BSUmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdD
UzA7CisgICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0
ZXIpKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGpp
dC5zdG9yZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgeworICAgICAgICAgICAgVHlw
ZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0
Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2Ug
RnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgIGNhc2UgSTY0Ogor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBjYXNlIEkzMjogeworICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7CisgICAgICAgICAg
ICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAg
ICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNd
LmdwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBh
dmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAg
ICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBn
cHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVm
ZmVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFs
bGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBm
cHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGls
bGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0
Y2guCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsK
KyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAg
ICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKKyAg
ICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZz
ZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEY2NDogeworICAgICAgICAg
ICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJz
IDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9
IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxs
IGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAg
ICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJP
ZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidWZmZXJPZmZzZXQg
Kz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgICAgICBqaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGFyZ0NvdW50KSB7CisgICAgICAgICAgICAvLyBU
aGUgR0Mgc2hvdWxkIG5vdCBsb29rIGF0IHRoaXMgYnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0
IEpTVmFsdWVzLgorICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIH0KKworICAgICAg
ICB1aW50NjRfdCAoKmNhbGxGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUlu
ZGV4LCB1aW50NjRfdCopID0KKyAgICAgICAgICAgIFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBjYWxsZWUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVm
ZmVyKSAtPiB1aW50NjRfdCB7IAorICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmdOdW0gPSAwOyBhcmdOdW0gPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkg
eworICAgICAgICAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQo
YXJnTnVtKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhcmc7CisgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBbnlmdW5jOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgSTMyOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oYnVmZmVyW2FyZ051bV0pKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEYzMjoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihi
aXR3aXNlX2Nhc3Q8ZG91YmxlPihidWZmZXJbYXJnTnVtXSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
YXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNh
bGxlZS0+bWV0aG9kVGFibGUoKnZtKS0+Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUp
OworICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNh
bGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7CisgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKKworICAgICAgICAgICAgICAgIHVp
bnQ2NF90IHJlYWxSZXN1bHQ7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0
dXJuVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgICAg
IGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAgICAgICAgICAgICAgICBy
ZWFsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90Pihy
ZXN1bHQudG9JbnQzMihleGVjKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAg
Y2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4ocmVzdWx0LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlYWxSZXN1bHQ7CisgICAgICAgICAgICB9OworICAgICAgICAKKyAgICAgICAg
aml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAs
IEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgICAgICAK
KyAgICAgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJP
ZkFyZ3VtZW50UmVnaXN0ZXJzID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBi
ZWxvdy4iKTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4
KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOworICAgICAgICBhdXRvIGNh
bGwgPSBqaXQuY2FsbCgpOworICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNl
cHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7
CisKKyAgICAgICAgLy8gZXhjZXB0aW9uIGhlcmUuCisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJhbWUpOworICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChF
eGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KyAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJU
KCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byBleGNl
cHRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIoKnZtKTsKKworICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOworICAgICAgICBzd2l0
Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBGNjQ6IHsKKyAgICAg
ICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgaml0
LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBqaXQuZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgaml0LnJldCgpOworCisgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUo
KSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91
dE9mTWVtb3J5KTsKKworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOwor
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2FsbCwgZG9VbndpbmRpbmcpOworCisg
ICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkph
dmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSkpOworICAgIH0KKworICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQg
dG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUgc2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKKyAg
ICAvLyB3aWxsIGRvIHRoZSBzdGFjayBjaGVjayBmb3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMg
dGhhdCBpdCBtaWdodCBtYWtlCisgICAgLy8gYSBjYWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1h
a2Ugc3VyZSBpdHMgc3RhY2sgY2hlY2sgaW5jbHVkZXMgc3BhY2UKKyAgICAvLyBmb3IgdXMgaGVy
ZS4KKworICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsg
MTsgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1lbnQuCisgICAgY29uc3QgdW5zaWduZWQgbnVt
YmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVt
YmVyT2ZQYXJhbWV0ZXJzOworICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxs
ID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQyk7CisgICAgY29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2Fs
bCk7CisgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zm
c2V0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBKSVQ6OkFk
ZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKTsKKworICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2gg
c3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0
YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3CisgICAgCisgICAgLy8gRmly
c3QgZ28gdGhyb3VnaCB0aGUgaW50ZWdlciBwYXJhbWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJl
Z2lzdGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4KKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1hcnNo
YWxsZWRHUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAg
ICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJn
dW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNp
Z25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdO
dW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUg
YXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNo
IChhcmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1
bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFi
b3ZlLgorICAgICAgICAgICAgY2FzZSBJMzI6IHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3By
UmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFy
Z3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdz
W21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNl
IHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAg
IGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0
KSwgZ3ByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BS
czsKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcp
OyAvLyBDbGVhciBub24taW50MzIgYW5kIG5vbi10YWcgYml0cy4KKyAgICAgICAgICAgICAgICBq
aXQuYm94SW50MzIoZ3ByUmVnLCBKU1ZhbHVlUmVncyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdp
c3RlcnMpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGNhbGxlZUZy
YW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEYzMjoKKyAgICAgICAgICAgIGNhc2UgRjY0
OgorICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYmVsb3cuCisgICAgICAgICAg
ICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzID49IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIC8vIEludGVnZXIg
cmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNwaWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxh
YmxlLgorICAgICAgICBHUFJSZWcgZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6
YXJndW1lbnRHUFIwOworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMTsKKyAgICAgICAgYm9vbCBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBm
YWxzZTsKKyAgICAgICAgYXV0byBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFz
TWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKKyAg
ICAgICAgICAgIGlmICghaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0KSB7CisgICAg
ICAgICAgICAgICAgc3RhdGljX2Fzc2VydChEb3VibGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4
LCAiY29kZWdlbiBhc3N1bWVzIHRoaXMgYmVsb3ciKTsKKyAgICAgICAgICAgICAgICBqaXQubW92
ZShKSVQ6OlRydXN0ZWRJbW0zMigxKSwgZGVzdCk7CisgICAgICAgICAgICAgICAgaml0LmxzaGlm
dDY0KEpJVDo6VHJ1c3RlZEltbTMyKDQ4KSwgZGVzdCk7CisgICAgICAgICAgICAgICAgaGFzTWF0
ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7CisgICAgICAgIHVu
c2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVP
ZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7
ICsrYXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1l
bnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlm
dW5jOgorICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICAgICAgICAgIGNhc2UgSTMy
OgorICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYWJvdmUuCisgICAgICAgICAg
ICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgICsrbWFyc2hhbGxlZEdQUnM7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRjMyOiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAg
ICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBS
c10uZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJl
IGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJ
bmZvOjphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklU
OjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7
CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShm
cHJSZWcsIGZwclJlZyk7CisgICAgICAgICAgICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOwor
ICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOworICAg
ICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9m
ZnNldEdQUlJlZyk7CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNl
dEdQUlJlZywgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwg
Y2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOworICAgICAgICAgICAg
ICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgRjY0OiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJl
ZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdz
LnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1tt
YXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSBy
ZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBm
cHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5s
b2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZz
ZXQpLCBmcHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVn
aXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFO
KGZwclJlZyk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2Ny
YXRjaCk7CisgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91
YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91Ymxl
RW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2
NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaml0
LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgIEdQUlJlZyBpbXBvcnRK
U0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpyZWdUMDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJl
Z1QwIGZvciBzbG93IHBhdGggYmVsb3cuCisgICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZl
UmVnaXN0ZXJzLmdldChpbXBvcnRKU0NlbGxHUFJSZWcpKTsKKworICAgIG1hdGVyaWFsaXplSW1w
b3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7CisKKyAgICBq
aXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OworICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyks
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7CisgICAg
aml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUg
d2FzbSByZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4CisKKyAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKCk7CisgICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIGltcG9y
dEpTQ2VsbEdQUlJlZyk7CisgICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAg
ICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUoMCk7CisgICAgSklUOjpKdW1w
IHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUp
OworICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIEpJVDo6SnVt
cCBkb25lID0gaml0Lmp1bXAoKTsKKyAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIC8vIENh
bGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGlu
ayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgorICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworICAgIGRvbmUubGluaygmaml0KTsKKworICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOworCisgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJu
VHlwZSgpKSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICAvLyBEaXNjYXJkLgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZ1bmM6CisgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAvLyBGb3Ig
dGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhl
aXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBl
cnJvci4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJNjQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICB9CisgICAgY2FzZSBJMzI6IHsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOworCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1i
ZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAg
aml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAg
ICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBq
aXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElm
RXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNT
dGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQz
Ml90IHsgCisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJu
IHYudG9JbnQzMihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGwsIGNvbnZlcnRUb0kzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygm
aml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRjMyOiB7CisgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0
LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIo
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpOworICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4dGVuZDMy
VG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklU
OjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7
CisgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGppdC5jb252ZXJ0
RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBub3RB
TnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2Fs
bCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0
aW9uKCp2bSkpOworCisgICAgICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBK
U1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKKyAg
ICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHYudG9OdW1iZXIoZXhlYykpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGNjQ6IHsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFO
dW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNo
SWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5z
aWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKKyAgICAgICAg
aml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAg
IGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0
KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4
Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAg
ICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91YmxlIHsgCisgICAgICAgICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7CisgICAg
ICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOwor
ICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICB9CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQu
cmV0KCk7CisKKyAgICBpZiAoIWV4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CisgICAgICAgIGV4
Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCp2bSk7CisKKyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVj
U3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAg
ICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZl
ci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJp
bmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CisKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxS
ZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25P
Zih0YXJnZXRUb0NoZWNrKSk7CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVy
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKKyAgICBjYWxsTGlu
a0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4s
IGhvdFBhdGhPdGhlcik7CisKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
KCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQqIHdhc21Ub0pT
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQoreworICAgIFZNKiB2bSA9IGluc3RhbmNlLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAg
eworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Cisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2Jq
ZWN0KCk7CisKKyAgICAgICAgSlNPYmplY3QqIGVycm9yOworICAgICAgICBpZiAodHlwZSA9PSBF
eGNlcHRpb25UeXBlOjpTdGFja092ZXJmbG93KQorICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVT
dGFja092ZXJmbG93RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywg
KnZtLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksIFdh
c206OmVycm9yTWVzc2FnZUZvckV4Y2VwdGlvblR5cGUodHlwZSkpOworICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgfQorCisgICAgZ2VuZXJpY1Vu
d2luZCh2bSwgZXhlYyk7CisgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAg
ICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBX
ZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBi
dXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikK
KyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZN
LiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAgLy8gdGhpcyBzaW5jZSBp
dCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4pIFdlIGNvdWxkIG1ha2Ug
dGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQg
Y2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5n
CisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291
bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4o
ZXhlYylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5z
dGFuY2UtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKKyAgICByZXR1cm4gdm0tPnRhcmdldE1h
Y2hpbmVQQ0ZvclRocm93OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2FzbVRvSlMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dh
c21Ub0pTLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyNGFhMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgK
QEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNp
bmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJXYXNtRW1iZWRkZXIuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlua0luZm87Citj
bGFzcyBWTTsKKworbmFtZXNwYWNlIFdhc20geworCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBj
YWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOworCit2
b2lkKiB3YXNtVG9KU0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggMGQyNzc2NS4uYzU4
NWYwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQog
ICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgbWVtb3J5IHdlIHRoaW5rIHdlIGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBv
bmUgd2UgZXhwZWN0LgotICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVC
bG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7
CisgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKS5jb2RlQmxv
Y2soKS0+aXNTYWZlVG9SdW4od2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5tZW1vcnkoKS0+bWVt
b3J5KCkubW9kZSgpKSk7CiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZGlz
YWxsb3dlZCBJNjQgdXNlLgogCkBAIC04MiwxMSArODIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
KQogICAgIFRyYWNlU2NvcGUgdHJhY2VTY29wZShXZWJBc3NlbWJseUV4ZWN1dGVTdGFydCwgV2Vi
QXNzZW1ibHlFeGVjdXRlRW5kKTsKIAogICAgIFZlY3RvcjxKU1ZhbHVlPiBib3hlZEFyZ3M7Ci0g
ICAgV2FzbTo6Q29udGV4dCogd2FzbUNvbnRleHQgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7
Ci0gICAgLy8gV2hlbiB3ZSBkb24ndCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQs
IHRoZSBqcwotICAgIC8vIGVudHJ5IHdyYXBwZXIgZXhwZWN0cyB0aGUgV2FzbUNvbnRleHQqIGFz
IHRoZSBmaXJzdCBhcmd1bWVudC4KLSAgICBpZiAoIVdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0
KCkpCi0gICAgICAgIGJveGVkQXJncy5hcHBlbmQod2FzbUNvbnRleHQpOworICAgIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAg
Ly8gV2hlbiB3ZSBkb24ndCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBK
UworICAgIC8vIGVudHJ5IHdyYXBwZXIgZXhwZWN0cyB0aGUgaW5zdGFuY2UgYXMgdGhlIGZpcnN0
IGFyZ3VtZW50LgorICAgIGlmICghV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAg
ICBib3hlZEFyZ3MuYXBwZW5kKGluc3RhbmNlKTsKIAogICAgIGZvciAodW5zaWduZWQgYXJnSW5k
ZXggPSAwOyBhcmdJbmRleCA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnSW5kZXgp
IHsKICAgICAgICAgSlNWYWx1ZSBhcmcgPSBleGVjLT5hcmd1bWVudChhcmdJbmRleCk7CkBAIC0x
MjcsNyArMTI3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdl
YkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIHByb3RvQ2FsbEZyYW1lLmlu
aXQobnVsbHB0ciwgd2FzbUZ1bmN0aW9uLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWlu
aW5nQXJncyk7CiAKICAgICAvLyBGSVhNRSBEbyBhd2F5IHdpdGggdGhpcyBlbnRpcmUgZnVuY3Rp
b24sIGFuZCBvbmx5IHVzZSB0aGUgZW50cnlwb2ludCBnZW5lcmF0ZWQgYnkgQjMuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0ODYKLSAgICBXYXNtOjpDb250ZXh0
KiBwcmV2V2FzbUNvbnRleHQgPSBXYXNtOjpsb2FkQ29udGV4dCh2bSk7CisgICAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBwcmV2SW5zdGFuY2UgPSB2bS53YXNtQ29udGV4dC5sb2FkKCk7CiAgICAg
ewogICAgICAgICAvLyBXZSBkbyB0aGUgc3RhY2sgY2hlY2sgaGVyZSBmb3IgdGhlIHdyYXBwZXIg
ZnVuY3Rpb24gYmVjYXVzZSB3ZSBkb24ndAogICAgICAgICAvLyB3YW50IHRvIGVtaXQgYSBzdGFj
ayBjaGVjayBpbnNpZGUgZXZlcnkgd3JhcHBlciBmdW5jdGlvbi4KQEAgLTEzNywyMiArMTM3LDIy
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgaWYgKFVOTElLRUxZKChzcCA8IHN0YWNr
U3BhY2VVc2VkKSB8fCAoKHNwIC0gc3RhY2tTcGFjZVVzZWQpIDwgYml0d2lzZV9jYXN0PGludHB0
cl90Pih2bS5zb2Z0U3RhY2tMaW1pdCgpKSkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKGV4ZWMpKSk7CiAgICAgfQotICAgIFdhc206OnN0b3JlQ29udGV4dCh2bSwgd2FzbUNvbnRl
eHQpOworICAgIHZtLndhc21Db250ZXh0LnN0b3JlKGluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1p
dCgpKTsKICAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKLSAgICBBU1NFUlQo
d2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpID09IFdhc206OmxvYWRDb250ZXh0KHZtKSk7CisgICAg
QVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKSA9PSB2bS53YXNtQ29udGV4dC5sb2FkKCkp
OwogICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0
aW9uLT5qc0VudHJ5cG9pbnQoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwogICAgIC8vIFdlIG5l
ZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2lu
Y2UgaXQncyBzdG9yZWQgaW4gVmVjdG9yPEpTVmFsdWU+LgogICAgIC8vIFRoaXMgcHJvYmFibHkg
aXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiog
c2hvdWxkIGtlZXAgdGhlIGluc3RhbmNlCiAgICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHln
aWVuZS4KLSAgICB3YXNtQ29udGV4dC0+dXNlKCk7Ci0gICAgaWYgKHByZXZXYXNtQ29udGV4dCAh
PSB3YXNtQ29udGV4dCkgeworICAgIGluc3RhbmNlLT51c2UoKTsKKyAgICBpZiAocHJldkluc3Rh
bmNlICE9IGluc3RhbmNlKSB7CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRy
YSBzYWZldHkgaW5zdGVhZCBvZiBsZWF2aW5nIGEgY2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGlu
IHRoZXJlLiBJZiB3ZSBldmVyIGZvcmdldCB0byBzZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbAog
ICAgICAgICAvLyBib3VuZHMsIHRoaXMgd2lsbCBmb3JjZSBldmVyeSBzdGFjayBvdmVyZmxvdyBj
aGVjayB0byBpbW1lZGlhdGVseQogICAgICAgICAvLyBmaXJlLgotICAgICAgICB3YXNtQ29udGV4
dC0+c2V0Q2FjaGVkU3RhY2tMaW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludHB0cl90Pjo6bWF4KCkpKTsKKyAgICAgICAgaW5zdGFuY2UtPnNldENhY2hlZFN0
YWNrTGltaXQoYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJf
dD46Om1heCgpKSk7CiAgICAgfQotICAgIFdhc206OnN0b3JlQ29udGV4dCh2bSwgcHJldldhc21D
b250ZXh0KTsKKyAgICB2bS53YXNtQ29udGV4dC5zdG9yZShwcmV2SW5zdGFuY2UsIHZtLnNvZnRT
dGFja0xpbWl0KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAg
ICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3IuY3BwCmluZGV4IGE5ZDhmMGQuLjJmZGQ1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcApAQCAtMzIsMTIgKzMyLDE0IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1l
bW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJXYXNt
UGxhbi5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0Lmgi
CiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5
SW5zdGFuY2VQcm90b3R5cGUuaCIKQEAgLTc1LDEwICs3NywxMCBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0
YXRlKiBleAogICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0s
IGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSk7CisgICAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUsIFdh
c206Okluc3RhbmNlOjpjcmVhdGUoUmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSkp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaW5zdGFuY2Ut
PmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMo
aW5zdGFuY2UtPm1lbW9yeU1vZGUoKSkpOworICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9u
KHZtLCBleGVjLCBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVTeW5jKCZ2bS53YXNtQ29udGV4dCwg
aW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgJldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldh
c206Ondhc21Ub0pTRXhjZXB0aW9uKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNjQ5ODliNS4uODZmODE3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlD
b25zdHJ1Y3Rvci5jcHAKQEAgLTk2LDEzICs5NiwxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhl
YwogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0g
V2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291
bnQpOworICAgIGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4
ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3Ry
dWN0dXJlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CisKKyAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1v
cnk6OmNyZWF0ZShpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LAorICAgICAgICBb
JnZtXSAoKSB7IHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0s
CisgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6
OkZ1bGwpOyB9LAorICAgICAgICBbJnZtLCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3VudCBvbGRQ
YWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dT
dWNjZXNzQ2FsbGJhY2sodm0sIG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAg
aWYgKCFtZW1vcnkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0g
ICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSwgYWRvcHRSZWYoKm1lbW9yeS5sZWFrUmVmKCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotCisgICAganNNZW1vcnktPmFkb3B0KG1l
bW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTWVtb3J5KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCmluZGV4IGU5OTRkYzguLjRm
Y2E4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAKQEAgLTc3LDggKzc3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhl
Y1N0YXRlKiBleGVjKQogICAgIHVpbnQzMl90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogCi0gICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSB0
cnVlOwotICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMs
IGRlbHRhLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOworICAgIFdhc206OlBhZ2VD
b3VudCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
LmNwcAppbmRleCA5NjEwMjRkLi4xNjYxMDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNw
cApAQCAtMTYxLDExICsxNjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseU1vZHVsZUV4cG9ydHMoRXhlY1N0YXRlKiBleGVjKQogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5h
bEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQo
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVy
ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApLCBzdHJ1Y3R1cmUpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNv
dXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBXVEZN
b3ZlKHNvdXJjZSkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTc1LDE2ICsxNzYs
MTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1i
bHlNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29w
ZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSIpKTsKIH0KIAotSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJ1ZmZl
ciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBXZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8
dWludDhfdD4mJiBidWZmZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4g
c291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgYXV0byogc3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+
bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1
bGVTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5
bmModm0sIFdURk1vdmUoc291cmNlKSkpOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxl
OjpjcmVhdGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVT
eW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShidWZmZXIpKSk7CiB9CiAKIFdlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSog
dGhpc1Byb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAppbmRleCA2MDI1Yzk4Li4xM2Fj
YTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCkBAIC0zMCw4ICszMCwxMSBAQAogI2luY2x1
ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNXZWJBc3NlbWJs
eU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlOwogCiBjbGFzcyBXZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewpAQCAt
NDQsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMg
SlNWYWx1ZSBjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBidWZmZXIsIFN0cnVjdHVy
ZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVNb2R1bGUoRXhlY1N0
YXRlKiwgVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCmluZGV4IGNiMWZlYzEuLjBhODY2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAg
LTkzLDcgKzkzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3Rh
dGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBVTlVTRURfUEFSQU0o
c2NvcGUpOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKTsKIAotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNl
LT5jb2RlQmxvY2soKTsKKyAgICBXYXNtOjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNl
LT5pbnN0YW5jZSgpLmNvZGVCbG9jaygpOwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKIAog
ICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IG1vZHVsZS0+ZXhwb3J0U3ltYm9s
VGFibGUoKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAg
ICAgICAgICAgLy8gUmV0dXJuIFRvSlNWYWx1ZSh2KS4KICAgICAgICAgICAgIHN3aXRjaCAoZ2xv
YmFsLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgICAg
IGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkSTMyR2xvYmFsKGV4cC5raW5k
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5j
ZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CkBAIC0xNjAsMTEgKzE2
MCwxMSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhl
YywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRW
YWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxvYWRGMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwor
ICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5j
ZSgpLmxvYWRGMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgICAgICBleHBvcnRl
ZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7
CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmluc3Rh
bmNlKCkubG9hZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTcsMTIgKzIxNywxMiBAQCBKU1ZhbHVl
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5t
b2R1bGUoKTsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3Rh
bmNlLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9k
dWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgV2FzbTo6
TW9kdWxlJiBtb2R1bGUgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLm1vZHVsZSgpOworICAgIFdh
c206OkNvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5jb2RlQmxv
Y2soKTsKKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRp
b24gPSBtb2R1bGUubW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUq
IHRhYmxlID0gbV9pbnN0YW5jZS0+dGFibGUoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpT
ZWdtZW50OjpQdHI+JiBkYXRhID0gbV9pbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0
aW9uKCkuZGF0YTsKKyAgICBjb25zdCBWZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9
IG1vZHVsZUluZm9ybWF0aW9uLmRhdGE7CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1v
cnkgPSBtX2luc3RhbmNlLT5tZW1vcnkoKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8SlNWYWx1ZT4g
ZXhjZXB0aW9uOwpAQCAtMjM5LDcgKzIzOSw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleCA9IGVsZW1lbnQub2Zmc2V0Lmlz
R2xvYmFsSW1wb3J0KCkKLSAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90Piht
X2luc3RhbmNlLT5sb2FkSTMyR2xvYmFsKGVsZW1lbnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4
KCkpKQorICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2Ut
Pmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChlbGVtZW50Lm9mZnNldC5nbG9iYWxJbXBvcnRJbmRl
eCgpKSkKICAgICAgICAgICAgICAgICA6IGVsZW1lbnQub2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAog
ICAgICAgICAgICAgZm4oZWxlbWVudCwgdGFibGVJbmRleCk7CkBAIC0yNTUsNyArMjU1LDcgQEAg
SlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVj
KQogCiAgICAgICAgIGZvciAoY29uc3QgV2FzbTo6U2VnbWVudDo6UHRyJiBzZWdtZW50IDogZGF0
YSkgewogICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0LmlzR2xv
YmFsSW1wb3J0KCkKLSAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2lu
c3RhbmNlLT5sb2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgp
KSkKKyAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5p
bnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4
KCkpKQogICAgICAgICAgICAgICAgIDogc2VnbWVudC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAog
ICAgICAgICAgICAgZm4obWVtb3J5LCBzaXplSW5CeXRlcywgc2VnbWVudCwgb2Zmc2V0KTsKQEAg
LTI5Myw3ICsyOTMsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAvLyBmb3IgdGhlIGltcG9ydC4KICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAK
ICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5k
aWNlc1tpXTsKLSAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25J
bmRleCk7CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1vZHVsZS5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRl
eCk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IGNvZGVCbG9jay0+ZnVuY3Rpb25J
bXBvcnRDb3VudCgpKSB7CiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0
ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25J
bmRleCkpOwogICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZt
LCBmdW5jdGlvbkltcG9ydCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAppbmRleCBlOWE2MzRhLi4xZmI5NDNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3Rv
dHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQ
cm90b3R5cGUuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5
cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJy
ZWQuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1vZHVsZS5oIgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgIlByb21pc2VE
ZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIldh
c21CQlFQbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xp
c3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCkBAIC05NCw3ICs5Niw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMo
RXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyh2bSwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVT
aGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgZ2xvYmFsT2Jq
ZWN0XSAoVk0mIHZtLCBXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11
dGFibGUgeworICAgICAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250
ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxs
YmFja1R5cGU+KFtwcm9taXNlLCBnbG9iYWxPYmplY3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFs
aWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB2bS5wcm9taXNl
RGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgZ2xvYmFs
T2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksICZ2bV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAg
ICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpA
QCAtMTM1LDcgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiB7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIC8vIEluIG9yZGVyIHRvIGF2b2lk
IHBvdGVudGlhbGx5IHJlY29tcGlsaW5nIGEgbW9kdWxlLiBXZSBmaXJzdCBnYXRoZXIgYWxsIHRo
ZSBpbXBvcnQvbWVtb3J5IGluZm9ybWF0aW9uIHByaW9yIHRvIGNvbXBpbGluZyBjb2RlLgotICAg
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUo
dm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0
ZShSZWY8V2FzbTo6TW9kdWxlPihtb2R1bGUtPm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSkpOwogCiAgICAgVmVj
dG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CkBAIC0xNDMsMTMgKzE0NSwxMyBAQCBz
dGF0aWMgdm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNl
RGVmZXJyZWQqIHByb21pc2UsIEpTVwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpT
Q2VsbD4odm0sIGluc3RhbmNlKSk7CiAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBl
bmRpbmdQcm9taXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CiAgICAgLy8gTm90
ZTogVGhpcyBjb21wbGV0aW9uIHRhc2sgbWF5IG9yIG1heSBub3QgZ2V0IGNhbGxlZCBpbW1lZGlh
dGVseS4KLSAgICBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVBc3luYyh2bSwgaW5zdGFuY2UtPm1l
bW9yeU1vZGUoKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDb2RlQmxvY2s6OkNhbGxiYWNrVHlw
ZT4oW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kXSAoVk0mIHZtLCBSZWY8
V2FzbTo6Q29kZUJsb2NrPiYmIHJlZkNvZGVCbG9jaykgbXV0YWJsZSB7CisgICAgbW9kdWxlLT5t
b2R1bGUoKS5jb21waWxlQXN5bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9k
ZSgpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206OkNvZGVCbG9jazo6Q2FsbGJhY2tUeXBlPihbcHJv
bWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmQsICZ2bV0gKFJlZjxXYXNtOjpDb2Rl
QmxvY2s+JiYgcmVmQ29kZUJsb2NrKSBtdXRhYmxlIHsKICAgICAgICAgUmVmUHRyPFdhc206OkNv
ZGVCbG9jaz4gY29kZUJsb2NrID0gV1RGTW92ZShyZWZDb2RlQmxvY2spOwogICAgICAgICB2bS5w
cm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwg
aW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmQsICZ2bSwgY29kZUJsb2NrID0gV1RGTW92ZShj
b2RlQmxvY2spXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGlu
c3RhbmNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICAgICAgcmVzb2x2
ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgY29kZUJsb2NrLnJlbGVhc2VO
b25OdWxsKCksIHJlc29sdmVLaW5kKTsKICAgICAgICAgfSk7Ci0gICAgfSkpOworICAgIH0pLCAm
V2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pOwog
fQogCiBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmpl
Y3QqIGltcG9ydE9iamVjdCkKQEAgLTE2NSw3ICsxNjcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxl
QW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVk
KiBwcgogICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9t
VmFsdWUodm0sIGV4ZWMsIGJ1ZmZlcik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
cmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKSk7CiAKLSAgICBXYXNtOjpNb2R1bGU6OnZhbGlk
YXRlQXN5bmModm0sIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1
bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0XSAo
Vk0mIHZtLCBXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUg
eworICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1v
dmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4o
W3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6
OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICB2bS5wcm9taXNl
RGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW1wb3J0
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXSAoKSBt
dXRhYmxlIHsKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwpAQCAtMjEzLDcgKzIxNSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3Qg
Ynl0ZVNpemU7CiAgICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4o
JnZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBs
YW46OmRvbnRGaW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBi
YXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRv
bnRGaW5hbGl6ZSgpKTsKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB0aHJvdyBhbiBP
T00gZXhjZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRoYXQgc29tZXRoaW5nIHdpbGwgT09NLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTUKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMTE4NjVmNS4uMmM1YmM3
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlU
YWJsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCkBAIC05MCw4ICs5MCwxNSBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUo
RXhlY1N0YXRlKiBleGVjKQogICAgICAgICB9CiAgICAgfQogCisgICAgUmVmUHRyPFdhc206OlRh
YmxlPiB3YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6Y3JlYXRlKGluaXRpYWwsIG1heGltdW0pOwor
ICAgIGlmICghd2FzbVRhYmxlKSB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJjb3VsZG4ndCBjcmVhdGUgVGFibGUiKSkpKTsKKyAgICB9
CisKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgaW5pdGlhbCwgbWF4aW11bSkp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0
ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxl
U3RydWN0dXJlKCksIHdhc21UYWJsZS5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0
YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCmluZGV4IDAyMWM2MTguLjY4ZTk1OWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE8KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHMo
dm0sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjppbmZvKCkpLCAiV2Ugc2hvdWxkIG5ldmVy
IGRvdWJsZSB3cmFwIGEgd3JhcHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9ICIi
OwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24o
Y2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5j
dGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgeyBzaWduYXR1cmVJbmRleCwgaW5zdGFuY2UtPmNvZGVCbG9jaygpLT53YXNt
VG9Kc0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSB9KTsKKyAgICBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uU3RydWN0dXJlKCksIFdhc206OkNhbGxhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwg
aW5zdGFuY2UtPndhc21Db2RlQmxvY2soKS53YXNtVG9KU0NhbGxTdHViRm9ySW1wb3J0KGltcG9y
dEluZGV4KSB9ICk7CiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFuY2UpOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaCBi
L1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMGI5ZDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaApAQCAt
MCwwICsxLDIgQEAKKyNwcmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dhc21N
b2R1bGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCmluZGV4IDk3NWM5YzkuLjc4NDAzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNzks
NiArNzksNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNs
dWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmg+CisjaW5jbHVkZSA8d2FzbS9XYXNtTW9kdWxlLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+Ci0tIAoyLjkuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321831</attachid>
            <date>2017-09-26 10:09:07 -0700</date>
            <delta_ts>2017-09-26 10:29:11 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>430464</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA3NDQwZGU1ZGJjOGJkNmZmYTZmNjU2Njc2Njg4NThiY2UyNzZhYzdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NDcgKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgICAgICAgICB8ICAyMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaCAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaCAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCAgICAgICAgICAgfCAxMjYgKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAgICAgICAgfCAgNzYgKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCAgICAgICAgICB8ICA1OSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oICAgICAgICAgICAgfCAg
IDUgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCAgICAgICAg
fCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oICAgICAg
ICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAg
ICAgICAgICB8IDIyNyArKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oICAgICAgICAgICB8ICA0OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgfCAgIDAKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4g
anN9L0pTV2ViQXNzZW1ibHkuaCAgIHwgIDUwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAgICAgICAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTE4ICsrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDg1ICsrLQogLi4uL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgfCAgNzYgKystCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggICB8ICAxMyAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAg
MzIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAg
fCAgMjUgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAgIHwgIDc1ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmggfCAgNDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCAgICAgICAgIHwgNjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8
ICAxOSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAg
ICAgfCAgIDUgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAg
ICAgICAgIHwgIDIyICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgICB8ICAxNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVj
dG9yLmNwcCAgICAgICAgfCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAgICAgICAgIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93YXNtL1dhc21Nb2R1bGUuaCB8ICAgMiArCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8ICAgMSArCiAxMTEgZmlsZXMgY2hhbmdlZCwgMzA3
OCBpbnNlcnRpb25zKCspLCAxNzQ0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeU1vZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAwJSkKIHJlbmFtZSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggKDYyJSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd2Fz
bS9XYXNtTW9kdWxlLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDgyZWYxNmQuLjZiNjc2N2UgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDkt
MjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRXhjZWVkaW5nIG1h
eCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyCisgICAg
ICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdlOiBpdCB1c2Vk
IHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIHRl
c3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qczoKKyAgICAgICAgKGFz
c2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAgKGFzc2Vy
dC50aHJvd3MpOgorCiAyMDE3LTA5LTIzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBpbmZpbml0ZSBsb29waW5nIHRlc3QyNjIgdGVzdApkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uN2ZlNmIxMyAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0IGJ1ZmZlciBv
ZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQqMTAyNCk7
CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5jZSBpdCBmYWls
cy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVycm9yLCAiT3V0
IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCks
IFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNlZWQgdGhlIG1l
bW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOyAKICAgICBhc3NlcnRFcShidWZmZXIuYnl0
ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnkuYnVmZmVyLCBidWZmZXIp
OwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pTVGVzdHMv
d2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0ZCAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rh
YmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQo
dGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBp
bml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRz
IG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0cyBoYXMg
YSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4g
aXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAy
KiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUncyBpbml0aWFs
IHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQgLyAyNzogVGFi
bGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBtYXhpbXVt
IDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAy
MTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAg
XTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDlkNzc4ZjEuLmJmOWMyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ1MCBAQAorMjAxNy0wOS0yNSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBh
cHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBl
dmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZW50YWlscyBjbGVhbmluZyB1cCBhbmQgc3BsaXR0
aW5nIGEgYnVuY2ggb2YgY29kZSB3aGljaCB3ZSBoYWQKKyAgICAgICAgaW50ZXJ0d2luZWQgYmV0
d2VlbiBDKysgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgSlMgb2JqZWN0cywgYW5kIHB1cmUgQysr
CisgICAgICAgIGltcGxlbWVudGF0aW9uIG9iamVjdHMuIFRoaXMgc3BlY2lmaWMgY2hhbmdlIGdv
ZXMgbW9zdCBvZiB0aGUgd2F5IHRvd2FyZHMKKyAgICAgICAgYWxsb3dpbmcgSlNDJ3MgV2ViQXNz
ZW1ibHkgdG8gd29yayB3aXRob3V0IFZNIC8gSlMsIHVwIHRvIGJ1dCBleGNsdWRpbmcKKyAgICAg
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlICh0aGVyZSdzIFdhc206Okluc3RhbmNlLCBidXQgaXQn
cyBub3QgKnRoZSogdGhpbmcKKyAgICAgICAgeWV0KS4gQmVjYXVzZSBvZiB0aGlzIHdlIHN0aWxs
IGhhdmUgYSBmZXcgRklYTUUgaWRlbnRpZnlpbmcgcGxhY2VzIHRoYXQgbmVlZCB0bworICAgICAg
ICBjaGFuZ2UuIEEgZm9sbG93LXVwIGNoYW5nZSB3aWxsIGdvIHRoZSByZXN0IG9mIHRoZSB3YXku
CisKKyAgICAgICAgSSB3ZW50IGFib3V0IHRoaXMgY2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkg
cG9zc2libGU6IGdyZXAgdGhlCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3dhc20gZGlyZWN0b3J5
IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNsdWRlIHRoZSAvanMvCisgICAg
ICAgIHN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1lbnRhdGlvbiBv
ZiBXZWJBc3NlbWJseSkuCisKKyAgICAgICAgTm9uZSBvZiB0aGlzIGNoYW5nZSByZW1vdmVzIHRo
ZSBuZWVkIGZvciBhIEpJVCBlbnRpdGxlbWVudCB0byBiZSBhYmxlIHRvIHVzZQorICAgICAgICBX
ZWJBc3NlbWJseS4gV2UgZG9uJ3QgaGF2ZSBhbiBpbnRlcnByZXRlciwgdGhlIHByb2Nlc3MgdGhl
cmVmb3JlIHN0aWxsIG5lZWRzIHRvCisgICAgICAgIGJlIGFsbG93ZWQgdG8gSklUIHRvIHVzZSB0
aGVzZSBwdXJlLUMrKyBBUElzLgorCisgICAgICAgIEludGVyZXN0aW5nIHRoaW5ncyB0byBub3Rl
OgorCisgICAgICAgICAgLSBSZW1vdmUgVk0gZnJvbSBQbGFuIGFuZCBhc3NvY2lhdGVkIHBsYWNl
cy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KKyAgICAgICAgICAgIHRoZSBjYWxs
YmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCisgICAgICAgICAgLSBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCisg
ICAgICAgICAgICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNv
bnN0cnVjdGlvbiB0aW1lIGZvciB0aGlzCisgICAgICAgICAgICBwdXJwb3NlOiBvbmUgdG8gbm90
aWZ5IG9mIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCisgICAgICAg
ICAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIg
Y3JlYXRlcyB0aGUgbWVtb3J5IHRvCisgICAgICAgICAgICBkaWN0YXRlIGhvdyB0byByZWFjdCB0
byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1iZWRkaW5nIHRoYXQncyB0bworICAg
ICAgICAgICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3RpdmVseSkuCisgICAg
ICAgICAgLSBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdhc206
Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCisgICAgICAgICAgICB0aGVyZSwgd2l0aCBhbiBl
bnVtIGNsYXNzIGZvciBmYWlsdXJlIHR5cGVzLgorICAgICAgICAgIC0gRXhjZWVkaW5nIG1heCBv
biBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRo
aXMKKyAgICAgICAgICAgIGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNl
ZCB0byB0aHJvdyBPT00gZXJyb3IuIFVwZGF0ZSB0aGUKKyAgICAgICAgICAgIGNvcnJlc3BvbmRp
bmcgdGVzdC4KKyAgICAgICAgICAtIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3Jvd19tZW1vcnkgb3Bj
b2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCisgICAgICAgICAgICByZWFjaCBk
aXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgorICAgICAgICAgIC0gSlNXZWJB
c3NlbWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNh
dXNlIGl0J3Mgb25seQorICAgICAgICAgICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20g
Z3Jvd19tZW1vcnkgYXMgYmVmb3JlKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9yeSBub3cgdGFr
ZXMgYSBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCisgICAg
ICAgICAgICB3cmFwcGVycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2Nl
ZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CisgICAgICAgICAgICBrbm93bmluZyBhbnl0aGluZyBh
Ym91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxpc3Qgb2YgY2FsbGJhY2tzCisg
ICAgICAgICAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xsIHdhbnQgdG8g
bm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAorICAgICAgICAgICAgdW5kZXIgYSBsb2NrKS4KKyAg
ICAgICAgICAtIFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9m
IHRydXRoIGFib3V0IGFkZHJlc3MgLyBzaXplLAorICAgICAgICAgICAgdXNlZCBkaXJlY3RseSBi
eSBnZW5lcmF0ZWQgY29kZSBpbnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCisgICAgICAg
ICAgLSBNb3ZlIHdhc21Ub0pTIGZyb20gdGhlIGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRv
IGl0cyBvd24gaGVhZGVyIHVuZGVyCisgICAgICAgICAgICB3YXNtL2pzLiBJdCdzIG9ubHkgdXNl
ZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwLCBhbmQgdXNlcyBWTSwKKyAg
ICAgICAgICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3NlbWJseS4KKyAgICAg
ICAgICAtIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVjdCBo
b2xkaW5nIGEKKyAgICAgICAgICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3Rl
YWQgb2YgYW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcworICAgICAgICAgICAgZG9lc24n
dCBhZGQgYW55dGhpbmcgdG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0
dWFsbHkgZ2V0cworICAgICAgICAgICAgcGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBU
TFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAgICAgIHBvdGVu
dGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVudGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hh
bmdlIGlzIHRvCisgICAgICAgICAgICBhbGxvdyBwYXNzaW5nIFdhc206OkNvbnRleHQgYXJvdW5k
IHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZNCisgICAgICAgICAgICBj
b250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3RpdmVseSB0
aGUgc2FtZSwgYnV0IHdpdGgKKyAgICAgICAgICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRk
aW5nIGlzIG11Y2ggYmV0dGVyIG9mZi4KKyAgICAgICAgICAtIE1vdmUgSlNXZWJBc3NlbWJseSBp
bnRvIHRoZSBKUyBmb2xkZXIuCisgICAgICAgICAgLSBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJs
b2NrIGRpcmVjdGx5IGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KKyAgICAgICAg
ICAtIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24gV2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyBy
YXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKKyAgICAgICAgICAgIGJlaW5nIG9uIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5FbWJlZGRlcgorICAgICAgICAg
ICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jaywgYW5kIGlzIHN0aWxsCisgICAgICAgICAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCisg
ICAgICAgICAgICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRv
IGNhbGwgYmFjayBpbnRvIHRoZQorICAgICAgICAgICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRk
aW5nIGFueSBpbmRpcmVjdGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQorICAgICAg
ICAgICAgdGhlIEIzIElSIGdlbmVyYXRvciBub3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2Nr
IGluc3RlYWQgb2YKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suCisgICAgICAg
ICAgLSBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24gY29tcGxldGlvbiBp
cyBub3cgbWFya2VkIGJ5IGl0cyBvd24KKyAgICAgICAgICAgIGF0b21pYzxib29sPiBmbGFnIGlu
c3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBhbmQK
KyAgICAgICAgICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVj
YXVzZSBiZWZvcmUgbXkgY2hhbmdlcworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayBkaWQgaXRzIG93biBjb21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQorICAgICAg
ICAgICAgV2FzbTo6Q29kZUJsb2NrLCB3aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0
IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRo
ZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2VyLCB0aGUgbG9jayB3YXMgYmVpbmcKKyAg
ICAgICAgICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2VydGlvbi4KKyAgICAgICAg
ICAtIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhyb3VnaCBh
IGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKKyAgICAgICAgICAgIGluIGF0IGNvbXBpbGF0aW9uIHRp
bWUsIGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4K
KyAgICAgICAgICAtIFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQg
aGFuZGxpbmcgdGh1bmtzLiBPbmx5IHRoZSBJUgorICAgICAgICAgICAgZ2VuZXJhdG9yIHNob3Vs
ZCBrbm93LCBhbmQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcK
KyAgICAgICAgICAgIHRodW5rIGlzIGdlbmVyYXRlZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQg
KG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5vdAorICAgICAgICAgICAgYWxsIG9mIHRoZW0g
Z2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KKyAgICAgICAgICAtIE1ha2UgZXhjZXB0aW9u
IHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNvZGVkCisgICAg
ICAgICAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKKyAgICAgICAgICAgIGNvZGUgd2hlbiBhIFdlYkFz
c2VtYmx5IGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBn
ZXQKKyAgICAgICAgICAgIGNhbGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNh
biBvbmx5IGhhdmUgYSBzaW5nbGUgb2YgdGhlc2UKKyAgICAgICAgICAgIGZ1bmN0aW9ucyAoaS5l
LiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJvY2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVy
IGlzIGEKKyAgICAgICAgICAgIHNpbmdsZXRvbi4gVGhhdCBjYW4gYmUgZml4ZWQgaW4gaW4gIzE3
NzQ3NS4KKyAgICAgICAgICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVyZSBhbGwgZW1iZWRk
ZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgorICAgICAgICAgIC0gU3BsaXQgdXAgSlNXZWJBc3NlbWJs
eVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKKyAgICAgICAgICAgIHJlZmNvdW50ZWQu
IEpTV2ViQXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGlu
IHRoZQorICAgICAgICAgICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBi
eSB0aGUgSklUIGNvZGUgdG8gbG9va3VwIHdoZXJlIHRvCisgICAgICAgICAgICBjYWxsIGFuZCBk
byB0aGUgaW5zdGFuY2UgY2hlY2sgKGZvciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlz
IGNyZWF0ZXMKKyAgICAgICAgICAgIGFuIGV4dHJhIGFsbG9jYXRpb24gZm9yIGFsbCB0aGUgaW5z
dGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhjaGFuZ2UKKyAgICAgICAgICAgIHJlbW92
ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUgaW5zdGFuY2UgdXNlZCB0
byBiZSBvYnRhaW5lZAorICAgICAgICAgICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4gQWxzbyBu
b3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKKyAgICAgICAgICAgIGlu
c3RhbmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRl
ciB0byB0aGUKKyAgICAgICAgICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ug
d291bGQgY2F1c2UgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICAgICAgICAtIEFkZCBXYXNtSW5zdGFu
Y2UuIEl0IGRvZXNuJ3QgZG8gbXVjaCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCisgICAgICAgICAg
LSBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBkb2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1w
b3J0ZWQgZnVuY3Rpb25zIGFzCisgICAgICAgICAgICBKU09iamVjdHMsIGl0IGFsc28gaGFzIHRo
ZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3YXNtCisgICAgICAgICAgICBl
bnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIgaW5zdGFuY2Un
cyBpbXBvcnRlZAorICAgICAgICAgICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAorICAgICAgICAgICAg
Y3JlYXRlcyBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBk
aXNhc3NvY2lhdGUKKyAgICAgICAgICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVt
YmVkZGVyLW5ldXRyYWwgdGhpbmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKKyAgICAgICAgICAgIHdp
biBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBnZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZklt
cG9ydEZ1bmN0aW9uIGZvcgorICAgICAgICAgICAgdGhlIGNhbGwgb3Bjb2RlICh3aGVuIHRoZSBj
YWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgICAg
ICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhpcyBpc24ndCBrbm93
biBhdCBjb21waWxlLXRpbWUKKyAgICAgICAgICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQgb24g
dGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgorICAgICAg
ICAgICAgdGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3Rh
bmNlIChvbmx5IHdhc20tPndhc20KKyAgICAgICAgICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2Ug
aXMgd2FzbUJpbmRpbmcgd2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCisgICAg
ICAgICAgICBmaWd1cmUgb3V0IHRoZSB3YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRo
ZW4gZ2V0cworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwKKyAgICAgICAgICAgIGNhbGwuIFRoZSBk
aXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5zdGFuY2UgY2FuIGJlCisg
ICAgICAgICAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBDb250ZXh0
IGlzLCBhbmQKKyAgICAgICAgICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVh
ZHkgZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKKyAgICAgICAgICAgIGNh
biBtb3ZlIHRoaXMgdGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRv
IFdhc206Okluc3RhbmNlLAorICAgICAgICAgICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGlu
IGFzIGFuIG9wYXF1ZSBwb2ludGVyIHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAorICAgICAg
ICAgICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdyaXRlQmFycmllcjxKU09iamVjdD4uCisgICAg
ICAgICAgLSBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJhbWUsIGFuZCBpbiBtYW55IHBs
YWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAorICAgICAgICAgICAgYXJvdW5kIGluc3RlYWQgb2Yg
Vk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1lcyB3aGljaAor
ICAgICAgICAgICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYworICAgICAgICAgICAgbG9jYXRpb24uIFRoYXQg
Y2hhbmdlIHdvbid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwg
YnV0CisgICAgICAgICAgICB3aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hp
bmVyeSBpbiBhIGdlbmVyaWMgbWFubmVyIHdpdGhvdXQKKyAgICAgICAgICAgIGhhdmluZyBhIFZN
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxp
Y2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW53aW5k
RXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0pOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogZGZnL0RGR09TUkVu
dHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxl
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2Fs
bGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0
YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWNT
dGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUgY29uc3QpOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAgICAoSlNDOjpOYXRpdmVDYWxsRnJhbWVU
cmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxG
cmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSk6
CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjp+TmF0aXZl
Q2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IpOgorICAgICAgICAoSlNDOjpTdGFj
a1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJl
YWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVySXNFbnRyeUZyYW1lIGNvbnN0KToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmg6CisgICAgICAgIChKU0M6OlZN
RW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVJl
Y29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAoSlNDOjpFbnRyeUZyYW1l
Ojp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRl
ck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlND
Ojp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAg
ICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9P
cHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6Cisg
ICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OkZyYW1lV2Fsa2VyKToKKyAg
ICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VUb1BhcmVudEZyYW1lKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6Cisg
ICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dTY29w
ZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZN
Lmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KToKKyAgICAgICAgKiBy
dW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjppc1NhbmVGcmFtZSk6CisgICAgICAg
IChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAgICAgICAoSlND
OjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2spOgorICAgICAgICAqIHdhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2FzbUJC
UVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6
Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmg6
CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRp
bmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNt
L1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpD
b2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29t
cGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpzZXRDb21waWxhdGlv
bkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFN0dWJzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNv
ZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yik6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCk6CisgICAgICAg
IChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0LmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUyk6CisgICAgICAgIChK
U0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250
ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAgICAgICAqIHdh
c20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIu
aC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtSW5z
dGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om1lbW9yeSk6
CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0YWJsZSk6CisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkU3RhY2tMaW1p
dCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRDYWNoZWRTdGFja0xp
bWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3Rlcklu
Zm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6CisgICAgICAgIChK
U0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9TYXZlIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlVmFsaWRhdGlvbkNh
bGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y29tcGls
ZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBh
cnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50
Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnJ1bkNv
bXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmFkZENvbXBsZXRpb25U
YXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNl
bElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgICogd2FzbS9XYXNtVGFi
bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJs
ZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChK
U0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFi
bGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpvZmZz
ZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAqIHdhc20vV2FzbVRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c2V0VGhyb3dXYXNtRXhjZXB0
aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtzOjp0aHJvd1dhc21FeGNlcHRpb24pOgor
ICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRl
eHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0Lmg6CisgICAgICAgICogd2FzbS9qcy9K
U1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDogQ29waWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaC4KKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Lmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmguCisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbnN0YW5jZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0NhbGxlZSk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVybmFsTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21UYWJsZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscyk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNhY2hlZFN0YWNrTGltaXQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldENhY2hlZFN0YWNrTGltaXQp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21NZW1vcnkpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21Nb2R1bGUpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUgY29uc3QpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9y
eSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKToKKyAgICAgICAg
KiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAuCisg
ICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KU0V4Y2VwdGlv
bik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJseUZ1bmN0aW9u
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5TWVt
b3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVs
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1v
ZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmg6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21waWxlRnVu
Yyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGlsZUFu
ZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMpOgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTctMDktMjUgIERldmluIFJvdXNzbyAg
PHdlYmtpdEBkZXZpbnJvdXNzby5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBD
b25zb2xlLmFkZEluc3BlY3RlZE5vZGUgdG8gRE9NLnNldEluc3BlY3RlZE5vZGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTc2MmY2OC4uOWVlNTdlZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEwODIsNyArMTA4Miw3IEBACiAJCTc5QzRCMTVFMUJBMjE1OEYw
MEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThG
MDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMz
M0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQ
Q1Jhbmdlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUQ1Q0Q1OTFDMTEwNkE5
MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNt
RXhjZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87
IH07CisJCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlEQUUyNzkxRTAz
QzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAzIC8q
IEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZFMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xNDYwLDcgKzE0NjAsNiBAQAogCQlBRDJGQ0MyMDFEQjU5Q0Iy
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMTQxREI1OUM1OTAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKIAkJQUQyRkND
MjExREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MxNTFEQjU5
QzU5MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAqLzsgfTsKIAkJ
QUQyRkNDMkQxREI4MzhGRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MyNzFEQjgzOEM0
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLzsgfTsKLQkJQUQyRkNDMzExREI4
M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5LmggKi87IH07CiAJCUFENDEyQjM0MUU3QjJFOUUwMDhBRjE1NyAvKiBXYXNtQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0MTJC
MzIxRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ0MjUyNTExRTVEMEUxNDAwOUQyQTk3IC8q
IEZ1bGxDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDQyNTI1MDFFNUQwREVCMDA5RDJBOTcgLyogRnVsbENvZGVPcmlnaW4uaCAqLzsg
fTsKIAkJQUQ0OTM3QzQxRERCRTYxNDAwNzdDODA3IC8qIEFic3RyYWN0TW9kdWxlUmVjb3JkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDMjFE
REJFNjBBMDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ2OCw2ICsxNDY3LDEzIEBACiAJ
CUFENDkzN0Q0MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDQTFEREQyNzM0
MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovOyB9OwogCQlBRDRCMURGQTFERjI0
NEUyMDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGlu
Zy5oICovOyB9OwogCQlBRDVCNDE2RjFFQkFGQjc3MDA4RUZBNDMgLyogV2FzbU5hbWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUI0MTZFMUVCQUZC
NjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUFENUMzNkREMUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUMz
NkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYg
LyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RTYxRjY5
RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMz
NkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9X
YXNtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUYzMUY2MjQ4MkUwMDEzMTND
MiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdhc21Ub0pTLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREQwOUFFRTFGNUY2
MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFRjFGN0EyNjNBMDAwQkNBQUYgLyogV2FzbU1lbW9y
eU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
NUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENzQzOEMwMUUwNDU3QTQwMEZE
MEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEODZB
OTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDg2QTkzRDFBQTREODdDMDAyRkU3N0Yg
LyogV2Vha0dDTWFwSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOEZG
Mzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDE1Niw5ICs0MTYyLDI1IEBACiAJ
CUFEMkZDQzE1MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0MyNjFEQjgz
OEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
RDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgcGF0aCA9
IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViQXNzZW1ibHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAv
KiBXYXNtRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Gb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0NzFGNEJB
Nzg2MDA2Njk5MTIgLyogV0FCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0QTFGNERFNjhDMDA2Njk5MTIgLyogV0FJbnN0
YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQUluc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFEM0YxRTRCMUY0REU2OEMwMDY2OTkxMiAvKiBXQVRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdBVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNEMx
RjRERTY4QzAwNjY5OTEyIC8qIFdBTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBTWVtb3J5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUyMUY0RjRBRTUwMDY2OTkxMiAv
KiBXQU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1lbW9yeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUzMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1vZHVs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUFEM0YxRTU0MUY0RjRBRTUwMDY2OTkxMiAvKiBXQUluc3RhbmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdBSW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXQVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNjQxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
RXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY1MUY1MEU1
N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUV4Y2Vw
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY4MUY1NDdDQjYw
MDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FN
ZW1vcnlEZXNjcmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQU1lbW9yeURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNkExRjU0N0NCNjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdBSW1wb3J0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZC
MUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
QVRhYmxlRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2
QzFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0FJbXBvcnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNG
MUU2RDFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0FUYWJsZURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDNGMUU3MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXQUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTcx
MUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
RnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQxMkIzMTFFN0Iy
RThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUQ0MTJCMzUxRTdCNTdDMDAwOEFGMTU3IC8qIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZUlmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MTczLDE1ICs0MTk1LDI4IEBACiAJCUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNt
QmluZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENEIxREY4MURGMjQ0RDcw
MDcxQUUzMiAvKiBXYXNtQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDVCNDE2RTFF
QkFGQjY1MDA4RUZBNDMgLyogV2FzbU5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbU5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REMx
RjY4OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtRW1i
ZWRkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REUxRjY5OUVCNjAw
MEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSW5zdGFu
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZERjFGNjk5RUI2MDAw
QkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21JbnN0YW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWJsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFi
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbU1lbW9yeU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU2lnbmF0dXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNpZ25hdHVy
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDg2QTkzRDFBQTREODdDMDAyRkU3
N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWFrR0NNYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOERE
NkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1RvV2Fz
bS5oOyBwYXRoID0ganMvSlNUb1dhc20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUQ4REQ2RDAxRjY3MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEpTVG9XYXNtLmNwcDsgcGF0aCA9IGpzL0pTVG9XYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5kZXhPck5hbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtSW5kZXhPck5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDlF
ODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEQjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QYWdlQ291bnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMjFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRvSlNDYWxs
ZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMzFERjhFQTAwMDA1
QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlU
b0pTQ2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUVFMUY1RjYy
M0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXYXNtVG9KUy5oOyBwYXRo
ID0ganMvV2FzbVRvSlMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRUYx
RjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdhc21U
b0pTLmNwcDsgcGF0aCA9IGpzL1dhc21Ub0pTLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRjMxRjYyNDgyRTAwMTMx
M0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBw
YXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQxOTEsNiArNDIyNiw4IEBACiAJCUFERTgwMjk2MUUwOEYxQzkwMDU4
REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7
IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJs
eUxpbmtFcnJvclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOUQx
RTA4RjIyNjAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JD
b25zdHJ1Y3Rvci5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQURGQzMwRjcxRjQ3QTdCODAwNjQ1
MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFzc2VtYmx5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY5MUY0N0E4QzAwMDY0NTFEMyAvKiBXQU1v
ZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0
aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OUY4OTM4MTg5MUFE
QjUwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyog
VG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0g
VG9vbEV4ZWN1dGFibGUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NjQ1LDYgKzU2ODIsMjYgQEAKIAkJCQk4NkYzRUVCNjE2ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1
bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVl
SlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5oICovLAorCQkJCUFEM0YxRTQ3MUY0QkE3ODYwMDY2OTkxMiAvKiBXQUJhc2UuaCAq
LywKKwkJCQlBRDNGMUU2NTFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uY3BwICovLAor
CQkJCUFEM0YxRTY0MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5oICovLAorCQkJCUFE
M0YxRTcxMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLywKKwkJCQlBRDNGMUU3
MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovLAorCQkJCUFEM0YxRTZDMUY1NDdD
QjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5jcHAgKi8sCisJCQkJQUQzRjFFNkExRjU0N0NC
NjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8sCisJCQkJQUQzRjFFNTQxRjRGNEFFNTAw
NjY5OTEyIC8qIFdBSW5zdGFuY2UuY3BwICovLAorCQkJCUFEM0YxRTRBMUY0REU2OEMwMDY2OTkx
MiAvKiBXQUluc3RhbmNlLmggKi8sCisJCQkJQUQzRjFFNTIxRjRGNEFFNTAwNjY5OTEyIC8qIFdB
TWVtb3J5LmNwcCAqLywKKwkJCQlBRDNGMUU0QzFGNERFNjhDMDA2Njk5MTIgLyogV0FNZW1vcnku
aCAqLywKKwkJCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9y
LmNwcCAqLywKKwkJCQlBRDNGMUU2OTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlw
dG9yLmggKi8sCisJCQkJQUQzRjFFNTMxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTW9kdWxlLmNwcCAq
LywKKwkJCQlBREZDMzBGOTFGNDdBOEMwMDA2NDUxRDMgLyogV0FNb2R1bGUuaCAqLywKKwkJCQlB
RDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8sCisJCQkJQUQzRjFFNEIx
RjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUuaCAqLywKKwkJCQlBRDNGMUU2RDFGNTQ3Q0I4MDA2
Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovLAorCQkJCUFEM0YxRTZCMUY1NDdDQjgw
MDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovLAorCQkJCUFERkMzMEY3MUY0N0E3Qjgw
MDY0NTFEMyAvKiBXZWJBc3NlbWJseS5oICovLAogCQkJCTVERTNEMEY0MEREOERERkIwMDQ2ODcx
NCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQVBJOwpAQCAt
NTk3OSw4ICs2MDM2LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAotCQkJCUFEMkZDQzJFMURCODM5
RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLywKLQkJCQlBRDJGQ0MyRjFEQjgzOUY3
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5
QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBFOTIxRDVBNEFCMzAw
OTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJNTNDQTczMDcxRUE1MzNEODAw
NzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAqLywKQEAgLTU5OTYsNiArNjA1MSw3IEBACiAJCQkJ
NTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCAqLywKIAkJCQlBRDQx
MkIzMTFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovLAogCQkJCUFENDEyQjMy
MUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICovLAorCQkJCUFENUMzNkRDMUY2ODhC
NUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLywKIAkJCQk3OURBRTI3OTFFMDNDODIyMDBC
NTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLywKIAkJCQk1MzgxQjkzNjFFNjBFOTY2MDA5
MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCiAJCQkJNTM4MUI5MzgxRTYw
RTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLywKQEAgLTYwMDQsNiAr
NjA2MCw4IEBACiAJCQkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBh
cnNlci5oICovLAogCQkJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuY3BwICovLAogCQkJCUFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCAqLywKKwkJCQlBRDVDMzZERTFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNw
cCAqLywKKwkJCQlBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8s
CiAJCQkJQUQwMDY1OUQxRUNBQzdGRTAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCAqLywKIAkJCQk1
M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLywKIAkJ
CQk1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8sCkBA
IC02MDExLDYgKzYwNjksOCBAQAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNt
TWVtb3J5LmggKi8sCiAJCQkJNzlCNzU5NzExREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAgKi8sCiAJCQkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oICovLAorCQkJCUFENUMzNkYwMUY3QTI2QkYwMDBCQ0FBRiAvKiBX
YXNtTWVtb3J5TW9kZS5jcHAgKi8sCisJCQkJQUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdh
c21NZW1vcnlNb2RlLmggKi8sCiAJCQkJNzkwMDgxMzYxRTk1QThFQzAwNTJEN0NEIC8qIFdhc21N
b2R1bGUuY3BwICovLAogCQkJCTc5MDA4MTM3MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxl
LmggKi8sCiAJCQkJNTNFNzc3RTExRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAgKi8sCkBAIC02MDMyLDYgKzYwOTIsOCBAQAogCQkJCTUzRjQwRTg0MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBD
MkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJB
IC8qIFdhc21TaWduYXR1cmUuaCAqLywKKwkJCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLywKKwkJCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3Bw
ICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggKi8sCiAJ
CQkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICovLApAQCAt
NzYzMiw2ICs3Njk0LDEwIEBACiAJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQUQ4REQ2RDAxRjY3
MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLywKKwkJCQlBRDhERDZDRjFGNjcwODlGMDAw
NEVCNTIgLyogSlNUb1dhc20uaCAqLywKKwkJCQlBREQwOUFGMjFGNjI0ODI5MDAxMzEzQzIgLyog
SlNXZWJBc3NlbWJseS5jcHAgKi8sCisJCQkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpT
V2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJCQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8q
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RG
RUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcCAqLywKQEAgLTc2NTEsNiAr
NzcxNyw4IEBACiAJCQkJQUQyRkNCQUQxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBRTFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseVRhYmxlLmNwcCAqLywKIAkJCQlBRDJGQ0JBRjFEQjU4REE0MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseVRhYmxlLmggKi8sCisJCQkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdh
c21Ub0pTLmNwcCAqLywKKwkJCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMu
aCAqLywKIAkJCQlBRDJGQ0JCMDFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQUQyRkNCQjExREI1OERBNDAwQjNFNzM2IC8q
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCMjFE
QjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3BwICov
LApAQCAtNzkyNiw2ICs3OTk0LDcgQEAKIAkJCQkwRkVDODVCQjFCRTE0NjJGMDA4MEZGNzQgLyog
QjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRGNjdEMjFEOUM2
RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzZFNTQ1MzFDNDY4
RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzMTlEQTA0MUMxQkU0MEQwMDFEMjYwQiAvKiBCM0xvd2VyTWFjcm9zQWZ0
ZXJPcHRpbWl6YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxRTFCREFDREFDMDA4
MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMTYsNiArODA4NSw3
IEBACiAJCQkJRTMyOERBRUIxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8q
IEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAx
RjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MjE5LDYgKzgyODksNyBAQAogCQkJCTBGQTU4MUJDMTUwRTk1MzAwMEI5QTJEOSAvKiBERkdOb2Rl
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3NTAwMEMyMzk2IC8qIERG
R051bGxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQUQ1QzM2REQxRjY4OEI2NTAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjlDRTkxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGRjFDOTBD
NTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTgzMjksOCArODQw
MCwxMCBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVz
c2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUExRjc1QUQ2QTAwMEJD
QUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M1NzFGMzNBNDUzMDBG
NTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzRFREJGNzFEQjVGRkM5MDBEQzg3QTUgLyogRnJh
bWVUcmFjZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTg3MzEsNyArODgwNCw2IEBACiAJCQkJQTc0
ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFr
U2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBRDJGQ0MzMTFEQjgzRDQ5MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlF
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUZENDg0
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjQsNiArODk5Niw3IEBACiAJCQkJ
QkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBL
ZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBS
ZWdFeHBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZEMUM4RjY1OTUwMDQ4MDE1
MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDNDBF
MTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTkw
OTMsNiArOTE2Niw3IEBACiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1
YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUw
IC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUYxRjdBMjYz
QTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1MkFB
MTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQz
QTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBmZDUyNmIyLi4yZDI4ZWU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MjYsNyArOTI2LDYgQEAgdG9vbHMvSlNEb2xsYXJWTVBy
b3RvdHlwZS5jcHAKIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCiB0b29scy9WTUluc3Bl
Y3Rvci5jcHAKIAotd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKIHdhc20vV2FzbUJCUVBsYW4uY3BwCiB3YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtOTM0
LDEyICs5MzMsMTYgQEAgd2FzbS9XYXNtQ2FsbGVlLmNwcAogd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uY3BwCiB3YXNtL1dhc21Db2RlQmxvY2suY3BwCiB3YXNtL1dhc21Db250ZXh0LmNwcAor
d2FzbS9XYXNtRW1iZWRkZXIuaAogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAogd2Fz
bS9XYXNtRm9ybWF0LmNwcAogd2FzbS9XYXNtSW5kZXhPck5hbWUuY3BwCit3YXNtL1dhc21JbnN0
YW5jZS5jcHAKK3dhc20vV2FzbUluc3RhbmNlLmgKIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNw
cAogd2FzbS9XYXNtTWVtb3J5LmNwcAogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCit3
YXNtL1dhc21NZW1vcnlNb2RlLmNwcAogd2FzbS9XYXNtTW9kdWxlLmNwcAogd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uY3BwCiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC05NDksMTAg
Kzk1MiwxNSBAQCB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQu
Y3BwCiB3YXNtL1dhc21QbGFuLmNwcAogd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAord2FzbS9XYXNt
VGFibGUuY3BwCit3YXNtL1dhc21UYWJsZS5oCiB3YXNtL1dhc21UaHVua3MuY3BwCiB3YXNtL1dh
c21WYWxpZGF0ZS5jcHAKIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCit3YXNtL2pzL0pTVG9XYXNt
LmNwcAord2FzbS9qcy9KU1RvV2FzbS5oCit3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAK
QEAgLTk2Miw2ICs5NzAsOCBAQCB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKK3dhc20vanMvV2FzbVRv
SlMuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmgKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5
cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA0MjI4
MGM1Li42ZGY0NDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTE3OSw3ICsxNzksNyBAQCBDYWxsU2l0ZUluZGV4
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6b3JpZ2luYWxDYWxsU2l0ZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gc3R1Ygogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4Y2Vw
dGlvbkhhbmRsZXIoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7Ci0gICAgaml0LT5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0pOworICAgIGppdC0+
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJm1fdm0udG9wRW50
cnlGcmFtZSk7CiAgICAgaWYgKG5lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oKSkg
ewogICAgICAgICAvLyBUbyB0aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4Y2Vw
dGlvbiBoYW5kbGluZwogICAgICAgICAvLyBjYWxsIHNpdGUsIHRoZXkgd2lsbCBleHBlY3QgdGhl
IE9TUiBleGl0IHRvIGJlIGFycml2ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCmluZGV4IDM0OGM2OGMuLjc3MTZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKICAqCkBAIC02NTIsOCArNjUyLDggQEAgdm9pZCBEZWJ1Z2dlcjo6c3RlcE91dE9m
RnVuY3Rpb24oKQogICAgIGlmICghbV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Vk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAg
ICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxs
RnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSkgOiBudWxscHRyOworICAgIEVudHJ5
RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgbV9wYXVzZU9u
Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSh0b3BFbnRyeUZyYW1lKSA6IG51bGxwdHI7CiAgICAgbV9wYXVzZU9uU3RlcE91dCA9
IHRydWU7CiAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG5v
dGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2
b2lkIERlYnVnZ2VyOjpyZXR1cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAo
IW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1l
KiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5
RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJh
bWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIGNhbGws
IHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdlIGFy
ZSByZXR1cm5pbmcgdG8uCiAgICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQgPSB0
cnVlOwpAQCAtODU2LDggKzg1Niw4IEBAIHZvaWQgRGVidWdnZXI6OnVud2luZEV2ZW50KENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1F
bnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50
cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAg
IC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYW4gZXhjZXB0aW9uIGxvY2F0aW9uIGxpa2UgYSBzdGVw
LW91dC4KICAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkK
QEAgLTg4Niw4ICs4ODYsOCBAQCB2b2lkIERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZN
RW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVu
dHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAg
ICAvLyBSZXR1cm5pbmcgZnJvbSBhIHByb2dyYW0sIGNvdWxkIGJlIGV2YWwoKSwgdGhlcmUgd2Fz
IGF0IGxlYXN0IG9uZSBleHByZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVybmlu
ZyB0by4KICAgICBtX3Bhc3RGaXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGQxOWRkYjcu
LmZmOTc4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAg
IC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBh
cmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpAQCAtMTYw
LDcgKzE2MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygp
CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAg
ICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0
aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNTgzYmY5OC4uMDIxZWFhYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTcsNyArMzE3
LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdp
c3RlclNldDo6YWxsRlBScygpKTsKIAogICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSByZWdp
c3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsKLSAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2
bUVudHJ5UmVjb3JkKHZtLT50b3BWTUVudHJ5RnJhbWUpOworICAgIFZNRW50cnlSZWNvcmQqIHJl
Y29yZCA9IHZtRW50cnlSZWNvcmQodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCBjdXJyZW50RW50cnkgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpOwogICAgICAg
ICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWcoKSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAzNDMzMDhjLi5jNzdlMDA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg1LDcgKzE4
NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdChFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7CiAg
ICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNl
IHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgogICAgICAgICAgICAgLy8gU28s
IHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAg
ICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKTsKKyAgICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBq
aXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIGppdC5hZGRQdHIoCkBAIC01Mzcs
NyArNTM3LDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwg
Vk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGppdC5lbWl0TWF0ZXJpYWxp
emVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCZ2bS50b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIERvIGFsbCBkYXRhIGZv
cm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCBiNzMyN2YzLi5lZDBh
ZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC0xMzUsNyAr
MTM1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50cnlKdW1w
RGVzdGluYXRpb24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BF
bnRyeUZyYW1lKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsK
IAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCmluZGV4IGZmMmNlNTYuLjAzZjAyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiAKICAg
ICAvLyBFbWl0IHRoZSBleGNlcHRpb24gaGFuZGxlci4KICAgICAqc3RhdGUuZXhjZXB0aW9uSGFu
ZGxlciA9IGppdC5sYWJlbCgpOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggN2MwMTgxZC4uYWFjODY4MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Myw3ICsxNDMsNyBAQCB2
b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlv
biA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKLSAgICAg
ICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtKTsKKyAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigmdm0udG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAxY2ViYzAxLi5lMGU1
OTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CkBAIC0yNjQsNyArMjY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJh
bWUpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAppbmRleCA4ZTA4MWQ3Li5jZWZjYWQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg2LDcgKzE4
Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIC8vIFRoZSBmaXJzdCB0aGluZyB3
ZSBuZWVkIHRvIGRvIGlzIHJlc3RhYmxpc2ggb3VyIGZyYW1lIGluIHRoZSBjYXNlIG9mIGFuIGV4
Y2VwdGlvbi4KICAgICBpZiAoZXhpdC5pc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoKTsgLy8gVGhlIGZpcnN0IHRp
bWUgd2UgaGl0IHRoaXMgZXhpdCwgbGlrZSBhdCBhbGwgb3RoZXIgdGltZXMsIHRoaXMgZmllbGQg
c2hvdWxkIGJlIG5vbi1udWxsLgotICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgIGppdC5yZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFt
ZSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgp
LCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CkBAIC00MTIsOCArNDEyLDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lz
dGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdp
c3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkgewotICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcFZNRW50cnlGcmFtZSwgR1BSSW5m
bzo6cmVnVDEpOwotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5m
bzo6cmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcEVudHJ5RnJhbWUsIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CiAgICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcg
PD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggOWZhMjlkMC4uYmU2MWE0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTQsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3Bl
LmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KQEAgLTIxNyw3ICsyMTgsNyBAQCBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjp3
YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgaWYgKCFjYWxsZWUoKS5pc1dhc20oKSkKICAgICAgICAgcmV0dXJuIGxleGljYWxH
bG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gV2FzbTo6bG9hZENvbnRleHQodm0pLT5nbG9iYWxP
YmplY3QoKTsKKyAgICByZXR1cm4gdm0ud2FzbUNvbnRleHQubG9hZCgpLT5nbG9iYWxPYmplY3Qo
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICByZXR1cm4gbGV4aWNhbEdsb2Jh
bE9iamVjdCgpOwpAQCAtMjM3LDI0ICsyMzgsMjQgQEAgYm9vbCBDYWxsRnJhbWU6OmlzQW55V2Fz
bUNhbGxlZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1DYWxsRnJhbWUqIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFtZSkKK0NhbGxGcmFtZSog
Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYgY3VyckVudHJ5RnJhbWUpCiB7Ci0g
ICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJyVk1FbnRyeUZyYW1lKSB7
Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29y
ZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAgY3VyclZNRW50cnlGcmFtZSA9IGN1cnJWTUVu
dHJ5UmVjb3JkLT5wcmV2VG9wVk1FbnRyeUZyYW1lKCk7CisgICAgaWYgKGNhbGxlckZyYW1lT3JF
bnRyeUZyYW1lKCkgPT0gY3VyckVudHJ5RnJhbWUpIHsKKyAgICAgICAgVk1FbnRyeVJlY29yZCog
Y3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAgICAg
ICAgY3VyckVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcEVudHJ5RnJhbWUo
KTsKICAgICAgICAgcmV0dXJuIGN1cnJWTUVudHJ5UmVjb3JkLT5wcmV2VG9wQ2FsbEZyYW1lKCk7
CiAgICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9y
Vk1FbnRyeUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxs
ZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsKIH0KIAotU1VQUFJFU1NfQVNBTiBDYWxsRnJhbWUqIENh
bGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFt
ZSkKK1NVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2FmZUNhbGxlckZyYW1l
KEVudHJ5RnJhbWUqJiBjdXJyRW50cnlGcmFtZSkKIHsKLSAgICBpZiAodW5zYWZlQ2FsbGVyRnJh
bWVPclZNRW50cnlGcmFtZSgpID09IGN1cnJWTUVudHJ5RnJhbWUpIHsKLSAgICAgICAgVk1FbnRy
eVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJWTUVudHJ5RnJh
bWUpOwotICAgICAgICBjdXJyVk1FbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnVuc2Fm
ZVByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAgICBpZiAodW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5
RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAgICAgICBWTUVudHJ5UmVjb3JkKiBjdXJy
Vk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyckVudHJ5RnJhbWUpOworICAgICAgICBj
dXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wRW50cnlGcmFt
ZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQtPnVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KHVuc2Fm
ZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENh
bGxGcmFtZSo+KHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCiBTb3VyY2VP
cmlnaW4gQ2FsbEZyYW1lOjpjYWxsZXJTb3VyY2VPcmlnaW4oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDYyMzA5YTAuLjZkNWQ3MjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTE0
MSwxMiArMTQxLDEyIEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBDYWxsRnJhbWUmIG9w
ZXJhdG9yPShjb25zdCBSZWdpc3RlciYgcikgeyAqc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlz
KSA9IHI7IHJldHVybiAqdGhpczsgfQogCi0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yVk1F
bnRyeUZyYW1lKCkpOyB9Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUo
KSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KLSAgICAg
ICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9Cisg
ICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsgfQorICAgICAgICB2b2lk
KiBjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZyYW1lQW5k
UEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVuc2FmZUNh
bGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVB
bmRQQygpLmNhbGxlckZyYW1lOyB9CiAKLSAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxsZXJG
cmFtZShWTUVudHJ5RnJhbWUqJik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYpOworICAgICAgICBDYWxsRnJhbWUqIHVuc2Fm
ZUNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBTb3VyY2VPcmlnaW4gY2FsbGVyU291cmNlT3JpZ2luKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAppbmRleCBjNWI2Yjgz
Li43NmFjZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
RnJhbWVUcmFjZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Zy
YW1lVHJhY2Vycy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBW
TUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIAogY2xhc3MgU3VzcGVuZEV4Y2VwdGlv
blNjb3BlIHsKIHB1YmxpYzoKQEAgLTc0LDMzICs3NCwzMyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAgICAgQVNT
RVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9jYXN0
PHZvaWQqPih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0tPnRv
cEVudHJ5RnJhbWUpKTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAg
ICB9CiB9OwogCiBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB7CiBwdWJs
aWM6Ci0gICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZShW
TSogdm0sIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
KyAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKFZNKiB2
bSwgRW50cnlGcmFtZSogRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAg
IDogbV92bSh2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFTU0VSVChj
YWxsRnJhbWUpOwotICAgICAgICBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50
cnlGcmFtZTsKKyAgICAgICAgbV9zYXZlZFRvcEVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFt
ZTsKICAgICAgICAgbV9zYXZlZFRvcENhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7Ci0gICAg
ICAgIHZtLT50b3BWTUVudHJ5RnJhbWUgPSB2bUVudHJ5RnJhbWU7CisgICAgICAgIHZtLT50b3BF
bnRyeUZyYW1lID0gRW50cnlGcmFtZTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxG
cmFtZTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5OYXRpdmVDYWxsRnJhbWVUcmFjZXJX
aXRoUmVzdG9yZSgpCiAgICAgewotICAgICAgICBtX3ZtLT50b3BWTUVudHJ5RnJhbWUgPSBtX3Nh
dmVkVG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX3ZtLT50b3BFbnRyeUZyYW1lID0gbV9zYXZl
ZFRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1fdm0tPnRvcENhbGxGcmFtZSA9IG1fc2F2ZWRUb3BD
YWxsRnJhbWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwotICAgIFZNRW50cnlG
cmFtZSogbV9zYXZlZFRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBtX3NhdmVkVG9w
RW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIG1fc2F2ZWRUb3BDYWxsRnJhbWU7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApp
bmRleCAxMzUzZTEwLi5hNTEzZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTY1Myw5ICs2NTMsOSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAK
LSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
aXNpdG9yKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodmlzaXRvcik7CiAKLSAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53aW5kaW5nID0gdmlz
aXRvci0+Y2FsbGVySXNWTUVudHJ5RnJhbWUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53
aW5kaW5nID0gdmlzaXRvci0+Y2FsbGVySXNFbnRyeUZyYW1lKCk7CiAgICAgICAgIGlmIChzaG91
bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
IApAQCAtNjYzLDcgKzY2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAgICB7CiAj
aWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSB2aXNpdG9y
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC02NzYsNyArNjc2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaW50cHRyX3QqIGZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdCo+KG1fY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9
IGN1cnJlbnRDYWxsZWVTYXZlcy0+c2l6ZSgpOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNv
cmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgVk1FbnRy
eVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRvcEVudHJ5RnJhbWUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZl
cy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGN1cnJlbnRF
bnRyeS5yZWcoKSkpCkBAIC03MDIsNyArNzAyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBpZiAodW53
aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIGlmIChjYWxsRnJh
bWUtPmNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUpCisg
ICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gdm0udG9w
RW50cnlGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGNhbGxG
cmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggODVkMTQ3YS4uMWRhOTNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxOCArNDQsMTggQEAgU3RhY2tWaXNpdG9yOjpT
dGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0pCiAgICAgQ2FsbEZyYW1l
KiB0b3BGcmFtZTsKICAgICBpZiAoc3RhcnRGcmFtZSkgewogICAgICAgICBBU1NFUlQodm0pOwot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKKyAg
ICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKICAgICAgICAg
dG9wRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgICAgICAKLSAgICAgICAgaWYgKHRvcEZy
YW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKSA9PSBzdGF0
aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7Ci0gICAgICAgICAgICB0b3BGcmFtZSA9IHZtRW50
cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKLSAg
ICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUu
bV9WTUVudHJ5RnJhbWUpLT5tX3ByZXZUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIGlmICh0b3BG
cmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFtZS5tX2VudHJ5RnJhbWUpID09IHN0YXRp
Y19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKKyAgICAgICAgICAgIHRvcEZyYW1lID0gdm1FbnRy
eVJlY29yZChtX2ZyYW1lLm1fZW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKKyAgICAg
ICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fZW50
cnlGcmFtZSktPm1fcHJldlRvcEVudHJ5RnJhbWU7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gMDsKKyAgICAgICAgbV9mcmFtZS5tX2Vu
dHJ5RnJhbWUgPSAwOwogICAgICAgICB0b3BGcmFtZSA9IDA7CiAgICAgfQotICAgIG1fZnJhbWUu
bV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IGZhbHNlOworICAgIG1fZnJhbWUubV9jYWxsZXJJc0Vu
dHJ5RnJhbWUgPSBmYWxzZTsKICAgICByZWFkRnJhbWUodG9wRnJhbWUpOwogCiAgICAgLy8gRmlu
ZCB0aGUgZnJhbWUgdGhlIGNhbGxlciB3YW50cyB0byBzdGFydCB1bndpbmRpbmcgZnJvbS4KQEAg
LTc1LDE0ICs3NSwxNCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSgpCiAgICAg
ICAgICAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCAmaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIpOwogICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG1fZnJhbWUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZTsK
KyAgICAgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlckVudHJ5
RnJhbWU7CiAgICAgICAgICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUuY2FsbEZy
YW1lKCksIGNhbGxlckNvZGVPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2ZyYW1l
Lm1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX0NhbGxlckVudHJ5RnJhbWU7CiAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUo
KSk7CiB9CiAKQEAgLTE1Miw5ICsxNTIsOSBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklu
bGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaQogewog
ICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpOwotICAgIG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fVk1F
bnRyeUZyYW1lOwotICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUobV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSk7Ci0gICAgbV9mcmFtZS5tX2NhbGxl
cklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSAhPSBtX2ZyYW1l
Lm1fVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX2VudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX2NhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZShtX2ZyYW1lLm1fQ2FsbGVyRW50cnlGcmFtZSk7CisgICAgbV9mcmFtZS5tX2Nh
bGxlcklzRW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lICE9IG1fZnJhbWUu
bV9lbnRyeUZyYW1lOwogICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwogCiAgICAg
Q2FsbGVlQml0cyBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwpAQCAtNTAwLDcgKzUwMCw3
IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBJbmRl
bnRlciBpbmRlbnQsIHN0ZDo6ZnVuY3Rpb248CiAKICAgICAgICAgICAgIGluZGVudC0tOwogICAg
ICAgICB9Ci0gICAgICAgIG91dC5wcmludChpbmRlbnQsICJ2bUVudHJ5RnJhbWU6ICIsIFJhd1Bv
aW50ZXIodm1FbnRyeUZyYW1lKCkpLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KGluZGVudCwg
IkVudHJ5RnJhbWU6ICIsIFJhd1BvaW50ZXIobV9lbnRyeUZyYW1lKSwgIlxuIik7CiAgICAgICAg
IGluZGVudC0tOwogICAgIH0KICAgICBvdXQucHJpbnQoaW5kZW50LCAifVxuIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5kZXggOGFk
MDk0MC4uNzA3OWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAg
ICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAgc2l6
ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsgfQotICAgICAgICBib29sIGNhbGxlcklzVk1FbnRyeUZyYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc1ZNRW50cnlGcmFtZTsgfQorICAgICAgICBib29s
IGNhbGxlcklzRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNFbnRyeUZyYW1l
OyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxlckZyYW1lOyB9CiAgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsZWU7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jazsgfQpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgQ2xvbmVk
QXJndW1lbnRzKiBjcmVhdGVBcmd1bWVudHMoKTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2bUVu
dHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX1ZNRW50cnlGcmFtZTsgfQogICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CiAgICAgICAg
IAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBJbmRlbnRlciA9IEluZGVudGVyKCkp
IGNvbnN0OwpAQCAtMTE0LDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICNlbmRpZgogICAgICAgICBDYWxsRnJhbWUqIG1fY2Fs
bEZyYW1lOwotICAgICAgICBWTUVudHJ5RnJhbWUqIG1fVk1FbnRyeUZyYW1lOwotICAgICAgICBW
TUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICBFbnRyeUZyYW1lKiBt
X2VudHJ5RnJhbWU7CisgICAgICAgIEVudHJ5RnJhbWUqIG1fQ2FsbGVyRW50cnlGcmFtZTsKICAg
ICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwogICAgICAgICBDYWxsZWVCaXRzIG1fY2Fs
bGVlOwogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtMTIzLDcgKzEyMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAg
ICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIFdhc206OkluZGV4T3JO
YW1lIG1fd2FzbUZ1bmN0aW9uSW5kZXhPck5hbWU7Ci0gICAgICAgIGJvb2wgbV9jYWxsZXJJc1ZN
RW50cnlGcmFtZSA6IDE7CisgICAgICAgIGJvb2wgbV9jYWxsZXJJc0VudHJ5RnJhbWUgOiAxOwog
ICAgICAgICBib29sIG1faXNXYXNtRnJhbWUgOiAxOwogCiAgICAgICAgIGZyaWVuZCBjbGFzcyBT
dGFja1Zpc2l0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvVk1FbnRyeVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZN
RW50cnlSZWNvcmQuaAppbmRleCBmMzZjMmJlLi4wMTAzYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjks
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFZNRW50cnlGcmFtZTsKK3N0cnVjdCBF
bnRyeUZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKQEAgLTQwLDcgKzQwLDcg
QEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgICAqLwogICAgIFZNKiBtX3ZtOwogICAgIEV4
ZWNTdGF0ZSogbV9wcmV2VG9wQ2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFtZSogbV9wcmV2VG9w
Vk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fcHJldlRvcEVudHJ5RnJhbWU7CiAKICNp
ZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAg
ICBpbnRwdHJfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW05VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTXTsKQEAgLTQ5LDIwICs0OSwyMCBAQCBzdHJ1Y3QgVk1FbnRyeVJlY29yZCB7
CiAgICAgRXhlY1N0YXRlKiBwcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wQ2Fs
bEZyYW1lOyB9CiAgICAgU1VQUFJFU1NfQVNBTiBFeGVjU3RhdGUqIHVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BDYWxsRnJhbWU7IH0KIAotICAgIFZNRW50cnlGcmFt
ZSogcHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcFZNRW50cnlGcmFtZTsg
fQotICAgIFNVUFBSRVNTX0FTQU4gVk1FbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wVk1FbnRyeUZy
YW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wVk1FbnRyeUZyYW1lOyB9CisgICAgRW50cnlGcmFtZSog
cHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BFbnRyeUZyYW1lOyB9CisgICAg
U1VQUFJFU1NfQVNBTiBFbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wRW50cnlGcmFtZSgpIHsgcmV0
dXJuIG1fcHJldlRvcEVudHJ5RnJhbWU7IH0KIH07CiAKLWV4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChWTUVudHJ5RnJhbWUqKTsKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChFbnRyeUZyYW1lKik7CiAKLXN0cnVjdCBWTUVudHJ5RnJhbWUgewor
c3RydWN0IEVudHJ5RnJhbWUgewogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9DQUxMRUVf
U0FWRVNfUkVHSVNURVJTID4gMAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgdm1FbnRyeVJlY29yZE9m
ZnNldCgpCiAgICAgewotICAgICAgICBWTUVudHJ5RnJhbWUqIGZha2VWTUVudHJ5RnJhbWUgPSBy
ZWludGVycHJldF9jYXN0PFZNRW50cnlGcmFtZSo+KDB4MTAwMCk7Ci0gICAgICAgIFZNRW50cnlS
ZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZVZNRW50cnlGcmFtZSk7CisgICAgICAg
IEVudHJ5RnJhbWUqIGZha2VFbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxFbnRyeUZyYW1l
Kj4oMHgxMDAwKTsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29y
ZChmYWtlRW50cnlGcmFtZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGZha2VWTUVudHJ5RnJhbWUpKTsKKyAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYWtlRW50
cnlGcmFtZSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlck9mZnNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKaW5kZXggOGQzMWY3YS4uMzcxOWJhNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoVk0mIHZtLCBHUFJSZWcgc2NyYXRjaDAs
IEdQUlJlZyBzY3JhdGNoMSwKIH0KICNlbmRpZgogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSkK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqKiB0b3BFbnRyeUZyYW1lKQogewogI2lmIE5VTUJF
Ul9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7
CkBAIC02MDUsOCArNjA1LDggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0KICAgICB9CiAgICAg
QVNTRVJUKHNjcmF0Y2ggIT0gSW52YWxpZEdQUlJlZyk7CiAKLSAgICBsb2FkUHRyKCZ2bS50b3BW
TUVudHJ5RnJhbWUsIHNjcmF0Y2gpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZy
YW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBs
b2FkUHRyKHRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
RW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7
CiAKICAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMgZXhjZXB0IGZvciB0aGUgc2NyYXRj
aC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CkBA
IC03NzgsNDEgKzc3OCw0MSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1
ZVRvQm9vbGVhbihWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZQogfQogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dChH
UFJSZWcgZHN0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KEdQUlJlZyBkc3QpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6
dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0
VExTKCkpIHsKICAgICAgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRMU09mZnNldEZvcktleShXVEZf
V0FTTV9DT05URVhUX0tFWSksIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
LSAgICBtb3ZlKFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRQb2lu
dGVyLCBkc3QpOworICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNt
Q29udGV4dEluc3RhbmNlUG9pbnRlciwgZHN0KTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnN0b3JlV2FzbUNvbnRleHQoR1BSUmVnIHNyYykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYykKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNf
SklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKFdh
c206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBzdG9yZVRvVExTUHRyKHNyYywg
ZmFzdFRMU09mZnNldEZvcktleShXVEZfV0FTTV9DT05URVhUX0tFWSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkud2FzbUNvbnRleHRQb2ludGVyKTsKKyAgICBtb3ZlKHNyYywgV2FzbTo6UGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiB9CiAKLWJv
b2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lz
dGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAg
aWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6
OnVzZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIGxvYWRGcm9tVExTUHRyTmVlZHNNYWNyb1Nj
cmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEFz
c2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIo
KQorYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYg
KFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIHN0b3JlVG9UTFNQdHJOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CkBAIC04NzUsMTAgKzg3NSwx
MCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKFZNJiB2bSwgVl9EZWJ1Z09wZXJh
dGlvbl9FUFAgZnVuY3Rpb24sIHZvaWQqIGFyZwogICAgIH0KIH0KIAotdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNh
dmVzQnVmZmVyKQogewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
QnVmZmVyT2Zmc2V0KCkpLCBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBjYWxs
ZWVTYXZlc0J1ZmZlcik7CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2
ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVy
U2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhNjhjMzY5
Li5jYzcwYTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTM2MCwyOCArMzYwLDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSKQogICAgIHsKICNp
ZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHZtR1BSLCBWTTo6dG9wVk1FbnRyeUZyYW1lT2Zmc2V0KCkpLCB2bUdQUik7Ci0gICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZt
R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBWTTo6dG9wRW50cnlGcmFtZU9m
ZnNldCgpKSwgdm1HUFIpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwodm1HUFIpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHZt
R1BSKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0p
CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihF
bnRyeUZyYW1lKiogdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAg
ICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQ
UlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0
cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAgICAgICAgbG9hZFB0
cih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVTRURf
UEFSQU0odm0pOwogICAgICAgICBVTlVTRURfUEFSQU0odXNlZFJlZ2lzdGVycyk7CiAjZW5kaWYK
ICAgICB9CiAKLSAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcihWTSYpOworICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiopOwogCi0gICAgdm9pZCBjb3B5Q2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCisgICAgdm9pZCBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50
cnlGcmFtZSoqIHRvcEVudHJ5RnJhbWUsIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAg
ewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJS
ZWcgdGVtcDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoMCk7CkBAIC0zOTIsOCArMzkyLDgg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogCiAgICAgICAgIC8vIENv
cHkgc2F2ZWQgY2FsbGVlU2F2ZXMgb24gc3RhY2sgb3IgdW5zYXZlZCBjYWxsZWVTYXZlcyBpbiBy
ZWdpc3RlciB0byB2bSBjYWxsZWVTYXZlIGJ1ZmZlcgotICAgICAgICBsb2FkUHRyKCZ2bS50b3BW
TUVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVudHJ5
RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHRlbXAxKTsKKyAgICAg
ICAgbG9hZFB0cih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVt
cDEpOwogCiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZN
OjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOwpAQCAtNDAxLDEyICs0MDEsMTIgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25l
ZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBS
ZWdpc3RlckF0T2Zmc2V0IHZtRW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KHZtRW50cnkucmVnKCkpKQorICAgICAgICAg
ICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAg
ICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogY3VycmVudEZy
YW1lRW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmZpbmQodm1FbnRyeS5yZWcoKSk7CisgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxs
ZWVTYXZlcy0+ZmluZChlbnRyeS5yZWcoKSk7CiAKLSAgICAgICAgICAgIGlmICh2bUVudHJ5LnJl
ZygpLmlzR1BSKCkpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKSB7CiAg
ICAgICAgICAgICAgICAgR1BSUmVnIHJlZ1RvU3RvcmU7CiAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRGcmFtZUVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgY2FsbGVlU2F2
ZSBmcm9tIHN0YWNrIGludG8gdGVtcCByZWdpc3RlcgpAQCAtNDE0LDkgKzQxNCw5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBjdXJyZW50RnJhbWVFbnRyeS0+b2Zmc2V0KCkpLCByZWdUb1N0b3JlKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBzdG9yZSBjYWxsZWUg
c2F2ZSBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICByZWdUb1N0b3JlID0gdm1FbnRyeS5y
ZWcoKS5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnVG9TdG9yZSA9IGVudHJ5LnJlZygp
LmdwcigpOwogCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0
ZW1wMSwgdm1FbnRyeS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1Rv
U3RvcmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvU3RvcmU7CiAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnRGcmFtZUVudHJ5KSB7CkBAIC00MjUsOSArNDI1LDkgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIGZwUmVnVG9TdG9yZSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3Qgc3RvcmUgY2FsbGVl
IHNhdmUgZGlyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gdm1FbnRy
eS5yZWcoKS5mcHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gZW50cnku
cmVnKCkuZnByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1RvU3RvcmUs
IEFkZHJlc3ModGVtcDEsIHZtRW50cnkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBzdG9y
ZURvdWJsZShmcFJlZ1RvU3RvcmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBAIC0xNjQ0LDE0ICsxNjQ0LDE0IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHZvaWQgbG9hZFdh
c21Db250ZXh0KEdQUlJlZyBkc3QpOwotICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dChHUFJSZWcg
c3JjKTsKLSAgICBzdGF0aWMgYm9vbCBsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJl
Z2lzdGVyKCk7Ci0gICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3Jh
dGNoUmVnaXN0ZXIoKTsKKyAgICB2b2lkIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBk
c3QpOworICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBzcmMpOworICAg
IHN0YXRpYyBib29sIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdp
c3RlcigpOworICAgIHN0YXRpYyBib29sIHN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2Fs
bGVlU2F2ZXNCdWZmZXIpOworICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CiAKICAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9iYXNlbGluZUNvZGVCbG9jazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA1ZWNmM2E2Li43Yzk0Y2JhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBKSVQ6OmVtaXRF
bnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFk
ZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1l
bnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRF
eGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CiAKLSAg
ICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3Rl
clRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQpOwog
ICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQ
UikpOwpAQCAtODg1LDcgKzg4NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAg
IC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBh
cmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KIApAQCAtOTA1
LDcgKzkwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkK
ICAgICAgICAgbV9leGNlcHRpb25IYW5kbGVyID0gbGFiZWwoKTsKICAgICAgICAgbV9leGNlcHRp
b25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAg
ICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRo
ZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggY2EyZGI4Yy4uZjIwMThjYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYs
OCArNTYsOCBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFt
ZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgCiAgICAgRXhlY1N0YXRlKiBzaGFkb3dD
aGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVud2lu
ZEZyb21DYWxsZXJGcmFtZSkgewotICAgICAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9
IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgRW50cnlG
cmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgICAgICBzaGFkb3dD
aGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwog
ICAgIH0KICAgICB2bS0+c2hhZG93Q2hpY2tlbigpLmxvZygqdm0sIHNoYWRvd0NoaWNrZW5Ub3BG
cmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aHJvd1BhY2tldCgpKTsKICAgICAKQEAgLTg0
LDcgKzg0LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJh
bWUsIFVud2luZFN0YXJ0IHVud2luZFN0YXJ0KQogICAgIH0gZWxzZQogICAgICAgICBjYXRjaFJv
dXRpbmUgPSBMTEludDo6Z2V0Q29kZVB0cihoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbik7CiAgICAg
Ci0gICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgQVNTRVJUKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2
bS0+dG9wRW50cnlGcmFtZSkpOwogCiAgICAgdm0tPmNhbGxGcmFtZUZvckNhdGNoID0gY2FsbEZy
YW1lOwogICAgIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyA9IGNhdGNoUm91dGluZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDliNDE2NmEuLmNiNjRi
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNDU1LDcg
KzQ1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BF
bnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UaHJvdywgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KCkpOwpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIHJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgcmVzdG9yZUNh
bGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlG
cmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2Fk
NjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJh
bWVSZWdpc3Rlcik7CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xv
b3BfaGludChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGkK
ICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9t
RnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVu
dHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1f
Ynl0ZWNvZGVPZmZzZXQpOwogICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hU
ZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBhMTIyOGQzLi42MDdhNDg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03NjUsNyArNzY1LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBj
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50
cnlGcmFtZSk7CiAgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
cmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgp
KTsKQEAgLTgyNiw3ICs4MjYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fc3RyaW5nKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0o
KSk7CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSks
IHJlZ1QzKTsKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUgZm9y
IHRoZSBoYW5kbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggYzA0Y2RjNC4uZTYzOTkzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xMDMsMTQgKzEwMywxNCBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqCiAgICAgVk0qIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4
ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVj
LT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7CiAgICAg
ICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZN
RW50cnlGcmFtZTsKKyAgICAgICAgZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOwogICAg
IH0KIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1F
bnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgdGhyb3dTdGFj
a092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKIH0KIApAQCAtMTIwLDEwICsxMjAs
MTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93RGl2aWRlRXJyb3IoRXhlY1N0
YXRlKiBleGVjKQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4
ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVj
LT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldp
dGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxs
ZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0
aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1l
LCBBU0NJSUxpdGVyYWwoIkRpdmlzaW9uIGJ5IHplcm8gb3IgZGl2aXNpb24gb3ZlcmZsb3cuIikp
KTsKIH0KQEAgLTEzMywxMCArMTMzLDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25U
aHJvd091dE9mQm91bmRzQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7
CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlG
cmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOwor
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1l
KTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1F
bnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5k
bGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFt
ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1lLCBBU0NJSUxpdGVyYWwoIk91dC1vZi1i
b3VuZHMgYWNjZXNzLiIpKSk7CiB9CkBAIC0xNDksOSArMTQ5LDkgQEAgaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIGlu
dDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4
ZWMsICp2bSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAwKSB7Ci0g
ICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsK
LSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50
cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNl
cih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1l
KTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsK
ICAgICB9CiAKQEAgLTE2NSw5ICsxNjUsOSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29uc3RydWN0QXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICBpbnQzMl90IG1p
c3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAqdm0s
IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAwKSB7Ci0gICAg
ICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAg
ICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlG
cmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUqIGVudHJ5
RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsK
ICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApp
bmRleCA5MmU0MmIxLi5lNDM5NjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCkBAIC02Niw3ICs2Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZtKQogICAgIC8v
IGV2ZW4gdGhvdWdoIHdlIHdvbid0IHVzZSBpdC4KICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAKLSAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwor
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0t
PnRvcEVudHJ5RnJhbWUpOwogCiAgICAgaml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29r
dXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMzYyLDcgKzM2
Miw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZN
KiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBrCiAgICAgLy8gSGFuZGxlIGFuIGV4Y2VwdGlv
bgogICAgIGV4Y2VwdGlvbkhhbmRsZXIubGluaygmaml0KTsKIAotICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFt
ZSk7CiAgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlciwg
JnZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZTlhMGQyYS4uMzUwMzVkYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKQEAgLTE4NzIsOCArMTg3Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25QcmludFN0ZEVycihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHByaW50CiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBWTUVudHJ5RnJhbWUqIHRv
cFZNRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBFeGVjU3RhdGUqIGNhbGxl
ckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZy
YW1lKiB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKKyAgICBFeGVjU3RhdGUqIGNh
bGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgaWYgKGNh
bGxlckZyYW1lKQogICAgICAgICB2bS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFtZShjYWxsZXJG
cmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDczNWU3
MWIuLjM2NjRlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcApAQCAtNDgxLDEzICs0ODEsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3Rh
Y2tfY2hlY2spCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZy
YW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5
RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7
CiAgICAgICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0u
dG9wVk1FbnRyeUZyYW1lOworICAgICAgICB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFt
ZTsKICAgICB9Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKCZ2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
V2l0aFJlc3RvcmUgdHJhY2VyKCZ2bSwgdG9wRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogCiAg
ICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50VGh1bmtzLmNwcAppbmRleCAzNmY2NDg2Li41Mjk2N2UzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyArMTE2
LDcgQEAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvTmF0aXZlKHZvaWQqIGV4ZWN1dGFibGVBZGRy
ZXNzLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAotZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKFZN
RW50cnlGcmFtZSogZW50cnlGcmFtZSkKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29yZCogdm1FbnRy
eVJlY29yZChFbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQogewogICAgIC8vIFRoZSBDIExvb3AgZG9l
c24ndCBoYXZlIGFueSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMsIHNvIHRoZSBWTUVudHJ5UmVjb3Jk
IGlzIGFsbG9jYXRlZCBhdCB0aGUgYmFzZSBvZiB0aGUgZnJhbWUuCiAgICAgaW50cHRyX3Qgc3Rh
Y2tBbGlnbm1lbnQgPSBzdGFja0FsaWdubWVudEJ5dGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggNWRkZTY2NC4u
N2JmMWVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQpAQCAtNjU5LDcgKzY1OSw3IEBAIGVuZAogCiBtYWNybyBjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLCB0ZW1wKQogICAgIGlm
IEFSTTY0IG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCi0gICAgICAgIGxvYWRwIFZNOjp0b3BWTUVu
dHJ5RnJhbWVbdm1dLCB0ZW1wCisgICAgICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwg
dGVtcAogICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAsIHRlbXApCiAgICAgICAgIGxlYXAgVk1F
bnRyeVJlY29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlclt0ZW1wXSwgdGVtcAogICAgICAg
ICBpZiBBUk02NApAQCAtNzAxLDcgKzcwMSw3IEBAIGVuZAogCiBtYWNybyByZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAgICAgaWYg
QVJNNjQgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRvcFZNRW50
cnlGcmFtZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1dLCB0
ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBWTUVu
dHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAgICAgICAg
IGlmIEFSTTY0CkBAIC0xMTQ0LDcgKzExNDQsNyBAQCBpZiBub3QgQ19MT09QCiAgICAgICAgIHN0
b3JlcCBhZGRyZXNzLCBWTTo6bV9sYXN0U3RhY2tUb3Bbdm1dCiAgICAgICAgIHJldAogICAgIAot
ICAgICMgVk1FbnRyeVJlY29yZCogdm1FbnRyeVJlY29yZChjb25zdCBWTUVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUpCisgICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0IEVudHJ5
RnJhbWUqIGVudHJ5RnJhbWUpCiAgICAgZ2xvYmFsIF92bUVudHJ5UmVjb3JkCiAgICAgX3ZtRW50
cnlSZWNvcmQ6CiAgICAgICAgIGlmIFg4NiBvciBYODZfV0lOCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4
IDExNGE5NzguLjMzMDkwZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMjUsOCArMTI1LDggQEAg
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29yZDo6
bV92bVtzcF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9yZXAg
dDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBWTTo6
dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1f
cHJldlRvcFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0s
IHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3Nw
XQogCiAgICAgIyBBbGlnbiBzdGFjayBwb2ludGVyCiAgICAgaWYgWDg2X1dJTiBvciBNSVBTCkBA
IC0xODksOCArMTg5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJl
dlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9wQ2FsbEZyYW1lW3Q1
XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0sIHQ0
Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAgIGxvYWRwIFZNRW50
cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0b3JlcCB0NCwgVk06
OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNmciwgQ2Fs
bGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTI0MSw3ICsyNDEsNyBAQCBtYWNybyBkb1ZNRW50
cnkobWFrZUNhbGwpCiAKIC5jb3B5QXJnc0RvbmU6CiAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2Fs
bEZyYW1lW3ZtXQotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAg
c3RvcmVwIGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBtYWtlQ2FsbChlbnRyeSwg
dDMsIHQ0KQogCkBAIC0yNTUsOCArMjU1LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQog
ICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlS
ZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9w
Q2FsbEZyYW1lW3Q1XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlG
cmFtZVtzcF0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAg
IGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0
b3JlcCB0NCwgVk06OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBz
dWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTMyNCw4ICszMjQsOCBAQCBf
aGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtz
cF0sIHQzCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwg
dDUKICAgICBzdG9yZXAgdDUsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAgVk1FbnRy
eVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDUKLSAgICBzdG9yZXAgdDUsIFZN
Ojp0b3BWTUVudHJ5RnJhbWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
RW50cnlGcmFtZVtzcF0sIHQ1CisgICAgc3RvcmVwIHQ1LCBWTTo6dG9wRW50cnlGcmFtZVt0M10K
IAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXpl
LCB0MwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQppbmRleCBlMzdhMGY2Li45NTkwOTMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMTI5
LDggKzEyOSw4IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBzdG9yZXAgdm0sIFZN
RW50cnlSZWNvcmQ6Om1fdm1bc3BdCiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2bV0sIHQ0
CiAgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3BdCi0g
ICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTUVu
dHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdCisgICAgbG9hZHAgVk06OnRvcEVu
dHJ5RnJhbWVbdm1dLCB0NAorICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
RW50cnlGcmFtZVtzcF0KIAogICAgIGxvYWRpIFByb3RvQ2FsbEZyYW1lOjpwYWRkZWRBcmdDb3Vu
dFtwcm90b0NhbGxGcmFtZV0sIHQ0CiAgICAgYWRkcCBDYWxsRnJhbWVIZWFkZXJTbG90cywgdDQs
IHQ0CkBAIC0xNzEsOCArMTcxLDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxv
YWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bdDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6
Om1fcHJldlRvcENhbGxGcmFtZVt0NF0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRyYVRl
bXBSZWcsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJhVGVt
cFJlZywgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjpt
X3ByZXZUb3BFbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJhVGVt
cFJlZywgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0
ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjIwLDcgKzIyMCw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtl
Q2FsbCkKICAgICBlbHNlCiAgICAgICAgIHN0b3JlcCBzcCwgVk06OnRvcENhbGxGcmFtZVt2bV0K
ICAgICBlbmQKLSAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIHN0
b3JlcCBjZnIsIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXQogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoZXh0cmFUZW1wUmVnLCAweGJhZDBkYzAyKQogCkBAIC0yMzYsOCArMjM2LDggQEAg
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1b
dDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0NF0s
IHQyCiAgICAgc3RvcmVwIHQyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQotICAgIGxvYWRwIFZNRW50
cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0NF0sIHQyCi0gICAgc3RvcmVwIHQyLCBW
TTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRv
cEVudHJ5RnJhbWVbdDRdLCB0MgorICAgIHN0b3JlcCB0MiwgVk06OnRvcEVudHJ5RnJhbWVbdm1d
CiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjc2LDcg
KzI3Niw2IEBAIG1hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1wKQogICAgIGVu
ZAogZW5kCiAKLQogX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIENhbGxlZVtj
ZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwpAQCAtMjkxLDggKzI5MCw4IEBA
IF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3Zt
W3QyXSwgdDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbdDJd
LCBleHRyYVRlbXBSZWcKICAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wQ2FsbEZyYW1l
W3QzXQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0Ml0s
IGV4dHJhVGVtcFJlZwotICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BWTUVudHJ5RnJh
bWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0Ml0s
IGV4dHJhVGVtcFJlZworICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BFbnRyeUZyYW1l
W3QzXQogCiAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHNwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYTVhNTNjNi4uMmEyYmJk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQwNiw3
ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICAg
ICAgT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSA9IGZhbHNlOwogCiAgICAgaWYgKCFPcHRpb25z
Ojp1c2VXZWJBc3NlbWJseSgpKQotICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RU
TFMoKSA9IGZhbHNlOworICAgICAgICBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQo
KSA9IGZhbHNlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKQogICAg
ICAgICB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDNjZWM1NTIuLjg0NzVjMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ2Nyw4ICs0NjcsNyBAQCB0eXBlZGVmIGNv
bnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZhc3RN
ZW1vcnlSZWR6b25lUGFnZXMsIDEyOCwgTm9ybWFsLCAiV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmll
cyB1c2UgNEdpQiB2aXJ0dWFsIGFsbG9jYXRpb25zLCBwbHVzIGEgcmVkem9uZSAoY291bnRlZCBh
cyBtdWx0aXBsZSBvZiA2NEtpQiBXZWJBc3NlbWJseSBwYWdlcykgYXQgdGhlIGVuZCB0byBjYXRj
aCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZCAzMi1iaXQsIGFueXRoaW5nIGJleW9uZCB0
aGUgcmVkem9uZSBpcyBleHBsaWNpdGx5IGJvdW5kcy1jaGVja2VkIikgXAogICAgIHYoYm9vbCwg
Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9yeSBmb3Igd2FzbS4i
KSBcCiAgICAgdih1bnNpZ25lZCwgbWF4TnVtV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMsIDQsIE5v
cm1hbCwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0cnVl
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwg
c3RvcmFnZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikgXAotICAgIHYo
Ym9vbCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlIChh
bmQgZmFzdCBUTFMgaXMgZW5hYmxlZCksIHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0IFRM
Uy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAorICAgIHYoYm9v
bCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3
aWxsIHN0b3JlIGNvbnRleHQgaW4gZmFzdCBUTFMuIElmIGZhbHNlLCB3ZSB3aWxsIHBpbiBpdCB0
byBhIHJlZ2lzdGVyLiIpIFwKICAgICB2KGJvb2wsIHVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRv
SlNDYWxscywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgQ2FsbExpbmtJbmZv
IHRvIGlubGluZSBjYWNoZSBXYXNtIHRvIEpTIGNhbGxzLiIpIFwKICAgICB2KGJvb2wsIHVzZU9i
amVjdFJlc3RTcHJlYWQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZW5hYmxlIE9i
amVjdCBSZXN0L1NwcmVhZCBmZWF0dXJlLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxsb2Nh
dGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5v
cm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9u
IHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4IGE0
YmU5NWIuLjNiY2Y2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBGcmFt
ZVdhbGtlcihWTSYgdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBjb25zdCBBYnN0cmFjdExvY2tl
ciYgY29kZUJsb2NrU2V0TG9ja2VyLCBjb25zdCBBYnN0cmFjdExvY2tlciYgbWFjaGluZVRocmVh
ZHNMb2NrZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX2NhbGxGcmFtZShjYWxs
RnJhbWUpCi0gICAgICAgICwgbV92bUVudHJ5RnJhbWUodm0udG9wVk1FbnRyeUZyYW1lKQorICAg
ICAgICAsIG1fZW50cnlGcmFtZSh2bS50b3BFbnRyeUZyYW1lKQogICAgICAgICAsIG1fY29kZUJs
b2NrU2V0TG9ja2VyKGNvZGVCbG9ja1NldExvY2tlcikKICAgICAgICAgLCBtX21hY2hpbmVUaHJl
YWRzTG9ja2VyKG1hY2hpbmVUaHJlYWRzTG9ja2VyKQogICAgIHsKQEAgLTEzMCw3ICsxMzAsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgU1VQUFJFU1NfQVNBTgogICAgIHZvaWQgYWR2YW5jZVRvUGFyZW50
RnJhbWUoKQogICAgIHsKLSAgICAgICAgbV9jYWxsRnJhbWUgPSBtX2NhbGxGcmFtZS0+dW5zYWZl
Q2FsbGVyRnJhbWUobV92bUVudHJ5RnJhbWUpOworICAgICAgICBtX2NhbGxGcmFtZSA9IG1fY2Fs
bEZyYW1lLT51bnNhZmVDYWxsZXJGcmFtZShtX2VudHJ5RnJhbWUpOwogICAgIH0KIAogICAgIGJv
b2wgaXNBdFRvcCgpIGNvbnN0CkBAIC0xODgsNyArMTg4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAg
Vk0mIG1fdm07CiAgICAgRXhlY1N0YXRlKiBtX2NhbGxGcmFtZTsKLSAgICBWTUVudHJ5RnJhbWUq
IG1fdm1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fZW50cnlGcmFtZTsKICAgICBjb25z
dCBBYnN0cmFjdExvY2tlciYgbV9jb2RlQmxvY2tTZXRMb2NrZXI7CiAgICAgY29uc3QgQWJzdHJh
Y3RMb2NrZXImIG1fbWFjaGluZVRocmVhZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxpbmdPdXQg
eyBmYWxzZSB9OwpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJv
Y2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgLy8gV2UgcmV1c2Ug
TExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0byBjaGVj
ayBmb3IgYm90aCBqaXQgdHlwZXMuCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhbHNv
IGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZlbiB0
aG91Z2gKICAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUgcmVhc29u
IHRoYXQgdGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZHIGZyYW1l
LAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0
IGEgVk1FbnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAgICAgICAg
ICAvLyBhbmQgd2UgZW5kIHVwIGhhdmluZyB0byB1bndpbmQgcGFzdCBhbiBFbnRyeUZyYW1lLCB3
ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExM
SW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0
IHRoaXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5jcHAKaW5kZXggMDZlOTMwMy4uNGM2NWQ2MiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDEzIEBAIFRo
cm93U2NvcGU6On5UaHJvd1Njb3BlKCkKIAogICAgIGJvb2wgd2lsbEJlSGFuZGxlQnlMTEludE9y
SklUID0gZmFsc2U7CiAgICAgdm9pZCogcHJldmlvdXNTY29wZSA9IG1fcHJldmlvdXNTY29wZTsK
LSAgICB2b2lkKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKKyAgICB2
b2lkKiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOwogCi0gICAgLy8gSWYgdGhl
IHRvcFZNRW50cnlGcmFtZSB3YXMgcHVzaGVkIG9uIHRoZSBzdGFjayBhZnRlciB0aGUgcHJldmlv
dXNTY29wZSB3YXMgaW5zdGFudGlhdGVkLAorICAgIC8vIElmIHRoZSB0b3BFbnRyeUZyYW1lIHdh
cyBwdXNoZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBpbnN0YW50
aWF0ZWQsCiAgICAgLy8gdGhlbiB0aGlzIHRocm93U2NvcGUgd2lsbCBiZSByZXR1cm5pbmcgdG8g
TExJTlQgb3IgSklUIGNvZGUgdGhhdCBhbHdheXMgZG8gYW4gZXhjZXB0aW9uCiAgICAgLy8gY2hl
Y2suIEluIHRoYXQgY2FzZSwgc2tpcCB0aGUgc2ltdWxhdGVkIHRocm93IGJlY2F1c2UgdGhlIExM
SW50IGFuZCBKSVQgd2lsbCBiZQogICAgIC8vIGNoZWNraW5nIGZvciB0aGUgZXhjZXB0aW9uIHRo
ZWlyIG93biB3YXkgaW5zdGVhZCBvZiBjYWxsaW5nIFRocm93U2NvcGU6OmV4Y2VwdGlvbigpLgot
ICAgIGlmICh0b3BWTUVudHJ5RnJhbWUgJiYgcHJldmlvdXNTY29wZSA+IHRvcFZNRW50cnlGcmFt
ZSkKKyAgICBpZiAodG9wRW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wRW50cnlGcmFt
ZSkKICAgICAgICAgd2lsbEJlSGFuZGxlQnlMTEludE9ySklUID0gdHJ1ZTsKICAgICAKICAgICBp
ZiAoIXdpbGxCZUhhbmRsZUJ5TExJbnRPckpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAppbmRleCAxODFlM2I3Li4zZWU1MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogI2VuZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0
YSgwKQotICAgICwgdG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCisgICAgLCB0b3BFbnRyeUZyYW1l
KG51bGxwdHIpCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQogICAg
ICwgcHJvbWlzZURlZmVycmVkVGltZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRU
aW1lcj4oKnRoaXMpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVs
dCA/IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkgOiBuZXcgQXRvbWljU3Ry
aW5nVGFibGUpCkBAIC0zNjgsNyArMzY4LDcgQEAgVk06On5WTSgpCiAgICAgcHJvbWlzZURlZmVy
cmVkVGltZXItPnN0b3BSdW5uaW5nVGFza3MoKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgaWYgKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSkKLSAgICAgICAgV2FzbTo6ZW5z
dXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JWTSgqdGhpcyk7CisgICAgICAgIFdhc206OmVu
c3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yQ29udGV4dCh3YXNtQ29udGV4dCk7CiAjZW5k
aWYKICAgICBpZiAoVU5MSUtFTFkobV93YXRjaGRvZykpCiAgICAgICAgIG1fd2F0Y2hkb2ctPndp
bGxEZXN0cm95Vk0odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5NTU4
NTk0Li5kMjBlMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU1LDYgKzU1
LDcgQEAKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJW
TUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIldhc21Db250
ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRl
ckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgpAQCAtMzI5
LDE0ICszMzAsMTUgQEAgcHVibGljOgogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnRE
YXRhKiBjbGllbnREYXRhOwotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOworICAg
IEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWU7CiAgICAgLy8gTk9URTogV2hlbiB0aHJvd2luZyBh
biBleGNlcHRpb24gd2hpbGUgcm9sbGluZyBiYWNrIHRoZSBjYWxsIGZyYW1lLCB0aGlzIG1heSBi
ZSBlcXVhbCB0bwotICAgIC8vIHRvcFZNRW50cnlGcmFtZS4KKyAgICAvLyB0b3BFbnRyeUZyYW1l
LgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHZvaWQqLCBiZWNhdXNlIGl0IG1pZ2h0
IG5vdCBwb2ludCB0byBhIENhbGxGcmFtZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNDQxCiAgICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWUgeyBu
dWxscHRyIH07Ci0gICAgLy8gRklYTUU6IFNhdmUgdGhpcyBzdGF0ZSBlbHNld2hlcmUgdG8gYWxs
b3cgUElDLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NzczCi0g
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCB7IG51bGxwdHIgfTsKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisgICAgV2FzbTo6Q29udGV4dCB3YXNtQ29udGV4dDsKKyNlbmRp
ZgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8
U3RydWN0dXJlPiBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CkBAIC01MDEsOSArNTAzLDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0YXJnZXRNYWNo
aW5lUENGb3JUaHJvdyk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCB0b3BWTUVudHJ5
RnJhbWVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdG9wRW50cnlGcmFtZU9mZnNldCgp
CiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0b3BWTUVudHJ5RnJh
bWUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0b3BFbnRyeUZyYW1lKTsK
ICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4
Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCBkZWFhNDQ5Li44NzNkMzU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtODksNyArODksNyBAQCBpbmxp
bmUgQ2FsbEZyYW1lKiBzYW5pdGl6ZWRUb3BDYWxsRnJhbWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJh
bWUpCiAgICAgcmV0dXJuIHRvcENhbGxGcmFtZTsKIH0KIAotc3RhdGljIGJvb2wgaXNTYW5lRnJh
bWUoQ2FsbEZyYW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgVk1FbnRyeUZyYW1l
KiBlbnRyeUZyYW1lLCBTdGFja0JvdW5kcyBzdGFja0JvdW5kcykKK3N0YXRpYyBib29sIGlzU2Fu
ZUZyYW1lKENhbGxGcmFtZSogZnJhbWUsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEVudHJ5RnJh
bWUqIGVudHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzKQogewogICAgIGlmIChyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihmcmFtZSkgPj0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW50
cnlGcmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMSwxOCArMTIxLDE4IEBAIHZv
aWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhTaWduYWxDb250ZXh0JiBjb250
ZXh0LCBTdGFja0JvdW5kcyBzdGFjCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBmb3VuZENvZGVC
bG9jayA9IG51bGxwdHI7Ci0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS50b3BW
TUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJh
bWU7CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY2FsbGVlIHRvIHN0YXJ0IHdpdGguIFNvLCB1
c2UgdGhlIGVuZCBvZiB0aGUgc3RhY2sgdG8ga2VlcCB0aGUKICAgICAvLyBpc1NhbmVGcmFtZSgp
IGNoZWNrZXIgYmVsb3cgaGFwcHkgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb24uIEl0IHdpbGwgc3Rp
bGwgY2hlY2sKICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgYWRkcmVzcyBpcyBpbiB0aGUgc3Rh
Y2tCb3VuZHMuCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Q2FsbEZyYW1lKj4oc3RhY2tCb3VuZHMuZW5kKCkpOwogCi0gICAgaWYgKCF2bUVudHJ5RnJhbWUg
fHwgIWNhbGxGcmFtZSkKKyAgICBpZiAoIWVudHJ5RnJhbWUgfHwgIWNhbGxGcmFtZSkKICAgICAg
ICAgcmV0dXJuOyAvLyBOb3QgcnVubmluZyBKUyBjb2RlLiBMZXQgdGhlIFNpZ25hbFNlbmRlciB0
cnkgYWdhaW4gbGF0ZXIuCiAKICAgICBkbyB7Ci0gICAgICAgIGlmICghaXNTYW5lRnJhbWUoY2Fs
bEZyYW1lLCBjYWxsZWVGcmFtZSwgdm1FbnRyeUZyYW1lLCBzdGFja0JvdW5kcykpCisgICAgICAg
IGlmICghaXNTYW5lRnJhbWUoY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZW50cnlGcmFtZSwgc3Rh
Y2tCb3VuZHMpKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0
cnkgYWdhaW4gbGF0ZXIuCiAKICAgICAgICAgQ29kZUJsb2NrKiBjYW5kaWRhdGVDb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTQyLDkgKzE0Miw5IEBAIHZvaWQgVk1UcmFw
czo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhTaWduYWxDb250ZXh0JiBjb250ZXh0LCBTdGFj
a0JvdW5kcyBzdGFjCiAgICAgICAgIH0KIAogICAgICAgICBjYWxsZWVGcmFtZSA9IGNhbGxGcmFt
ZTsKLSAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJh
bWUpOworICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJh
bWUpOwogCi0gICAgfSB3aGlsZSAoY2FsbEZyYW1lICYmIHZtRW50cnlGcmFtZSk7CisgICAgfSB3
aGlsZSAoY2FsbEZyYW1lICYmIGVudHJ5RnJhbWUpOwogCiAgICAgaWYgKCFmb3VuZENvZGVCbG9j
aykgewogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBqdXN0IGVudGVyZWQgdGhlIGZyYW1lIGFuZCB0
aGUgY29kZUJsb2NrIHBvaW50ZXIgaXMgbm90CkBAIC0xODEsMTcgKzE4MSwxNyBAQCB2b2lkIFZN
VHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjayhMb2NrZXI8TG9jaz4mLCBFeGVjU3Rh
dGUqIHRvcENhbGxGcmFtZQogCiAgICAgbV9uZWVkVG9JbnZhbGlkYXRlZENvZGVCbG9ja3MgPSBm
YWxzZTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0oKS50b3BWTUVudHJ5
RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtKCkudG9wRW50cnlGcmFtZTsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHRvcENhbGxGcmFtZTsKIAotICAgIGlmICghdm1F
bnRyeUZyYW1lKQorICAgIGlmICghZW50cnlGcmFtZSkKICAgICAgICAgcmV0dXJuOyAvLyBOb3Qg
cnVubmluZyBKUyBjb2RlLiBOb3RoaW5nIHRvIGludmFsaWRhdGUuCiAKICAgICB3aGlsZSAoY2Fs
bEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdK
SVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNv
bihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwotICAgICAgICBjYWxsRnJhbWUgPSBj
YWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgICAgIGNhbGxGcmFtZSA9
IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggYWQ3
ZDYyMS4uYWY2Y2ZlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcApAQCAtNDksOCArNDksNiBAQAogI2luY2x1ZGUgIkIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRl
ICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKQEAgLTE3OCw3ICsxNzYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9
IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIFRpZXJVcENvdW50Kik7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1
aW50MzJfdCk7CkBAIC0yNDcsNyArMjQ1LDcgQEAgcHJpdmF0ZToKIAogICAgIGludDMyX3QgV0FS
Tl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1
aW50MzJfdCk7CiAKLSAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmLCBCYXNp
Y0Jsb2NrKiwgVmFsdWUqKTsKKyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKFBy
b2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFzc2Vt
Ymx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2Us
IFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKIAogICAgIE9yaWdpbiBvcmlnaW4oKTsKQEAgLTI2
Nyw3ICsyNjUsNyBAQCBwcml2YXRlOgogICAgIEluc2VydGlvblNldCBtX2NvbnN0YW50SW5zZXJ0
aW9uVmFsdWVzOwogICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07
CiAgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKLSAgICBHUFJS
ZWcgbV93YXNtQ29udGV4dEdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNt
Q29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIGJvb2wgbV9tYWtlc0Nh
bGxzIHsgZmFsc2UgfTsKIAogICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWUgeyBudWxscHRyIH07
IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2Ug
dmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4KQEAgLTI5MSwzNyArMjg5LDM3IEBAIGlu
dDMyX3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlw
ZSYgcHRyLCB1aW50MzJfdCBvZmZzCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBCM0lS
R2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2Nr
KiBibG9jaywgVmFsdWUqIGFyZykKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250
ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVmFsdWUqIGFy
ZykKIHsKLSAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChDb250ZXh0
Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0g
YmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4o
KSk7Ci0gICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHROZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCkpCisgICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNv
bnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsK
ICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250
ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVXYXNtQ29udGV4dChwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6
c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1swXS5ncHIo
KSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJ
WE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dCByZWdpc3Rl
ciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBj
YWxsZXIgc2lkZS4KKyAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJl
cnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwg
d2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAvLyBUaGlzIHBy
ZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11
dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBCMzo6Vm9pZCwgT3JpZ2lu
KCkpOwogICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICBlZmZlY3Rz
LndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6
OnRvcCgpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOwotICAgIHBhdGNocG9p
bnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRHUFIpKTsKKyAgICBwYXRj
aHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIp
KTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKLSAgICBHUFJSZWcgd2FzbUNvbnRleHRHUFIgPSBtX3dhc21Db250ZXh0R1BS
OworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gbV93YXNtQ29udGV4dEluc3Rh
bmNlR1BSOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7Ci0gICAgICAgIGpp
dC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEdQUik7CisgICAgICAgIGppdC5tb3Zl
KHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAgICB9KTsKIH0KIAot
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCitCM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29t
cGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGll
clVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikK
ICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2NvbXBpbGF0
aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCkBAIC0zMzksOSArMzM3LDkgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUKICAgICBtX21lbW9yeUJhc2VHUFIgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQ
b2ludGVyOwogICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOwogCi0gICAg
bV93YXNtQ29udGV4dEdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRQb2ludGVyOwotICAgIGlm
ICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1f
d2FzbUNvbnRleHRHUFIpOworICAgIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJl
Z3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CisgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0
VExTKCkpCisgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX3dhc21Db250ZXh0SW5zdGFuY2VH
UFIpOwogCiAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CiAgICAgICAg
IEFTU0VSVCghcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOwpAQCAtMzUw
LDYgKzM0OCw5IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICBtX3Byb2Mu
cGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIpOwogICAgIH0KIAorICAgIGlmICh0aHJv
d1dhc21FeGNlcHRpb24pCisgICAgICAgIFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNt
RXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CisKICAgICBpZiAoaW5mby5tZW1vcnkpIHsK
ICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBAIC0zNjMsNiArMzY0LDE2IEBA
IEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlz
LT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9y
eUFjY2Vzcyk7CiAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAg
ICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgIC8vIE1vc3QgbWVt
b3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0IGV4Y2Vw
dGlvbiBjaGVjayBiZWNhdXNlIHRoZXkgY2FuIHJlbHkgb24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0
ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIEZhdWx0U2lnbmFsSGFuZGxlciBub25ldGhlbGVz
cyBuZWVkcyB0aGUgdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0aGF0IHRo
dW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAgICAgd2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUoJmNvbXBpbGF0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKQEAg
LTM3MywxMiArMzg0LDEyIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgIG1faW5z
dGFuY2VWYWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVjazsKICAgICAgICAgc3RhY2tPdmVyZmxvd0No
ZWNrLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKTsKICAgICAgICAgc3RhY2tPdmVy
Zmxvd0NoZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7
Ci0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0IHJlZ2lz
dGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhl
IGNhbGxlciBzaWRlLgorICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAg
ICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21D
b250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQg
dG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCiAgICAgICAgICAgICAvLyBUaGlzIHBy
ZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11
dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5l
ZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOwogICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0No
ZWNrLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZs
b3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEdQ
Uik7CisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnJlc3VsdENvbnN0cmFpbnQgPSBW
YWx1ZVJlcDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAgICAgICAgIH0KICAgICAg
ICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOwogICAgICAg
ICBzdGFja092ZXJmbG93Q2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKQEAgLTQwMSw3
ICs0MTIsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgYm9vbCBuZWVk
VW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlv
bnM6OnJlc2VydmVkWm9uZVNpemUoKTsKICAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0No
ZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVudENoZWNr
U2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CiAKLSAgICAgICAgICAgIEdQUlJlZyBjb250ZXh0
ID0gdXNlRmFzdFRMU0ZvckNvbnRleHQoKSA/IHBhcmFtc1swXS5ncHIoKSA6IG1fd2FzbUNvbnRl
eHRHUFI7CisgICAgICAgICAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNl
RmFzdFRMUygpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwog
CiAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3Rh
Y2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCiAgICAgICAgICAgICAvLyBj
ZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUg
dGhlIGNoZWNrLgpAQCAtNDExLDEwICs0MjIsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVy
YXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUK
ICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwog
ICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7CiAK
LSAgICAgICAgICAgICAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBp
ZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKIAotICAgICAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0LCBDb250ZXh0OjpvZmZzZXRP
ZkNhY2hlZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOwogICAgICAg
ICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6
ZSksIGZwLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5kZXJmbG93
Q2hlY2spKQpAQCAtNDIzLDEwICs0MzQsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAg
ICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3cs
IENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3Zl
cmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiB1c2VGYXN0
VExTRm9yQ29udGV4dCgpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNl
VmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgICAgICAgICAgLy8gTm8g
b3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBu
ZWVkcyB0byBiZSBjb3JyZWN0LgotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250
ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9h
ZFdhc21Db250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21D
b250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEg
cG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBiZWNhdXNlIGl0IGlzbid0IHVzZWQs
IGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZlY3RzIChw
b3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92
ZWQuCiAgICAgICAgICAgICB9CkBAIC00MzgsNyArNDQ5LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9j
ZWR1cmUKIAogdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0
ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBWYWx1ZSogaW5zdGFuY2UsIFByb2Nl
ZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7Ci0gICAgcmVzdG9yZVdhc21Db250ZXh0
KHByb2MsIGJsb2NrLCBpbnN0YW5jZSk7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2Uo
cHJvYywgYmxvY2ssIGluc3RhbmNlKTsKIAogICAgIGlmICghIW1lbW9yeSkgewogICAgICAgICBj
b25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKTsKQEAgLTQ1OCwxMiArNDY5LDEyIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9y
ZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yCiAK
ICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9p
bnRlcjsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJh
bXNbMF0uZ3ByKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJh
c2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHBhcmFtc1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1v
cnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBw
aW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNp
emUoKSA+PSAxKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7
IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxh
dGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdh
c206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnks
IFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3Nb
aV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6
ZVJlZ2lzdGVyKTsKICAgICAgICAgfSk7CkBAIC01NDEsMjQgKzU1MiwyMiBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAogCiBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBpbnQzMl90ICgqZ3Jvd01lbW9y
eSkgKENvbnRleHQqLCBpbnQzMl90KSA9IFtdIChDb250ZXh0KiB3YXNtQ29udGV4dCwgaW50MzJf
dCBkZWx0YSkgLT4gaW50MzJfdCB7Ci0gICAgICAgIFZNJiB2bSA9ICp3YXNtQ29udGV4dC0+dm0o
KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
ICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHdhc21NZW1vcnkgPSB3YXNtQ29udGV4dC0+bWVtb3J5
KCk7Ci0KKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwg
aW50MzJfdCkgPSBbXSAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBk
ZWx0YSkgLT4gaW50MzJfdCB7CiAgICAgICAgIGlmIChkZWx0YSA8IDApCiAgICAgICAgICAgICBy
ZXR1cm4gLTE7CiAKLSAgICAgICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUg
PSBmYWxzZTsKLSAgICAgICAgLy8gZ3JvdygpIGRvZXMgbm90IHJlcXVpcmUgRXhlY1N0YXRlKiBp
ZiBpdCBkb2Vzbid0IHRocm93IGV4Y2VwdGlvbnMuCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IG51bGxwdHI7Ci0gICAgICAgIFBhZ2VDb3VudCByZXN1bHQgPSB3YXNtTWVtb3J5LT5ncm93KHZt
LCBleGVjLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGVsdGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlv
bnNPbkZhaWx1cmUpOwotICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsK
LSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGF1
dG8gZ3Jvd24gPSBpbnN0YW5jZS0+aW50ZXJuYWxNZW1vcnkoKS5ncm93KFBhZ2VDb3VudChkZWx0
YSkpOworICAgICAgICBpZiAoIWdyb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdyb3duLmVy
cm9yKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxp
ZERlbHRhOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlk
R3Jvd1NpemU6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OldvdWxk
RXhjZWVkTWF4aW11bToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6
T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQor
ICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5wYWdlQ291bnQoKTsKKyAgICAgICAg
cmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7CiAgICAgfTsKIAogICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3Jp
Z2luKCksCkBAIC01NzIsMTMgKzU4MSwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dN
ZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSk7CisgICAgVmFsdWUqIG1lbW9yeU9iamVj
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJf
dD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSkpOwogCi0gICAg
c3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUlu
c3RhbmNlKj4obnVsbHB0ciktPm1lbW9yeSgpLT5tZW1vcnkoKS5zaXplKCkpKSA9PSBzaXplb2Yo
dWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7Ci0gICAgVmFsdWUqIHNp
emUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEludDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFz
c2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KGRlY2x0eXBlKHN0YXRpY19jYXN0PFdhc206Ok1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9
PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAg
VmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90
PihXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7CiAgICAgCiAgICAgY29uc3RleHByIHVp
bnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKLSAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFn
ZVNpemUgPT0gMSA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJl
bG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VT
aXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBi
ZWxvdyB0byBiZSBjb3JyZWN0LiIpOwogICAgIFZhbHVlKiBudW1QYWdlcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCksCiAgICAgICAgIHNp
emUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCBzaGlmdFZhbHVlKSk7CiAKQEAgLTEwNjksMTQgKzEwNzgsMTMgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLAogICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1f
bWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkp
KTsKIAogICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNhbiBiZSBsaW5rZWQgaGVyZSwgaW5zdGVh
ZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwgYmVjYXVzZSBhbGwgaW1wb3J0IHN0dWJzIGFy
ZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0aW9uIHN0YXJ0cy4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgotICAgICAgICBWYWx1ZSogZnVuY3Rpb25J
bXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGlu
dDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihmdW5j
dGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSoganNUeXBlT2ZJbXBvcnQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2luKCksIGZ1
bmN0aW9uSW1wb3J0LCBzYWZlQ2FzdDxpbnQzMl90PihKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSk7Ci0gICAgICAgIFZhbHVlKiBpc1dhc21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgV2Vi
QXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKyAgICAgICAgVmFsdWUqIHRhcmdldEluc3RhbmNlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRl
eCkpKTsKKyAgICAgICAgVmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgdGFyZ2V0SW5zdGFuY2UsIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAw
KSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2so
KTsKLSAgICAgICAgQmFzaWNCbG9jayogaXNKU0Jsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwog
ICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpC
cmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2sp
LCBGcmVxdWVudGVkQmxvY2soaXNKU0Jsb2NrKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNt
Q2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlzRW1i
ZWRkZXJCbG9jaykpOwogCiAgICAgICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxs
aW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwg
YXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTA5NywxNSArMTEwNSwxNSBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsCiAgICAgICAgIFVwc2lsb25WYWx1ZSogd2FzbUNhbGxSZXN1bHRVcHNpbG9uID0g
cmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzV2FzbUJsb2NrLT5hcHBlbmROZXc8VXBz
aWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNtQ2FsbFJlc3VsdCk7CiAgICAgICAgIGlz
V2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwg
Y29udGludWF0aW9uKTsKIAotICAgICAgICAvLyBGSVhNRTogTGV0cyByZW1vdmUgdGhpcyBpbmRp
cmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmllbmRseSBJQworICAgICAgICAvLyBGSVhNRTog
TGV0J3MgcmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24gYnkgY3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkg
SUMKICAgICAgICAgLy8gZm9yIGNhbGxzIG91dCB0byBKUy4gVGhpcyBzaG91bGRuJ3QgYmUgdGhh
dCBoYXJkIHRvIGRvLiBXZSBjb3VsZCBwcm9iYWJseQogICAgICAgICAvLyBpbXBsZW1lbnQgdGhl
IElDIHRvIGJlIG92ZXIgV2FzbTo6Q29udGV4dCouCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzNzUKLSAgICAgICAgVmFsdWUqIGNvZGVCbG9j
ayA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAg
ICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2Fz
dDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpKTsK
LSAgICAgICAgVmFsdWUqIGp1bXBEZXN0aW5hdGlvbiA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwgY29kZUJsb2NrLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
OjpvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICBW
YWx1ZSoganNDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1f
cHJvYywgaXNKU0Jsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisg
ICAgICAgIFZhbHVlKiBjb2RlQmxvY2sgPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZldhc21Db2RlQmxvY2soKSkpOworICAgICAgICBWYWx1ZSoganVtcERlc3Rp
bmF0aW9uID0gaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywK
KyAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIHNh
ZmVDYXN0PGludDMyX3Q+KENvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0
dWIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFsdWUqIGVtYmVkZGVyQ2FsbFJlc3VsdCA9
IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzRW1iZWRkZXJCbG9j
aywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICAgICAgWyZd
IChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CkBAIC0xMTE5LDggKzExMjcsOCBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFt
c1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIFVwc2lsb25WYWx1ZSoganNDYWxsUmVzdWx0VXBz
aWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0pTQmxvY2stPmFwcGVuZE5l
dzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGpzQ2FsbFJlc3VsdCk7Ci0gICAgICAg
IGlzSlNCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCks
IGNvbnRpbnVhdGlvbik7CisgICAgICAgIFVwc2lsb25WYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0
VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0VtYmVkZGVyQmxvY2st
PmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGVtYmVkZGVyQ2FsbFJl
c3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1f
cHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBjb250aW51YXRpb247CiAKQEAgLTExMjksNyArMTEzNyw3IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb250aW51
YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNUeXBlKHJldHVyblR5cGUp
LCBvcmlnaW4oKSk7CiAgICAgICAgICAgICB3YXNtQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShy
ZXN1bHQpOwotICAgICAgICAgICAganNDYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7
CisgICAgICAgICAgICBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90
aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91
ciBNZW1vcnkuCkBAIC0xMTY1LDE3ICsxMTczLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
CiAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFy
Z3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKICAgICBFeHBy
ZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOwotICAgIEV4cHJlc3Npb25UeXBlIGpz
RnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyOwogICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplOwogICAgIHsKICAgICAg
ICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAg
ICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mVGFibGUoKSkpOworICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZl
Q2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbVRhYmxlKCkp
KTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCks
Ci0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxl
OjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7Ci0gICAgICAgIGpzRnVuY3Rpb25CdWZmZXIgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpT
V2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1bmN0aW9ucygpKSk7CisgICAgICAgICAgICB0
YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbTo6VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkp
KTsKKyAgICAgICAgaW5zdGFuY2VzQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAg
ICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0
YW5jZXMoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdp
bigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlU
YWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQz
Ml90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKICAgICB9CiAKICAgICAvLyBDaGVj
ayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHZhbGlkLgpAQCAtMTE5NSw2ICsxMjAz
LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJs
ZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQs
IG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBvZmZzZXQpOwogCiAgICAgLy8gQ2hl
Y2sgdGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBp
dCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBp
bml0aWFsaXplZC4KKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdl
IGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5k
ZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAog
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENhbGxhYmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4
KSA9PSBzaXplb2YodWludDMyX3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTMyIik7CiAgICAg
RXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwgY2FsbGFi
bGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVu
Y3Rpb24sIHNpZ25hdHVyZUluZGV4KSkpOwogICAgIHsKQEAgLTEyMjMsMTkgKzEyMzIsMTcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICB7CiAgICAgICAgIFZhbHVlKiBvZmZzZXQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCiAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQz
Miwgb3JpZ2luKCksIGNhbGxlZUluZGV4KSwKLSAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJU
eXBlKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSkpOwotICAgICAgICBWYWx1ZSog
anNPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBqc0Z1bmN0aW9uQnVm
ZmVyLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVv
ZihXYXNtOjpJbnN0YW5jZSopKSk7CisgICAgICAgIFZhbHVlKiBuZXdDb250ZXh0SW5zdGFuY2Ug
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNl
dCkpOwogCiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9j
aygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBtX3Byb2MuYWRkQmxv
Y2soKTsKIAotICAgICAgICBWYWx1ZSogbmV3Q29udGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCks
Ci0gICAgICAgICAgICBqc09iamVjdCwgc2FmZUNhc3Q8aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2U6Om9mZnNldE9mSW5zdGFuY2UoKSkpOwotICAgICAgICBWYWx1ZSogaXNTYW1lQ29u
dGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLAotICAgICAgICAgICAgbmV3Q29udGV4dCwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAg
ICAgVmFsdWUqIGlzU2FtZUNvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAorICAgICAgICAgICAgbmV3Q29udGV4
dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksCi0gICAgICAg
ICAgICBpc1NhbWVDb250ZXh0LCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSwgRnJlcXVl
bnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOworICAgICAgICAgICAgaXNTYW1lQ29udGV4dElu
c3RhbmNlLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRv
Q29udGV4dFN3aXRjaCkpOwogCiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6
Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CkBAIC0xMjQzLDI2ICsxMjUwLDI2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmcpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNl
dDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
bmV3Q29udGV4dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZChuZXdDb250ZXh0SW5zdGFuY2UsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOwotICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dCA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdwcigpOwogICAgICAg
ICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVk
UmVncy5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5u
ZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHQg
IT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Mob2xkQ29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBi
YXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xp
bWl0KCkpKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KG5ld0NvbnRleHQpOwot
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHQs
IENvbnRleHQ6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJs
eU1lbW9yeSouCisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3RhbmNlICE9IGJhc2VN
ZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9s
ZENvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VN
ZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFu
Y2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVt
b3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXpl
KCkgPT0gMSk7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9
IGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3Rl
ciAhPSBuZXdDb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJl
Z3NbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkp
LCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc21NZW1vcnk6
OnZvaWQqLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXpl
UmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5
KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICAgICAgfSk7CiAg
ICAgICAgIGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVt
cCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKQEAgLTEzMzksMTk0ICsxMzQ2LDYgQEAgdm9p
ZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9s
U3RhY2ssIGNvbnN0IEV4cHJlc3MKICAgICBkYXRhTG9nTG4oKTsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNv
bnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXgpCi17Ci0gICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250
ZXh0LmpzRW50cnlwb2ludEpJVDsKLQotICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1
ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwotICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwot
Ci0gICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKLSAgICBqaXQuc3RvcmU2NChDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
KTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5j
YWxsZWVNb3ZlTG9jYXRpb247Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOwotICAgIH0pOwotCi0gICAgY29uc3QgUGlubmVk
UmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKLSAg
ICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2RlKTsKLQotI2lmICFB
U1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCB0b1NhdmVTaXplID0gdG9TYXZlLm51bWJlck9m
U2V0R1BScygpOwotICAgIC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUgc2F2ZXMuCi0gICAg
dG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBB
U1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUpOwotI2VuZGlmCi0K
LSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0
ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCk7Ci0gICAg
cmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxs
OwotCi0gICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUo
KSAqIHNpemVvZih2b2lkKik7Ci0gICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxpbmdDb252
ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwotICAgIHRvdGFsRnJhbWVTaXplIC09IHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICB1bnNpZ25lZCBudW1HUFJzID0gMDsKLSAgICB1bnNp
Z25lZCBudW1GUFJzID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3Vt
ZW50KGkpKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICBjYXNlIFdhc206Okkz
MjoKLSAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1f
Z3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9m
KHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVtR1BSczsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAg
ICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgp
KQotICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7Ci0gICAg
ICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKLSAgICBqaXQuc3ViUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8gV2Ugc2F2ZSBhbGwgdGhlc2UgcmVnaXN0
ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KLSAgICAvLyBUaGUgcmVh
c29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2guIFRoYXQgc2FpZCwK
LSAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVtb3J5LCBzbyBpdCdz
IG5vdCByZWFsbHkKLSAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHRo
ZXkgZG9uJ3QuCi0gICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6
IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJl
ZygpLmdwcigpOwotICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0
KCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgR1BSUmVnIHdh
c21Db250ZXh0R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dFBvaW50ZXI7Ci0KLSAgICB7Ci0g
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6
QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotICAgICAgICBudW1HUFJz
ID0gMDsKLSAgICAgICAgbnVtRlBScyA9IDA7Ci0gICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHNl
dCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0aGlzLiBTbwotICAgICAgICAvLyB3ZSBjYW4g
dXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cgc2luY2Ugd2Ugc2F2ZWQgaXQgYWJvdmUuCi0g
ICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsK
LQotICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0gICAgICAgIC8vIHZtRW50cnlUb1dhc20g
cGFzc2VzIFdhc206OkNvbnRleHQqIGFzIHRoZSBmaXJzdCBKUyBhcmd1bWVudCB3aGVuIHdlJ3Jl
Ci0gICAgICAgIC8vIG5vdCB1c2luZyBmYXN0IFRMUyB0byBob2xkIHRoZSBXYXNtOjpDb250ZXh0
Ki4KLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGpzT2Zmc2V0KSwgd2FzbUNvbnRleHRHUFIpOwotICAgICAgICAgICAganNPZmZzZXQgKz0g
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB0cmRpZmZfdCB3
YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9p
ZCopOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChp
KSkgewotICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAgICAgICAgICBjYXNlIFdhc206
Okk2NDoKLSAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1
cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNp
emVvZih2b2lkKik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFy
Z3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dw
ckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICArK251bUdQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdh
c206OkYzMjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgICAgIGlm
IChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpG
MzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVl
RnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZy
YW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50
KGkpID09IFdhc206OkYzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNl
dCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
RG91YmxlKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnBy
KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK251bUZQUnM7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoISFpbmZvLm1lbW9yeSkgewotICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9
IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0KLSAgICAgICAgaWYgKCF1c2VGYXN0VExT
Rm9yQ29udGV4dCgpKQotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHdhc21Db250ZXh0R1BSLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5
KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0KGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1vZGUgIT0g
TWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVn
cyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKLSAgICAgICAgICAgIEFTU0VSVChzaXplUmVn
cy5zaXplKCkgPj0gMSk7Ci0gICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZz
ZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2Fs
Y3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJB
c3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsg
KytpKQotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Migtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6
ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpv
ZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgfQotCi0gICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVu
Y3Rpb25Db3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0
aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsKLSAg
ICB9KTsKLQotCi0gICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6
IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJl
ZygpLmdwcigpOwotICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKLSAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOwotICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7Ci0gICAgfQotCi0gICAgc3dpdGNoIChzaWduYXR1cmUu
cmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgIGppdC5tb3ZlRmxv
YXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICBqaXQubW92ZURv
dWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQogYXV0byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmln
aW4KIHsKICAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCks
IG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CkBAIC0xNTM0LDcgKzEz
NTMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0
aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0
YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlv
bk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3Vu
dCogdGllclVwKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29u
dGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0
aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91
bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMTU1OCwxMSArMTM3NywxMSBAQCBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0
aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1p
emF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQoaW5mbywgcHJvY2Vk
dXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxh
dGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7Ci0gICAgRnVuY3Rpb25QYXJzZXI8QjNJ
UkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3Ro
LCBzaWduYXR1cmUsIGluZm8pOworICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywg
cHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBj
b21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9u
KTsKKyAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3Is
IGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCi0gICAgY29udGV4dC5p
bnNlcnRDb25zdGFudHMoKTsKKyAgICBpckdlbmVyYXRvci5pbnNlcnRDb25zdGFudHMoKTsKIAog
ICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIGlmICghQVNTRVJUX0RJU0FC
TEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgK
aW5kZXggZTJjNmFkYi4uNjliZTQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQjNDb21w
aWxhdGlvbi5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkND
YWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21N
ZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJX
YXNtVGllclVwQ291bnQuaCIKQEAgLTU0LDkgKzU1LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29u
dGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50
cnlwb2ludEJ5cHJvZHVjdHM7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYs
IGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwg
Q29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBu
dWxscHRyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNv
bnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcAppbmRleCAyMmVkZDE2Li5kMGVhZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIldhc21CM0lSR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVl
LmgiCkBAIC01MywyMSArNTEsMjEgQEAgbmFtZXNwYWNlIFdhc21CQlFQbGFuSW50ZXJuYWwgewog
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1CQlFQbGFuOjpCQlFQbGFu
KFZNKiB2bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29t
cGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQmFzZSh2bSwgV1RGTW92ZShpbmZvKSwgV1RGTW92
ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBD
cmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4
Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUo
aW5mbyksIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhy
b3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKQogICAgICwg
bV9hc3luY1dvcmsod29yaykKIHsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihWTSogdm0sIFZlY3Rv
cjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFz
aykKLSAgICA6IEJCUVBsYW4odm0sIGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RG
TW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFzaykpCitCQlFQbGFuOjpCQlFQbGFuKENv
bnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmss
IENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1i
ZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorICAg
IDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigqbmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1v
dmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVy
V3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBtX3N0YXRlID0gU3RhdGU6Oklu
aXRpYWw7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCi0gICAgOiBCYXNlKHZtLCBzb3VyY2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNr
KSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3QgdWludDhfdCogc291
cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2sm
JiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBzb3VyY2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92
ZSh0YXNrKSkKICAgICAsIG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCiAgICAgLCBtX2FzeW5jV29y
ayh3b3JrKQogewpAQCAtMjY5LDcgKzI2Nyw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0
aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAKICAgICAgICAgbV91bmxpbmtlZFdhc21U
b1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVw
Q2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwotICAg
ICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBp
bGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVu
Z3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0s
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFN
b2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOworICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGls
ZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25J
bmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVy
VXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKQEAgLTI4NSw3ICsyODMsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlv
bnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogCiAgICAgICAgIGlmIChtX2V4cG9ydGVkRnVu
Y3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1f
anNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgY3JlYXRlSlNUb1dh
c21XcmFwcGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgc2lnbmF0dXJl
LCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KSk7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25J
bmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0
aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgp
KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7
CiAgICAgICAgIH0KIApAQCAtMzE0LDE0ICszMTIsMTQgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICBXVEZN
b3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChhdXRvIGpzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IG1fanNUb1dh
c21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21J
bnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAgICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5r
QnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEJhc2U6
OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVu
Y3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4
KSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAganNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBp
bGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICAgICAg
ICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jb21waWxhdGlv
biA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICAg
ICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkphdmFTY3JpcHQtPldlYkFzc2VtYmx5IGVu
dHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAogICAgICAgICAg
ICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAg
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJC
UVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKaW5kZXgg
MzU5ZjEzYi4uYzZlYTQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5oCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNs
dWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2Fz
bUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNp
bmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgogI2luY2x1
ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQxLDggKzQxLDYgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBDYWxsTGlua0luZm87Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIEpTUHJv
bWlzZURlZmVycmVkOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTUwLDEyICs0OCwxMyBAQCBj
bGFzcyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgogICAgIHVzaW5nIEJh
c2UgPSBQbGFuOwogICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxDb21waWxlLCBW
YWxpZGF0aW9uIH07CisKICAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhv
bGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZl
cmVuY2UgY3ljbGUuCi0gICAgQkJRUGxhbihWTSosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxh
bihWTSosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOwor
ICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywg
Q29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2Vw
dGlvbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgVmVjdG9yPHVp
bnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFw
cGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3Rv
ciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEg
bW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwogICAgIC8vIEZJWE1FOiBXaGVu
IHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBBc3luY1dvcmsg
ZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oVk0q
LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAKICAgICBib29sIHBhcnNlQW5k
VmFsaWRhdGVNb2R1bGUoKTsKIApAQCAtMTQxLDcgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQz
Ml90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+
IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJf
dD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBt
X2pzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJf
dD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBt
X2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9u
Q29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwogICAgIFZlY3RvcjxUaWVyVXBDb3VudD4g
bV90aWVyVXBDb3VudHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJC
UVBsYW5JbmxpbmVzLmgKaW5kZXggMWI4YjU2Zi4uNDQ0NzkwYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKQEAgLTM5LDEwICszOSwxMCBA
QCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNr
KQogICAgIEFTU0VSVCghZmFpbGVkKCkpOwogICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5j
dGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewogCi0gICAgICAgIFJlZlB0
cjxXYXNtOjpDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1dG8ganNU
b1dhc21GdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxG
dW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAganNFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShqc1RvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoanNUb1dhc21GdW5jdGlv
bi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGpzRW50cnlwb2ludENh
bGxlZS5nZXQoKSkpOworICAgICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWU7CisgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBt
X2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRl
eCkpIHsKKyAgICAgICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxl
ZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNt
RnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIEludGVybmFs
RnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5j
dGlvbkluZGV4XS5nZXQoKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBCQlFQbGFuOjppbml0aWFs
aXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykKICAgICAgICAgUmVmPFdhc206OkNh
bGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9u
LCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CiAKLSAg
ICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2lu
dENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKKyAgICAgICAgY2FsbGJh
Y2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAppbmRleCA2N2NjZjVlLi40OTEwYzgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC0yOSw1
OTYgKzI5LDE0IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxI
ZWxwZXJzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCi0jaW5jbHVkZSAiSklURXhjZXB0
aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgotI2luY2x1ZGUg
Ildhc21DYWxsaW5nQ29udmVudGlvbi5oIgotI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCi0jaW5j
bHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKIAogdXNpbmcgSklUID0gQ0NhbGxIZWxwZXJzOwogCi1zdGF0aWMgdm9pZCBtYXRlcmlh
bGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyBy
ZXN1bHQpCi17Ci0gICAgLy8gV2UncmUgY2FsbGluZyBvdXQgb2YgdGhlIGN1cnJlbnQgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFuY2UgaGFzIGEgbGlzdCBvZiBhbGwgaXRzIGltcG9y
dCBmdW5jdGlvbnMuCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChyZXN1bHQpOwotICAgIGppdC5s
b2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOwotfQotCi1FeHBlY3RlZDxN
YWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KcyhWTSogdm0sIEJh
ZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rp
b24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24u
Ci0gICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCi0gICAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50
aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBjb25zdCBKU0NDYWxs
aW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7Ci0gICAgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZUluZGV4KTsKLSAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7Ci0gICAgSklUIGppdDsKLQotICAgIC8vIE5vdGU6IFdhc21CM0lSR2VuZXJhdG9yIGFzc3Vt
ZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVlIHNhdmUuCi0gICAgLy8gSWYg
d2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gY2hhbmdlIFdhc21CM0lS
R2VuZXJhdG9yLgotCi0gICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5n
IGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KLSAgICBBU1NFUlQoIWpzQ0MubV9n
cHJBcmdzLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFqc0NDLm1fZnByQXJncy5zaXplKCkpOwotCi0g
ICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpUcnVz
dGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQotCi0gICAgewotICAgICAgICBib29sIGhh
c0JhZEk2NFVzZSA9IGZhbHNlOwotICAgICAgICBoYXNCYWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJl
dHVyblR5cGUoKSA9PSBJNjQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJn
TnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdOdW0pIHsKLSAgICAgICAgICAg
IFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAg
c3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBj
YXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgY2FzZSBJNjQ6IHsKLSAg
ICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhhc0JhZEk2
NFVzZSkgewotICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotCi0gICAgICAgICAgICAvLyBT
dG9yZSBDYWxsZWUuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
Q2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0g
ICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwotCi0gICAgICAgICAg
ICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSop
ID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4
dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
ICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZt
LCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCks
IEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50
IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29t
cGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwotCi0gICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOwotICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2Ug
aW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gc2F2ZXMgYXQg
bGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4gV2UgdGhlcmVmb3JlIGRvbid0IG5lZWQg
dG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB0aGUgd2FzbSBjYWxsZWUg
YWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KLSAgICBSZWdpc3RlclNldCBtaXNzaW5nQ2FsbGVl
U2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgIG1pc3NpbmdDYWxsZWVT
YXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKLSAgICBBU1NFUlQobWlz
c2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAoIU9wdGlvbnM6OnVzZUNhbGxJ
Q3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNj
cmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYXJnQ291bnQgKiBzaXplb2Yo
dWludDY0X3QpKTsKLSAgICAgICAgY2hhciogYnVmZmVyID0gYXJnQ291bnQgPyBzdGF0aWNfY2Fz
dDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IG51bGxwdHI7Ci0gICAgICAg
IHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxl
ZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBidWZmZXJPZmZzZXQgPSAwOwotICAgICAgICB1
bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgY29uc3QgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7Ci0gICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKLQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2Fy
Z051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFy
Z051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
Vm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoK
LSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgIEdQ
UlJlZyBncHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUND
Lm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5t
X2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50
cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAg
ICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
ZnJPZmZzZXQpLCBncHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQuemVy
b0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5zdG9y
ZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICArK21h
cnNoYWxsZWRHUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAg
ICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgp
KQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxs
ZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVy
cyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9
IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9h
dChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnBy
UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91
YmxlKGZwclJlZywgZnByUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQo
ZnByUmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNo
R1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxl
ZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjYXNlIEY2NDogewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNd
LmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBX
ZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBh
dmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5m
bzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShKSVQ6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsK
LSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVm
ZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgfQot
ICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaWYgKGFyZ0Nv
dW50KSB7Ci0gICAgICAgICAgICAvLyBUaGUgR0Mgc2hvdWxkIG5vdCBsb29rIGF0IHRoaXMgYnVm
ZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFsdWVzLgotICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2
ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50NjRfdCAoKmNhbGxGdW5jKShFeGVjU3RhdGUq
LCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCopID0KLSAgICAgICAgICAgIFtd
IChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjYWxsZWUsIFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAtPiB1aW50NjRfdCB7IAotICAgICAgICAgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAgICAgICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwotICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpOyArK2FyZ051bSkgewotICAgICAgICAgICAgICAgICAgICBUeXBlIGFyZ1R5
cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSBhcmc7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAg
ICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRnVuYzoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSTMyOgotICAgICAgICAgICAgICAgICAg
ICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYnVmZmVyW2FyZ051bV0p
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIEYzMjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihidWZmZXJbYXJnTnVt
XSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+bWV0aG9kVGFibGUoKnZtKS0+Z2V0Q2FsbERh
dGEoY2FsbGVlLCBjYWxsRGF0YSk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwg
YXJncyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAw
KTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlYWxSZXN1bHQ7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBGdW5jOgotICAgICAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgICAgICBj
YXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWb2lk
OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEkzMjog
ewotICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQudG9JbnQzMihleGVjKSkpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBGNjQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgICAgICAgICAg
cmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocmVzdWx0LnRvTnVtYmVyKGV4ZWMp
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxSZXN1bHQ7Ci0gICAgICAgICAg
ICB9OwotICAgICAgICAKLSAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1
bWVudEdQUjApOwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVl
KCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKLSAgICAgICAgCi0gICAgICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1w
b3J0SW5kZXgsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
R1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyA+PSA0LCAiV2UgcmVseSBvbiB0aGlz
IHdpdGggdGhlIGNhbGwgYmVsb3cuIik7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihzaWduYXR1cmVJbmRleCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihidWZmZXIpKTsK
LSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgYXV0byBub0V4Y2VwdGlv
biA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6OkludmVydGVk
RXhjZXB0aW9uQ2hlY2spOwotCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBoZXJlLgotICAgICAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwot
ICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKLSAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtd
IChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgQVNT
RVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfTsKLSAgICAgICAgYXV0byBl
eGNlcHRpb25DYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIoKnZtKTsKLQotICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwotICAgICAgICBz
d2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBGNjQ6IHsKLSAg
ICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBS
SW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICAgICAg
aml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAgICAgaml0LnJldCgpOwotCi0gICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6
Ok91dE9mTWVtb3J5KTsKLQotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMp
OwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2FsbCwgZG9VbndpbmRpbmcpOwot
Ci0gICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHkt
PkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSkpOwotICAgIH0KLQotICAgIC8vIE5vdGU6IFdlIGRvbid0IG5l
ZWQgdG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUgc2luY2UgV2FzbUIzSVJHZW5lcmF0b3IK
LSAgICAvLyB3aWxsIGRvIHRoZSBzdGFjayBjaGVjayBmb3IgdXMuIFdoZW5ldmVyIGl0IGRldGVj
dHMgdGhhdCBpdCBtaWdodCBtYWtlCi0gICAgLy8gYSBjYWxsIHRvIHRoaXMgdGh1bmssIGl0J2xs
IG1ha2Ugc3VyZSBpdHMgc3RhY2sgY2hlY2sgaW5jbHVkZXMgc3BhY2UKLSAgICAvLyBmb3IgdXMg
aGVyZS4KLQotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50
ICsgMTsgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1lbnQuCi0gICAgY29uc3QgdW5zaWduZWQg
bnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsg
bnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JD
YWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQyk7Ci0gICAgY29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9y
Q2FsbCk7Ci0gICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNr
T2Zmc2V0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBKSVQ6
OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKTsKLQotICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hp
Y2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhl
IHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3Ci0gICAgCi0gICAgLy8g
Rmlyc3QgZ28gdGhyb3VnaCB0aGUgaW50ZWdlciBwYXJhbWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWly
IHJlZ2lzdGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4KLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG1h
cnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwot
ICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0
QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICB1
bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5
cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAgc3dp
dGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNl
IEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEk2NDoK
LSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVk
IGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6IHsKLSAgICAgICAgICAgICAgICBHUFJSZWcg
Z3ByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkR1BScyA8IHdhc21DQy5tX2dw
ckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSB3YXNtQ0MubV9ncHJB
cmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRo
ZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAg
ICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKLSAgICAgICAgICAgICAgICAgICAg
aml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zm
c2V0KSwgZ3ByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJl
Z2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVk
R1BSczsKLSAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJS
ZWcpOyAvLyBDbGVhciBub24taW50MzIgYW5kIG5vbi10YWcgYml0cy4KLSAgICAgICAgICAgICAg
ICBqaXQuYm94SW50MzIoZ3ByUmVnLCBKU1ZhbHVlUmVncyhncHJSZWcpLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgY2FsbGVlRnJh
bWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGNhbGxl
ZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgICAgIGNhc2Ug
RjY0OgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYmVsb3cuCi0gICAgICAg
ICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzID49IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQot
ICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAg
ICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVP
ZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIC8vIEludGVn
ZXIgcmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNwaWxsZWQsIHRoZXNlIGFyZSBub3cgYXZh
aWxhYmxlLgotICAgICAgICBHUFJSZWcgZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIwOwotICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMTsKLSAgICAgICAgYm9vbCBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQg
PSBmYWxzZTsKLSAgICAgICAgYXV0byBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldCA9IFsm
aGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsK
LSAgICAgICAgICAgIGlmICghaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0KSB7Ci0g
ICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChEb3VibGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8
IDQ4LCAiY29kZWdlbiBhc3N1bWVzIHRoaXMgYmVsb3ciKTsKLSAgICAgICAgICAgICAgICBqaXQu
bW92ZShKSVQ6OlRydXN0ZWRJbW0zMigxKSwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgaml0Lmxz
aGlmdDY0KEpJVDo6VHJ1c3RlZEltbTMyKDQ4KSwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgaGFz
TWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfTsKLQotICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7Ci0gICAgICAg
IHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJh
bWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291
bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJn
dW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAg
ICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgY2FzZSBB
bnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KLSAgICAgICAgICAgIGNhc2Ug
STMyOgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYWJvdmUuCi0gICAgICAg
ICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQot
ICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAg
ICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVP
ZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAg
ICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkK
LSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVk
RlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMg
YXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBG
UFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQo
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJl
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJs
ZShmcHJSZWcsIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcp
OwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOwot
ICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29k
ZU9mZnNldEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJsZUVuY29kZU9m
ZnNldEdQUlJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRj
aCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOwotICAgICAgICAg
ICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAg
ICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZw
clJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJB
cmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJn
c1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVz
ZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAg
ICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJP
ZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2Yo
UmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQucHVyaWZ5
TmFOKGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywg
c2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQo
ZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91
YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBqaXQuc3Rv
cmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsK
LSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICBHUFJSZWcgaW1wb3J0SlNDZWxs
R1BSUmVnID0gR1BSSW5mbzo6cmVnVDA7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBm
b3Igc2xvdyBwYXRoIGJlbG93LgotICAgIEFTU0VSVCghd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lz
dGVycy5nZXQoaW1wb3J0SlNDZWxsR1BSUmVnKSk7Ci0KLSAgICBtYXRlcmlhbGl6ZUltcG9ydEpT
Q2VsbChqaXQsIGltcG9ydEluZGV4LCBpbXBvcnRKU0NlbGxHUFJSZWcpOwotCi0gICAgaml0LnN0
b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAg
ICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOwotICAgIGppdC5z
dG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0
aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20g
cmV0dXJuIHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4OAotCi0gICAgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9zLmFkZCgpOwotICAgIGNhbGxMaW5rSW5m
by0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdpbigpLCBpbXBvcnRKU0Nl
bGxHUFJSZWcpOwotICAgIEpJVDo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklU
OjpUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlKDApOwotICAgIEpJVDo6SnVtcCBzbG93
UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBp
bXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ssIGluaXRpYWxSaWdodFZhbHVlKTsKLSAg
ICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKLSAgICBKSVQ6Okp1bXAgZG9u
ZSA9IGppdC5qdW1wKCk7Ci0gICAgc2xvd1BhdGgubGluaygmaml0KTsKLSAgICAvLyBDYWxsZWUg
bmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5m
byBuZWVkcyB0byBiZSBpbiByZWdUMi4KLSAgICBKSVQ6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVh
ckNhbGwoKTsKLSAgICBkb25lLmxpbmsoJmppdCk7Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IGV4Y2VwdGlvbkNoZWNrczsKLQotICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUo
KSkgewotICAgIGNhc2UgVm9pZDoKLSAgICAgICAgLy8gRGlzY2FyZC4KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGdW5jOgotICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgLy8gRm9yIHRoZSBK
YXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5cGVzIGluIHRoZWlyIHNp
Z25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZhbGlkYXRpb24gZXJyb3Iu
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSTY0OiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8v
IEhhbmRsZWQgYWJvdmUuCi0gICAgfQotICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKLQotICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7Ci0gICAgICAgIGppdC56
ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBz
bG93UGF0aC5saW5rKCZqaXQpOwotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2Vw
dGlvbigqdm0pKTsKLQotICAgICAgICBpbnQzMl90ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUq
LCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7
IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIHJldHVybiB2LnRv
SW50MzIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxs
LCBjb252ZXJ0VG9JMzIpOwotICAgICAgICB9KTsKLQotICAgICAgICBkb25lLmxpbmsoJmppdCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEYzMjogewotICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5icmFu
Y2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0
ZXJzKTsKLSAgICAgICAgYXV0byBpc0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFs
dWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsK
LSAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKLSAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRy
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwot
Ci0gICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAg
ICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBqaXQuY29udmVydERvdWJs
ZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBS
KTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgbm90QU51bWJl
ci5saW5rKCZqaXQpOwotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
LSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigq
dm0pKTsKLQotICAgICAgICBmbG9hdCAoKmNvbnZlcnRUb0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1
ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGZsb2F0IHsgCi0gICAgICAg
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgfTsKLSAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGRvbmUu
bGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRjY0OiB7Ci0gICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgYXV0byBub3RBTnVtYmVy
ID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhh
dmVUYWdSZWdpc3RlcnMpOwotICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90
SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpOwotICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgotICAgICAgICBqaXQuc2lnbkV4
dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGpp
dC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5t
b3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBkb25l
LmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7Ci0g
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNlcHRp
b25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAgICAg
IGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7IAotICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAgICAgICAgIHJldHVybiB2LnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9
OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjY0KTsKLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgaml0LnJldCgp
OwotCi0gICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1wdHkoKSkgewotICAgICAgICBleGNlcHRp
b25DaGVja3MubGluaygmaml0KTsKLSAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGF1dG8g
Y2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2
bSk7Ci0KLSAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVj
U3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEh
dm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwotICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0
ZSgpKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRP
Zk1lbW9yeSk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2
bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSk7
Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKLSAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7Ci0K
LSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2
YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpKSk7Ci19Ci0KIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwg
QmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAg
Y29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKTsKQEAgLTYzMywyNCArNTEsMjMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAg
ICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IHNjcmF0Y2gpOwogICAgIEdQUlJl
ZyBzaXplUmVnQXNTY3JhdGNoID0gc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyOwogCi0gICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8Q29udGV4dCwgSlNXZWJBc3NlbWJseUluc3RhbmNlPjo6
dmFsdWUsICJUaGlzIGlzIGFzc3VtZWQgaW4gdGhlIGNvZGUgYmVsb3cuIik7CiAgICAgLy8gQjMn
cyBjYWxsIGNvZGVnZW4gZW5zdXJlcyB0aGF0IHRoZSBKU0NlbGwgaXMgYSBXZWJBc3NlbWJseUZ1
bmN0aW9uLgotICAgIGppdC5sb2FkV2FzbUNvbnRleHQoc2l6ZVJlZ0FzU2NyYXRjaCk7IC8vIE9s
ZCBJbnN0YW5jZSoKLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRj
aCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydElu
ZGV4KSksIHNjcmF0Y2gpOwotCi0gICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXZWJBc3NlbWJseS5J
bnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0LiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBj
YXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgotICAgIGppdC5sb2FkUHRyKEpJVDo6
QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZkluc3RhbmNlKCkp
LCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAgIGppdC5zdG9yZVdhc21Db250ZXh0KGJh
c2VNZW1vcnkpOworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShzaXplUmVnQXNTY3Jh
dGNoKTsgLy8gT2xkIEluc3RhbmNlKgorICAgIC8vIEdldCB0aGUgY2FsbGVlJ3MgV2ViQXNzZW1i
bHkuSW5zdGFuY2UgYW5kIHNldCBpdCBhcyBXYXNtQ29udGV4dCdzIGluc3RhbmNlLiBUaGUgY2Fs
bGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgorICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoaW1wb3J0SW5kZXgpKSwgYmFzZU1lbW9yeSk7
IC8vIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSouCisgICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5n
IHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0
YWlsIGNhbGwgdG8gaXQgYmVsb3cuCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVS
ZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2lu
dChpbXBvcnRJbmRleCkpLCBzY3JhdGNoKTsgLy8gV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24uCisgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKIAog
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRj
aCk7CiAgICAgaml0LnN0b3JlUHRyKHNpemVSZWdBc1NjcmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNl
TWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgp
KSk7CiAKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBX
ZWJBc3NlbWJseS5JbnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAg
dGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNp
emUgcmVnaXN0ZXJzLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8g
SlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVP
ZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQg
Y2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAg
aml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6
Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNp
emUuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1i
bHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbU1lbW9yeTo6
dm9pZCouCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1l
bW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1v
cnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6
TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6
dm9pZCouCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9y
eSk7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7
CkBAIC02NTgsNyArNzUsNiBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRp
bmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIH0KIAogICAg
IC8vIFRhaWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUgV2ViQXNzZW1ibHkgZnVuY3Rpb24uCi0gICAg
aml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9m
ZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIHNjcmF0Y2gpOwogICAgIGppdC5s
b2FkUHRyKHNjcmF0Y2gsIHNjcmF0Y2gpOwogICAgIGppdC5qdW1wKHNjcmF0Y2gpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaAppbmRleCA0ZTI2MmJhLi5mZWM2YmQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjgsNyBA
QAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIK
LSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKLSNpbmNsdWRlIDx3dGYv
QmFnLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
NDQsNyArNDIsNiBAQCBlbnVtIGNsYXNzIEJpbmRpbmdGYWlsdXJlIHsKIH07CiAKIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWdu
ZWQgaW1wb3J0SW5kZXgpOwotRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5n
RmFpbHVyZT4gd2FzbVRvSnMoVk0qLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywg
U2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2Nr
LmNwcAppbmRleCA3MGZlZmIwLi5lNTEzNjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29kZUJsb2NrLmNwcApAQCAtMzEsMjAgKzMxLDMxIEBACiAKICNpbmNsdWRlICJX
YXNtQkJRUGxhbklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAi
V2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1v
ZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKK1JlZjxDb2RlQmxvY2s+
IENvZGVCbG9jazo6Y3JlYXRlKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBDcmVhdGVFbWJlZGRlcldyYXBwZXIm
JiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNl
cHRpb24pCit7CisgICAgc2l6ZV90IGltcG9ydEZ1bmN0aW9uQ291bnQgPSBtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3RO
dWxsLCBmYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplKGltcG9ydEZ1bmN0aW9uQ291bnQpKSkgQ29k
ZUJsb2NrKGNvbnRleHQsIG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uLCBXVEZNb3ZlKGNyZWF0ZUVt
YmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbXBvcnRGdW5jdGlvbkNvdW50OyArK2kpCisgICAgICAgIHJlc3VsdC0+aW1wb3J0
V2FzbVRvRW1iZWRkZXJTdHViKGkpID0gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRSZWYoKnJl
c3VsdCk7Cit9CisKK0NvZGVCbG9jazo6Q29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9y
eU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBDcmVhdGVF
bWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlv
biB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBtX2NhbGxlZUNvdW50KG1vZHVsZUluZm9ybWF0
aW9uLmludGVybmFsRnVuY3Rpb25Db3VudCgpKQogICAgICwgbV9tb2RlKG1vZGUpCiB7CiAgICAg
UmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7Ci0gICAgbV9wbGFuID0gYWRv
cHRSZWYoKm5ldyBCQlFQbGFuKG51bGxwdHIsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBC
QlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFZNKiwgUGxh
biYpIHsKKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBtYWtl
UmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJl
ZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUo
cHJvdGVjdGVkVGhpcyldIChQbGFuJikgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgpKSB7CiAgICAgICAgICAgICBt
X2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgICAgICBtX3Bs
YW4gPSBudWxscHRyOworICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY2LDEwICs3NywxMCBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJ
bmZvcm1hdGlvbikKICAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFuLT50YWtl
V2FzbVRvV2FzbUNhbGxzaXRlcygpOwogICAgICAgICBtX3RpZXJVcENvdW50cyA9IG1fcGxhbi0+
dGFrZVRpZXJVcENvdW50cygpOwogCi0gICAgICAgIG1fcGxhbiA9IG51bGxwdHI7Ci0gICAgfSkp
KTsKLQorICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAgfSksIFdURk1vdmUo
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7CiAgICAgbV9wbGFu
LT5zZXRNb2RlKG1vZGUpOworCiAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjplbnN1cmVXb3Jr
bGlzdCgpOwogICAgIC8vIE5vdGUsIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGVucXVldWUgdGhlIHBs
YW4sIHRoZXJlIGlzIGEgY2hhbmNlIHRoZSBhYm92ZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4K
ICAgICB3b3JrbGlzdC5lbnF1ZXVlKG1ha2VSZWYoKm1fcGxhbi5nZXQoKSkpOwpAQCAtOTIsNyAr
MTAzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OndhaXRVbnRpbEZpbmlzaGVkKCkKICAgICAvLyBlbHNl
LCBpZiB3ZSBkb24ndCBoYXZlIGEgcGxhbiwgd2UncmUgYWxyZWFkeSBjb21waWxlZC4KIH0KIAot
dm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25DYWxs
YmFjayYmIHRhc2spCit2b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKENvbnRleHQqIGNvbnRl
eHQsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiB7CiAgICAgUmVmUHRyPFBsYW4+
IHBsYW47CiAgICAgewpAQCAtMTA0LDEyICsxMTUsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmNvbXBp
bGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiAgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgdG8ga2VlcCBhIFJlZlB0ciBvbiB0aGUgUGxhbiBiZWNhdXNlIHRo
ZSB3b3JrbGlzdCB3aWxsIGtlZXAKICAgICAgICAgLy8gYSBSZWZQdHIgb24gdGhlIFBsYW4gdW50
aWwgdGhlIHBsYW4gZmluaXNoZXMgbm90aWZ5aW5nIGFsbCBvZiBpdHMgY2FsbGJhY2tzLgogICAg
ICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsKLSAgICAgICAgcGxh
bi0+YWRkQ29tcGxldGlvblRhc2sodm0sIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tU
eXBlPihbdGhpcywgdGFzayA9IFdURk1vdmUodGFzayksIHByb3RlY3RlZFRoaXMgPSBXVEZNb3Zl
KHByb3RlY3RlZFRoaXMpXSAoVk0qIHZtLCBQbGFuJikgewotICAgICAgICAgICAgQVNTRVJUKHZt
KTsKLSAgICAgICAgICAgIHRhc2stPnJ1bigqdm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAgICAg
cGxhbi0+YWRkQ29tcGxldGlvblRhc2soY29udGV4dCwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpD
YWxsYmFja1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92ZSh0YXNrKSwgcHJvdGVjdGVkVGhpcyA9
IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgeworICAgICAgICAgICAgdGFzay0+cnVu
KG1ha2VSZWYoKnRoaXMpKTsKICAgICAgICAgfSkpOwogICAgIH0gZWxzZQotICAgICAgICB0YXNr
LT5ydW4odm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAgICAgdGFzay0+cnVuKG1ha2VSZWYoKnRo
aXMpKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1lbW9yeU1vZGUgbWVtb3J5
TW9kZSkKQEAgLTEzMCw2ICsxNDAsMTMgQEAgYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1l
bW9yeU1vZGUgbWVtb3J5TW9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKwordm9pZCBDb2Rl
QmxvY2s6OnNldENvbXBpbGF0aW9uRmluaXNoZWQoKQoreworICAgIG1fcGxhbiA9IG51bGxwdHI7
CisgICAgbV9jb21waWxhdGlvbkZpbmlzaGVkLnN0b3JlKHRydWUpOworfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IDJkYmY3ZTQuLjAyMDEw
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2su
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJX
YXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KQEAgLTM3LDExICszOCwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
Vk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgQ2FsbGVlOworc3RydWN0IENvbnRleHQ7
CiBjbGFzcyBCQlFQbGFuOwogY2xhc3MgT01HUGxhbjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlv
bjsKQEAgLTUxLDIwICs1MSw0MiBAQCBlbnVtIGNsYXNzIE1lbW9yeU1vZGUgOiB1aW50OF90Owog
ICAgIAogY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvZGVC
bG9jaz4gewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0mLCBSZWY8
Q29kZUJsb2NrPiYmKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFJlZjxDb2RlQmxv
Y2s+JiYpOwogICAgIHVzaW5nIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayA9IFJlZlB0cjxXVEY6
OlNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBlPj47Ci0gICAgc3RhdGljIFJlZjxDb2RlQmxvY2s+IGNy
ZWF0ZShNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlv
bikKKyAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlKENvbnRleHQqLCBNZW1vcnlNb2Rl
LCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21F
eGNlcHRpb24pOworCisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydFN0dWJzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQq
KT4oc2l6ZW9mKENvZGVCbG9jaykpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IGZ1bmN0aW9uSW1wb3J0Q291bnQpCisgICAgeworICAg
ICAgICByZXR1cm4gKG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBmdW5j
dGlvbkltcG9ydENvdW50KS51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICB2b2lkKiYgaW1wb3J0
V2FzbVRvRW1iZWRkZXJTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29kZUJsb2NrKG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uKSk7
CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZvaWQqKj4oYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGltcG9ydEluZGV4KSk7
CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVk
ZGVyU3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZz
ZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogaW1wb3J0SW5kZXg7CisgICAgfQor
CisgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbVRvSlNDYWxsU3R1YkZv
ckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChydW5u
YWJsZSgpKTsKKyAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0
SW5kZXgpOwogICAgIH0KIAogICAgIHZvaWQgd2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICB2b2lk
IGNvbXBpbGVBc3luYyhWTSYsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsKKyAgICB2b2lk
IGNvbXBpbGVBc3luYyhDb250ZXh0KiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOwogCiAg
ICAgYm9vbCBjb21waWxhdGlvbkZpbmlzaGVkKCkKICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuICFtX3BsYW47CisgICAgICAgIHJl
dHVybiBtX2NvbXBpbGF0aW9uRmluaXNoZWQubG9hZCgpOwogICAgIH0KICAgICBib29sIHJ1bm5h
YmxlKCkgeyByZXR1cm4gY29tcGlsYXRpb25GaW5pc2hlZCgpICYmICFtX2Vycm9yTWVzc2FnZTsg
fQogCkBAIC03OCw5ICsxMDAsMTIgQEAgcHVibGljOgogICAgIH0KIAogICAgIHVuc2lnbmVkIGZ1
bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3dhc21Ub1dhc21FeGl0U3R1YnMu
c2l6ZSgpOyB9CisgICAgCisgICAgLy8gVGhlc2UgdHdvIGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5
IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVsYXRlZC4KIAogICAgIENhbGxl
ZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5j
dGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENv
dW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFj
ZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKIApAQCAtOTAsNiArMTE1LDcgQEAgcHVibGljOgog
ICAgIH0KICAgICBDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBBU1NFUlQo
cnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+
PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9
IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICAgICAgaWYg
KG1fb3B0aW1pemVkQ2FsbGVlc1tjYWxsZWVJbmRleF0pCkBAIC0xMTcsNyArMTQzLDggQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKIAotICAgIENvZGVCbG9j
ayhNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYpOworICAgIENvZGVCbG9jayhDb250ZXh0
KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mLCBDcmVhdGVFbWJlZGRlcldyYXBwZXIm
JiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICB2b2lkIHNldENvbXBpbGF0aW9uRmluaXNoZWQo
KTsKICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50OwogICAgIE1lbW9yeU1vZGUgbV9tb2RlOwog
ICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9jYWxsZWVzOwpAQCAtMTI4LDYgKzE1NSw3IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV93
YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1f
d2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBSZWZQdHI8QkJRUGxhbj4gbV9wbGFuOworICAgIHN0
ZDo6YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5pc2hlZCB7IGZhbHNlIH07CiAgICAgU3Ry
aW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIExvY2sgbV9sb2NrOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAppbmRleCBmZWExNmRlLi5lMDU5ZmMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwCkBAIC0yOCwzMCArMjgs
NDEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCiAj
aW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotQ29udGV4dCogbG9hZENvbnRleHQoVk0mIHZtKQorYm9v
bCBDb250ZXh0Ojp1c2VGYXN0VExTKCkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAg
IHJldHVybiBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQoKTsKKyNlbHNlCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogQ29udGV4
dDo6bG9hZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAodXNl
RmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb250ZXh0
Kj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZKSk7Cisg
ICAgaWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqPihfcHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09O
VEVYVF9LRVkpKTsKICNlbmRpZgotICAgIHJldHVybiB2bS53YXNtQ29udGV4dDsKKyAgICByZXR1
cm4gaW5zdGFuY2U7CiB9CiAKLXZvaWQgc3RvcmVDb250ZXh0KFZNJiB2bSwgQ29udGV4dCogY29u
dGV4dCkKK3ZvaWQgQ29udGV4dDo6c3RvcmUoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpLCB2b2lk
KiBzb2Z0U3RhY2tMaW1pdCkKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmICh1
c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJl
Y3QoV1RGX1dBU01fQ09OVEVYVF9LRVksIGJpdHdpc2VfY2FzdDx2b2lkKj4oY29udGV4dCkpOwor
ICAgIGlmICh1c2VGYXN0VExTKCkpCisgICAgICAgIF9wdGhyZWFkX3NldHNwZWNpZmljX2RpcmVj
dChXVEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9jYXN0PHZvaWQqPihpKSk7CiAjZW5kaWYK
LSAgICB2bS53YXNtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IGNvbnRleHQtPnNldENhY2hlZFN0YWNrTGltaXQodm0uc29mdFN0YWNrTGltaXQoKSk7CisgICAg
aW5zdGFuY2UgPSBpOworICAgIGlmIChpbnN0YW5jZSkKKyAgICAgICAgaW5zdGFuY2UtPnNldENh
Y2hlZFN0YWNrTGltaXQoc29mdFN0YWNrTGltaXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRl
eHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKaW5kZXggM2Nm
NjVmYi4uYzJiNTFkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5o
CkBAIC0yNywzNyArMjcsMjAgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLQogbmFt
ZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOworY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOwog
CiBuYW1lc3BhY2UgV2FzbSB7CiAKLS8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRoaXMgdG8gYmUg
c29tZXRoaW5nIGVsc2UgYXQgc29tZSBwb2ludDoKLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzAyNjAKLXVzaW5nIENvbnRleHQgPSBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U7Ci0KLWlubGluZSBib29sIHVzZUZhc3RUTFMoKQotewotI2lmIEVOQUJMRShGQVNUX1RM
U19KSVQpCi0gICAgcmV0dXJuIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdFRMUygpOwotI2Vs
c2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KK3N0cnVjdCBDb250ZXh0IHsKKyAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlIHsgbnVsbHB0ciB9OwogCi1pbmxpbmUgYm9v
bCB1c2VGYXN0VExTRm9yQ29udGV4dCgpCi17Ci0gICAgaWYgKHVzZUZhc3RUTFMoKSkKLSAgICAg
ICAgcmV0dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGxvYWQoKSBjb25zdDsKKyAg
ICB2b2lkIHN0b3JlKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHZvaWQqIHNvZnRTdGFja0xpbWl0
KTsKIAotQ29udGV4dCogbG9hZENvbnRleHQoVk0mKTsKLXZvaWQgc3RvcmVDb250ZXh0KFZNJiwg
Q29udGV4dCopOworICAgIHN0YXRpYyBib29sIHVzZUZhc3RUTFMoKTsKK307CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21FbWJlZGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVk
ZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4Nzk0ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUg
Ildhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKKyNpbmNsdWRlIDxt
ZW1vcnk+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hvdWxkIGJlIFdhc206Okluc3RhbmNl
LCBzbyBzaG91bGQgdXNlIGJlbG93LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKKworbmFt
ZXNwYWNlIFdhc20geworCitzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Oworc3RydWN0IEludGVy
bmFsRnVuY3Rpb247CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CitjbGFzcyBTaWduYXR1cmU7
CitzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsKKworLy8gQ3JlYXRlIHdyYXBwZXIgY29k
ZSB0byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNzZW1ibHkuCit1c2luZyBDcmVhdGVFbWJl
ZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUs
IHVpbnQzMl90KT47CisKKy8vIENhbGxlZCBhcyBzb29uIGFzIGFuIGV4Y2VwdGlvbiBpcyBkZXRl
Y3RlZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMgdG8gY29udGludWUgYXQuCit1c2luZyBU
aHJvd1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9u
VHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4IDJiMWQ4
MjguLmNjMWU3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
YXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKIAogI2luY2x1ZGUg
IkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAppbmRleCAzODEy
ODM2Li5lNWUwN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5oCkBAIC0yNyw4ICsyNyw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCiB2b2lkIHJlZ2lzdGVyQ29kZSh2
b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaAppbmRleCBiMjIyMjE3Li5lN2IzZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCkBAIC00NCwxNCArNDQsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIEpTRnVuY3Rpb247Ci0KIG5hbWVzcGFjZSBCMyB7CiBjbGFzcyBDb21waWxhdGlvbjsKIH0K
IAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Oworc3RydWN0
IE1vZHVsZUluZm9ybWF0aW9uOworCiBpbmxpbmUgYm9vbCBpc1ZhbHVlVHlwZShUeXBlIHR5cGUp
CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUluc3RhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGJlMGU3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3Rh
bmNlLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5j
ZS5oIgorCisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3Jt
YXRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIHsKK3NpemVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6
ZShNb2R1bGUmIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gbW9kdWxlLm1vZHVsZUluZm9ybWF0aW9u
KCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworfQorfQorCitJbnN0YW5jZTo6
SW5zdGFuY2UoUmVmPE1vZHVsZT4mJiBtb2R1bGUpCisgICAgOiBtX21vZHVsZShXVEZNb3ZlKG1v
ZHVsZSkpCisgICAgLCBtX2dsb2JhbHMoTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGdsb2Jh
bE1lbW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdldCgpKSkpCit7Cit9CisKK0luc3RhbmNlOjp+SW5z
dGFuY2UoKSB7IH0KKworc2l6ZV90IEluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGdsb2JhbE1lbW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdldCgpKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0
YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3OGE3NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCkBAIC0wLDAgKzEsODcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Gb3JtYXQu
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorI2lu
Y2x1ZGUgIldhc21UYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K2NsYXNzIEluc3RhbmNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEluc3RhbmNlPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJbnN0YW5jZT4gY3JlYXRlKFJlZjxNb2R1bGU+JiYg
bW9kdWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zdGFuY2UoV1RG
TW92ZShtb2R1bGUpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluYWxpemVDcmVhdGlvbihS
ZWY8Q29kZUJsb2NrPiYmIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIG1fY29kZUJsb2NrID0g
V1RGTW92ZShjb2RlQmxvY2spOworICAgIH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5JbnN0
YW5jZSgpOworCisgICAgc2l6ZV90IGV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3Q7CisKKyAg
ICBNb2R1bGUmIG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQorICAgIE1lbW9y
eSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KKyAgICBUYWJsZSogdGFibGUo
KSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisKKyAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CisgICAgaW50
NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5n
ZXQoKVtpXTsgfQorICAgIGZsb2F0IGxvYWRGMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMyR2xvYmFsKGkpKTsgfQorICAgIGRvdWJs
ZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxk
b3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9CisgICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQg
aSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQoKVtpXSA9IGJpdHM7IH0KKworICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZFN0YWNrTGltaXQpOyB9CisgICAgdm9pZCogY2Fj
aGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsgfQorICAg
IHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBsaW1pdCkgeyBtX2NhY2hlZFN0YWNrTGlt
aXQgPSBsaW1pdDsgfQorCisgICAgZnJpZW5kIGNsYXNzIEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOyAvLyBGSVhNRSByZW1vdmUgdGhpcyBvbmNlIHJlZmFjdG9yZWQgaHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTc3NDcyLgorCitwcml2YXRlOgorICAgIEluc3RhbmNlKFJlZjxNb2R1bGU+JiYpOwor
ICAgIAorICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1f
Y29kZUJsb2NrOworICAgIFJlZlB0cjxNZW1vcnk+IG1fbWVtb3J5OworICAgIFJlZlB0cjxUYWJs
ZT4gbV90YWJsZTsKKyAgICBNYWxsb2NQdHI8dWludDY0X3Q+IG1fZ2xvYmFsczsKKyAgICB2b2lk
KiBtX2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludHB0cl90Pjo6bWF4KCkpIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBjNWY0OGU5Li4wZGM3NzVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjgsMTMgKzI4LDE5IEBACiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIldh
c21UaHVua3MuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KICNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNp
bmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKQEAgLTUxLDE5ICs1NywxOSBAQCBORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKSB7IENSQQog
c3RydWN0IE1lbW9yeVJlc3VsdCB7CiAgICAgZW51bSBLaW5kIHsKICAgICAgICAgU3VjY2VzcywK
LSAgICAgICAgU3VjY2Vzc0FuZEFzeW5jR0MsCi0gICAgICAgIFN5bmNHQ0FuZFJldHJ5CisgICAg
ICAgIFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZSwKKyAgICAgICAgU3luY1RyeVRvUmVj
bGFpbU1lbW9yeQogICAgIH07Ci0gICAgCisKICAgICBzdGF0aWMgY29uc3QgY2hhciogdG9TdHJp
bmcoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNh
c2UgU3VjY2VzczoKICAgICAgICAgICAgIHJldHVybiAiU3VjY2VzcyI7Ci0gICAgICAgIGNhc2Ug
U3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICByZXR1cm4gIlN1Y2Nlc3NBbmRBc3luY0dD
IjsKLSAgICAgICAgY2FzZSBTeW5jR0NBbmRSZXRyeToKLSAgICAgICAgICAgIHJldHVybiAiU3lu
Y0dDQW5kUmV0cnkiOworICAgICAgICBjYXNlIFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3Vy
ZToKKyAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlIjsK
KyAgICAgICAgY2FzZSBTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OgorICAgICAgICAgICAgcmV0dXJu
ICJTeW5jVHJ5VG9SZWNsYWltTWVtb3J5IjsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk4LDE3ICsx
MDQsMTcgQEAgcHVibGljOgogICAgICAgICBNZW1vcnlSZXN1bHQgcmVzdWx0ID0gWyZdIHsKICAg
ICAgICAgICAgIGF1dG8gaG9sZGVyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgICAgIGlm
IChtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6
OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB2b2lk
KiByZXN1bHQgPSBHaWdhY2FnZTo6dHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CiAgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KG51bGxwdHIsIE1lbW9y
eVJlc3VsdDo6U3luY0dDQW5kUmV0cnkpOworICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlS
ZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5KTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9tZW1vcmllcy5hcHBlbmQocmVzdWx0KTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdCgKICAgICAgICAgICAgICAg
ICByZXN1bHQsCi0gICAgICAgICAgICAgICAgbV9tZW1vcmllcy5zaXplKCkgPj0gbV9tYXhDb3Vu
dCAvIDIgPyBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3NBbmRBc3luY0dDIDogTWVtb3J5UmVzdWx0OjpT
dWNjZXNzKTsKKyAgICAgICAgICAgICAgICBtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50
IC8gMiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlIDogTWVt
b3J5UmVzdWx0OjpTdWNjZXNzKTsKICAgICAgICAgfSgpOwogICAgICAgICAKICAgICAgICAgaWYg
KE9wdGlvbnM6OmxvZ1dlYkFzc2VtYmx5TWVtb3J5KCkpCkBAIC0xNTMsMTIgKzE1OSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdDo6S2luZCByZXN1bHQgPSBbJl0gewogICAgICAg
ICAgICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICAgICAgaWYgKG1f
cGh5c2ljYWxCeXRlcyArIGJ5dGVzID4gbWVtb3J5TGltaXQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX3BoeXNpY2FsQnl0ZXMgKz0gYnl0ZXM7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChtX3BoeXNpY2FsQnl0ZXMgPj0gbWVtb3J5TGltaXQoKSAvIDIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNz
dXJlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNj
ZXNzOwogICAgICAgICB9KCk7CkBAIC0yMDUsNyArMjExLDcgQEAgc3RhdGljIE1lbW9yeU1hbmFn
ZXImIG1lbW9yeU1hbmFnZXIoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotYm9vbCB0
cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9jYXRlKQorYm9vbCB0cnlBbGxvY2F0ZShj
b25zdCBGdW5jJiBhbGxvY2F0ZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiBub3RpZnlN
ZW1vcnlQcmVzc3VyZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiBzeW5jVHJ5VG9SZWNs
YWltTWVtb3J5KQogewogICAgIHVuc2lnbmVkIG51bVRyaWVzID0gMjsKICAgICBib29sIGRvbmUg
PSBmYWxzZTsKQEAgLTIxNCwxNCArMjIwLDE2IEBAIGJvb2wgdHJ5QW5kR0MoVk0mIHZtLCBjb25z
dCBGdW5jJiBhbGxvY2F0ZSkKICAgICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M6CiAg
ICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICB2bS5oZWFwLmNv
bGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICBjYXNlIE1lbW9yeVJl
c3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAgICAgaWYgKG5v
dGlmeU1lbW9yeVByZXNzdXJlKQorICAgICAgICAgICAgICAgIG5vdGlmeU1lbW9yeVByZXNzdXJl
KCk7CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnk6CisgICAgICAgIGNhc2UgTWVtb3J5
UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OgogICAgICAgICAgICAgaWYgKGkgKyAxID09
IG51bVRyaWVzKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgdm0uaGVhcC5j
b2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICAgICAgaWYgKHN5bmNU
cnlUb1JlY2xhaW1NZW1vcnkpCisgICAgICAgICAgICAgICAgc3luY1RyeVRvUmVjbGFpbU1lbW9y
eSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzAsMzIgKzIz
OCwzMiBAQCBib29sIHRyeUFuZEdDKFZNJiB2bSwgY29uc3QgRnVuYyYgYWxsb2NhdGUpCiAKIH0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1jb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1v
ZGUgbW9kZSkKK01lbW9yeTo6TWVtb3J5KCkKIHsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBj
YXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsK
LSAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOwotICAg
IH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKIH0K
IAotTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQor
TWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBGdW5j
dGlvbjx2b2lkKCk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBz
eW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdl
Q291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCiAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkK
ICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAgICwgbV9ub3RpZnlNZW1vcnlQcmVzc3VyZShz
dGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSkp
CisgICAgLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkoc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rp
b248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkpCisgICAgLCBtX2dyb3dTdWNjZXNz
Q2FsbGJhY2soc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VD
b3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkKIHsKICAgICBBU1NFUlQoIWluaXRpYWwuYnl0
ZXMoKSk7CiAgICAgQVNTRVJUKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyk7
CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwg
KnRoaXMpOwogfQogCi1NZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2Rl
IG1vZGUpCitNZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUs
IEZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgRnVuY3Rpb248dm9pZCgp
PiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQs
IFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1fbWVtb3J5KG1lbW9y
eSkKICAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwoaW5pdGlh
bCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAgICwgbV9tYXBwZWRDYXBhY2l0eShtYXBw
ZWRDYXBhY2l0eSkKICAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9ub3RpZnlNZW1vcnlQcmVz
c3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVz
c3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkoc3RkOjpmb3J3YXJkPFdURjo6
RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkpCisgICAgLCBtX2dyb3dT
dWNjZXNzQ2FsbGJhY2soc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQs
IFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkKIHsKICAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CkBAIC0yNzUs
NyArMjgzLDEyIEBAIHN0YXRpYyB2b2lkIGNvbW1pdFplcm9QYWdlcyh2b2lkKiBzdGFydEFkZHJl
c3MsIHNpemVfdCBzaXplSW5CeXRlcykKICNlbmRpZgogfQogCi1SZWZQdHI8TWVtb3J5PiBNZW1v
cnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkK
K1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1lbW9yeSgpKTsKK30KKyAgICAKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgRnVuY3Rpb248dm9pZCgpPiYmIG5v
dGlmeU1lbW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1l
bW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3Vj
Y2Vzc0NhbGxiYWNrKQogewogICAgIEFTU0VSVChpbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VS
VCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFy
YW50ZWVkIGJ5IG91ciBjYWxsZXIuCkBAIC0yODMsMzMgKzI5NiwyNyBAQCBSZWZQdHI8TWVtb3J5
PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSkKICAgICBjb25zdCBzaXplX3QgaW5pdGlhbEJ5dGVzID0gaW5pdGlhbC5ieXRlcygpOwog
ICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtQnl0ZXMgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygp
IDogMDsKIAotICAgIC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0
byBydW5uaW5nIGNvZGUuCi0gICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0
dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCiAgICAgaWYgKG1heGltdW0gJiYgIW1heGltdW1CeXRlcykgewogICAgICAg
ICAvLyBVc2VyIHNwZWNpZmllZCBhIHplcm8gbWF4aW11bSwgaW5pdGlhbCBzaXplIG11c3QgYWxz
byBiZSB6ZXJvLgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5pdGlhbEJ5dGVzKTsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtLCBzdGQ6OmZvcndh
cmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSksIHN0ZDo6Zm9y
d2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBzdGQ6
OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dT
dWNjZXNzQ2FsbGJhY2spKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgZG9uZSA9IHRyeUFuZEdD
KAotICAgICAgICB2bSwKKyAgICBib29sIGRvbmUgPSB0cnlBbGxvY2F0ZSgKICAgICAgICAgWyZd
ICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAgICByZXR1cm4gbWVtb3J5TWFu
YWdlcigpLnRyeUFsbG9jYXRlUGh5c2ljYWxCeXRlcyhpbml0aWFsQnl0ZXMpOwotICAgICAgICB9
KTsKKyAgICAgICAgfSwgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIHN5bmNUcnlUb1JlY2xhaW1NZW1v
cnkpOwogICAgIGlmICghZG9uZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAog
ICAgIGNoYXIqIGZhc3RNZW1vcnkgPSBudWxscHRyOwogICAgIGlmIChPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUZhc3RNZW1vcnkoKSkgewotICAgICAgICB0cnlBbmRHQygKLSAgICAgICAgICAgIHZt
LAorICAgICAgICB0cnlBbGxvY2F0ZSgKICAgICAgICAgICAgIFsmXSAoKSAtPiBNZW1vcnlSZXN1
bHQ6OktpbmQgewogICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbWVtb3J5TWFuYWdlcigp
LnRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKCk7CiAgICAgICAgICAgICAgICAgZmFzdE1lbW9yeSA9
IGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2VQdHIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQua2luZDsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSwgbm90aWZ5
TWVtb3J5UHJlc3N1cmUsIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgIH0KICAgICAKICAg
ICBpZiAoZmFzdE1lbW9yeSkgewpAQCAtMzIwLDE1ICszMjcsMTUgQEAgUmVmUHRyPE1lbW9yeT4g
TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0pCiAgICAgICAgIH0KIAogICAgICAgICBjb21taXRaZXJvUGFnZXMoZmFzdE1lbW9yeSwgaW5p
dGlhbEJ5dGVzKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5
KGZhc3RNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCks
IE1lbW9yeU1vZGU6OlNpZ25hbGluZykpOworCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVtb3J5KGZhc3RNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5
dGVzKCksIE1lbW9yeU1vZGU6OlNpZ25hbGluZywgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248
dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlv
bjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVu
Y3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkp
OwogICAgIH0KICAgICAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Y3Jhc2hJZldlYkFzc2Vt
Ymx5Q2FudEZhc3RNZW1vcnkoKSkpCiAgICAgICAgIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RN
ZW1vcnkoKTsKIAogICAgIGlmICghaW5pdGlhbEJ5dGVzKQotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0sIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rp
b248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1
bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykp
KTsKICAgICAKICAgICB2b2lkKiBzbG93TWVtb3J5ID0gR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxs
b2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RGOjpwYWdlU2l6ZSgpLCBpbml0aWFsQnl0ZXMpOwog
ICAgIGlmICghc2xvd01lbW9yeSkgewpAQCAtMzM2LDcgKzM0Myw3IEBAIFJlZlB0cjxNZW1vcnk+
IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgbWVtc2V0KHNsb3dNZW1v
cnksIDAsIGluaXRpYWxCeXRlcyk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xv
d01lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgaW5pdGlhbEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3Vu
ZHNDaGVja2luZykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KHNsb3dNZW1vcnks
IGluaXRpYWwsIG1heGltdW0sIGluaXRpYWxCeXRlcywgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmcsIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNz
dXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdl
Q291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKIH0KIAogTWVtb3J5Ojp+TWVtb3J5KCkK
QEAgLTM0NSw3ICszNTIsMTAgQEAgTWVtb3J5Ojp+TWVtb3J5KCkKICAgICAgICAgbWVtb3J5TWFu
YWdlcigpLmZyZWVQaHlzaWNhbEJ5dGVzKG1fc2l6ZSk7CiAgICAgICAgIHN3aXRjaCAobV9tb2Rl
KSB7CiAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgotICAgICAgICAgICAgbXBy
b3RlY3QobV9tZW1vcnksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBS
T1RfV1JJVEUpOworICAgICAgICAgICAgaWYgKG1wcm90ZWN0KG1fbWVtb3J5LCBNZW1vcnk6OmZh
c3RNYXBwZWRCeXRlcygpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICAgICAg
ICAgIGRhdGFMb2coIm1wcm90ZWN0IGZhaWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAiXG4iKTsK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVWaXJ0dWFsUGFnZXMobV9tZW1v
cnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmc6CkBAIC0zNzEsMzQgKzM4MSw1MCBAQCBib29sIE1lbW9yeTo6YWRkcmVzc0lzSW5B
Y3RpdmVGYXN0TWVtb3J5KHZvaWQqIGFkZHJlc3MpCiAgICAgcmV0dXJuIG1lbW9yeU1hbmFnZXIo
KS5jb250YWluc0FkZHJlc3MoYWRkcmVzcyk7CiB9CiAKLWJvb2wgTWVtb3J5Ojpncm93KFZNJiB2
bSwgUGFnZUNvdW50IG5ld1NpemUpCitFeHBlY3RlZDxQYWdlQ291bnQsIE1lbW9yeTo6R3Jvd0Zh
aWxSZWFzb24+IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgZGVsdGEpCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOworICAgIGNvbnN0
IFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBzaXplSW5QYWdlcygpOwogCi0gICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyB0byAiLCBuZXdTaXplLCAiIGZyb20gIiwg
KnRoaXMpOworICAgIGlmICghZGVsdGEuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OkludmFsaWREZWx0YSk7CisgICAgCisgICAgY29uc3Qg
V2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCA9IG9sZFBhZ2VDb3VudCArIGRlbHRhOworICAg
IGlmICghbmV3UGFnZUNvdW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0Zh
aWxSZWFzb246OkludmFsaWRHcm93U2l6ZSk7CiAKLSAgICBpZiAobWF4aW11bSgpICYmIG5ld1Np
emUgPiBtYXhpbXVtKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHN1Y2Nlc3Mg
PSBbJl0gKCkgeworICAgICAgICBtX2dyb3dTdWNjZXNzQ2FsbGJhY2sob2xkUGFnZUNvdW50LCBu
ZXdQYWdlQ291bnQpOworICAgICAgICByZXR1cm4gb2xkUGFnZUNvdW50OworICAgIH07CiAKLSAg
ICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5dGVzKCk7CisgICAgaWYgKGRlbHRhLnBh
Z2VDb3VudCgpID09IDApCisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CisKKyAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93KCIsIGRlbHRhLCAiKSB0byAiLCBuZXdQYWdlQ291
bnQsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgUkVMRUFTRV9BU1NFUlQobmV3UGFnZUNvdW50ID4g
UGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisKKyAgICBpZiAobWF4aW11bSgpICYmIG5l
d1BhZ2VDb3VudCA+IG1heGltdW0oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdy
b3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW0pOworCisgICAgc2l6ZV90IGRlc2lyZWRT
aXplID0gbmV3UGFnZUNvdW50LmJ5dGVzKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZGVzaXJlZFNp
emUgPiBtX3NpemUpOwogICAgIHNpemVfdCBleHRyYUJ5dGVzID0gZGVzaXJlZFNpemUgLSBtX3Np
emU7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXh0cmFCeXRlcyk7Ci0gICAgYm9vbCBzdWNjZXNzID0g
dHJ5QW5kR0MoCi0gICAgICAgIHZtLAorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2Nlc3MgPSB0cnlB
bGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAgICAg
ICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlUGh5c2ljYWxCeXRlcyhleHRy
YUJ5dGVzKTsKLSAgICAgICAgfSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIAorICAgICAgICB9LCBtX25vdGlmeU1lbW9yeVByZXNzdXJlLCBtX3N5
bmNUcnlUb1JlY2xhaW1NZW1vcnkpOworICAgIGlmICghYWxsb2NhdGlvblN1Y2Nlc3MpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkpOwor
CiAgICAgc3dpdGNoIChtb2RlKCkpIHsKICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNr
aW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1heGltdW0oKS5ieXRlcygpICE9IDApOwot
ICAgICAgICAKKwogICAgICAgICB2b2lkKiBuZXdNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25l
ZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCksIGRlc2lyZWRTaXpl
KTsKICAgICAgICAgaWYgKCFuZXdNZW1vcnkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVt
b3J5KTsKKwogICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsKICAg
ICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PGNoYXIqPihuZXdNZW1vcnkpICsgbV9zaXplLCAwLCBk
ZXNpcmVkU2l6ZSAtIG1fc2l6ZSk7CiAgICAgICAgIGlmIChtX21lbW9yeSkKQEAgLTQwNiw3ICs0
MzIsNyBAQCBib29sIE1lbW9yeTo6Z3JvdyhWTSYgdm0sIFBhZ2VDb3VudCBuZXdTaXplKQogICAg
ICAgICBtX21lbW9yeSA9IG5ld01lbW9yeTsKICAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IGRl
c2lyZWRTaXplOwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CiAgICAgfQogICAgIGNhc2UgTWVtb3J5
TW9kZTo6U2lnbmFsaW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbWVtb3J5KTsKQEAg
LTQxNSwxNiArNDQxLDE3IEBAIGJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5l
d1NpemUpCiAgICAgICAgIAogICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWFya2luZyBX
ZWJBc3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiBhcyByZWFkK3dy
aXRlIGluIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyksICIsICIsIFJhd1BvaW50
ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFCeXRlcyksICIpIik7CiAgICAgICAgIGlmIChtcHJvdGVj
dChzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7Ci0g
ICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IGluLXBsYWNlIGZh
aWxlZCAiLCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBk
YXRhTG9nKCJtcHJvdGVjdCBmYWlsZWQ6ICIsIHN0cmVycm9yKGVycm5vKSwgIlxuIik7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAg
IGNvbW1pdFplcm9QYWdlcyhzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMpOwogICAgICAgICBtX3Np
emUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB9Ci0gICAgCisg
ICAgICAgIHJldHVybiBzdWNjZXNzKCk7CisgICAgfQorICAgIH0KKwogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBvbGRQYWdl
Q291bnQ7CiB9CiAKIHZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXggNjBhOWJiNy4uM2YxOGMx
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaApAQCAtMjcsOCArMjcs
MTEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldhc21NZW1vcnlN
b2RlLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogCisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTM4LDE4ICs0MSw4IEBAIGNsYXNz
IFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFj
ZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLWVudW0gY2xh
c3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3QgewotICAgIEJvdW5kc0NoZWNraW5nLAotICAgIFNpZ25h
bGluZwotfTsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IE51bWJlck9mTWVtb3J5TW9kZXMgPSAy
OwotSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlNb2RlKTsK
LQogY2xhc3MgTWVtb3J5IDogcHVibGljIFJlZkNvdW50ZWQ8TWVtb3J5PiB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAg
LTU3LDggKzUwLDkgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJikg
Y29uc3Q7CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X21lbW9yeTsgfQotICAgIAotICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoVk0mLCBQ
YWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pOworCisgICAgc3RhdGljIFJlZlB0
cjxNZW1vcnk+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUoUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1RyeVRv
UmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4m
JiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAogICAgIH5NZW1vcnkoKTsKIApAQCAtNzUsMjIgKzY5
LDM0IEBAIHB1YmxpYzoKIAogICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZTsgfQogCi0gICAgLy8gZ3JvdygpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBK
U1dlYkFzc2VtYmx5TWVtb3J5IG9iamVjdCBzaW5jZSB0aGF0IG9iamVjdCBuZWVkcyB0byB1cGRh
dGUgaW50ZXJuYWwKLSAgICAvLyBwb2ludGVycyB3aXRoIHRoZSBjdXJyZW50IGJhc2UgYW5kIHNp
emUuCi0gICAgYm9vbCBncm93KFZNJiwgUGFnZUNvdW50KTsKKyAgICBlbnVtIGNsYXNzIEdyb3dG
YWlsUmVhc29uIHsKKyAgICAgICAgSW52YWxpZERlbHRhLAorICAgICAgICBJbnZhbGlkR3Jvd1Np
emUsCisgICAgICAgIFdvdWxkRXhjZWVkTWF4aW11bSwKKyAgICAgICAgT3V0T2ZNZW1vcnksCisg
ICAgfTsKKyAgICBFeHBlY3RlZDxQYWdlQ291bnQsIEdyb3dGYWlsUmVhc29uPiBncm93KFBhZ2VD
b3VudCk7CiAKICAgICB2b2lkIGNoZWNrKCkgeyAgQVNTRVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkp
OyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKE1lbW9yeSwgbV9tZW1vcnkpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9
CisKIHByaXZhdGU6Ci0gICAgTWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUpOwot
ICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pOworICAgIE1l
bW9yeSgpOworICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdl
Q291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3Vu
dCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKKyAgICBNZW1vcnkoUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBu
b3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVj
bGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBn
cm93U3VjY2Vzc0NhbGxiYWNrKTsKIAotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbW92ZSB0aGVz
ZSB0byB0aGUgaW5zdGFuY2UgdG8gYXZvaWQgYSBsb2FkIG9uIGluc3RhbmNlLT5pbnN0YW5jZSBj
YWxscy4KKyAgICAvLyBGSVhNRTogd2UgY2FjaGUgdGhlc2Ugb24gdGhlIGluc3RhbmNlcyB0byBh
dm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNlIGNhbGxzLiBUaGlzIHdpbGwgcmVxdWly
ZSB1cGRhdGluZyBhbGwgdGhlIGluc3RhbmNlcyB3aGVuIGdyb3cgaXMgY2FsbGVkLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MzA1CiAgICAgdm9pZCogbV9tZW1v
cnkgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKICAgICBQYWdlQ291bnQg
bV9pbml0aWFsOwogICAgIFBhZ2VDb3VudCBtX21heGltdW07CiAgICAgc2l6ZV90IG1fbWFwcGVk
Q2FwYWNpdHkgeyAwIH07CiAgICAgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3Vu
ZHNDaGVja2luZyB9OworICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX25vdGlmeU1lbW9yeVBy
ZXNzdXJlOworICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX3N5bmNUcnlUb1JlY2xhaW1NZW1v
cnk7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4gbV9ncm93
U3VjY2Vzc0NhbGxiYWNrOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3Bw
CmluZGV4IGJmNTY1ZjAuLmI1YzM0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcApAQCAtNTcsNyArNTcsNyBAQCBjb25z
dCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAgICBzdGQ6
OmNhbGxfb25jZShzdGF0aWNQaW5uZWRSZWdpc3RlckluZm9GbGFnLCBbXSAoKSB7CiAgICAgICAg
IFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOwogICAgICAgICBH
UFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBHUFJSZWcg
d2FzbUNvbnRleHRQb2ludGVyID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgR1BSUmVnIHdhc21D
b250ZXh0SW5zdGFuY2VQb2ludGVyID0gSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3Rlciwg
YW5kIHdlIHNob3VsZCBhbGxvdyBkaWZmZXJlbnQKICAgICAgICAgLy8gICAgICAgIFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlIHRvIGhhdmUgZGlmZmVyZW50IHBpbnMuIFJpZ2h0IG5vdyB3ZSB0YWtlIGEg
dmVjdG9yIHdpdGggb25seSBvbmUgZW50cnkuCkBAIC02NSwyNyArNjUsMjcgQEAgY29uc3QgUGlu
bmVkUmVnaXN0ZXJJbmZvJiBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpCiAgICAgICAgIC8vICAg
ICAgICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIK
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlBpbm5lZFJlZ2lzdGVycyA9IHBpbm5lZFNpemVzLnNpemUoKSArIDE7
Ci0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAgICAgICAgaWYgKCFDb250
ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgICAgICArK251bWJlck9mUGlubmVkUmVnaXN0ZXJz
OwogICAgICAgICBWZWN0b3I8R1BSUmVnPiBwaW5uZWRSZWdzID0gZ2V0UGlubmVkUmVnaXN0ZXJz
KG51bWJlck9mUGlubmVkUmVnaXN0ZXJzKTsKIAogICAgICAgICBiYXNlTWVtb3J5UG9pbnRlciA9
IHBpbm5lZFJlZ3MudGFrZUxhc3QoKTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4
dCgpKQotICAgICAgICAgICAgd2FzbUNvbnRleHRQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFz
dCgpOworICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgIHdh
c21Db250ZXh0SW5zdGFuY2VQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOwogCiAgICAg
ICAgIEFTU0VSVChwaW5uZWRTaXplcy5zaXplKCkgPT0gcGlubmVkUmVncy5zaXplKCkpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGlubmVkU2l6ZXMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgICAgICBzaXplUmVnaXN0ZXJzLmFwcGVuZCh7IHBpbm5lZFJlZ3NbaV0sIHBpbm5lZFNp
emVzW2ldIH0pOwotICAgICAgICBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uY29uc3RydWN0KFdU
Rk1vdmUoc2l6ZVJlZ2lzdGVycyksIGJhc2VNZW1vcnlQb2ludGVyLCB3YXNtQ29udGV4dFBvaW50
ZXIpOworICAgICAgICBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uY29uc3RydWN0KFdURk1vdmUo
c2l6ZVJlZ2lzdGVycyksIGJhc2VNZW1vcnlQb2ludGVyLCB3YXNtQ29udGV4dEluc3RhbmNlUG9p
bnRlcik7CiAgICAgfSk7CiAKICAgICByZXR1cm4gc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvLmdl
dCgpOwogfQogCi1QaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8
UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9y
eVBvaW50ZXIsIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50ZXIpCitQaW5uZWRSZWdpc3RlckluZm86
OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXpl
UmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIsIEdQUlJlZyB3YXNtQ29udGV4dElu
c3RhbmNlUG9pbnRlcikKICAgICA6IHNpemVSZWdpc3RlcnMoV1RGTW92ZShzaXplUmVnaXN0ZXJz
KSkKICAgICAsIGJhc2VNZW1vcnlQb2ludGVyKGJhc2VNZW1vcnlQb2ludGVyKQotICAgICwgd2Fz
bUNvbnRleHRQb2ludGVyKHdhc21Db250ZXh0UG9pbnRlcikKKyAgICAsIHdhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyKHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKQogewogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCmluZGV4
IDQyMzdiYWMuLjIzMzI5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IFBpbm5lZFNpemVS
ZWdpc3RlckluZm8gewogc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7CiAgICAgVmVjdG9yPFBp
bm5lZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CiAgICAgR1BSUmVnIGJhc2VNZW1v
cnlQb2ludGVyOwotICAgIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50ZXI7CisgICAgR1BSUmVnIHdh
c21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwogICAgIHN0YXRpYyBjb25zdCBQaW5uZWRSZWdpc3Rl
ckluZm8mIGdldCgpOwogICAgIFBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJl
Z2lzdGVySW5mbz4mJiwgR1BSUmVnLCBHUFJSZWcpOwogCkBAIC01Miw4ICs1Miw4IEBAIHN0cnVj
dCBQaW5uZWRSZWdpc3RlckluZm8gewogICAgIHsKICAgICAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0
OwogICAgICAgICByZXN1bHQuc2V0KGJhc2VNZW1vcnlQb2ludGVyKTsKLSAgICAgICAgaWYgKHdh
c21Db250ZXh0UG9pbnRlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgcmVzdWx0LnNl
dCh3YXNtQ29udGV4dFBvaW50ZXIpOworICAgICAgICBpZiAod2FzbUNvbnRleHRJbnN0YW5jZVBv
aW50ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJlc3VsdC5zZXQod2FzbUNvbnRl
eHRJbnN0YW5jZVBvaW50ZXIpOwogICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcpIHsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaW5mbyA6IHNpemVSZWdpc3Rl
cnMpCiAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChpbmZvLnNpemVSZWdpc3Rlcik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiYzk4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcApAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5
TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIGNhc2UgTWVtb3J5
TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMTRmYzg5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNFeHBvcnRNYWNyb3MuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworLy8gRklYTUU6IFdlIHNob3VsZCBz
dXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI2OTMKK2VudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3QgeworICAgIEJv
dW5kc0NoZWNraW5nLAorICAgIFNpZ25hbGluZworfTsKKworc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFy
KiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGUuY3BwCmluZGV4IDhlMzY2ZjQuLjk5MmUzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCkBAIC01NiwyNyArNTYsMjYgQEAgc3RhdGljIE1v
ZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtlVmFsaWRhdGlvblJlc3VsdChCQlFQbGFuJiBwbGFu
KQogCiBzdGF0aWMgUGxhbjo6Q29tcGxldGlvblRhc2sgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhN
b2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0gKFZNKiB2bSwgUGxhbiYgcGxhbikgeworICAgIHJldHVybiBjcmVhdGVTaGFy
ZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayld
IChQbGFuJiBwbGFuKSB7CiAgICAgICAgIEFTU0VSVCghcGxhbi5oYXNXb3JrKCkpOwotICAgICAg
ICBBU1NFUlQodm0pOwotICAgICAgICBjYWxsYmFjay0+cnVuKCp2bSwgbWFrZVZhbGlkYXRpb25S
ZXN1bHQoc3RhdGljX2Nhc3Q8QkJRUGxhbiY+KHBsYW4pKSk7CisgICAgICAgIGNhbGxiYWNrLT5y
dW4obWFrZVZhbGlkYXRpb25SZXN1bHQoc3RhdGljX2Nhc3Q8QkJRUGxhbiY+KHBsYW4pKSk7CiAg
ICAgfSk7CiB9CiAKLU1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBNb2R1bGU6OnZhbGlkYXRlU3lu
YyhWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKK01vZHVsZTo6VmFsaWRhdGlvblJl
c3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhf
dD4mJiBzb3VyY2UpCiB7Ci0gICAgUmVmPEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJC
UVBsYW4oJnZtLCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRv
bnRGaW5hbGl6ZSgpKSk7CisgICAgUmVmPEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJC
UVBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFu
Ojpkb250RmluYWxpemUoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgIHBsYW4tPnBhcnNlQW5k
VmFsaWRhdGVNb2R1bGUoKTsKICAgICByZXR1cm4gbWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbi5n
ZXQoKSk7CiB9CiAKLXZvaWQgTW9kdWxlOjp2YWxpZGF0ZUFzeW5jKFZNJiB2bSwgVmVjdG9yPHVp
bnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYgY2FsbGJh
Y2spCit2b2lkIE1vZHVsZTo6dmFsaWRhdGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8
dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxs
YmFjaykKIHsKLSAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbigmdm0s
IFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxs
YmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVm
KCpuZXcgQkJRUGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRp
b24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpLCBudWxscHRyLCBu
dWxscHRyKSk7CiAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxh
bikpOwogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKE1l
bW9yeU1vZGUgbW9kZSkKK1JlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxv
Y2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBw
ZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21F
eGNlcHRpb24pCiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTg3LDIzICs4NiwyMyBAQCBSZWY8Q29kZUJs
b2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSkKICAgICAv
LyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBiYWNrIG9mZiByZXRyeWluZyBhdCBzb21lIHBvaW50
OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2MDcK
ICAgICBpZiAoIWNvZGVCbG9jayB8fCAoY29kZUJsb2NrLT5jb21waWxhdGlvbkZpbmlzaGVkKCkg
JiYgIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAgY29kZUJsb2NrID0gQ29kZUJs
b2NrOjpjcmVhdGUobW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUlu
Zm9ybWF0aW9uKCkpKTsKKyAgICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUoY29u
dGV4dCwgbW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0
aW9uKCkpLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bik7CiAgICAgICAgIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0gPSBj
b2RlQmxvY2s7CiAgICAgfQogICAgIHJldHVybiBjb2RlQmxvY2sucmVsZWFzZU5vbk51bGwoKTsK
IH0KIAotUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpjb21waWxlU3luYyhNZW1vcnlNb2RlIG1vZGUp
CitSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKENvbnRleHQqIGNvbnRleHQsIE1l
bW9yeU1vZGUgbW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFw
cGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewotICAgIFJlZjxD
b2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKG1vZGUpOworICAgIFJl
ZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQsIG1v
ZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsK
ICAgICBjb2RlQmxvY2stPndhaXRVbnRpbEZpbmlzaGVkKCk7CiAgICAgcmV0dXJuIGNvZGVCbG9j
azsKIH0KIAotdm9pZCBNb2R1bGU6OmNvbXBpbGVBc3luYyhWTSYgdm0sIE1lbW9yeU1vZGUgbW9k
ZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrKQordm9pZCBNb2R1
bGU6OmNvbXBpbGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENvZGVC
bG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFw
cGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQogewotICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRl
Q29kZUJsb2NrKG1vZGUpOwotICAgIGNvZGVCbG9jay0+Y29tcGlsZUFzeW5jKHZtLCBXVEZNb3Zl
KHRhc2spKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVC
bG9jayhjb250ZXh0LCBtb2RlLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93
V2FzbUV4Y2VwdGlvbik7CisgICAgY29kZUJsb2NrLT5jb21waWxlQXN5bmMoY29udGV4dCwgV1RG
TW92ZSh0YXNrKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKaW5kZXggYTFhZjc1OC4uYTZhZTI5ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21Db2RlQmxvY2suaCIKKyNpbmNs
dWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTM2LDE5ICszNywyMCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsK
IHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIGNsYXNzIFBsYW47CiAKIHVzaW5nIFNpZ25hdHVy
ZUluZGV4ID0gdWludDMyX3Q7Ci0gICAgCisKIGNsYXNzIE1vZHVsZSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxNb2R1bGU+IHsKIHB1YmxpYzoKICAgICB1c2luZyBWYWxpZGF0aW9uUmVz
dWx0ID0gV1RGOjpFeHBlY3RlZDxSZWZQdHI8TW9kdWxlPiwgU3RyaW5nPjsKLSAgICB0eXBlZGVm
IHZvaWQgQ2FsbGJhY2tUeXBlKFZNJiwgVmFsaWRhdGlvblJlc3VsdCYmKTsKKyAgICB0eXBlZGVm
IHZvaWQgQ2FsbGJhY2tUeXBlKFZhbGlkYXRpb25SZXN1bHQmJik7CiAgICAgdXNpbmcgQXN5bmNW
YWxpZGF0aW9uQ2FsbGJhY2sgPSBSZWZQdHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKIAot
ICAgIHN0YXRpYyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlU3luYyhWTSYsIFZlY3Rvcjx1aW50
OF90PiYmIHNvdXJjZSk7Ci0gICAgc3RhdGljIHZvaWQgdmFsaWRhdGVBc3luYyhWTSYsIFZlY3Rv
cjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmKTsK
KyAgICBzdGF0aWMgVmFsaWRhdGlvblJlc3VsdCB2YWxpZGF0ZVN5bmMoQ29udGV4dCosIFZlY3Rv
cjx1aW50OF90PiYmIHNvdXJjZSk7CisgICAgc3RhdGljIHZvaWQgdmFsaWRhdGVBc3luYyhDb250
ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNh
bGxiYWNrJiYpOwogCiAgICAgc3RhdGljIFJlZjxNb2R1bGU+IGNyZWF0ZShSZWY8TW9kdWxlSW5m
b3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24pCiAgICAgewpAQCAtNTgsMTQgKzYwLDE0IEBA
IHB1YmxpYzoKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdDsKICAgICBj
b25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9CiAKLSAgICBSZWY8Q29kZUJsb2Nr
PiBjb21waWxlU3luYyhNZW1vcnlNb2RlKTsKLSAgICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIE1l
bW9yeU1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOworICAgIFJl
ZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDcmVhdGVFbWJl
ZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICB2b2lkIGNvbXBpbGVBc3lu
YyhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJh
Y2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB+TW9kdWxlKCk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
a0ZvcihNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1
aW50OF90Pihtb2RlKV0uZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPENvZGVCbG9jaz4gZ2V0
T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSk7CisgICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JD
cmVhdGVDb2RlQmxvY2soQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBl
ciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgTW9kdWxlKFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4mJik7CiAgICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9u
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApp
bmRleCA2Yzk0OGI1Li42ZDQ0YWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseVRhYmxlLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAj
aW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgpA
QCAtMjY1LDcgKzI2NCw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKGJv
b2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9
IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwogICAgIGlmIChVTkxJS0VM
WSghbGltaXRzKSkKICAgICAgICAgcmV0dXJuIGxpbWl0cy5nZXRVbmV4cGVjdGVkKCk7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighSlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0
aWFsKSwgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52
YWxpZCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdGlhbCA+IG1heFRhYmxlRW50cmll
cywgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgdG9vIGJp
ZywgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJpZXMpOwogCiAgICAgQVNTRVJUKCFtYXhpbXVtIHx8
ICptYXhpbXVtID49IGluaXRpYWwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAKaW5kZXggNzRjZjY1My4uY2NkZjcyZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtMzEsOSArMzEsMTAgQEAKICNpbmNsdWRlICJC
M0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAj
aW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIK
ICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCkBAIC01MSwxMCArNTIsMTAgQEAgbmFtZXNwYWNlIFdh
c21PTUdQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
fQogCi1PTUdQbGFuOjpPTUdQbGFuKFJlZjxNb2R1bGU+IG1vZHVsZSwgdWludDMyX3QgZnVuY3Rp
b25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBC
YXNlKG51bGxwdHIsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVs
ZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQotICAgICwgbV9tb2R1bGUo
bW9kdWxlLmNvcHlSZWYoKSkKLSAgICAsIG1fY29kZUJsb2NrKCptb2R1bGUtPmNvZGVCbG9ja0Zv
cihtb2RlKSkKK09NR1BsYW46Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4m
JiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8
TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92
ZSh0YXNrKSkKKyAgICAsIG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAsIG1fY29kZUJs
b2NrKCptX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQogICAgICwgbV9mdW5jdGlvbkluZGV4
KGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgc2V0TW9kZShtb2RlKTsKQEAgLTE2MiwxMyArMTYzLDEz
IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb21wbGV0ZSho
b2xkTG9jayhtX2xvY2spKTsKIH0KIAotdm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCog
Y29udGV4dCwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKK3ZvaWQgT01HUGxhbjo6cnVuRm9ySW5k
ZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCkKIHsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb250ZXh0LT5j
b2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29udGV4dC0+bWVtb3J5TW9kZSgpID09IGNvZGVCbG9j
ay0+bV9jb2RlQmxvY2stPm1vZGUoKSk7CisgICAgV2FzbTo6Q29kZUJsb2NrJiBjb2RlQmxvY2sg
PSBpbnN0YW5jZS0+d2FzbUNvZGVCbG9jaygpOworICAgIEFTU0VSVChpbnN0YW5jZS0+d2FzbU1l
bW9yeSgpLT5tb2RlKCkgPT0gY29kZUJsb2NrLm1vZGUoKSk7CiAKLSAgICBpZiAoY29kZUJsb2Nr
LT5tX2NvZGVCbG9jay0+dGllclVwQ291bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3RhcnRUaWVy
VXAoKSkgewotICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihj
b250ZXh0LT5tb2R1bGUoKS0+bW9kdWxlKCksIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jay0+bV9j
b2RlQmxvY2stPm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBpZiAoY29kZUJs
b2NrLnRpZXJVcENvdW50KGZ1bmN0aW9uSW5kZXgpLnNob3VsZFN0YXJ0VGllclVwKCkpIHsKKyAg
ICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNv
bnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPndhc21Nb2R1bGUoKSksIGZ1bmN0
aW9uSW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAg
ICAgIGVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlm
IChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBs
YW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R1BsYW4uaAppbmRleCA3MTY0YTllLi5iODA4MjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNs
dWRlICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKQEAgLTQxLDE3ICs0MCwy
MCBAQCBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBPTUdQbGFuIGZpbmFsIDogcHVibGljIFBsYW4g
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQbGFuOwotICAgIC8vIE5vdGU6IENvbXBsZXRp
b25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2Ug
dGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdQbGFuKFJlZjxNb2R1bGU+
LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9uVGFzayYmKTsK
IAogICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2NvbXBsZXRl
ZDsgfQogICAgIHZvaWQgd29yayhDb21waWxhdGlvbkVmZm9ydCkgb3ZlcnJpZGU7CiAgICAgYm9v
bCBtdWx0aVRocmVhZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAorICAg
IHN0YXRpYyB2b2lkIHJ1bkZvckluZGV4KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgpOworCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmll
bmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCiAgICAgdXNpbmcgQmFz
ZTo6bV9sb2NrOwogCisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xk
IGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJl
bmNlIGN5Y2xlLgorICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworCiAgICAgYm9v
bCBpc0NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb21wbGV0ZWQ7IH0KICAg
ICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCiAg
ICAgewpAQCAtNjUsOCArNjcsNiBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fZnVuY3Rpb25J
bmRleDsKIH07CiAKLXZvaWQgcnVuT01HUGxhbkZvckluZGV4KENvbnRleHQqLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4KTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QYWdlQ291bnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdl
Q291bnQuaAppbmRleCBlNDM4NDdjLi5lZjA1ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBhZ2VDb3VudC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDYgKzU3LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBwYWdlQ291bnQgPD0gbWF4UGFnZUNvdW50OwogICAgIH0KKyAgICAKKyAgICBi
b29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFsaWQobV9wYWdl
Q291bnQpOworICAgIH0KIAogICAgIHN0YXRpYyBQYWdlQ291bnQgZnJvbUJ5dGVzKHVpbnQ2NF90
IGJ5dGVzKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRl
eCBiYTI3Y2Y5Li5kMDYzY2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI5LDggKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJC
M0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJX
YXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTUxLDIwICs0OSwyNyBA
QCBuYW1lc3BhY2UgV2FzbVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+
IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4
dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oV1RG
TW92ZShpbmZvKSkKKyAgICAsIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKFdURk1vdmUoY3JlYXRl
RW1iZWRkZXJXcmFwcGVyKSkKKyAgICAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4
Y2VwdGlvbikKICAgICAsIG1fc291cmNlKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5kYXRh
KCkpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChtX21vZHVsZUluZm9ybWF0aW9uLT5zb3VyY2Uuc2l6
ZSgpKQogewotICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih2bSwg
V1RGTW92ZSh0YXNrKSkpOworICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBj
b25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRpb25UYXNr
JiYgdGFzaykKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0
aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBQbGFuKGNvbnRleHQsIFdU
Rk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIG51bGxwdHIsIG51bGxwdHIpCit7Cit9CisKK1Bs
YW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qg
c291cmNlTGVuZ3RoLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9y
bWF0aW9uKGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oVmVjdG9yPHVpbnQ4X3Q+KCkp
KSkKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxl
bmd0aCkKIHsKLSAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodm0s
IFdURk1vdmUodGFzaykpKTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQogCiB2b2lkIFBsYW46OnJ1bkNvbXBs
ZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCkBAIC03MiwxOCArNzcsMTggQEAgdm9p
ZCBQbGFuOjpydW5Db21wbGV0aW9uVGFza3MoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgIEFT
U0VSVChpc0NvbXBsZXRlKCkgJiYgIWhhc1dvcmsoKSk7CiAKICAgICBmb3IgKGF1dG8mIHRhc2sg
OiBtX2NvbXBsZXRpb25UYXNrcykKLSAgICAgICAgdGFzay5zZWNvbmQtPnJ1bih0YXNrLmZpcnN0
LCAqdGhpcyk7CisgICAgICAgIHRhc2suc2Vjb25kLT5ydW4oKnRoaXMpOwogICAgIG1fY29tcGxl
dGlvblRhc2tzLmNsZWFyKCk7CiAgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxsKCk7CiB9CiAKLXZv
aWQgUGxhbjo6YWRkQ29tcGxldGlvblRhc2soVk0mIHZtLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
Cit2b2lkIFBsYW46OmFkZENvbXBsZXRpb25UYXNrKENvbnRleHQqIGNvbnRleHQsIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIGlm
ICghaXNDb21wbGV0ZSgpKQotICAgICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoJnZtLCBXVEZNb3ZlKHRhc2spKSk7CisgICAgICAgIG1fY29tcGxldGlvblRhc2tz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiAgICAgZWxz
ZQotICAgICAgICB0YXNrLT5ydW4oJnZtLCAqdGhpcyk7CisgICAgICAgIHRhc2stPnJ1bigqdGhp
cyk7CiB9CiAKIHZvaWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24oKQpAQCAtOTQsMTkgKzk5LDE5
IEBAIHZvaWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24oKQogICAgIH0KIH0KIAotYm9vbCBQbGFu
Ojp0cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdChWTSYgdm0pCitib29sIFBsYW46OnRyeVJlbW92
ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2xvY2spOwogCiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAg
ICAgLy8gV2UgYWxsb3cgdGhlIGZpcnN0IGNvbXBsZXRpb24gdGFzayB0byBub3QgaGF2ZSBhIHZt
LgorICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNrIHRvIG5vdCBo
YXZlIGEgQ29udGV4dC4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fY29tcGxl
dGlvblRhc2tzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgQVNTRVJUKG1fY29tcGxldGlvblRh
c2tzW2ldLmZpcnN0KTsKICAgICB9CiAKICAgICBib29sIHJlbW92ZWRBbnlUYXNrcyA9IGZhbHNl
OwotICAgIG1fY29tcGxldGlvblRhc2tzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3Qgc3Rk
OjpwYWlyPFZNKiwgQ29tcGxldGlvblRhc2s+JiBwYWlyKSB7Ci0gICAgICAgIGJvb2wgc2hvdWxk
UmVtb3ZlID0gcGFpci5maXJzdCA9PSAmdm07CisgICAgbV9jb21wbGV0aW9uVGFza3MucmVtb3Zl
QWxsTWF0Y2hpbmcoWyZdIChjb25zdCBzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNr
PiYgcGFpcikgeworICAgICAgICBib29sIHNob3VsZFJlbW92ZSA9IHBhaXIuZmlyc3QgPT0gJmNv
bnRleHQ7CiAgICAgICAgIHJlbW92ZWRBbnlUYXNrcyB8PSBzaG91bGRSZW1vdmU7CiAgICAgICAg
IHJldHVybiBzaG91bGRSZW1vdmU7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBsYW4uaAppbmRleCAxMGY4YTFiLi43YTA3YmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmgKQEAgLTI4LDggKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
ICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNs
dWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5j
bHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KQEAgLTM5LDI1ICszOSwyNyBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIENhbGxMaW5rSW5mbzsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3Mg
SlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENvbnRleHQ7
CisKIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogcHVi
bGljOgotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0qLCBQbGFuJik7CisgICAgdHlw
ZWRlZiB2b2lkIENhbGxiYWNrVHlwZShQbGFuJik7CiAgICAgdXNpbmcgQ29tcGxldGlvblRhc2sg
PSBSZWZQdHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMgQ29tcGxldGlv
blRhc2sgZG9udEZpbmFsaXplKCkgeyByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxDYWxsYmFja1R5
cGU+KFtdKFZNKiwgUGxhbiYpIHsgfSk7IH0KLSAgICBQbGFuKFZNKiwgUmVmPE1vZHVsZUluZm9y
bWF0aW9uPiwgQ29tcGxldGlvblRhc2smJik7CisKKyAgICBzdGF0aWMgQ29tcGxldGlvblRhc2sg
ZG9udEZpbmFsaXplKCkgeyByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxDYWxsYmFja1R5cGU+KFtd
KFBsYW4mKSB7IH0pOyB9CisgICAgUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9u
PiwgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4
Y2VwdGlvbik7CisgICAgUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29t
cGxldGlvblRhc2smJik7CiAKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBv
bmx5IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5n
LiB2YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihW
TSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBs
ZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAog
ICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9yZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBv
biBGSUZPIG9mIHRoZQogICAgIC8vIGNvbXBsZXRpb24gdGFza3MgYmVpbmcgY2FsbGVkLgotICAg
IHZvaWQgYWRkQ29tcGxldGlvblRhc2soVk0mLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICB2b2lk
IGFkZENvbXBsZXRpb25UYXNrKENvbnRleHQqLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIHZv
aWQgc2V0TW9kZShNZW1vcnlNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQogICAgIE1lbW9y
eU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpAQCAtNzIsNyArNzQsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHdhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIGl0IGNhbmNlbGxlZCB0aGUgcGxhbi4KLSAgICBib29sIHRyeVJlbW92ZVZNQW5kQ2Fu
Y2VsSWZMYXN0KFZNJik7CisgICAgYm9vbCB0cnlSZW1vdmVDb250ZXh0QW5kQ2FuY2VsSWZMYXN0
KENvbnRleHQmKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgcnVuQ29tcGxldGlvblRhc2tzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJik7CkBAIC04Myw3ICs4NSwxMCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAKLSAgICBWZWN0
b3I8c3RkOjpwYWlyPFZNKiwgQ29tcGxldGlvblRhc2s+LCAxPiBtX2NvbXBsZXRpb25UYXNrczsK
KyAgICBWZWN0b3I8c3RkOjpwYWlyPENvbnRleHQqLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29t
cGxldGlvblRhc2tzOworCisgICAgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyIG1fY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyOworICAgIFRocm93V2FzbUV4Y2VwdGlvbiBtX3Rocm93V2FzbUV4Y2VwdGlvbiB7
IG51bGxwdHIgfTsKIAogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNp
emVfdCBtX3NvdXJjZUxlbmd0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TaWduYXR1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNp
Z25hdHVyZS5jcHAKaW5kZXggOGI2MDBlZC4uNmE0MmQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNpZ25hdHVyZS5oCmluZGV4IGU0MTNiMjUuLmFhY2VkNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNiBAQCBjbGFzcyBQcmludFN0cmVh
bTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAK
IHVzaW5nIFNpZ25hdHVyZUFyZ0NvdW50ID0gdWludDMyX3Q7CkBAIC0xNTYsNyArMTU0LDcgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Oldhc206OlNpZ25hdHVyZUhhc2g+IDog
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEoKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAotLy8gU2lnbmF0dXJlIGluZm9ybWF0aW9uIGlzIGhlbGQgZ2xvYmFsbHkgYW5kIHNoYXJl
ZCBieSBWTXMgdG8gYWxsb3cgYWxsIHNpZ25hdHVyZXMgdG8gYmUgdW5pcXVlLiBUaGlzIGlzIHJl
cXVpcmVkIHdoZW4gd2FzbSBjYWxscyBhbm90aGVyIHdhc20gaW5zdGFuY2UsIGFuZCBtdXN0IHdv
cmsgd2hlbiBtb2R1bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBWTXMuCisvLyBTaWdu
YXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5IHRoZSBlbnRp
cmUgcHJvY2VzcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRoaXMgaXMg
cmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qg
d29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4KIC8vIE5v
dGU6IHNpZ25hdHVyZXMgYXJlIG5ldmVyIHJlbW92ZWQgYmVjYXVzZSB0aGF0IHdvdWxkIHJlcXVp
cmUgYWNjb3VudGluZyBmb3IgYWxsIFdlYkFzc2VtYmx5Lk1vZHVsZSBhbmQgd2hpY2ggc2lnbmF0
dXJlcyB0aGV5IHVzZS4gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25hdHVyZXMgaXMgYm91bmRl
ZCwgYW5kIGlzbid0IHdvcnRoIHRoZSBjb3VudGluZyBvdmVyaGVhZC4gV2UgY291bGQgY2xlYXIg
ZXZlcnl0aGluZyB3aGVuIHdlIHJlYWNoIHplcm8gb3V0c3RhbmRpbmcgV2ViQXNzZW1ibHkuTW9k
dWxlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDM3CiBjbGFz
cyBTaWduYXR1cmVJbmZvcm1hdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2lnbmF0
dXJlSW5mb3JtYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRlZmFlYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKQEAgLTAsMCAr
MSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CisKK1JlZlB0cjxUYWJsZT4gVGFibGU6OmNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQoreworICAgIGlmICghaXNWYWxpZFNpemUoaW5p
dGlhbCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
KE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKFRhYmxlKSkpIFRhYmxlKGluaXRpYWwsIG1heGlt
dW0pKTsKK30KKworVGFibGU6On5UYWJsZSgpCit7Cit9CisKK1RhYmxlOjpUYWJsZSh1aW50MzJf
dCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQoreworICAgIG1fc2l6
ZSA9IGluaXRpYWw7CisgICAgbV9tYXhpbXVtID0gbWF4aW11bTsKKyAgICBBU1NFUlQoaXNWYWxp
ZFNpemUobV9zaXplKSk7CisgICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBt
X3NpemUpOworCisgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUt
YWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgorICAg
IC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4KKyAgICBtX2Z1bmN0aW9ucyA9
IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpD
YWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgbV9p
bnN0YW5jZXMgPSBNYWxsb2NQdHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj46Om1hbGxvYyhzaXpl
b2YoSlNXZWJBc3NlbWJseUluc3RhbmNlKikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkp
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgeworICAgICAgICBu
ZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworICAg
ICAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaV0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6
U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQg
Y29kZS4KKyAgICAgICAgbV9pbnN0YW5jZXMuZ2V0KClbaV0gPSBudWxscHRyOworICAgIH0KK30K
Kworc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gVGFibGU6Omdyb3codWludDMyX3QgZGVsdGEpCit7
CisgICAgaWYgKGRlbHRhID09IDApCisgICAgICAgIHJldHVybiBzaXplKCk7CisKKyAgICB1c2lu
ZyBDaGVja2VkID0gQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+OworICAgIENoZWNr
ZWQgbmV3U2l6ZUNoZWNrZWQgPSBzaXplKCk7CisgICAgbmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7
CisgICAgdWludDMyX3QgbmV3U2l6ZTsKKyAgICBpZiAobmV3U2l6ZUNoZWNrZWQuc2FmZUdldChu
ZXdTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gKm1heGltdW0oKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWlzVmFsaWRTaXplKG5ld1Np
emUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgeworICAgICAgICBDaGVj
a2VkIHJlYWxsb2NGdW5jdGlvbnNTaXplQ2hlY2tlZCA9IG5ld1NpemVDaGVja2VkOworICAgICAg
ICByZWFsbG9jRnVuY3Rpb25zU2l6ZUNoZWNrZWQgKj0gc2l6ZW9mKENhbGxhYmxlRnVuY3Rpb24p
OworICAgICAgICB1aW50MzJfdCByZWFsbG9jRnVuY3Rpb25zU2l6ZTsKKyAgICAgICAgaWYgKHJl
YWxsb2NGdW5jdGlvbnNTaXplQ2hlY2tlZC5zYWZlR2V0KHJlYWxsb2NGdW5jdGlvbnNTaXplKSA9
PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgbV9mdW5jdGlvbnMucmVhbGxvYyhyZWFsbG9jRnVuY3Rpb25zU2l6ZSk7
CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAg
ICAgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uKCk7CisgICAgfQorICAgIAorICAgIHsKKyAgICAgICAgQ2hlY2tlZCByZWFsbG9jSW5zdGFu
Y2VzU2l6ZUNoZWNrZWQgPSBuZXdTaXplQ2hlY2tlZDsKKyAgICAgICAgcmVhbGxvY0luc3RhbmNl
c1NpemVDaGVja2VkICo9IHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKKyAgICAgICAg
dWludDMyX3QgcmVhbGxvY0luc3RhbmNlc1NpemU7CisgICAgICAgIGlmIChyZWFsbG9jSW5zdGFu
Y2VzU2l6ZUNoZWNrZWQuc2FmZUdldChyZWFsbG9jSW5zdGFuY2VzU2l6ZSkgPT0gQ2hlY2tlZFN0
YXRlOjpEaWRPdmVyZmxvdykKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
ICAgIG1faW5zdGFuY2VzLnJlYWxsb2MocmVhbGxvY0luc3RhbmNlc1NpemUpOworICAgICAgICBm
b3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kpCisgICAgICAgICAgICBt
X2luc3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7CisgICAgfQorCisgICAgbV9zaXplID0gbmV3
U2l6ZTsKKworICAgIHJldHVybiBuZXdTaXplOworfQorCit2b2lkIFRhYmxlOjpjbGVhckZ1bmN0
aW9uKHVpbnQzMl90IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgp
KTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9u
KCk7CisgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XS5zaWduYXR1cmVJbmRleCA9
PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBj
b21waWxlZCBjb2RlLgorICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgVGFibGU6OnNldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4LCBDYWxsYWJsZUZ1bmN0
aW9uIGZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRl
eF0gPSBmdW5jdGlvbjsKKyAgICBtX2luc3RhbmNlcy5nZXQoKVtpbmRleF0gPSBpbnN0YW5jZTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OlRhYmxlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFi
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDhlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaApAQCAtMCwwICsxLDc2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5j
bHVkZSAiV2FzbUxpbWl0cy5oIgorI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hvdWxkIGJlIFdhc206Okluc3RhbmNlIGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFRh
YmxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRhYmxlPiB7CitwdWJsaWM6CisgICAg
ZW51bSBjbGFzcyBDcmVhdGVGYWlsIHsKKyAgICAgICAgSW52YWxpZFNpemUsCisgICAgfTsKKyAg
ICBzdGF0aWMgUmVmUHRyPFRhYmxlPiBjcmVhdGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+VGFibGUo
KTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVy
biBtX21heGltdW07IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZ3Jvdyh1aW50MzJfdCBkZWx0YSkgV0FS
Tl9VTlVTRURfUkVUVVJOOworICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCk7CisgICAg
dm9pZCBzZXRGdW5jdGlvbih1aW50MzJfdCwgQ2FsbGFibGVGdW5jdGlvbiwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKik7IC8vIEZJWE1FIG1ha2UgdGhpcyBXYXNtOjpJbnN0YW5jZS4gaHR0cHM6Ly93
ZWJraXQub3JnL2IvMTc3NDcyCisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9zaXplKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFi
bGUsIG1fZnVuY3Rpb25zKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5j
ZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1faW5zdGFuY2VzKTsgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6ZSkgeyByZXR1cm4gc2l6ZSA8
IG1heFRhYmxlRW50cmllczsgfQorCitwcml2YXRlOgorICAgIFRhYmxlKHVpbnQzMl90IGluaXRp
YWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOworCisgICAgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gbV9tYXhpbXVtOworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICBNYWxsb2NQ
dHI8Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7CisgICAgLy8gY2FsbF9pbmRpcmVjdCBu
ZWVkcyB0byBkbyBhbiBJbnN0YW5jZSBjaGVjayB0byBwb3RlbnRpYWxseSBjb250ZXh0IHN3aXRj
aCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0byBhbm90aGVyIGluc3RhbmNlLiBXZSBjYW4gaG9s
ZCByYXcgcG9pbnRlcnMgdG8gSW5zdGFuY2UgaGVyZSBiZWNhdXNlIHRoZSBlbWJlZGRlciBlbnN1
cmVzIHRoYXQgVGFibGUga2VlcHMgYWxsIHRoZSBpbnN0YW5jZXMgYWxpdmUuIFdlIGNvdWxkbid0
IGhvbGQgYSBSZWYgaGVyZSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGN5Y2xlcy4KKyAgICBNYWxs
b2NQdHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4gbV9pbnN0YW5jZXM7IC8vIEZJWE1FIG1ha2Ug
dGhpcyBhIFdhc206Okluc3RhbmNlLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCmluZGV4IDk3N2Iw
MWIuLmMyMzU5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3Bw
CkBAIC0yOSwxMSArMjksOSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgogI2luY2x1ZGUgIkhl
YXBDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCkBAIC00OCw0NiArNDYsMTgg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVy
YXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYKIAogICAgIC8vIFRoZSB0aGluZyB0aGF0IGp1bXBz
IGhlcmUgbXVzdCBtb3ZlIEV4Y2VwdGlvblR5cGUgaW50byB0aGUgYXJndW1lbnRHUFIxIGJlZm9y
ZSBqdW1waW5nIGhlcmUuCiAgICAgLy8gV2UncmUgYWxsb3dlZCB0byB1c2UgdGVtcCByZWdpc3Rl
cnMgaGVyZS4gV2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSBjYWxsZWUgc2F2ZXMuCi0gICAgaml0
LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjIsIENvbnRleHQ6Om9m
ZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
Y2FsbCgpOwogICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICAgICBqaXQu
YnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbm90IHJlYWNoIHRoaXMuCiAKLSAgICB2b2lkKiAo
KnRocm93V2FzbUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgV2Fz
bTo6Q29udGV4dCopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0
eXBlLCBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCkgLT4gdm9pZCogewotICAgICAgICBWTSog
dm0gPSB3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmplY3QoKTsKLQotICAgICAgICAg
ICAgSlNPYmplY3QqIGVycm9yOyAKLSAgICAgICAgICAgIGlmICh0eXBlID09IEV4Y2VwdGlvblR5
cGU6OlN0YWNrT3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZShleGVj
LCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwg
V2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7Ci0gICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxG
cmFtZUZvckNhdGNoKTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRo
cm93KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6Ci0gICAg
ICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNo
IGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKLSAgICAgICAgLy8gcmVxdWlyZSBhIGNlbGwg
aW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9l
cyBub3QgcmVxdWlyZQotICAgICAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGgg
YSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50
aW9uCi0gICAgICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0
Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCi0gICAgICAgIC8vIHRv
IHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0
aGlzIHRlcnJpYmxlIGhhY2suCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICAgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhl
YylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4od2FzbUNv
bnRleHQtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKLSAgICAgICAgcmV0dXJuIHZtLT50YXJn
ZXRNYWNoaW5lUENGb3JUaHJvdzsKLSAgICB9OwotCisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRo
cm93V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCkudGhyb3dXYXNtRXhjZXB0aW9u
KCk7CisgICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cih0aHJvd1dhc21FeGNlcHRpb24pKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShsaW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKSk7CiB9CiAKQEAgLTEx
OSw4ICs4OSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5r
R2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKICNlbmRpZgogICAgIHVuc2lnbmVkIG51
bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lz
dGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsKIAotICAgIGppdC5sb2FkV2FzbUNvbnRl
eHQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihydW5PTUdQbGFuRm9ySW5kZXgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFu
Y2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpSdW4pKEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90KTsKKyAgICBSdW4gcnVuID0gT01HUGxhbjo6cnVu
Rm9ySW5kZXg7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocnVuKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAgICAg
aml0LmNhbGwoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKIAogICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNU
b1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQ
cmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKQEAgLTE0Miw2ICsxMTQsMTkgQEAgVGh1
bmtzJiBUaHVua3M6OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuICp0aHVua3M7CiB9CiAKK3ZvaWQg
VGh1bmtzOjpzZXRUaHJvd1dhc21FeGNlcHRpb24oVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2Fz
bUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAg
Ly8gVGhlIHRodW5rcyBhcmUgdW5pcXVlIGZvciB0aGUgZW50aXJlIHByb2Nlc3MsIHRoZXJlZm9y
ZSBjaGFuZ2luZyB0aGUgdGhyb3dpbmcgZnVuY3Rpb24gY2hhbmdlcyBpdCBmb3IgYWxsIHVzZXMg
b2YgV2ViQXNzZW1ibHkuCisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdGhyb3dXYXNtRXhjZXB0aW9u
IHx8IG1fdGhyb3dXYXNtRXhjZXB0aW9uID09IHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgbV90
aHJvd1dhc21FeGNlcHRpb24gPSB0aHJvd1dhc21FeGNlcHRpb247Cit9CisKK1Rocm93V2FzbUV4
Y2VwdGlvbiBUaHVua3M6OnRocm93V2FzbUV4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIG1fdGhy
b3dXYXNtRXhjZXB0aW9uOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpzdHVi
KFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1
bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKaW5kZXggZGYx
NGNhMi4uNTI5NzY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaApA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC00Miw2ICs0Myw5IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAgICAgc3RhdGljIFRodW5rcyYgc2luZ2xl
dG9uKCk7CiAKKyAgICB2b2lkIHNldFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRp
b24pOworICAgIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24oKTsKKwogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViKFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYsIFRodW5rR2VuZXJhdG9y
KTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9y
KTsKQEAgLTUwLDYgKzU0LDcgQEAgcHJpdmF0ZToKICAgICBUaHVua3MoKSA9IGRlZmF1bHQ7CiAK
ICAgICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fc3R1
YnM7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0
ciB9OwogICAgIExvY2sgbV9sb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggOWM1YjY4NC4uMmZlMTMyYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBAIC0xNzIsMTMgKzE3MywxMyBAQCB2b2lkIFdv
cmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCiAgICAgcGxhbi53
YWl0Rm9yQ29tcGxldGlvbigpOwogfQogCi12b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JW
TShWTSYgdm0pCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JDb250ZXh0KENvbnRleHQm
IGNvbnRleHQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgVmVjdG9y
PFF1ZXVlRWxlbWVudD4gZWxlbWVudHM7CiAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkg
ewogICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUuZGVxdWV1ZSgpOwotICAg
ICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJ
Zkxhc3Qodm0pOworICAgICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVt
b3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsKICAgICAgICAgaWYgKCFkaWRDYW5j
ZWwpCiAgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CiAgICAg
fQpAQCAtMTg4LDcgKzE4OSw3IEBAIHZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZN
JiB2bSkKIAogICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV90aHJlYWRzKSB7CiAgICAgICAgIGlm
ICh0aHJlYWQtPmVsZW1lbnQucGxhbikgewotICAgICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0
aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0pOworICAg
ICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3Zl
Q29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsKICAgICAgICAgICAgIGlmIChkaWRDYW5j
ZWwpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRo
ZSBkZWFkbG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNhbid0IGJsb2NrIHdpdGhvdXQgY2hlY2tp
bmcgZm9yIGEgbmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0aGUgbG9jayB0byBkbyBzby4KICAgICAg
ICAgICAgICAgICB0aHJlYWQtPnN5bmNocm9uaXplLndhaXQoKm1fbG9jayk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCmluZGV4IDZiNjkzNTIuLjc0OGE5ZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCkBAIC0yNyw4ICsyNyw2
IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgotCiAjaW5j
bHVkZSA8cXVldWU+CiAKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CkBAIC0zNywx
MCArMzUsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7
Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENvbnRleHQ7CiBjbGFzcyBQbGFuOwogCiBj
bGFzcyBXb3JrbGlzdCB7CkBAIC01MCwxMyArNDcsMTAgQEAgcHVibGljOgogICAgIH5Xb3JrbGlz
dCgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbnF1ZXVlKFJlZjxQbGFuPik7Ci0g
ICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JWTShWTSYpOworICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9y
Q29udGV4dChDb250ZXh0Jik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXBsZXRl
UGxhblN5bmNocm9ub3VzbHkoUGxhbiYpOwogCi0gICAgdm9pZCBhY3RpdmF0ZVBsYW4oSlNQcm9t
aXNlRGVmZXJyZWQqLCBQbGFuKik7Ci0gICAgdm9pZCBkZWFjdGl2ZVBsYW4oSlNQcm9taXNlRGVm
ZXJyZWQqLCBQbGFuKik7Ci0KICAgICBlbnVtIGNsYXNzIFByaW9yaXR5IHsKICAgICAgICAgU2h1
dGRvd24sCiAgICAgICAgIFN5bmNocm9ub3VzLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjcx
MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rv
V2FzbS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBt
b2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQoreworICAgIENDYWxsSGVscGVycyYgaml0ID0g
KmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRKSVQ7CisKKyAgICBhdXRvIHJlc3VsdCA9
IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKKyAgICBqaXQuZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKKworICAgIC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tz
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgaml0
LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIE1hY3JvQXNzZW1i
bGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2go
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZl
ZE5vblJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpKSk7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVN
b3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92ZUxvY2F0aW9uKTsKKyAgICB9KTsKKwor
ICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVy
SW5mbzo6Z2V0KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlubmVkUmVncy50b1NhdmUo
bW9kZSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9
IHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKTsKKyAgICAvLyBUaGV5IHNob3VsZCBhbGwgYmUgY2Fs
bGVlIHNhdmVzLgorICAgIHRvU2F2ZS5maWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7CisgICAgQVNTRVJUKHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKSA9PSB0b1NhdmVT
aXplKTsKKyNlbmRpZgorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGls
bCh0b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2lu
dGVyQmFzZWQpOworICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0g
cmVnaXN0ZXJzVG9TcGlsbDsKKworICAgIHVuc2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0
ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yodm9pZCopOworICAgIHRvdGFsRnJhbWVTaXplICs9
IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZy
YW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgdW5zaWduZWQgbnVtR1BS
cyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2gg
KHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAgICAg
ICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGlu
Z0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJh
bWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICArK251bUdQUnM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGNhc2UgV2FzbTo6
RjY0OgorICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCku
bV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXpl
b2Yodm9pZCopOworICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgdG90YWxGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCB0b3RhbEZyYW1lU2l6ZSk7CisgICAg
aml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRvdGFsRnJhbWVTaXplKSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdlIHNhdmUg
YWxsIHRoZXNlIHJlZ2lzdGVycyByZWdhcmRsZXNzIG9mIGhhdmluZyBhIG1lbW9yeSBvciBub3Qu
CisgICAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHdlIHVzZSBvbmUgb2YgdGhlc2UgYXMgYSBzY3Jh
dGNoLiBUaGF0IHNhaWQsCisgICAgLy8gYWxtb3N0IGFsbCByZWFsIHdhc20gcHJvZ3JhbXMgdXNl
IG1lbW9yeSwgc28gaXQncyBub3QgcmVhbGx5CisgICAgLy8gd29ydGggb3B0aW1pemluZyBmb3Ig
dGhlIGNhc2UgdGhhdCB0aGV5IGRvbid0LgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcg
PSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJl
Z0F0T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBqaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCkpOworICAgIH0K
KworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29u
dGV4dEluc3RhbmNlUG9pbnRlcjsKKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMgPSAwOworICAgICAgICBudW1GUFJzID0g
MDsKKyAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFm
dGVyIHRoaXMuIFNvCisgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9y
IG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcg
PSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIHB0cmRpZmZfdCBqc09m
ZnNldCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CisKKyAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBwYXNzZXMgV2FzbTo6Q29udGV4dConcyBp
bnN0YW5jZSBhcyB0aGUgZmlyc3QgSlMgYXJndW1lbnQgd2hlbiB3ZSdyZQorICAgICAgICAvLyBu
b3QgdXNpbmcgZmFzdCBUTFMgdG8gaG9sZCB0aGUgV2FzbTo6Q29udGV4dConcyBpbnN0YW5jZS4K
KyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICAgICAgICAgIGpzT2Zmc2V0
ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwdHJkaWZm
X3Qgd2FzbU9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9m
KHZvaWQqKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1l
bnQoaSkpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgY2FzZSBX
YXNtOjpJNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2ln
bmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkkzMikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCAr
PSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9n
cHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCku
bV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgKytudW1HUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgICAg
ICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2Fz
bTo6RjMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJl
Zyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1
bWVudChpKSA9PSBXYXNtOjpGMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZs
b2F0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNP
ZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNd
LmZwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytudW1GUFJzOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VNZW1v
cnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIGlmICghQ29udGV4
dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CisgICAg
ICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsK
KyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBB
U1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNz
dW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0
ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVS
ZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3Nb
MF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9CisK
KyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdh
c206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgIH0KKworICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2Fs
bCgpOworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBp
bmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNl
IDwgaW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgIGppdC5hZGRMaW5rVGFzayhb
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFw
cGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4
U3BhY2UgfSk7CisgICAgfSk7CisKKworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYg
cmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSBy
ZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5v
ZmZzZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOworICAgIH0KKworICAgIHN3aXRj
aCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAg
ICBqaXQubW92ZUZsb2F0VG8zMihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdhc206OkY2NDoKKyAgICAg
ICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5y
ZXQoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
NGI5OGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc20uaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXYXNtQjNJ
UkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVt
b3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2Fz
bVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPG1lbW9y
eT4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworc3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNv
bnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4q
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNX
ZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5LmgKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCnJlbmFtZSB0byBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKaW5kZXggMGZhZjk3Ny4uYzU3
OGRmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJs
eS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaApA
QCAtMjgsMzEgKzI4LDMxIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCi0j
aW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAianMvSlNXZWJB
c3NlbWJseUxpbmtFcnJvci5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCIK
LSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAianMvSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvci5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlUYWJsZS5o
IgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKLSNp
bmNsdWRlICJqcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgotI2luY2x1ZGUg
ImpzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNlUHJvdG90
eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgot
I2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgiCi0j
aW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIKLSNpbmNsdWRlICJqcy9XZWJB
c3NlbWJseVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UnVudGltZUVycm9y
Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3Rv
dHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oIgotI2lu
Y2x1ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJB
c3NlbWJseVRvSlNDYWxsZWUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUxpbmtFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUg
IldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TGlua0Vycm9y
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlUHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRl
ICJXZWJBc3NlbWJseVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGltZUVy
cm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3Rv
dHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRv
SlNDYWxsZWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKaW5kZXggZjkx
ZTZjNy4uMDgyNTE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKQEAgLTMyLDggKzMyLDggQEAKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1l
bW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJXYXNt
QmluZGluZy5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgorI2luY2x1ZGUg
Ildhc21Ub0pTLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtNDQsNyAr
NDQsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0g
eyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscAogSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9j
az4gY29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUpCiB7CiAgICAgY29uc3Qg
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1
bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpOwotICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRp
b25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkpKSBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVCbG9jayksIG1vZHVsZUluZm9ybWF0aW9u
KTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgV1RG
TW92ZShjb2RlQmxvY2spLCBtb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbih2bSwgbW9kdWxlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTgsNyArNTgs
NyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2
bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMucmVz
ZXJ2ZUNhcGFjaXR5KG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgIGZv
ciAodW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBvcnRJbmRleCA8IG1fY29kZUJsb2NrLT5m
dW5jdGlvbkltcG9ydENvdW50KCk7ICsraW1wb3J0SW5kZXgpIHsKICAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5j
dGlvblNpZ25hdHVyZUluZGljZXMuYXQoaW1wb3J0SW5kZXgpOwotICAgICAgICBhdXRvIGJpbmRp
bmcgPSBXYXNtOjp3YXNtVG9Kcygmdm0sIG1fY2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5kZXgs
IGltcG9ydEluZGV4KTsKKyAgICAgICAgYXV0byBiaW5kaW5nID0gV2FzbTo6d2FzbVRvSlMoJnZt
LCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRJbmRleCk7CiAgICAgICAg
IGlmIChVTkxJS0VMWSghYmluZGluZykpIHsKICAgICAgICAgICAgIHN3aXRjaCAoYmluZGluZy5l
cnJvcigpKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkJpbmRpbmdGYWlsdXJlOjpPdXRPZk1l
bW9yeToKQEAgLTY4LDcgKzY4LDcgQEAgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3Nl
bWJseUNvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgY28KICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV93
YXNtVG9KU0V4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQoYmluZGluZy52YWx1ZSgpKTsKLSAgICAg
ICAgaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNb
aW1wb3J0SW5kZXhdLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBtX2NvZGVC
bG9jay0+aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGltcG9ydEluZGV4KSA9IG1fd2FzbVRvSlNF
eGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0K
IH0KIApAQCAtODMsMTEgKzgzLDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Kj4oY2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6On5KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KCk7CiB9CiAKLWJvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4oSlNXZWJB
c3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAotewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+
aXNTYWZlVG9SdW4obWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkpOwotfQotCiB2b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsSUNzKFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8g
aXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aAppbmRleCA1MjcwM2Y4Li5hYmI4YzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCkBAIC02NCwzOSArNjQsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLndlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7
CiAgICAgfQogCi0gICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7IH0KLSAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQorICAg
IFdhc206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7
IH0KIAotICAgIGJvb2wgaXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSopIGNvbnN0Owor
ICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
LmdldCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1v
ZHVsZSopOwogCi0gICAgLy8gVGhlc2UgdHdvIGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlk
IG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVsYXRlZC4KLQotICAgIFdhc206OkNhbGxl
ZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5j
dGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7Ci0gICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAgIH0KLSAgICBXYXNtOjpXYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbklu
ZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPndhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2Up
OwotICAgIH0KLQotICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21Ub0pz
Q2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICBB
U1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiAmaW1wb3J0V2FzbVRvSlNTdHViKGlt
cG9ydEluZGV4KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0
V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleDsKLSAg
ICB9Ci0KLSAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJs
b2NrLmdldCgpOyB9Ci0KICAgICB2b2lkIGNsZWFySlNDYWxsSUNzKFZNJik7CiAKICAgICBib29s
IHJ1bm5hYmxlKCkgY29uc3QgeyByZXR1cm4gIW1fZXJyb3JNZXNzYWdlOyB9CkBAIC0xMTQsMjEg
Kzg3LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAg
IHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRTdHVicygpCi0gICAgewotICAgICAgICByZXR1
cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lkKik+KHNpemVvZihKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBvcnRDb3VudCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGZ1bmN0aW9u
SW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOwotICAgIH0KLQotICAgIHZvaWQqJiBpbXBvcnRXYXNt
VG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gKmJp
dHdpc2VfY2FzdDx2b2lkKio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZklt
cG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCkpOwotICAgIH0KLQogICAgIGNsYXNzIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsK
ICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwogICAgIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcAppbmRleCBjNzdmYTA1Li5jNTJlZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAg
LTQ5LDEyICs0OSwxNyBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQorSlNXZWJBc3NlbWJseUluc3RhbmNlOjpKU1dl
YkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
bnVtSW1wb3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYgaW5zdGFuY2UpCiAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2luc3RhbmNlKFdURk1vdmUoaW5zdGFuY2Up
KQogICAgICwgbV92bSgmdm0pCisgICAgLCBtX3dhc21Nb2R1bGUobV9pbnN0YW5jZS0+bW9kdWxl
KCkpCisgICAgLCBtX3dhc21UYWJsZShtX2luc3RhbmNlLT5tX3RhYmxlLmdldCgpKQorICAgICwg
bV9nbG9iYWxzKG1faW5zdGFuY2UtPm1fZ2xvYmFscy5nZXQoKSkKICAgICAsIG1fbnVtSW1wb3J0
RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsKLSAgICBtZW1zZXQoaW1wb3J0RnVuY3Rp
b25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICogc2l6ZW9mKFdyaXRlQmFycmllcjxKU09i
amVjdD4pKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1JbXBvcnRGdW5jdGlv
bnM7ICsraSkKKyAgICAgICAgbmV3IChpbXBvcnRGdW5jdGlvbkluZm8oaSkpIEltcG9ydEZ1bmN0
aW9uSW5mbygpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QpCkBAIC02MywxMiArNjgsMTAgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJs
eU1vZHVsZSogbW9kdWxlLAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKICAg
ICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG1vZHVsZSk7Ci0gICAgY29uc3Qgc2l6ZV90IGV4dHJh
TWVtb3J5U2l6ZSA9IGdsb2JhbE1lbW9yeUJ5dGVTaXplKCk7Ci0gICAgbV9nbG9iYWxzID0gTWFs
bG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVtb3J5U2l6ZSk7Ci0gICAgaGVhcCgpLT5y
ZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1lbW9yeVNpemUpOwotCiAgICAgbV9tb2R1
bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QpOwog
ICAgIG1fY2FsbGVlLnNldCh2bSwgdGhpcywgbW9kdWxlLT5jYWxsZWUoKSk7CisgICAgCisgICAg
aGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX2luc3RhbmNlLT5leHRyYU1lbW9y
eUFsbG9jYXRlZCgpKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQpAQCAtODgsNDAgKzkxLDQ0IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fY2FsbGVlKTsKLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2Jq
ZWN0LT5nbG9iYWxNZW1vcnlCeXRlU2l6ZSgpKTsKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlLT5leHRyYU1lbW9yeUFsbG9jYXRlZCgp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRG
dW5jdGlvbnM7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0
RnVuY3Rpb25zKClbaV0pOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBv
cnRGdW5jdGlvbkluZm8oaSktPmltcG9ydEZ1bmN0aW9uKTsgLy8gVGhpcyBhbHNvIGtlZXBzIHRo
ZSBmdW5jdGlvbnMnIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSBhbGl2ZS4KIH0KIAogdm9pZCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9jaykKIHsKKyAgICBtX2luc3Rh
bmNlLT5maW5hbGl6ZUNyZWF0aW9uKHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKKyAgICBtX3dh
c21Db2RlQmxvY2sgPSB3YXNtQ29kZUJsb2NrLnB0cigpOworCiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF3YXNtQ29kZUJsb2NrLT5ydW5uYWJs
ZSgpKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5
TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxp
bmtFcnJvclN0cnVjdHVyZSgpLCB3YXNtQ29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlQod2FzbUNvZGVCbG9jay0+
aXNTYWZlVG9SdW4obWVtb3J5TW9kZSgpKSk7Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
Y29kZUJsb2NrID0gbW9kdWxlKCktPmNvZGVCbG9jayhtZW1vcnlNb2RlKCkpOwotICAgIGlmIChj
b2RlQmxvY2spIHsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBqc0NvZGVCbG9jayA9IG1f
bW9kdWxlLT5jb2RlQmxvY2sobWVtb3J5TW9kZSgpKTsKKyAgICBpZiAoanNDb2RlQmxvY2spIHsK
ICAgICAgICAgLy8gQSBDb2RlQmxvY2sgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcGlsZWQu
IElmIHNvLCBpdCBtZWFucwogICAgICAgICAvLyB0aGF0IHRoZSBDb2RlQmxvY2sgd2UgYXJlIHRy
eWluZyB0byBjb21waWxlIG11c3QgYmUgdGhlIHNhbWUKICAgICAgICAgLy8gYmVjYXVzZSB3ZSB3
aWxsIG5ldmVyIGNvbXBpbGUgYSBDb2RlQmxvY2sgYWdhaW4gb25jZSBpdCdzCiAgICAgICAgIC8v
IHJ1bm5hYmxlLgotICAgICAgICBBU1NFUlQoJmNvZGVCbG9jay0+Y29kZUJsb2NrKCkgPT0gd2Fz
bUNvZGVCbG9jay5wdHIoKSk7Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29k
ZUJsb2NrKTsKKyAgICAgICAgQVNTRVJUKCZqc0NvZGVCbG9jay0+Y29kZUJsb2NrKCkgPT0gd2Fz
bUNvZGVCbG9jay5wdHIoKSk7CisgICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywganND
b2RlQmxvY2spOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgd2FzbUNvZGVCbG9jay5jb3B5UmVmKCksIG1fbW9kdWxl
LmdldCgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFjb2RlQmxvY2stPnJ1bm5hYmxlKCkpKSB7
Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUxp
bmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlMaW5r
RXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOworICAgICAgICBq
c0NvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgV1RGTW92ZSh3
YXNtQ29kZUJsb2NrKSwgbV9tb2R1bGUuZ2V0KCkpOworICAgICAgICBpZiAoVU5MSUtFTFkoIWpz
Q29kZUJsb2NrLT5ydW5uYWJsZSgpKSkgeworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFs
T2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJlKCksIGpzQ29kZUJsb2NrLT5l
cnJvck1lc3NhZ2UoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKLSAgICAgICAgbW9kdWxlKCkt
PnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBjb2RlQmxvY2spOworICAgICAgICBtX2Nv
ZGVCbG9jay5zZXQodm0sIHRoaXMsIGpzQ29kZUJsb2NrKTsKKyAgICAgICAgbV9tb2R1bGUtPnNl
dENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBqc0NvZGVCbG9jayk7CiAgICAgfQogCiAgICAg
YXV0byogbW9kdWxlUmVjb3JkID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4obV9t
b2R1bGVOYW1lc3BhY2VPYmplY3QtPm1vZHVsZVJlY29yZCgpKTsKLSAgICBtb2R1bGVSZWNvcmQt
PmxpbmsoZXhlYywgbW9kdWxlKCksIHRoaXMpOworICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVj
LCBtX21vZHVsZS5nZXQoKSwgdGhpcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKIAogICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1
YXRlKGV4ZWMpOwpAQCAtMTI5LDcgKzEzNiw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBSZWY8V2FzbTo6CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIH0KIAotSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwg
U3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSwgUmVmPFdhc206Okluc3RhbmNlPiYmIGluc3Rh
bmNlKQogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAg
LTE1OCw4ICsxNjUsOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxl
TmFtZXNwYWNlKGV4ZWMpOwogICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxkIGJlIHBy
ZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KLSAgICBhdXRvKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4o
dm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25D
b3VudCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1v
ZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSk7Ci0gICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxlTmFtZXNwYWNlKTsKKyAgICBhdXRvKiBq
c0luc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3Rh
bmNlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5j
dGlvbkNvdW50KCkpKSkgSlNXZWJBc3NlbWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVy
ZSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpLCBXVEZNb3ZlKGluc3Rh
bmNlKSk7CisgICAganNJbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGpzTW9kdWxlLCBtb2R1
bGVOYW1lc3BhY2UpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0
cik7CiAKICAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5
LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHku
TWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVs
eS4KQEAgLTE5MCwxNSArMTk3LDIxIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAg
ICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIGltcG9ydEZhaWxN
ZXNzYWdlKGltcG9ydCwgImltcG9ydCBmdW5jdGlvbiIsICJtdXN0IGJlIGNhbGxhYmxlIikpKTsK
IAorICAgICAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjYWxsZWVJbnN0YW5jZSA9IG51
bGxwdHI7CisgICAgICAgICAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNt
RW50cnlwb2ludCA9IG51bGxwdHI7CiAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisKICAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFu
IEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CiAgICAgICAgICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CiAgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKICAgICAgICAgICAgIGlmIChpc1dlYkFzc2Vt
Ymx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1
bmN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBk
b2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlu
a0Vycm9yLgogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2ln
bmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKKyAgICAgICAg
ICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydGVk
U2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAg
ICAgICAgICAgICAgIGNhbGxlZUluc3RhbmNlID0gd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpOwor
ICAgICAgICAgICAgICAgICAgICB3YXNtRW50cnlwb2ludCA9IHdhc21GdW5jdGlvbi0+d2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3
YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwogICAgICAgICAgICAgICAgICAg
ICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgpAQCAtMjE1LDcgKzIyOCwxMCBA
QCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgLy8gTm90ZTogYWRkaW5nIHRo
ZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVsZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVu
dHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkg
YW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCiAKICAgICAgICAgICAgIEFTU0VSVChudW1J
bXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBpbnN0YW5j
ZS0+aW1wb3J0RnVuY3Rpb25zKClbbnVtSW1wb3J0RnVuY3Rpb25zKytdLnNldCh2bSwgaW5zdGFu
Y2UsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEltcG9ydEZ1bmN0aW9uSW5mbyogaW5mbyA9IGpz
SW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhudW1JbXBvcnRGdW5jdGlvbnMrKyk7CisgICAg
ICAgICAgICBpbmZvLT50YXJnZXRJbnN0YW5jZSA9IGNhbGxlZUluc3RhbmNlOworICAgICAgICAg
ICAgaW5mby0+d2FzbUVudHJ5cG9pbnQgPSB3YXNtRW50cnlwb2ludDsKKyAgICAgICAgICAgIGlu
Zm8tPmltcG9ydEZ1bmN0aW9uLnNldCh2bSwganNJbnN0YW5jZSwgZnVuY3Rpb24pOwogICAgICAg
ICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0yNDMsNyArMjU5LDggQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMK
IAogICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIHRhYmxlcy4KICAgICAgICAgICAgIC8v
IGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBpbnN0YW5j
ZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3Rh
bmNlLT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJ
bnN0YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFibGUoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKQEAgLTI3Myw4ICsyOTAsOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBK
UwogCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCiAgICAgICAgICAg
ICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIEFT
U0VSVCghaW5zdGFuY2UtPm1fbWVtb3J5KTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9y
eS5zZXQodm0sIGluc3RhbmNlLCBtZW1vcnkpOworICAgICAgICAgICAgQVNTRVJUKCFqc0luc3Rh
bmNlLT5tX21lbW9yeSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIG1l
bW9yeSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI5MSwxMyArMzA4LDEzIEBA
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xv
YmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsKICAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSW5m
b3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBlKSB7CiAgICAgICAgICAgICBj
YXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUlt
cG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAgICAgICAgICAgICAganNJ
bnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCB2YWx1ZS50
b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
V2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0
R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsK
KyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChudW1JbXBv
cnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChleGVjKSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0g
ICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgICAg
IGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0
d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTUsMTQgKzMzMiwyMSBAQCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKUwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwogICAgICAgICAgICAgLy8gV2UgY3Jl
YXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAg
UmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1v
ZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eS5tYXhpbXVtKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKworICAgICAgICAgICAgYXV0byoganNNZW1vcnkgPSBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgICAgICAgICBSZWZQ
dHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZShtb2R1bGVJbmZv
cm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11
bSgpLAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0QXN5bmMoQ29s
bGVjdGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAgICAgICAgICBbJnZtXSAoKSB7IHZtLmhl
YXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAgICAgICAg
ICBbJnZtLCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBh
Z2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2FsbGJhY2sodm0s
IG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAgICAgICAgICBpZiAoIW1lbW9y
eSkKICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJy
b3IoZXhlYykpOwogCi0gICAgICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnkuc2V0KHZtLCBpbnN0
YW5jZSwKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAgICAgIGpzTWVtb3J5LT5h
ZG9wdChtZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5z
ZXRNZW1vcnkodm0sIGpzTWVtb3J5KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzYsMTkgKzM2MCwy
NCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRl
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1h
dGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkgewogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBv
cnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJs
ZSBkZWZpbml0aW9uLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpT
V2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRp
b24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOworICAgICAgICAgICAgUmVmUHRyPFdhc206
OlRhYmxlPiB3YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6Y3JlYXRlKG1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9y
bWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICBpZiAoIXdhc21UYWJsZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sICJjb3VsZG4ndCBjcmVhdGUgVGFibGUiKSk7CisgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCB3
YXNtVGFibGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3
YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFzc2VtYmx5VGFibGUgd2UndmUgZGVmaW5l
ZC4KICAgICAgICAgICAgIC8vIElmIGl0J3MgZGVmaW5lZCB0byBiZSB0b28gbGFyZ2UsIHdlIHNo
b3VsZCBoYXZlIHRocm93biBhIHZhbGlkYXRpb24gZXJyb3IuCiAgICAgICAgICAgICB0aHJvd1Nj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBBU1NFUlQodGFibGUpOwotICAg
ICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZtLCBpbnN0YW5jZSwgdGFibGUpOworICAg
ICAgICAgICAganNJbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGpzSW5zdGFuY2UsIHRhYmxlKTsK
KyAgICAgICAgICAgIGpzSW5zdGFuY2UtPm1fd2FzbVRhYmxlID0gdGFibGUtPnRhYmxlKCk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKCFpbnN0YW5jZS0+bWVtb3J5KCkpIHsKKyAg
ICBpZiAoIWpzSW5zdGFuY2UtPm1lbW9yeSgpKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBo
YXZlIGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQgY2hl
Y2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdp
c3RlcnMuCi0gICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLCBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV2FzbTo6TWVtb3J5OjpjcmVhdGUo
dm0sIDAsIDApLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAgYXV0byoganNNZW1vcnkgPSBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGpzTWVtb3J5
LT5hZG9wdChXYXNtOjpNZW1vcnk6OmNyZWF0ZSgpLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAg
ICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIGpzTWVtb3J5KTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICB9CiAgICAgCkBAIC0zNjAsMjAg
KzM4OSwxMyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgQVNTRVJUKGds
b2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7CiAgICAg
ICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZy
b21HbG9iYWxJbXBvcnQpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxC
aXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKLSAgICAgICAgICAgICAgICBp
bnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChn
bG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOworICAgICAgICAgICAgICAgIGpzSW5z
dGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2JhbEluZGV4LCBqc0luc3RhbmNlLT5pbnN0
YW5jZSgpLmxvYWRJNjRHbG9iYWwoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKTsK
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwo
Z2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKTsKKyAgICAgICAg
ICAgICAgICBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xv
YmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
QVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOwotCi0gICAgcmV0dXJuIGluc3RhbmNlOwot
fQotCi1zaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpnbG9iYWxNZW1vcnlCeXRlU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2Jh
bHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICByZXR1cm4ganNJbnN0YW5jZTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmluZGV4IDNjZmU1NDkuLmQ1MjU1MGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldh
c21JbnN0YW5jZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzksNzUgKzQxLDk0IEBAIGNs
YXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsK
IGNsYXNzIFdlYkFzc2VtYmx5VG9KU0NhbGxlZTsKIAorbmFtZXNwYWNlIFdhc20geworY2xhc3Mg
Q29kZUJsb2NrOworY2xhc3MgVGFibGU7IC8vIEZJWE1FIHJlbW92ZSB0aGlzIGFmdGVyIHJlZmFj
dG9yaW5nLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKK30KKwogY2xhc3MgSlNXZWJBc3Nl
bWJseUluc3RhbmNlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJs
eU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJ
bnN0YW5jZT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
LSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBt
X2NvZGVCbG9jay5nZXQoKTsgfQogICAgIHZvaWQgZmluYWxpemVDcmVhdGlvbihWTSYsIEV4ZWNT
dGF0ZSosIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYpOwotCi0gICAgSlNXZWJBc3NlbWJseU1vZHVs
ZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLQotICAgIEpTT2Jq
ZWN0KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpIHsgUkVMRUFTRV9BU1NFUlQoaWR4IDwg
bV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4gaW1wb3J0RnVuY3Rpb25zKClbaWR4XS5nZXQo
KTsgfQotCisgICAgCisgICAgV2FzbTo6SW5zdGFuY2UmIGluc3RhbmNlKCkgeyByZXR1cm4gbV9p
bnN0YW5jZS5nZXQoKTsgfQorICAgIFdhc206OkNvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiAmbV92bS0+d2FzbUNvbnRleHQ7IH0KICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCog
bW9kdWxlTmFtZXNwYWNlT2JqZWN0KCkgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Qu
Z2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJs
ZS5nZXQoKTsgfQorICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogd2ViQXNzZW1ibHlUb0pTQ2Fs
bGVlKCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRNZW1v
cnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgp
KTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldE1lbW9yeShW
TSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBt
X21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgbV93YXNtTWVtb3J5ID0gJm1lbW9yeSgpLT5t
ZW1vcnkoKTsgfQogICAgIFdhc206Ok1lbW9yeU1vZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1l
bW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAotICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFi
bGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9Ci0KLSAgICBpbnQzMl90IGxvYWRJMzJHbG9i
YWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9Ci0gICAg
aW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFs
cy5nZXQoKVtpXTsgfQotICAgIGZsb2F0IGxvYWRGMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMyR2xvYmFsKGkpKTsgfQotICAgIGRv
dWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9Ci0gICAgdm9pZCBzZXRHbG9iYWwodW5zaWdu
ZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQoKVtpXSA9IGJpdHM7IH0KLQotICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX21lbW9yeSk7IH0KLSAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eUluc3RhbmNlLCBtX3RhYmxlKTsgfQorICAgIC8vIFRhaWwgYWNjZXNzb3JzLgorICAgIHN0YXRp
YyBzaXplX3Qgb2Zmc2V0T2ZUYWlsKCkgeyByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVvZih1aW50NjRfdCk+KHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsgfQorICAg
IHN0cnVjdCBJbXBvcnRGdW5jdGlvbkluZm8geworICAgICAgICAvLyBUYXJnZXQgaW5zdGFuY2Ug
YW5kIGVudHJ5cG9pbnQgYXJlIG9ubHkgc2V0IGZvciB3YXNtLT53YXNtIGNhbGxzLCBhbmQgYXJl
IG90aGVyd2lzZSBudWxscHRyLiBUaGUgZW1iZWRkZXItc3BlY2lmaWMgbG9naWMgb2NjdXJzIHRo
cm91Z2ggaW1wb3J0IGZ1bmN0aW9uLgorICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHRh
cmdldEluc3RhbmNlIHsgbnVsbHB0ciB9OworICAgICAgICBXYXNtOjpXYXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCB7IG51bGxwdHIgfTsKKyAgICAgICAgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PiBpbXBvcnRGdW5jdGlvbiB7IFdyaXRlQmFycmllcjxKU09iamVjdD4oKSB9
OworICAgIH07CisgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbXBvcnRGdW5jdGlvbkluZm8oc2l6
ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiAmYml0d2lzZV9jYXN0PEltcG9ydEZ1bmN0
aW9uSW5mbyo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlRhaWwoKSlbaW1w
b3J0RnVuY3Rpb25OdW1dOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlRhcmdldEluc3Rh
bmNlKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBp
bXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09G
RlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgdGFyZ2V0SW5zdGFuY2UpOyB9CisgICAgc3RhdGlj
IHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50KHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkg
eyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBv
cnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2Fz
bUVudHJ5cG9pbnQpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9u
KHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBv
cnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNF
VE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVuY3Rpb24pOyB9CisgICAgSlNPYmplY3Qq
IGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9uTnVtKSB7IFJFTEVBU0VfQVNT
RVJUKGltcG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4gaW1w
b3J0RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKS0+aW1wb3J0RnVuY3Rpb24uZ2V0KCk7
IH0KKyAgICAKKyAgICAvLyBGSVhNRSByZW1vdmUgdGhlc2UgYWZ0ZXIgcmVmYWN0b3JpbmcgdGhl
bSBvdXQuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorICAgIFdhc206Ok1lbW9yeSYgaW50
ZXJuYWxNZW1vcnkoKSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5KCk7IH0KKyAgICBXYXNtOjpD
b2RlQmxvY2smIHdhc21Db2RlQmxvY2soKSBjb25zdCB7IHJldHVybiAqbV9pbnN0YW5jZS0+Y29k
ZUJsb2NrKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbVRhYmxlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93YXNtVGFibGUp
OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhbGxlZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fY2FsbGVlKTsgfQotICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZWTSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UsIG1fdm0pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fY29kZUJsb2NrKTsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93YXNtQ29kZUJsb2NrKTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jYWNoZWRTdGFja0xpbWl0KTsgfQot
ICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSB7IHJldHVybiBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KT4oc2l6ZW9m
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklt
cG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZJ
bXBvcnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKHNpemVvZihXcml0
ZUJhcnJpZXI8SlNDZWxsPikpOyB9Ci0KLSAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIHdlYkFz
c2VtYmx5VG9KU0NhbGxlZSgpIHsgcmV0dXJuIG1fY2FsbGVlLmdldCgpOyB9Ci0KLSAgICB2b2lk
KiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9
Ci0gICAgdm9pZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZvaWQqIGxpbWl0KSB7IG1fY2FjaGVkU3Rh
Y2tMaW1pdCA9IGxpbWl0OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZldhc21NZW1v
cnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dh
c21NZW1vcnkpOyB9CisgICAgdm9pZCogY2FjaGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgUkVMRUFT
RV9BU1NFUlQobV9pbnN0YW5jZS0+Y2FjaGVkU3RhY2tMaW1pdCgpID09IG1fY2FjaGVkU3RhY2tM
aW1pdCk7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7IH0KKyAgICB2b2lkIHNldENhY2hlZFN0
YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9pbnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChs
aW1pdCk7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9CisgICAgV2FzbTo6TWVtb3J5KiB3
YXNtTWVtb3J5KCkgeyByZXR1cm4gbV93YXNtTWVtb3J5OyB9CisgICAgV2FzbTo6TW9kdWxlJiB3
YXNtTW9kdWxlKCkgeyByZXR1cm4gbV93YXNtTW9kdWxlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBudW1JbXBvcnRG
dW5jdGlvbnMpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVu
c2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucywgUmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBz
dGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBudW1JbXBvcnRGdW5j
dGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gKG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkg
KyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogbnVtSW1wb3J0RnVuY3Rpb25zKS51bnNh
ZmVHZXQoKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXRPZlRhaWwoKSArIHNpemVvZihJbXBvcnRG
dW5jdGlvbkluZm8pICogbnVtSW1wb3J0RnVuY3Rpb25zKS51bnNhZmVHZXQoKTsKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgVk0qIG1fdm07Ci0gICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1w
b3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVj
dD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMo
KSk7IH0KLSAgICBzaXplX3QgZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoKSBjb25zdDsKKyAgICBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsg
fQorCisgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2luc3RhbmNlOwogCisgICAgVk0qIG1fdm07
CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdy
aXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0
ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0
OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxlOwogICAgIFdyaXRlQmFycmll
cjxXZWJBc3NlbWJseVRvSlNDYWxsZWU+IG1fY2FsbGVlOwotICAgIE1hbGxvY1B0cjx1aW50NjRf
dD4gbV9nbG9iYWxzOworICAgIAorICAgIC8vIEZJWE1FIHJlbW92ZSB0aGVzZSBhZnRlciByZWZh
Y3RvcmluZyB0aGVtIG91dC4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCiAgICAgdm9pZCog
bV9jYWNoZWRTdGFja0xpbWl0IHsgYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnRwdHJfdD46Om1heCgpKSB9OworICAgIFdhc206OkNvZGVCbG9jayogbV93YXNtQ29k
ZUJsb2NrIHsgbnVsbHB0ciB9OworICAgIFdhc206Ok1vZHVsZSYgbV93YXNtTW9kdWxlOworICAg
IFdhc206Ok1lbW9yeSogbV93YXNtTWVtb3J5IHsgbnVsbHB0ciB9OworICAgIFdhc206OlRhYmxl
KiBtX3dhc21UYWJsZSB7IG51bGxwdHIgfTsKKyAgICB1aW50NjRfdCogbV9nbG9iYWxzIHsgbnVs
bHB0ciB9OworCiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnku
Y3BwCmluZGV4IDIyM2M1OGIuLmQ2NDBhNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCkBAIC0zNyw3ICszNyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6
c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTWVtb3J5IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TWVtb3J5KSB9OwogCi1K
U1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6TWVtb3J5PiYm
IG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogZ2xv
YmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtNTAsMTAgKzUwLDE2
IEBAIEpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0CiAgICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFz
c2VtYmx5RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUV2YWxFcnJv
cihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkp
OwogCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dl
YkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0
dXJlLCBXVEZNb3ZlKG1lbW9yeSkpOwotICAgIGluc3RhbmNlLT5tX21lbW9yeS0+Y2hlY2soKTsK
LSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHJldHVybiBpbnN0YW5jZTsK
KyAgICBhdXRvKiBtZW1vcnkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2Vt
Ymx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlKTsK
KyAgICBtZW1vcnktPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gbWVtb3J5OworfQor
ICAgIAordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjphZG9wdChSZWY8V2FzbTo6TWVtb3J5PiYm
IG1lbW9yeSkKK3sKKyAgICBtX21lbW9yeS5zd2FwKG1lbW9yeSk7CisgICAgQVNTRVJUKG1fbWVt
b3J5LT5yZWZDb3VudCgpID09IDEpOworICAgIG1fbWVtb3J5LT5jaGVjaygpOwogfQogCiBTdHJ1
Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNjEsMTMgKzY3
LDEwIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFz
c2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1v
cnk+JiYgbWVtb3J5KQorSlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQot
ICAgICwgbV9tZW1vcnkoV1RGTW92ZShtZW1vcnkpKQorICAgICwgbV9tZW1vcnkoV2FzbTo6TWVt
b3J5OjpjcmVhdGUoKS5yZWxlYXNlTm9uTnVsbCgpKQogewotICAgIEFTU0VSVChtX21lbW9yeS0+
cmVmQ291bnQoKSA9PSAxKTsKLSAgICBtX21lbW9yeUJhc2UgPSBtX21lbW9yeS0+bWVtb3J5KCk7
Ci0gICAgbV9tZW1vcnlTaXplID0gbV9tZW1vcnktPnNpemUoKTsKIH0KIAogSlNBcnJheUJ1ZmZl
ciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKQEAgLTg1LDUyICs4OCw0NSBAQCBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ICAgIHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7CiB9CiAKLVdhc206OlBhZ2VDb3VudCBK
U1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50MzJf
dCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCitXYXNtOjpQYWdl
Q291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
dWludDMyX3QgZGVsdGEpCiB7Ci0gICAgLy8gTm90ZTogV2UgY2FuIG9ubHkgdXNlIGV4ZWMgaWYg
c2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlIGlzIHRydWUuCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBXYXNtOjpQYWdlQ291bnQgb2xk
UGFnZUNvdW50ID0gbWVtb3J5KCkuc2l6ZUluUGFnZXMoKTsKLQotICAgIGlmICghV2FzbTo6UGFn
ZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgewotICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRp
b25zT25GYWlsdXJlKQorICAgIGF1dG8gZ3Jvd24gPSBtZW1vcnkoKS5ncm93KFdhc206OlBhZ2VD
b3VudChkZWx0YSkpOworICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgc3dpdGNoIChncm93bi5l
cnJvcigpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52
YWxpZERlbHRhOgogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5n
cm93IGV4cGVjdHMgdGhlIGRlbHRhIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCIpKSk7Ci0gICAg
ICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKLSAgICB9Ci0KLSAgICBXYXNtOjpQYWdlQ291
bnQgbmV3U2l6ZSA9IG9sZFBhZ2VDb3VudCArIFdhc206OlBhZ2VDb3VudChkZWx0YSk7Ci0gICAg
aWYgKCFuZXdTaXplKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1
cmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dG
YWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUgZ3Jvd24gc2l6ZSB0byBiZSBhIHZhbGlk
IHBhZ2UgY291bnQiKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6
TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IHdvdWxkIGV4Y2VlZCB0aGUgbWVt
b3J5J3MgZGVjbGFyZWQgbWF4aW11bSBzaXplIikpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5OgorICAg
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1v
cnlFcnJvcihleGVjKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7CiAgICAgfQogCi0gICAgaWYgKGRlbHRhKSB7Ci0gICAg
ICAgIGJvb2wgc3VjY2VzcyA9IG1lbW9yeSgpLmdyb3codm0sIG5ld1NpemUpOwotICAgICAgICBp
ZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX21lbW9yeUJhc2UgPT0gbWVtb3J5
KCkubWVtb3J5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZSA9PSBtZW1vcnko
KS5zaXplKCkpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVy
ZSkKLSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLSAgICAgICAgICAgIHJldHVybiBXYXNtOjpQYWdl
Q291bnQoKTsKLSAgICAgICAgfQotICAgICAgICBtX21lbW9yeUJhc2UgPSBtZW1vcnkoKS5tZW1v
cnkoKTsKLSAgICAgICAgbV9tZW1vcnlTaXplID0gbWVtb3J5KCkuc2l6ZSgpOwotICAgIH0KKyAg
ICByZXR1cm4gZ3Jvd24udmFsdWUoKTsKK30KIAotICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0
IHRoZSBvbGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nCi0g
ICAgLy8gdG8gc3RhbGUgbWVtb3J5Lgordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3Vj
Y2Vzc0NhbGxiYWNrKFZNJiB2bSwgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6
UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0
aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1pZ2h0IG5vdyBiZSBwb2ludGluZyB0byBz
dGFsZSBtZW1vcnkuCiAgICAgLy8gTmV1dGVyIHRoZSBvbGQgYXJyYXkuCiAgICAgaWYgKG1fYnVm
ZmVyKSB7CiAgICAgICAgIG1fYnVmZmVyLT5uZXV0ZXIodm0pOwogICAgICAgICBtX2J1ZmZlciA9
IG51bGxwdHI7CiAgICAgICAgIG1fYnVmZmVyV3JhcHBlci5jbGVhcigpOwogICAgIH0KLQorICAg
IAogICAgIG1lbW9yeSgpLmNoZWNrKCk7Ci0KLSAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKFdhc206OlBhZ2VDb3VudChkZWx0YSkuYnl0ZXMoKSk7Ci0gICAgcmV0dXJuIG9s
ZFBhZ2VDb3VudDsKKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVk
KG5ld1BhZ2VDb3VudC5ieXRlcygpIC0gb2xkUGFnZUNvdW50LmJ5dGVzKCkpOwogfQogCiB2b2lk
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAppbmRleCAx
ZDA2YzRjLi40YmJiY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCkBAIC00OCwyNiArNDgsMjMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gJnZtLmVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlOwogICAg
IH0KIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBjcmVhdGUoRXhlY1N0YXRlKiwg
Vk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5PiYmKTsKKyAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseU1lbW9yeSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKik7CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKKyAgICB2b2lkIGFkb3B0KFJl
ZjxXYXNtOjpNZW1vcnk+JiYpOwogICAgIFdhc206Ok1lbW9yeSYgbWVtb3J5KCkgeyByZXR1cm4g
bV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBidWZmZXIoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCopOwotICAgIFdhc206OlBhZ2VDb3VudCBncm93KFZNJiwgRXhlY1N0YXRlKiwg
dWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKLQot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1vcnlCYXNlKTsgfQotICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNz
ZW1ibHlNZW1vcnksIG1fbWVtb3J5U2l6ZSk7IH0KKyAgICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhW
TSYsIEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhKTsKKyAgICB2b2lkIGdyb3dTdWNjZXNzQ2Fs
bGJhY2soVk0mLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdlQ291bnQg
bmV3UGFnZUNvdW50KTsKIAogcHJpdmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwg
U3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4mJik7CisgICAgSlNXZWJBc3NlbWJseU1lbW9y
eShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQqIG1fbWVtb3J5QmFzZTsKLSAg
ICBzaXplX3QgbV9tZW1vcnlTaXplOwogICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5Owog
ICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CiAgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXggYmFiMTE4MS4uNDBjMTAw
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgi
CiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNs
dWRlICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKICNpbmNsdWRlICJXZWJB
c3NlbWJseVRvSlNDYWxsZWUuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02
MSw2ICs2Miw3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCisKIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdh
c206Ok1vZHVsZT4mJiBtb2R1bGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBt
X21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCkBAIC05MSw2ICs5MywzNiBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIFdhc206OlNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjp0cnlDbGVhbnVwKCk7CiB9CiAKK2NvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uJiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOworfQorCitTeW1ib2xUYWJs
ZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6ZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOworfQorCitXYXNtOjpTaWduYXR1cmVJ
bmRleCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdAoreworICAgIHJldHVybiBt
X21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSk7Cit9CisKK1dlYkFzc2VtYmx5VG9KU0NhbGxlZSogSlNXZWJBc3NlbWJseU1vZHVs
ZTo6Y2FsbGVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7Cit9CisKK0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayhXYXNt
OjpNZW1vcnlNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsKK30KKworV2FzbTo6TW9kdWxlJiBKU1dlYkFzc2VtYmx5
TW9kdWxlOjptb2R1bGUoKQoreworICAgIHJldHVybiBtX21vZHVsZS5nZXQoKTsKK30KKwogdm9p
ZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxvY2soVk0mIHZtLCBXYXNtOjpNZW1vcnlN
b2RlIG1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBtX2Nv
ZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxv
Y2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oCmluZGV4IDNkYzY3YTMuLjAxYjVkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTMwLDE1ICszMCwx
OSBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCi0jaW5jbHVkZSAiV2Fz
bU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Jh
Zy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBu
YW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBNb2R1bGU7CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247
CiBjbGFzcyBQbGFuOwordXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1aW50MzJfdDsKIH0KIAogY2xh
c3MgU3ltYm9sVGFibGU7CkBAIC01MiwyMyArNTYsMjAgQEAgcHVibGljOgogCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgV2FzbTo6
TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgV1RGOjpFeHBlY3RlZDxSZWZQdHI8V2FzbTo6TW9kdWxlPiwgU3RyaW5nPiYmKTsKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUpOwogCi0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUlu
Zm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7
IH0KLSAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBt
X2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9Ci0gICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZS0+c2lnbmF0dXJlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQotICAg
IFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWUu
Z2V0KCk7IH0KKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24oKSBjb25zdDsKKyAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25z
dDsKKyAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbklu
ZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdDsKKyAgICBXZWJBc3Nl
bWJseVRvSlNDYWxsZWUqIGNhbGxlZSgpIGNvbnN0OwogCi0gICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxv
Y2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLmdldCgpOyB9CisgICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSk7CisgICAgdm9pZCBz
ZXRDb2RlQmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Kik7CiAKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZSgpIGNvbnN0OwogCi0gICAg
V2FzbTo6TW9kdWxlJiBtb2R1bGUoKSB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotICAgIHZv
aWQgc2V0Q29kZUJsb2NrKFZNJiwgV2FzbTo6TWVtb3J5TW9kZSwgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhc206Ok1vZHVsZSYgbW9kdWxlKCk7CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNw
cAppbmRleCBmZjQ2ZDRkLi5hZGFhNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKQEAgLTI5LDMwICsyOSwyMiBAQAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVRhYmxlOjpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWJsZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseVRhYmxlKSB9OwogCi1KU1dl
YkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpv
cHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSkKK0pTV2ViQXNzZW1ibHlUYWJsZSogSlNXZWJBc3Nl
bWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYgdGFibGUpCiB7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgYXV0byBleGNlcHRpb24gPSBbJl0gKEpT
T2JqZWN0KiBlcnJvcikgewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBlcnJvcik7CisgICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKSB7
CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUV2YWxFcnJv
cihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotCi0gICAgaWYgKCFnbG9iYWxPYmpl
Y3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1l
c3NhZ2UoKSkpOwotCi0gICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKLSAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICB9CiAKLSAg
ICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1i
bHlUYWJsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJlLCBpbml0
aWFsLCBtYXhpbXVtKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2
bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHRhYmxlKSk7CiAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC02MiwyMyArNTQsMTUgQEAgU3Ry
dWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCitKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1i
bHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYg
dGFibGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhYmxlKFdURk1vdmUo
dGFibGUpKQogewotICAgIG1fc2l6ZSA9IGluaXRpYWw7Ci0gICAgQVNTRVJUKGlzVmFsaWRTaXpl
KG1fc2l6ZSkpOwotICAgIG1fbWF4aW11bSA9IG1heGltdW07Ci0gICAgQVNTRVJUKCFtX21heGlt
dW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOwotCiAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJl
IHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyByZWNv
bW1lbmRzIGRvaW5nIHNvLgogICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcgdGhh
dC4KLSAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6
bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVf
dD4obV9zaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRp
Y19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1f
c2l6ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpD
YWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5z
aWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJl
bHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQ
dHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkpOworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5n
ZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAgIH0KIH0KIAogdm9pZCBKU1dl
YkFzc2VtYmx5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTk5LDcgKzgzLDcgQEAg
dm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9z
aXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPnNpemUo
KTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzRnVuY3Rpb25z
LmdldCgpW2ldKTsKIH0KIApAQCAtMTA3LDQ3ICs5MSw0NCBAQCBib29sIEpTV2ViQXNzZW1ibHlU
YWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IG5l
d1NpemVDaGVja2VkID0gbV9zaXplOwotICAgIG5ld1NpemVDaGVja2VkICs9IGRlbHRhOwotICAg
IHVpbnQzMl90IG5ld1NpemU7Ci0gICAgaWYgKG5ld1NpemVDaGVja2VkLnNhZmVHZXQobmV3U2l6
ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+ICptYXhpbXVtKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWlzVmFsaWRTaXplKG5ld1NpemUpKQorCisgICAgc2l6ZV90IG9s
ZFNpemUgPSBzaXplKCk7CisKKyAgICBhdXRvIGdyZXcgPSBtX3RhYmxlLT5ncm93KGRlbHRhKTsK
KyAgICBpZiAoIWdyZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnVuY3Rpb25z
LnJlYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6
ZV90PihuZXdTaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOworICAgIHNp
emVfdCBuZXdTaXplID0gZ3Jldy52YWx1ZSgpOworICAgIG1fanNGdW5jdGlvbnMucmVhbGxvYyhz
aXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBuZXdTaXplKTsKIAotICAgIGZvciAodWlu
dDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkgewotICAgICAgICBuZXcgKCZtX2Z1
bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworICAgIGZvciAoc2l6
ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQogICAgICAgICBuZXcgKCZtX2pzRnVu
Y3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgfQotICAgIG1f
c2l6ZSA9IG5ld1NpemU7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorSlNPYmplY3QqIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIHJldHVybiBtX2pzRnVuY3Rpb25zLmdldCgp
W2luZGV4XS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rp
b24odWludDMyX3QgaW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUp
OworICAgIG1fdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5kZXgpOwogICAgIG1fanNGdW5jdGlvbnMu
Z2V0KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAgIG1fZnVuY3Rpb25z
LmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKLSAgICBBU1NFUlQobV9m
dW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6
aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCiB9CiAK
IHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGlu
ZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+c2V0RnVuY3Rpb24oaW5kZXgsIGZ1bmN0
aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCksIGZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAgICBtX2pz
RnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBtX2Z1
bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpOwogfQog
CiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBp
bmRleCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGZ1bmN0aW9uKQogewotICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRl
eCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgZnVuY3Rpb24tPmluc3RhbmNlKCkpOwog
ICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwot
ICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9u
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAppbmRleCBkZjgzZTk3Li40NDg3NTMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOSw1NyArMjksNDIgQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXYXNtTGltaXRzLmgiCisjaW5jbHVk
ZSAiV2FzbVRhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFdhc20gewotc3RydWN0IENhbGxh
YmxlRnVuY3Rpb247Ci19Ci0KIGNsYXNzIEpTV2ViQXNzZW1ibHlUYWJsZSA6IHB1YmxpYyBKU0Rl
c3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9i
amVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSogY3JlYXRlKEV4ZWNT
dGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gbWF4aW11bSk7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSogY3JlYXRl
KEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQotICAgIHVpbnQzMl90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6
ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUoc2l6ZSk7
IH0KKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4g
bV90YWJsZS0+bWF4aW11bSgpOyB9CisgICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFibGUtPnNpemUoKTsgfQogICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBkZWx0YSkgV0FSTl9V
TlVTRURfUkVUVVJOOwotICAgIEpTT2JqZWN0KiBnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkK
LSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICAgICAg
cmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOwotICAgIH0KLSAgICB2b2lk
IGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpOwotICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0m
LCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiopOwotICAgIHZvaWQgc2V0RnVu
Y3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsK
LQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9zaXplKTsgfQotICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3Nl
bWJseVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SlNGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxl
LCBtX2pzRnVuY3Rpb25zKTsgfQorICAgIEpTT2JqZWN0KiBnZXRGdW5jdGlvbih1aW50MzJfdCk7
CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIHNldEZ1bmN0aW9u
KFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsKKyAgICB2b2lkIHNldEZ1bmN0
aW9uKFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKik7CiAKLSAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKQotICAgIHsKLSAgICAgICAgLy8g
VGhpcyB0b3BzIG91dCBhdCB+Mzg0IE1CIHdvcnRoIG9mIGRhdGEgaW4gdGhpcyBjbGFzcy4KLSAg
ICAgICAgcmV0dXJuIHNpemUgPCAoMSA8PCAyNCk7Ci0gICAgfQorICAgIFdhc206OlRhYmxlKiB0
YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUucHRyKCk7IH0KIAogcHJpdmF0ZToKLSAgICBKU1dlYkFz
c2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1
Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIE1hbGxvY1B0cjxXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICBSZWY8V2FzbTo6VGFibGU+IG1f
dGFibGU7CiAgICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+IG1fanNGdW5jdGlv
bnM7Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOwotICAgIHVpbnQzMl90
IG1fc2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2FzbVRvSlMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmM5MjA0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XYXNtVG9KUy5jcHAKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXYXNtVG9KUy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCisjaW5jbHVkZSAiSklURXhj
ZXB0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCisj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUVycm9yQ29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldhc21FeGNl
cHRpb25UeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3VzaW5n
IEpJVCA9IENDYWxsSGVscGVyczsKKworc3RhdGljIHZvaWQgbWF0ZXJpYWxpemVJbXBvcnRKU0Nl
bGwoSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAg
IC8vIFdlJ3JlIGNhbGxpbmcgb3V0IG9mIHRoZSBjdXJyZW50IFdlYkFzc2VtYmx5Lkluc3RhbmNl
LiBUaGF0IEluc3RhbmNlIGhhcyBhIGxpc3Qgb2YgYWxsIGl0cyBpbXBvcnQgZnVuY3Rpb25zLgor
ICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShyZXN1bHQpOworICAgIGppdC5sb2FkUHRy
KEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBv
cnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOworfQorCitFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSogdm0sIEJhZzxDYWxs
TGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwg
dW5zaWduZWQgaW1wb3J0SW5kZXgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9l
c24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCisgICAg
Ly8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCisgICAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3
YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCBKU0NDYWxsaW5nQ29u
dmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7CisgICAgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKKyAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7Cisg
ICAgSklUIGppdDsKKworICAgIC8vIE5vdGU6IFdhc21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhh
dCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVlIHNhdmUuCisgICAgLy8gSWYgd2UgZXZl
ciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gY2hhbmdlIFdhc21CM0lSR2VuZXJh
dG9yLgorCisgICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZl
bnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KKyAgICBBU1NFUlQoIWpzQ0MubV9ncHJBcmdz
LnNpemUoKSk7CisgICAgQVNTRVJUKCFqc0NDLm1fZnByQXJncy5zaXplKCkpOworCisgICAgaml0
LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1t
MzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAv
LyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQorCisgICAgeworICAgICAgICBib29sIGhhc0JhZEk2
NFVzZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJldHVyblR5
cGUoKSA9PSBJNjQ7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwg
YXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUg
YXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNo
IChhcmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1
bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAgY2FzZSBJNjQ6IHsKKyAgICAgICAg
ICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkg
eworICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAg
IGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjphcmd1bWVudEdQUjEpOworCisg
ICAgICAgICAgICAvLyBTdG9yZSBDYWxsZWUuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSklUOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9
IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0p
OworCisgICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSkgLT4gdm9pZCB7CisgICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUo
ZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3Ry
dWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9y
IGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOworICAgICAgICAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5r
QnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOworICAgICAgICAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZhbGlk
IGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24g
c2F2ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4gV2UgdGhlcmVmb3JlIGRv
bid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB0aGUgd2Fz
bSBjYWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KKyAgICBSZWdpc3RlclNldCBtaXNz
aW5nQ2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIG1pc3Np
bmdDYWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBB
U1NFUlQobWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoIU9wdGlvbnM6
OnVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7CisgICAgICAgIFNjcmF0Y2hC
dWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYXJnQ291bnQg
KiBzaXplb2YodWludDY0X3QpKTsKKyAgICAgICAgY2hhciogYnVmZmVyID0gYXJnQ291bnQgPyBz
dGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IG51bGxwdHI7
CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQg
bWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBidWZmZXJPZmZzZXQgPSAwOwor
ICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0
ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgY29uc3Qg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7CisgICAgICAgIGppdC5zdWJQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSksIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0Nv
dW50OyArK2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFy
Z3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2Ug
QW55ZnVuYzoKKyAgICAgICAgICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAgICAg
ICAgICAgIEdQUlJlZyBncHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJz
IDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9
IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxs
IGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAg
ICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNl
dCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICArK21hcnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnBy
UmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFy
Z3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdz
W21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNl
IHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAg
IGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zm
c2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRG
bG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZURv
dWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2
NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsr
bWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIEY2NDogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7Cisg
ICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXpl
KCkpCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hh
bGxlZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0
ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVn
ID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERv
dWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwg
ZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0
KGZwclJlZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRj
aEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxs
ZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAg
ICAgICAgfQorICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
aWYgKGFyZ0NvdW50KSB7CisgICAgICAgICAgICAvLyBUaGUgR0Mgc2hvdWxkIG5vdCBsb29rIGF0
IHRoaXMgYnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFsdWVzLgorICAgICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJl
c3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgICAgIH0KKworICAgICAgICB1aW50NjRfdCAoKmNhbGxGdW5jKShF
eGVjU3RhdGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCopID0KKyAgICAg
ICAgICAgIFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjYWxsZWUsIFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAtPiB1aW50NjRfdCB7IAorICAg
ICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgeworICAgICAgICAgICAgICAgICAgICBU
eXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBhcmc7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkg
eworICAgICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRnVuYzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSTMyOgorICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYnVmZmVy
W2FyZ051bV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEYzMjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBGNjQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihidWZm
ZXJbYXJnTnVtXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAg
ICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+bWV0aG9kVGFibGUoKnZtKS0+
Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworICAgICAgICAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRl
ZmluZWQoKSwgYXJncyk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCAwKTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlYWxSZXN1bHQ7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAg
ICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBWb2lkOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEkzMjogeworICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQudG9JbnQzMihleGVjKSkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocmVzdWx0LnRvTnVt
YmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxSZXN1bHQ7Cisg
ICAgICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3Rh
bmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgICAgICAKKyAgICAgICAgbWF0ZXJpYWxpemVJbXBv
cnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzID49IDQs
ICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxvdy4iKTsKKyAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJ1ZmZlcikpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAg
ICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5
SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisKKyAgICAgICAgLy8gZXhjZXB0aW9u
IGhlcmUuCisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJhbWUpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgdm9pZCAo
KmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQg
eworICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIGdlbmVyaWNVbndp
bmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNo
KTsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoKTsK
KyAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAgICBub0V4
Y2VwdGlvbi5saW5rKCZqaXQpOworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBl
KCkpIHsKKyAgICAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJs
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAg
ICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQ
UkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAg
ICAgICAgaml0LnJldCgpOworCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmso
ZXhjZXB0aW9uQ2FsbCwgZG9VbndpbmRpbmcpOworCisgICAgICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIs
IGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOworICAg
IH0KKworICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNr
IGhlcmUgc2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKKyAgICAvLyB3aWxsIGRvIHRoZSBzdGFjayBj
aGVjayBmb3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMgdGhhdCBpdCBtaWdodCBtYWtlCisgICAg
Ly8gYSBjYWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1ha2Ugc3VyZSBpdHMgc3RhY2sgY2hlY2sg
aW5jbHVkZXMgc3BhY2UKKyAgICAvLyBmb3IgdXMgaGVyZS4KKworICAgIGNvbnN0IHVuc2lnbmVk
IG51bWJlck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsgMTsgLy8gVGhlcmUgaXMgYSAidGhpcyIg
YXJndW1lbnQuCisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworICAgIGNv
bnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAq
IHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgY29uc3Qg
dW5zaWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAgaml0LnN1YlB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBKSVQ6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAg
IC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0
aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUg
aHVnZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NTQ3CisgICAgCisgICAgLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUgaW50ZWdl
ciBwYXJhbWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lzdGVyIGZvciB1c2UgYWZ0ZXJ3YXJk
cy4KKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKKyAgICAgICAg
dW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFt
ZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3Vu
dDsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1
bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAg
ICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBjYXNlIEFu
eWZ1bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgICAgICAgICAgY2FzZSBJ
MzI6IHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVnOworICAgICAgICAgICAgICAgIGlm
IChtYXJzaGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAg
ICAgICAgICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxy
ZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxl
IGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZ3ByUmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKKyAgICAgICAgICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOyAvLyBDbGVhciBub24taW50MzIgYW5k
IG5vbi10YWcgYml0cy4KKyAgICAgICAgICAgICAgICBqaXQuYm94SW50MzIoZ3ByUmVnLCBKU1Zh
bHVlUmVncyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9m
ZnNldCkpOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIEYzMjoKKyAgICAgICAgICAgIGNhc2UgRjY0OgorICAgICAgICAgICAgICAgIC8vIFNr
aXBwZWQ6IGhhbmRsZWQgYmVsb3cuCisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJz
ID49IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmck9mZnNl
dCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7
CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB7CisgICAgICAgIC8vIEludGVnZXIgcmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBi
ZWVuIHNwaWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxhYmxlLgorICAgICAgICBHUFJSZWcgZG91
YmxlRW5jb2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgICAgICBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgYm9vbCBoYXNN
YXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBmYWxzZTsKKyAgICAgICAgYXV0byBtYXRl
cmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2Rl
T2Zmc2V0LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKKyAgICAgICAgICAgIGlmICghaGFzTWF0ZXJp
YWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dChEb3VibGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4LCAiY29kZWdlbiBhc3N1bWVzIHRoaXMg
YmVsb3ciKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW0zMigxKSwg
ZGVzdCk7CisgICAgICAgICAgICAgICAgaml0LmxzaGlmdDY0KEpJVDo6VHJ1c3RlZEltbTMyKDQ4
KSwgZGVzdCk7CisgICAgICAgICAgICAgICAgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zm
c2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB1bnNpZ25l
ZCBtYXJzaGFsbGVkR1BScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0g
MDsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90Ojpm
aXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAg
ICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CisgICAgICAgICAg
ICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAg
IHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAg
Y2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgY2FzZSBJ
NjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFu
ZGxlZCBhYm92ZS4KKyAgICAgICAgICAgIGNhc2UgSTMyOgorICAgICAgICAgICAgICAgIC8vIFNr
aXBwZWQ6IGhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJz
ID49IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmck9mZnNl
dCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7
CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRjMyOiB7CisgICAgICAg
ICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQ
UnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnByUmVn
ID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBh
bGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgor
ICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZy
T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJSZWcsIGZwclJlZyk7CisgICAgICAg
ICAgICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5tb3Zl
RG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIG1hdGVyaWFsaXpl
RG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyk7CisgICAgICAgICAg
ICAgICAgaml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7CisgICAg
ICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChj
YWxsZWVGcmFtZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9
IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjY0
OiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAo
bWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBh
cyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVu
dEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAgICAg
ICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7CisgICAgICAgICAgICAg
ICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAg
bWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3Jh
dGNoKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53
aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJh
bWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxs
ZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKKworICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpy
ZWdUMDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGggYmVsb3cu
CisgICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBvcnRKU0Nl
bGxHUFJSZWcpKTsKKworICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5k
ZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7CisKKyAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxH
UFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIGppdC5zdG9yZTMyKEpJVDo6
VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7CisgICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVk
SW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNs
b3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
KworICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBpcyB2b2lk
IGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1NDg4CisKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IGNhbGxMaW5rSW5mb3MuYWRkKCk7CisgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7CisgICAgSklU
OjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5p
dGlhbFJpZ2h0VmFsdWUoMCk7CisgICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0
cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywg
dGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOworICAgIEpJVDo6Q2FsbCBmYXN0Q2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKKyAg
ICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdU
MCBoZXJlLgorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxM
aW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJl
Z1QyLgorICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGRvbmUu
bGluaygmaml0KTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tz
OworCisgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBWb2lk
OgorICAgICAgICAvLyBEaXNjYXJkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmM6Cisg
ICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5n
LCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUg
YSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJNjQ6IHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAg
ICB9CisgICAgY2FzZSBJMzI6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25l
OworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0
LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBE
b05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7
CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNl
cHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAg
ICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCisgICAgICAgICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsKKyAgICAg
ICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0kzMik7Cisg
ICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgRjMyOiB7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9u
ZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRv
IGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAvLyBXZSdyZSBh
biBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0LmNvbnZlcnRJbnQ2
NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBS
KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUu
bGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
aml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUik7CisgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFw
cGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25D
aGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGZs
b2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1iZXIoZXhl
YykpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVy
dFRvRjMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3RO
dW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Cisg
ICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAg
IC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQu
Y29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJl
dHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAg
ICAgaXNEb3VibGUubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1t
NjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGpp
dC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkp
OworCisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1
dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0
LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgZG91YmxlICgqY29udmVydFRv
RjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dikgLT4gZG91YmxlIHsgCisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAg
ICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOworICAgICAgICB9KTsKKworICAgICAgICBk
b25lLmxpbmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBpZiAoIWV4Y2Vw
dGlvbkNoZWNrcy5lbXB0eSgpKSB7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQp
OworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGF1dG8gY2FsbCA9
IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CisK
KyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUq
IGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAg
ICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNh
bGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKworICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgZG9VbndpbmRpbmcpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9y
eSk7CisKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBo
b3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSk7CisgICAg
Q29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKGZhc3RDYWxsKTsKKyAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMo
Y2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7CisKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlw
dCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlKQoreworICAgIFZNKiB2bSA9IGluc3RhbmNlLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgeworICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICAgICAgSlNPYmpl
Y3QqIGVycm9yOworICAgICAgICBpZiAodHlwZSA9PSBFeGNlcHRpb25UeXBlOjpTdGFja092ZXJm
bG93KQorICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYywg
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXJyb3IgPSBKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPldlYkFz
c2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksIFdhc206OmVycm9yTWVzc2FnZUZvckV4Y2Vw
dGlvblR5cGUodHlwZSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBlcnJvcik7CisgICAgfQorCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgQVNT
RVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFj
aGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVy
OgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2Nh
dGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBp
biB0aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2Vz
IG5vdCByZXF1aXJlCisgICAgLy8gdGhpcyBzaW5jZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29u
c3RhbnQgVk0gcG9pbnRlci4pIFdlIGNvdWxkIG1ha2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgor
ICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBj
YWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlv
biBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUg
aGFjay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
NDQwCisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPndlYkFzc2VtYmx5VG9KU0Nh
bGxlZSgpKTsKKyAgICByZXR1cm4gdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyNGFhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgi
CisjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKKyNp
bmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBDYWxsTGlua0luZm87CitjbGFzcyBWTTsKKworbmFtZXNwYWNlIFdh
c20geworCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3
YXNtVG9KUyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJ
bmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOworCit2b2lkKiB3YXNtVG9KU0V4Y2VwdGlvbihF
eGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAKaW5kZXggMGQyNzc2NS4uYzU4NWYwOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTYw
LDcgKzYwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFz
c2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIGNvbnN0IFdhc206OlNpZ25hdHVy
ZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IHdlIHRoaW5rIHdlIGFy
ZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2UgZXhwZWN0LgotICAgIEFTU0VS
VCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNt
RnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7CisgICAgQVNTRVJUKHdhc21GdW5jdGlv
bi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKS0+aXNTYWZlVG9SdW4od2FzbUZ1
bmN0aW9uLT5pbnN0YW5jZSgpLT5tZW1vcnkoKS0+bWVtb3J5KCkubW9kZSgpKSk7CiAgICAgewog
ICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZGlzYWxsb3dlZCBJNjQgdXNlLgogCkBAIC04
MiwxMSArODIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdl
YkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIFRyYWNlU2NvcGUgdHJhY2VT
Y29wZShXZWJBc3NlbWJseUV4ZWN1dGVTdGFydCwgV2ViQXNzZW1ibHlFeGVjdXRlRW5kKTsKIAog
ICAgIFZlY3RvcjxKU1ZhbHVlPiBib3hlZEFyZ3M7Ci0gICAgV2FzbTo6Q29udGV4dCogd2FzbUNv
bnRleHQgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7Ci0gICAgLy8gV2hlbiB3ZSBkb24ndCB1
c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBqcwotICAgIC8vIGVudHJ5IHdy
YXBwZXIgZXhwZWN0cyB0aGUgV2FzbUNvbnRleHQqIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KLSAg
ICBpZiAoIVdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIGJveGVkQXJncy5h
cHBlbmQod2FzbUNvbnRleHQpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2Ug
PSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAgLy8gV2hlbiB3ZSBkb24ndCB1c2UgZmFz
dCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBKUworICAgIC8vIGVudHJ5IHdyYXBwZXIg
ZXhwZWN0cyB0aGUgaW5zdGFuY2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgIGlmICghV2Fz
bTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGluc3Rh
bmNlKTsKIAogICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnSW5kZXgpIHsKICAgICAgICAgSlNWYWx1ZSBhcmcg
PSBleGVjLT5hcmd1bWVudChhcmdJbmRleCk7CkBAIC0xMjcsNyArMTI3LDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjKQogICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0ciwgd2FzbUZ1bmN0aW9u
LCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJncyk7CiAKICAgICAvLyBGSVhN
RSBEbyBhd2F5IHdpdGggdGhpcyBlbnRpcmUgZnVuY3Rpb24sIGFuZCBvbmx5IHVzZSB0aGUgZW50
cnlwb2ludCBnZW5lcmF0ZWQgYnkgQjMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjY0ODYKLSAgICBXYXNtOjpDb250ZXh0KiBwcmV2V2FzbUNvbnRleHQgPSBXYXNt
Ojpsb2FkQ29udGV4dCh2bSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBwcmV2SW5zdGFu
Y2UgPSB2bS53YXNtQ29udGV4dC5sb2FkKCk7CiAgICAgewogICAgICAgICAvLyBXZSBkbyB0aGUg
c3RhY2sgY2hlY2sgaGVyZSBmb3IgdGhlIHdyYXBwZXIgZnVuY3Rpb24gYmVjYXVzZSB3ZSBkb24n
dAogICAgICAgICAvLyB3YW50IHRvIGVtaXQgYSBzdGFjayBjaGVjayBpbnNpZGUgZXZlcnkgd3Jh
cHBlciBmdW5jdGlvbi4KQEAgLTEzNywyMiArMTM3LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICAgICAgaWYgKFVOTElLRUxZKChzcCA8IHN0YWNrU3BhY2VVc2VkKSB8fCAoKHNwIC0gc3Rh
Y2tTcGFjZVVzZWQpIDwgYml0d2lzZV9jYXN0PGludHB0cl90Pih2bS5zb2Z0U3RhY2tMaW1pdCgp
KSkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihl
eGVjLCBzY29wZSwgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKSk7CiAgICAgfQotICAg
IFdhc206OnN0b3JlQ29udGV4dCh2bSwgd2FzbUNvbnRleHQpOworICAgIHZtLndhc21Db250ZXh0
LnN0b3JlKGluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAgICBBU1NFUlQod2FzbUZ1
bmN0aW9uLT5pbnN0YW5jZSgpKTsKLSAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgp
ID09IFdhc206OmxvYWRDb250ZXh0KHZtKSk7CisgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5z
dGFuY2UoKSA9PSB2bS53YXNtQ29udGV4dC5sb2FkKCkpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJh
d1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0VudHJ5cG9pbnQoKSwgJnZt
LCAmcHJvdG9DYWxsRnJhbWUpOwogICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMg
aW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQncyBzdG9yZWQgaW4gVmVjdG9y
PEpTVmFsdWU+LgogICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5
LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxkIGtlZXAgdGhlIGluc3RhbmNl
CiAgICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4KLSAgICB3YXNtQ29udGV4dC0+
dXNlKCk7Ci0gICAgaWYgKHByZXZXYXNtQ29udGV4dCAhPSB3YXNtQ29udGV4dCkgeworICAgIGlu
c3RhbmNlLT51c2UoKTsKKyAgICBpZiAocHJldkluc3RhbmNlICE9IGluc3RhbmNlKSB7CiAgICAg
ICAgIC8vIFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRyYSBzYWZldHkgaW5zdGVhZCBvZiBsZWF2
aW5nIGEgY2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGluIHRoZXJlLiBJZiB3ZSBldmVyIGZvcmdl
dCB0byBzZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbAogICAgICAgICAvLyBib3VuZHMsIHRoaXMg
d2lsbCBmb3JjZSBldmVyeSBzdGFjayBvdmVyZmxvdyBjaGVjayB0byBpbW1lZGlhdGVseQogICAg
ICAgICAvLyBmaXJlLgotICAgICAgICB3YXNtQ29udGV4dC0+c2V0Q2FjaGVkU3RhY2tMaW1pdChi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkp
KTsKKyAgICAgICAgaW5zdGFuY2UtPnNldENhY2hlZFN0YWNrTGltaXQoYml0d2lzZV9jYXN0PHZv
aWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSk7CiAgICAgfQotICAg
IFdhc206OnN0b3JlQ29udGV4dCh2bSwgcHJldldhc21Db250ZXh0KTsKKyAgICB2bS53YXNtQ29u
dGV4dC5zdG9yZShwcmV2SW5zdGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1
cm5UeXBlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGE5ZDhmMGQu
LjJmZGQ1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMzIsMTIgKzMy
LDE0IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJv
bm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUg
IkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21U
b0pTLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKQEAg
LTc1LDEwICs3NywxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleAogICAgIFN0cnVjdHVyZSog
aW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0g
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2Jq
ZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGlt
cG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUsIFdhc206Okluc3RhbmNlOjpjcmVhdGUoUmVm
PFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4
ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSkp
OworICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBleGVjLCBtb2R1bGUtPm1vZHVs
ZSgpLmNvbXBpbGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwg
Jldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Ondhc21Ub0pTRXhjZXB0aW9uKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5kZXgg
NjQ5ODliNS4uODZmODE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKQEAgLTk2LDEz
ICs5NiwxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0s
IGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOworICAgIGF1dG8qIGpzTWVtb3J5
ID0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBSZWZQdHI8
V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZShpbml0aWFsUGFnZUNv
dW50LCBtYXhpbXVtUGFnZUNvdW50LAorICAgICAgICBbJnZtXSAoKSB7IHZtLmhlYXAuY29sbGVj
dEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgIFsmdm1dICgpIHsgdm0u
aGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICBbJnZt
LCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3Vu
dCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2FsbGJhY2sodm0sIG9sZFBh
Z2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAgaWYgKCFtZW1vcnkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0gICAgYXV0byoganNNZW1vcnkgPSBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKm1lbW9yeS5sZWFr
UmVmKCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotCisgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWVtb3J5KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlQcm90b3R5cGUuY3BwCmluZGV4IGU5OTRkYzguLjRmY2E4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZS5jcHAKQEAgLTc3LDggKzc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQogICAgIHVpbnQz
Ml90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgYm9vbCBz
aG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSB0cnVlOwotICAgIFdhc206OlBhZ2VDb3Vu
dCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhLCBzaG91bGRUaHJvd0V4Y2Vw
dGlvbnNPbkZhaWx1cmUpOworICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdy
b3codm0sIGV4ZWMsIGRlbHRhKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdC5wYWdl
Q291bnQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRleCA5NjEwMjRkLi4xNjYx
MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtMTYxLDExICsxNjEsMTIgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1vZHVsZUV4cG9ydHMoRXhl
Y1N0YXRlKiBleGVjKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHRocm93U2NvcGUucmVs
ZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBzdHJ1Y3R1cmUp
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwg
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUo
RXhlY1N0YXRlKiBleGVjKQpAQCAtMTc1LDE2ICsxNzYsMTYgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBleGVj
KQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2Fs
bGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSIp
KTsKIH0KIAotSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1
bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJ1ZmZlciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CitKU1dlYkFzc2VtYmx5TW9kdWxlKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVh
dGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291cmNlQnVm
ZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3Jl
YXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0
cnVjdHVyZSwgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmModm0sIFdURk1vdmUoc291cmNlKSkp
OworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBz
dHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RG
TW92ZShidWZmZXIpKSk7CiB9CiAKIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IqIFdlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3IuaAppbmRleCA2MDI1Yzk4Li4xM2FjYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvci5oCkBAIC0zMCw4ICszMCwxMSBAQAogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2Vt
Ymx5TW9kdWxlUHJvdG90eXBlOwogCiBjbGFzcyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
IDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewpAQCAtNDQsNyArNDcsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVNb2R1bGUoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSBidWZmZXIsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFz
c2VtYmx5TW9kdWxlKiBjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgVmVjdG9yPHVpbnQ4X3Q+JiYg
YnVmZmVyKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJB
c3NlbWJseU1vZHVsZVByb3RvdHlwZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGNiMWZlYzEu
LjBhODY2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIG1vZHVsZSwKICAgICBVTlVTRURfUEFSQU0oc2NvcGUpOwogICAgIGF1dG8qIGdsb2Jh
bE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAotICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2RlQmxvY2soKTsKKyAgICBXYXNt
OjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5pbnN0YW5jZSgpLmNvZGVCbG9jaygp
OwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9
IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRT
eW1ib2xUYWJsZSA9IG1vZHVsZS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKQEAgLTE1Miw3ICsxNTIs
NyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAgICAgLy8gUmV0dXJuIFRvSlNW
YWx1ZSh2KS4KICAgICAgICAgICAgIHN3aXRjaCAoZ2xvYmFsLnR5cGUpIHsKICAgICAgICAgICAg
IGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVl
KGluc3RhbmNlLT5sb2FkSTMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xv
YmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgY2FzZSBXYXNtOjpJNjQ6CkBAIC0xNjAsMTEgKzE2MCwxMSBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSog
bW9kdWxlLAogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgY2FzZSBXYXNt
OjpGMzI6Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2Ut
PmxvYWRGMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgICAgIGV4cG9ydGVk
VmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRGMzJHbG9iYWwoZXhwLmtp
bmRJbmRleCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFdh
c206OkY2NDoKLSAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5j
ZS0+bG9hZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0
ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEY2NEdsb2JhbChleHAu
a2luZEluZGV4KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC0yMTcsMTIgKzIxNywxMiBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5tb2R1bGUoKTsKLSAgICBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5jb2RlQmxvY2soKTsKLSAgICBj
b25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUt
Pm1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgV2FzbTo6TW9kdWxlJiBtb2R1bGUgPSBtX2luc3Rh
bmNlLT5pbnN0YW5jZSgpLm1vZHVsZSgpOworICAgIFdhc206OkNvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKTsKKyAgICBjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUubW9kdWxlSW5mb3Jt
YXRpb24oKTsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gbV9pbnN0YW5jZS0+dGFi
bGUoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50OjpQdHI+JiBkYXRhID0gbV9p
bnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0YTsKKyAgICBjb25zdCBW
ZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9IG1vZHVsZUluZm9ybWF0aW9uLmRhdGE7
CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBtX2luc3RhbmNlLT5tZW1vcnko
KTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8SlNWYWx1ZT4gZXhjZXB0aW9uOwpAQCAtMjM5LDcgKzIz
OSw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgdWludDMy
X3QgdGFibGVJbmRleCA9IGVsZW1lbnQub2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkKLSAgICAgICAg
ICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5sb2FkSTMyR2xvYmFs
KGVsZW1lbnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQorICAgICAgICAgICAgICAgID8g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEkzMkdsb2Jh
bChlbGVtZW50Lm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkKICAgICAgICAgICAgICAgICA6
IGVsZW1lbnQub2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAgICAgICAgZm4oZWxlbWVudCwg
dGFibGVJbmRleCk7CkBAIC0yNTUsNyArMjU1LDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgIGZvciAoY29uc3Qg
V2FzbTo6U2VnbWVudDo6UHRyJiBzZWdtZW50IDogZGF0YSkgewogICAgICAgICAgICAgdWludDMy
X3Qgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkKLSAgICAgICAgICAg
ICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5sb2FkSTMyR2xvYmFsKHNl
Z21lbnQtPm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkKKyAgICAgICAgICAgICAgICA/IHN0
YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwo
c2VnbWVudC0+b2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQogICAgICAgICAgICAgICAgIDog
c2VnbWVudC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAgICAgICAgZm4obWVtb3J5LCBz
aXplSW5CeXRlcywgc2VnbWVudCwgb2Zmc2V0KTsKQEAgLTI5Myw3ICsyOTMsNyBAQCBKU1ZhbHVl
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgICAgICAvLyBmb3IgdGhlIGltcG9ydC4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAgICAgICAgICAgIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tpXTsKLSAgICAgICAgICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICBXYXNt
OjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS5zaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBpZiAoZnVu
Y3Rpb25JbmRleCA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CiAgICAgICAg
ICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9p
bnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAgICAgICAg
IGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90
eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90
eXBlLmNwcAppbmRleCBlOWE2MzRhLi4xZmI5NDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJKU1RvV2Fz
bS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgpAQCAt
NDAsNiArNDEsNyBAQAogI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVk
ZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCisjaW5jbHVkZSAi
V2FzbVRvSlMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmgiCkBAIC05NCw3ICs5Niw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJlamVjdChleGVjLCBzY29w
ZSwgcHJvbWlzZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVB
c3luYyh2bSwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6
Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0XSAoVk0mIHZtLCBXYXNtOjpNb2R1
bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBXYXNtOjpN
b2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIGNy
ZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtwcm9taXNlLCBnbG9i
YWxPYmplY3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJlc3VsdCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVX
b3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3Zl
KHJlc3VsdCksICZ2bV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMTM1LDcgKzEzNyw3IEBAIHN0YXRp
YyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZl
cnJlZCogcHJvbWlzZSwgSlNXCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOwogICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlhbGx5IHJlY29tcGlsaW5n
IGEgbW9kdWxlLiBXZSBmaXJzdCBnYXRoZXIgYWxsIHRoZSBpbXBvcnQvbWVtb3J5IGluZm9ybWF0
aW9uIHByaW9yIHRvIGNvbXBpbGluZyBjb2RlLgotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxl
LCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJ
bnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNl
ID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0
T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VT
dHJ1Y3R1cmUoKSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2FzbTo6TW9kdWxlPihtb2R1
bGUtPm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlamVjdChl
eGVjLCBzY29wZSwgcHJvbWlzZSkpOwogCiAgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBl
bmRlbmNpZXM7CkBAIC0xNDMsMTMgKzE0NSwxMyBAQCBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZShW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVwog
ICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGluc3RhbmNlKSk7CiAg
ICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2UsIFdU
Rk1vdmUoZGVwZW5kZW5jaWVzKSk7CiAgICAgLy8gTm90ZTogVGhpcyBjb21wbGV0aW9uIHRhc2sg
bWF5IG9yIG1heSBub3QgZ2V0IGNhbGxlZCBpbW1lZGlhdGVseS4KLSAgICBtb2R1bGUtPm1vZHVs
ZSgpLmNvbXBpbGVBc3luYyh2bSwgaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgY3JlYXRlU2hhcmVk
VGFzazxXYXNtOjpDb2RlQmxvY2s6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGluc3RhbmNlLCBt
b2R1bGUsIHJlc29sdmVLaW5kXSAoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHJlZkNv
ZGVCbG9jaykgbXV0YWJsZSB7CisgICAgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlQXN5bmMoJnZt
Lndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBjcmVhdGVTaGFyZWRUYXNrPFdh
c206OkNvZGVCbG9jazo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwg
cmVzb2x2ZUtpbmQsICZ2bV0gKFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgcmVmQ29kZUJsb2NrKSBt
dXRhYmxlIHsKICAgICAgICAgUmVmUHRyPFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2NrID0gV1RG
TW92ZShyZWZDb2RlQmxvY2spOwogICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2No
ZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2
ZUtpbmQsICZ2bSwgY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxvY2spXSAoKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOwogICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5z
dGFuY2UsIG1vZHVsZSwgY29kZUJsb2NrLnJlbGVhc2VOb25OdWxsKCksIHJlc29sdmVLaW5kKTsK
ICAgICAgICAgfSk7Ci0gICAgfSkpOworICAgIH0pLCAmV2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFw
cGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pOwogfQogCiBzdGF0aWMgdm9pZCBjb21waWxl
QW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmplY3QqIGltcG9ydE9iamVjdCkKQEAgLTE2
NSw3ICsxNjcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcgogICAgIFZlY3Rvcjx1aW50OF90
PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGJ1ZmZlcik7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9t
aXNlKSk7CiAKLSAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmModm0sIFdURk1vdmUoc291
cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21p
c2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0XSAoVk0mIHZtLCBXYXNtOjpNb2R1bGU6OlZh
bGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgIFdhc206Ok1vZHVsZTo6dmFs
aWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVk
VGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1
bHQpIG11dGFibGUgewogICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVX
b3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHJl
c3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMjEzLDcgKzIxNSw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVG
dW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3QgYnl0ZVNpemU7CiAgICAgdWludDhfdCog
YmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGJ5
dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9mZnNldCwg
Ynl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKKyAg
ICBCQlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNp
emUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKICAgICAvLyBG
SVhNRTogV2UgbWlnaHQgd2FudCB0byB0aHJvdyBhbiBPT00gZXhjZXB0aW9uIGhlcmUgaWYgd2Ug
ZGV0ZWN0IHRoYXQgc29tZXRoaW5nIHdpbGwgT09NLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25z
dHJ1Y3Rvci5jcHAKaW5kZXggMTE4NjVmNS4uMmM1YmM3MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0
b3IuY3BwCkBAIC05MCw4ICs5MCwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICB9CiAgICAgfQogCisgICAgUmVmUHRyPFdhc206OlRhYmxlPiB3YXNtVGFibGUgPSBXYXNtOjpU
YWJsZTo6Y3JlYXRlKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmICghd2FzbVRhYmxlKSB7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJj
b3VsZG4ndCBjcmVhdGUgVGFibGUiKSkpKTsKKyAgICB9CisKICAgICB0aHJvd1Njb3BlLnJlbGVh
c2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFi
bGVTdHJ1Y3R1cmUoKSwgaW5pdGlhbCwgbWF4aW11bSkpOworCisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5y
ZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwCmluZGV4IDAyMWM2MTguLjY4ZTk1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAKQEAgLTYzLDcgKzYzLDcgQEAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE8KICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHModm0sIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uOjppbmZvKCkpLCAiV2Ugc2hvdWxkIG5ldmVyIGRvdWJsZSB3cmFwIGEgd3JhcHBlciBm
dW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9ICIiOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxw
dHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVh
cCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgeyBzaWduYXR1cmVJ
bmRleCwgaW5zdGFuY2UtPmNvZGVCbG9jaygpLT53YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KGlt
cG9ydEluZGV4KSB9KTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZt
LmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIFdhc206OkNh
bGxhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgaW5zdGFuY2UtPndhc21Db2RlQmxvY2so
KS53YXNtVG9KU0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSB9ICk7CiAgICAgY29uc3Qg
V2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVj
dXRhYmxlLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFu
Y2UpOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjViMGI5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaApAQCAtMCwwICsxLDIgQEAKKyNwcmFnbWEgb25j
ZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dhc21Nb2R1bGUuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDk3
NWM5YzkuLjc4NDAzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgPHJ1
bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlz
Lmg+CiAjaW5jbHVkZSA8d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg+CisjaW5jbHVkZSA8
d2FzbS9XYXNtTW9kdWxlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0tIAoyLjkuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321837</attachid>
            <date>2017-09-26 10:29:11 -0700</date>
            <delta_ts>2017-09-26 10:42:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>430622</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA5ODBjMzNkMTc1ODhjNDRiNTZkYmZiNjIxMDJjMTU1NzM1ODViMjk0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NDcgKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgICAgICAgICB8ICAyMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaCAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaCAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCAgICAgICAgICAgfCAxMjYgKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAgICAgICAgfCAgNzYgKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCAgICAgICAgICB8ICA1OSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oICAgICAgICAgICAgfCAg
IDUgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCAgICAgICAg
fCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oICAgICAg
ICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAg
ICAgICAgICB8IDIyNyArKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oICAgICAgICAgICB8ICA0OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgfCAgIDAKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4g
anN9L0pTV2ViQXNzZW1ibHkuaCAgIHwgIDUwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAgICAgICAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTE4ICsrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDg1ICsrLQogLi4uL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgfCAgNzYgKystCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggICB8ICAxMyAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAg
MzIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAg
fCAgMjUgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAgIHwgIDc1ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmggfCAgNDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCAgICAgICAgIHwgNjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8
ICAxOSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAg
ICAgfCAgIDUgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAg
ICAgICAgIHwgIDIyICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgICB8ICAxNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVj
dG9yLmNwcCAgICAgICAgfCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAgICAgICAgIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93YXNtL1dhc21Nb2R1bGUuaCB8ICAgMiArCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8ICAgMSArCiAxMTEgZmlsZXMgY2hhbmdlZCwgMzA4
MCBpbnNlcnRpb25zKCspLCAxNzQ2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeU1vZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAwJSkKIHJlbmFtZSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggKDYyJSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd2Fz
bS9XYXNtTW9kdWxlLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDgyZWYxNmQuLjZiNjc2N2UgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDkt
MjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRXhjZWVkaW5nIG1h
eCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyCisgICAg
ICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdlOiBpdCB1c2Vk
IHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIHRl
c3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qczoKKyAgICAgICAgKGFz
c2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAgKGFzc2Vy
dC50aHJvd3MpOgorCiAyMDE3LTA5LTIzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBpbmZpbml0ZSBsb29waW5nIHRlc3QyNjIgdGVzdApkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uN2ZlNmIxMyAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0IGJ1ZmZlciBv
ZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQqMTAyNCk7
CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5jZSBpdCBmYWls
cy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVycm9yLCAiT3V0
IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCks
IFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNlZWQgdGhlIG1l
bW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOyAKICAgICBhc3NlcnRFcShidWZmZXIuYnl0
ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnkuYnVmZmVyLCBidWZmZXIp
OwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pTVGVzdHMv
d2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0ZCAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rh
YmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQo
dGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBp
bml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRz
IG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0cyBoYXMg
YSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4g
aXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAy
KiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUncyBpbml0aWFs
IHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQgLyAyNzogVGFi
bGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBtYXhpbXVt
IDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAy
MTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAg
XTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDlkNzc4ZjEuLmJmOWMyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ1MCBAQAorMjAxNy0wOS0yNSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBh
cHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBl
dmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZW50YWlscyBjbGVhbmluZyB1cCBhbmQgc3BsaXR0
aW5nIGEgYnVuY2ggb2YgY29kZSB3aGljaCB3ZSBoYWQKKyAgICAgICAgaW50ZXJ0d2luZWQgYmV0
d2VlbiBDKysgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgSlMgb2JqZWN0cywgYW5kIHB1cmUgQysr
CisgICAgICAgIGltcGxlbWVudGF0aW9uIG9iamVjdHMuIFRoaXMgc3BlY2lmaWMgY2hhbmdlIGdv
ZXMgbW9zdCBvZiB0aGUgd2F5IHRvd2FyZHMKKyAgICAgICAgYWxsb3dpbmcgSlNDJ3MgV2ViQXNz
ZW1ibHkgdG8gd29yayB3aXRob3V0IFZNIC8gSlMsIHVwIHRvIGJ1dCBleGNsdWRpbmcKKyAgICAg
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlICh0aGVyZSdzIFdhc206Okluc3RhbmNlLCBidXQgaXQn
cyBub3QgKnRoZSogdGhpbmcKKyAgICAgICAgeWV0KS4gQmVjYXVzZSBvZiB0aGlzIHdlIHN0aWxs
IGhhdmUgYSBmZXcgRklYTUUgaWRlbnRpZnlpbmcgcGxhY2VzIHRoYXQgbmVlZCB0bworICAgICAg
ICBjaGFuZ2UuIEEgZm9sbG93LXVwIGNoYW5nZSB3aWxsIGdvIHRoZSByZXN0IG9mIHRoZSB3YXku
CisKKyAgICAgICAgSSB3ZW50IGFib3V0IHRoaXMgY2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkg
cG9zc2libGU6IGdyZXAgdGhlCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3dhc20gZGlyZWN0b3J5
IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNsdWRlIHRoZSAvanMvCisgICAg
ICAgIHN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1lbnRhdGlvbiBv
ZiBXZWJBc3NlbWJseSkuCisKKyAgICAgICAgTm9uZSBvZiB0aGlzIGNoYW5nZSByZW1vdmVzIHRo
ZSBuZWVkIGZvciBhIEpJVCBlbnRpdGxlbWVudCB0byBiZSBhYmxlIHRvIHVzZQorICAgICAgICBX
ZWJBc3NlbWJseS4gV2UgZG9uJ3QgaGF2ZSBhbiBpbnRlcnByZXRlciwgdGhlIHByb2Nlc3MgdGhl
cmVmb3JlIHN0aWxsIG5lZWRzIHRvCisgICAgICAgIGJlIGFsbG93ZWQgdG8gSklUIHRvIHVzZSB0
aGVzZSBwdXJlLUMrKyBBUElzLgorCisgICAgICAgIEludGVyZXN0aW5nIHRoaW5ncyB0byBub3Rl
OgorCisgICAgICAgICAgLSBSZW1vdmUgVk0gZnJvbSBQbGFuIGFuZCBhc3NvY2lhdGVkIHBsYWNl
cy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KKyAgICAgICAgICAgIHRoZSBjYWxs
YmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCisgICAgICAgICAgLSBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCisg
ICAgICAgICAgICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNv
bnN0cnVjdGlvbiB0aW1lIGZvciB0aGlzCisgICAgICAgICAgICBwdXJwb3NlOiBvbmUgdG8gbm90
aWZ5IG9mIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCisgICAgICAg
ICAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIg
Y3JlYXRlcyB0aGUgbWVtb3J5IHRvCisgICAgICAgICAgICBkaWN0YXRlIGhvdyB0byByZWFjdCB0
byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1iZWRkaW5nIHRoYXQncyB0bworICAg
ICAgICAgICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3RpdmVseSkuCisgICAg
ICAgICAgLSBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdhc206
Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCisgICAgICAgICAgICB0aGVyZSwgd2l0aCBhbiBl
bnVtIGNsYXNzIGZvciBmYWlsdXJlIHR5cGVzLgorICAgICAgICAgIC0gRXhjZWVkaW5nIG1heCBv
biBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRo
aXMKKyAgICAgICAgICAgIGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNl
ZCB0byB0aHJvdyBPT00gZXJyb3IuIFVwZGF0ZSB0aGUKKyAgICAgICAgICAgIGNvcnJlc3BvbmRp
bmcgdGVzdC4KKyAgICAgICAgICAtIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3Jvd19tZW1vcnkgb3Bj
b2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCisgICAgICAgICAgICByZWFjaCBk
aXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgorICAgICAgICAgIC0gSlNXZWJB
c3NlbWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNh
dXNlIGl0J3Mgb25seQorICAgICAgICAgICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20g
Z3Jvd19tZW1vcnkgYXMgYmVmb3JlKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9yeSBub3cgdGFr
ZXMgYSBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCisgICAg
ICAgICAgICB3cmFwcGVycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2Nl
ZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CisgICAgICAgICAgICBrbm93bmluZyBhbnl0aGluZyBh
Ym91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxpc3Qgb2YgY2FsbGJhY2tzCisg
ICAgICAgICAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xsIHdhbnQgdG8g
bm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAorICAgICAgICAgICAgdW5kZXIgYSBsb2NrKS4KKyAg
ICAgICAgICAtIFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9m
IHRydXRoIGFib3V0IGFkZHJlc3MgLyBzaXplLAorICAgICAgICAgICAgdXNlZCBkaXJlY3RseSBi
eSBnZW5lcmF0ZWQgY29kZSBpbnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCisgICAgICAg
ICAgLSBNb3ZlIHdhc21Ub0pTIGZyb20gdGhlIGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRv
IGl0cyBvd24gaGVhZGVyIHVuZGVyCisgICAgICAgICAgICB3YXNtL2pzLiBJdCdzIG9ubHkgdXNl
ZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwLCBhbmQgdXNlcyBWTSwKKyAg
ICAgICAgICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3NlbWJseS4KKyAgICAg
ICAgICAtIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVjdCBo
b2xkaW5nIGEKKyAgICAgICAgICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3Rl
YWQgb2YgYW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcworICAgICAgICAgICAgZG9lc24n
dCBhZGQgYW55dGhpbmcgdG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0
dWFsbHkgZ2V0cworICAgICAgICAgICAgcGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBU
TFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAgICAgIHBvdGVu
dGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVudGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hh
bmdlIGlzIHRvCisgICAgICAgICAgICBhbGxvdyBwYXNzaW5nIFdhc206OkNvbnRleHQgYXJvdW5k
IHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZNCisgICAgICAgICAgICBj
b250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3RpdmVseSB0
aGUgc2FtZSwgYnV0IHdpdGgKKyAgICAgICAgICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRk
aW5nIGlzIG11Y2ggYmV0dGVyIG9mZi4KKyAgICAgICAgICAtIE1vdmUgSlNXZWJBc3NlbWJseSBp
bnRvIHRoZSBKUyBmb2xkZXIuCisgICAgICAgICAgLSBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJs
b2NrIGRpcmVjdGx5IGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KKyAgICAgICAg
ICAtIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24gV2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyBy
YXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKKyAgICAgICAgICAgIGJlaW5nIG9uIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5FbWJlZGRlcgorICAgICAgICAg
ICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jaywgYW5kIGlzIHN0aWxsCisgICAgICAgICAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCisg
ICAgICAgICAgICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRv
IGNhbGwgYmFjayBpbnRvIHRoZQorICAgICAgICAgICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRk
aW5nIGFueSBpbmRpcmVjdGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQorICAgICAg
ICAgICAgdGhlIEIzIElSIGdlbmVyYXRvciBub3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2Nr
IGluc3RlYWQgb2YKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suCisgICAgICAg
ICAgLSBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24gY29tcGxldGlvbiBp
cyBub3cgbWFya2VkIGJ5IGl0cyBvd24KKyAgICAgICAgICAgIGF0b21pYzxib29sPiBmbGFnIGlu
c3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBhbmQK
KyAgICAgICAgICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVj
YXVzZSBiZWZvcmUgbXkgY2hhbmdlcworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayBkaWQgaXRzIG93biBjb21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQorICAgICAg
ICAgICAgV2FzbTo6Q29kZUJsb2NrLCB3aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0
IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRo
ZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2VyLCB0aGUgbG9jayB3YXMgYmVpbmcKKyAg
ICAgICAgICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2VydGlvbi4KKyAgICAgICAg
ICAtIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhyb3VnaCBh
IGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKKyAgICAgICAgICAgIGluIGF0IGNvbXBpbGF0aW9uIHRp
bWUsIGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4K
KyAgICAgICAgICAtIFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQg
aGFuZGxpbmcgdGh1bmtzLiBPbmx5IHRoZSBJUgorICAgICAgICAgICAgZ2VuZXJhdG9yIHNob3Vs
ZCBrbm93LCBhbmQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcK
KyAgICAgICAgICAgIHRodW5rIGlzIGdlbmVyYXRlZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQg
KG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5vdAorICAgICAgICAgICAgYWxsIG9mIHRoZW0g
Z2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KKyAgICAgICAgICAtIE1ha2UgZXhjZXB0aW9u
IHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNvZGVkCisgICAg
ICAgICAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKKyAgICAgICAgICAgIGNvZGUgd2hlbiBhIFdlYkFz
c2VtYmx5IGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBn
ZXQKKyAgICAgICAgICAgIGNhbGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNh
biBvbmx5IGhhdmUgYSBzaW5nbGUgb2YgdGhlc2UKKyAgICAgICAgICAgIGZ1bmN0aW9ucyAoaS5l
LiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJvY2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVy
IGlzIGEKKyAgICAgICAgICAgIHNpbmdsZXRvbi4gVGhhdCBjYW4gYmUgZml4ZWQgaW4gaW4gIzE3
NzQ3NS4KKyAgICAgICAgICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVyZSBhbGwgZW1iZWRk
ZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgorICAgICAgICAgIC0gU3BsaXQgdXAgSlNXZWJBc3NlbWJs
eVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKKyAgICAgICAgICAgIHJlZmNvdW50ZWQu
IEpTV2ViQXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGlu
IHRoZQorICAgICAgICAgICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBi
eSB0aGUgSklUIGNvZGUgdG8gbG9va3VwIHdoZXJlIHRvCisgICAgICAgICAgICBjYWxsIGFuZCBk
byB0aGUgaW5zdGFuY2UgY2hlY2sgKGZvciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlz
IGNyZWF0ZXMKKyAgICAgICAgICAgIGFuIGV4dHJhIGFsbG9jYXRpb24gZm9yIGFsbCB0aGUgaW5z
dGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhjaGFuZ2UKKyAgICAgICAgICAgIHJlbW92
ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUgaW5zdGFuY2UgdXNlZCB0
byBiZSBvYnRhaW5lZAorICAgICAgICAgICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4gQWxzbyBu
b3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKKyAgICAgICAgICAgIGlu
c3RhbmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRl
ciB0byB0aGUKKyAgICAgICAgICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ug
d291bGQgY2F1c2UgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICAgICAgICAtIEFkZCBXYXNtSW5zdGFu
Y2UuIEl0IGRvZXNuJ3QgZG8gbXVjaCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCisgICAgICAgICAg
LSBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBkb2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1w
b3J0ZWQgZnVuY3Rpb25zIGFzCisgICAgICAgICAgICBKU09iamVjdHMsIGl0IGFsc28gaGFzIHRo
ZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3YXNtCisgICAgICAgICAgICBl
bnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIgaW5zdGFuY2Un
cyBpbXBvcnRlZAorICAgICAgICAgICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAorICAgICAgICAgICAg
Y3JlYXRlcyBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBk
aXNhc3NvY2lhdGUKKyAgICAgICAgICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVt
YmVkZGVyLW5ldXRyYWwgdGhpbmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKKyAgICAgICAgICAgIHdp
biBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBnZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZklt
cG9ydEZ1bmN0aW9uIGZvcgorICAgICAgICAgICAgdGhlIGNhbGwgb3Bjb2RlICh3aGVuIHRoZSBj
YWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgICAg
ICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhpcyBpc24ndCBrbm93
biBhdCBjb21waWxlLXRpbWUKKyAgICAgICAgICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQgb24g
dGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgorICAgICAg
ICAgICAgdGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3Rh
bmNlIChvbmx5IHdhc20tPndhc20KKyAgICAgICAgICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2Ug
aXMgd2FzbUJpbmRpbmcgd2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCisgICAg
ICAgICAgICBmaWd1cmUgb3V0IHRoZSB3YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRo
ZW4gZ2V0cworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwKKyAgICAgICAgICAgIGNhbGwuIFRoZSBk
aXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5zdGFuY2UgY2FuIGJlCisg
ICAgICAgICAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBDb250ZXh0
IGlzLCBhbmQKKyAgICAgICAgICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVh
ZHkgZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKKyAgICAgICAgICAgIGNh
biBtb3ZlIHRoaXMgdGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRv
IFdhc206Okluc3RhbmNlLAorICAgICAgICAgICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGlu
IGFzIGFuIG9wYXF1ZSBwb2ludGVyIHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAorICAgICAg
ICAgICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdyaXRlQmFycmllcjxKU09iamVjdD4uCisgICAg
ICAgICAgLSBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJhbWUsIGFuZCBpbiBtYW55IHBs
YWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAorICAgICAgICAgICAgYXJvdW5kIGluc3RlYWQgb2Yg
Vk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1lcyB3aGljaAor
ICAgICAgICAgICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYworICAgICAgICAgICAgbG9jYXRpb24uIFRoYXQg
Y2hhbmdlIHdvbid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwg
YnV0CisgICAgICAgICAgICB3aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hp
bmVyeSBpbiBhIGdlbmVyaWMgbWFubmVyIHdpdGhvdXQKKyAgICAgICAgICAgIGhhdmluZyBhIFZN
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxp
Y2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW53aW5k
RXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0pOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogZGZnL0RGR09TUkVu
dHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxl
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2Fs
bGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0
YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWNT
dGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUgY29uc3QpOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAgICAoSlNDOjpOYXRpdmVDYWxsRnJhbWVU
cmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxG
cmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSk6
CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjp+TmF0aXZl
Q2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IpOgorICAgICAgICAoSlNDOjpTdGFj
a1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJl
YWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVySXNFbnRyeUZyYW1lIGNvbnN0KToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmg6CisgICAgICAgIChKU0M6OlZN
RW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVJl
Y29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAoSlNDOjpFbnRyeUZyYW1l
Ojp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRl
ck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlND
Ojp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAg
ICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9P
cHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6Cisg
ICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OkZyYW1lV2Fsa2VyKToKKyAg
ICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VUb1BhcmVudEZyYW1lKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6Cisg
ICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dTY29w
ZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZN
Lmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KToKKyAgICAgICAgKiBy
dW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjppc1NhbmVGcmFtZSk6CisgICAgICAg
IChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAgICAgICAoSlND
OjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2spOgorICAgICAgICAqIHdhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2FzbUJC
UVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6
Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmg6
CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRp
bmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNt
L1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpD
b2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29t
cGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpzZXRDb21waWxhdGlv
bkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFN0dWJzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNv
ZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yik6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCk6CisgICAgICAg
IChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0LmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUyk6CisgICAgICAgIChK
U0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250
ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAgICAgICAqIHdh
c20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIu
aC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtSW5z
dGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om1lbW9yeSk6
CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0YWJsZSk6CisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkU3RhY2tMaW1p
dCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRDYWNoZWRTdGFja0xp
bWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3Rlcklu
Zm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6CisgICAgICAgIChK
U0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9TYXZlIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlVmFsaWRhdGlvbkNh
bGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y29tcGls
ZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBh
cnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50
Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnJ1bkNv
bXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmFkZENvbXBsZXRpb25U
YXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNl
bElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgICogd2FzbS9XYXNtVGFi
bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJs
ZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChK
U0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFi
bGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpvZmZz
ZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAqIHdhc20vV2FzbVRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c2V0VGhyb3dXYXNtRXhjZXB0
aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtzOjp0aHJvd1dhc21FeGNlcHRpb24pOgor
ICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRl
eHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0Lmg6CisgICAgICAgICogd2FzbS9qcy9K
U1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDogQ29waWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaC4KKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Lmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmguCisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbnN0YW5jZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0NhbGxlZSk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVybmFsTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21UYWJsZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscyk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNhY2hlZFN0YWNrTGltaXQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldENhY2hlZFN0YWNrTGltaXQp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21NZW1vcnkpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21Nb2R1bGUpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUgY29uc3QpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9y
eSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKToKKyAgICAgICAg
KiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAuCisg
ICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KU0V4Y2VwdGlv
bik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJseUZ1bmN0aW9u
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5TWVt
b3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVs
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1v
ZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmg6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21waWxlRnVu
Yyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGlsZUFu
ZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMpOgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTctMDktMjUgIERldmluIFJvdXNzbyAg
PHdlYmtpdEBkZXZpbnJvdXNzby5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBD
b25zb2xlLmFkZEluc3BlY3RlZE5vZGUgdG8gRE9NLnNldEluc3BlY3RlZE5vZGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTc2MmY2OC4uOWVlNTdlZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEwODIsNyArMTA4Miw3IEBACiAJCTc5QzRCMTVFMUJBMjE1OEYw
MEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThG
MDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMz
M0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQ
Q1Jhbmdlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUQ1Q0Q1OTFDMTEwNkE5
MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNt
RXhjZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87
IH07CisJCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlEQUUyNzkxRTAz
QzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAzIC8q
IEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZFMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xNDYwLDcgKzE0NjAsNiBAQAogCQlBRDJGQ0MyMDFEQjU5Q0Iy
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMTQxREI1OUM1OTAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKIAkJQUQyRkND
MjExREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MxNTFEQjU5
QzU5MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAqLzsgfTsKIAkJ
QUQyRkNDMkQxREI4MzhGRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MyNzFEQjgzOEM0
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLzsgfTsKLQkJQUQyRkNDMzExREI4
M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5LmggKi87IH07CiAJCUFENDEyQjM0MUU3QjJFOUUwMDhBRjE1NyAvKiBXYXNtQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0MTJC
MzIxRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ0MjUyNTExRTVEMEUxNDAwOUQyQTk3IC8q
IEZ1bGxDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDQyNTI1MDFFNUQwREVCMDA5RDJBOTcgLyogRnVsbENvZGVPcmlnaW4uaCAqLzsg
fTsKIAkJQUQ0OTM3QzQxRERCRTYxNDAwNzdDODA3IC8qIEFic3RyYWN0TW9kdWxlUmVjb3JkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDMjFE
REJFNjBBMDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ2OCw2ICsxNDY3LDEzIEBACiAJ
CUFENDkzN0Q0MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDQTFEREQyNzM0
MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovOyB9OwogCQlBRDRCMURGQTFERjI0
NEUyMDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGlu
Zy5oICovOyB9OwogCQlBRDVCNDE2RjFFQkFGQjc3MDA4RUZBNDMgLyogV2FzbU5hbWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUI0MTZFMUVCQUZC
NjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUFENUMzNkREMUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUMz
NkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYg
LyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RTYxRjY5
RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMz
NkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9X
YXNtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUYzMUY2MjQ4MkUwMDEzMTND
MiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdhc21Ub0pTLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREQwOUFFRTFGNUY2
MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFRjFGN0EyNjNBMDAwQkNBQUYgLyogV2FzbU1lbW9y
eU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
NUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENzQzOEMwMUUwNDU3QTQwMEZE
MEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEODZB
OTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDg2QTkzRDFBQTREODdDMDAyRkU3N0Yg
LyogV2Vha0dDTWFwSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOEZG
Mzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDE1Niw5ICs0MTYyLDI1IEBACiAJ
CUFEMkZDQzE1MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0MyNjFEQjgz
OEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
RDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgcGF0aCA9
IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViQXNzZW1ibHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAv
KiBXYXNtRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Gb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0NzFGNEJB
Nzg2MDA2Njk5MTIgLyogV0FCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0QTFGNERFNjhDMDA2Njk5MTIgLyogV0FJbnN0
YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQUluc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFEM0YxRTRCMUY0REU2OEMwMDY2OTkxMiAvKiBXQVRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdBVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNEMx
RjRERTY4QzAwNjY5OTEyIC8qIFdBTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBTWVtb3J5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUyMUY0RjRBRTUwMDY2OTkxMiAv
KiBXQU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1lbW9yeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUzMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1vZHVs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUFEM0YxRTU0MUY0RjRBRTUwMDY2OTkxMiAvKiBXQUluc3RhbmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdBSW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXQVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNjQxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
RXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY1MUY1MEU1
N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUV4Y2Vw
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY4MUY1NDdDQjYw
MDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FN
ZW1vcnlEZXNjcmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQU1lbW9yeURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNkExRjU0N0NCNjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdBSW1wb3J0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZC
MUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
QVRhYmxlRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2
QzFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0FJbXBvcnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNG
MUU2RDFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0FUYWJsZURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDNGMUU3MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXQUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTcx
MUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
RnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQxMkIzMTFFN0Iy
RThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUQ0MTJCMzUxRTdCNTdDMDAwOEFGMTU3IC8qIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZUlmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MTczLDE1ICs0MTk1LDI4IEBACiAJCUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNt
QmluZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENEIxREY4MURGMjQ0RDcw
MDcxQUUzMiAvKiBXYXNtQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDVCNDE2RTFF
QkFGQjY1MDA4RUZBNDMgLyogV2FzbU5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbU5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REMx
RjY4OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtRW1i
ZWRkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REUxRjY5OUVCNjAw
MEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSW5zdGFu
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZERjFGNjk5RUI2MDAw
QkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21JbnN0YW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWJsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFi
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbU1lbW9yeU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU2lnbmF0dXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNpZ25hdHVy
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDg2QTkzRDFBQTREODdDMDAyRkU3
N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWFrR0NNYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOERE
NkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1RvV2Fz
bS5oOyBwYXRoID0ganMvSlNUb1dhc20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUQ4REQ2RDAxRjY3MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEpTVG9XYXNtLmNwcDsgcGF0aCA9IGpzL0pTVG9XYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5kZXhPck5hbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtSW5kZXhPck5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDlF
ODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEQjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QYWdlQ291bnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMjFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRvSlNDYWxs
ZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMzFERjhFQTAwMDA1
QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlU
b0pTQ2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUVFMUY1RjYy
M0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXYXNtVG9KUy5oOyBwYXRo
ID0ganMvV2FzbVRvSlMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRUYx
RjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdhc21U
b0pTLmNwcDsgcGF0aCA9IGpzL1dhc21Ub0pTLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRjMxRjYyNDgyRTAwMTMx
M0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBw
YXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQxOTEsNiArNDIyNiw4IEBACiAJCUFERTgwMjk2MUUwOEYxQzkwMDU4
REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7
IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJs
eUxpbmtFcnJvclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOUQx
RTA4RjIyNjAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JD
b25zdHJ1Y3Rvci5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQURGQzMwRjcxRjQ3QTdCODAwNjQ1
MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFzc2VtYmx5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY5MUY0N0E4QzAwMDY0NTFEMyAvKiBXQU1v
ZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0
aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OUY4OTM4MTg5MUFE
QjUwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyog
VG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0g
VG9vbEV4ZWN1dGFibGUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NjQ1LDYgKzU2ODIsMjYgQEAKIAkJCQk4NkYzRUVCNjE2ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1
bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVl
SlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5oICovLAorCQkJCUFEM0YxRTQ3MUY0QkE3ODYwMDY2OTkxMiAvKiBXQUJhc2UuaCAq
LywKKwkJCQlBRDNGMUU2NTFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uY3BwICovLAor
CQkJCUFEM0YxRTY0MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5oICovLAorCQkJCUFE
M0YxRTcxMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLywKKwkJCQlBRDNGMUU3
MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovLAorCQkJCUFEM0YxRTZDMUY1NDdD
QjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5jcHAgKi8sCisJCQkJQUQzRjFFNkExRjU0N0NC
NjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8sCisJCQkJQUQzRjFFNTQxRjRGNEFFNTAw
NjY5OTEyIC8qIFdBSW5zdGFuY2UuY3BwICovLAorCQkJCUFEM0YxRTRBMUY0REU2OEMwMDY2OTkx
MiAvKiBXQUluc3RhbmNlLmggKi8sCisJCQkJQUQzRjFFNTIxRjRGNEFFNTAwNjY5OTEyIC8qIFdB
TWVtb3J5LmNwcCAqLywKKwkJCQlBRDNGMUU0QzFGNERFNjhDMDA2Njk5MTIgLyogV0FNZW1vcnku
aCAqLywKKwkJCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9y
LmNwcCAqLywKKwkJCQlBRDNGMUU2OTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlw
dG9yLmggKi8sCisJCQkJQUQzRjFFNTMxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTW9kdWxlLmNwcCAq
LywKKwkJCQlBREZDMzBGOTFGNDdBOEMwMDA2NDUxRDMgLyogV0FNb2R1bGUuaCAqLywKKwkJCQlB
RDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8sCisJCQkJQUQzRjFFNEIx
RjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUuaCAqLywKKwkJCQlBRDNGMUU2RDFGNTQ3Q0I4MDA2
Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovLAorCQkJCUFEM0YxRTZCMUY1NDdDQjgw
MDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovLAorCQkJCUFERkMzMEY3MUY0N0E3Qjgw
MDY0NTFEMyAvKiBXZWJBc3NlbWJseS5oICovLAogCQkJCTVERTNEMEY0MEREOERERkIwMDQ2ODcx
NCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQVBJOwpAQCAt
NTk3OSw4ICs2MDM2LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAotCQkJCUFEMkZDQzJFMURCODM5
RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLywKLQkJCQlBRDJGQ0MyRjFEQjgzOUY3
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5
QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBFOTIxRDVBNEFCMzAw
OTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJNTNDQTczMDcxRUE1MzNEODAw
NzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAqLywKQEAgLTU5OTYsNiArNjA1MSw3IEBACiAJCQkJ
NTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCAqLywKIAkJCQlBRDQx
MkIzMTFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovLAogCQkJCUFENDEyQjMy
MUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICovLAorCQkJCUFENUMzNkRDMUY2ODhC
NUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLywKIAkJCQk3OURBRTI3OTFFMDNDODIyMDBC
NTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLywKIAkJCQk1MzgxQjkzNjFFNjBFOTY2MDA5
MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCiAJCQkJNTM4MUI5MzgxRTYw
RTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLywKQEAgLTYwMDQsNiAr
NjA2MCw4IEBACiAJCQkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBh
cnNlci5oICovLAogCQkJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuY3BwICovLAogCQkJCUFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCAqLywKKwkJCQlBRDVDMzZERTFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNw
cCAqLywKKwkJCQlBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8s
CiAJCQkJQUQwMDY1OUQxRUNBQzdGRTAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCAqLywKIAkJCQk1
M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLywKIAkJ
CQk1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8sCkBA
IC02MDExLDYgKzYwNjksOCBAQAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNt
TWVtb3J5LmggKi8sCiAJCQkJNzlCNzU5NzExREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAgKi8sCiAJCQkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oICovLAorCQkJCUFENUMzNkYwMUY3QTI2QkYwMDBCQ0FBRiAvKiBX
YXNtTWVtb3J5TW9kZS5jcHAgKi8sCisJCQkJQUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdh
c21NZW1vcnlNb2RlLmggKi8sCiAJCQkJNzkwMDgxMzYxRTk1QThFQzAwNTJEN0NEIC8qIFdhc21N
b2R1bGUuY3BwICovLAogCQkJCTc5MDA4MTM3MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxl
LmggKi8sCiAJCQkJNTNFNzc3RTExRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAgKi8sCkBAIC02MDMyLDYgKzYwOTIsOCBAQAogCQkJCTUzRjQwRTg0MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBD
MkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJB
IC8qIFdhc21TaWduYXR1cmUuaCAqLywKKwkJCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLywKKwkJCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3Bw
ICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggKi8sCiAJ
CQkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICovLApAQCAt
NzYzMiw2ICs3Njk0LDEwIEBACiAJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQUQ4REQ2RDAxRjY3
MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLywKKwkJCQlBRDhERDZDRjFGNjcwODlGMDAw
NEVCNTIgLyogSlNUb1dhc20uaCAqLywKKwkJCQlBREQwOUFGMjFGNjI0ODI5MDAxMzEzQzIgLyog
SlNXZWJBc3NlbWJseS5jcHAgKi8sCisJCQkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpT
V2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJCQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8q
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RG
RUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcCAqLywKQEAgLTc2NTEsNiAr
NzcxNyw4IEBACiAJCQkJQUQyRkNCQUQxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBRTFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseVRhYmxlLmNwcCAqLywKIAkJCQlBRDJGQ0JBRjFEQjU4REE0MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseVRhYmxlLmggKi8sCisJCQkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdh
c21Ub0pTLmNwcCAqLywKKwkJCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMu
aCAqLywKIAkJCQlBRDJGQ0JCMDFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQUQyRkNCQjExREI1OERBNDAwQjNFNzM2IC8q
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCMjFE
QjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3BwICov
LApAQCAtNzkyNiw2ICs3OTk0LDcgQEAKIAkJCQkwRkVDODVCQjFCRTE0NjJGMDA4MEZGNzQgLyog
QjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRGNjdEMjFEOUM2
RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzZFNTQ1MzFDNDY4
RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzMTlEQTA0MUMxQkU0MEQwMDFEMjYwQiAvKiBCM0xvd2VyTWFjcm9zQWZ0
ZXJPcHRpbWl6YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxRTFCREFDREFDMDA4
MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMTYsNiArODA4NSw3
IEBACiAJCQkJRTMyOERBRUIxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8q
IEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAx
RjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MjE5LDYgKzgyODksNyBAQAogCQkJCTBGQTU4MUJDMTUwRTk1MzAwMEI5QTJEOSAvKiBERkdOb2Rl
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3NTAwMEMyMzk2IC8qIERG
R051bGxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQUQ1QzM2REQxRjY4OEI2NTAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjlDRTkxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGRjFDOTBD
NTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTgzMjksOCArODQw
MCwxMCBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVz
c2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUExRjc1QUQ2QTAwMEJD
QUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M1NzFGMzNBNDUzMDBG
NTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzRFREJGNzFEQjVGRkM5MDBEQzg3QTUgLyogRnJh
bWVUcmFjZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTg3MzEsNyArODgwNCw2IEBACiAJCQkJQTc0
ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFr
U2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBRDJGQ0MzMTFEQjgzRDQ5MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlF
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUZENDg0
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjQsNiArODk5Niw3IEBACiAJCQkJ
QkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBL
ZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBS
ZWdFeHBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZEMUM4RjY1OTUwMDQ4MDE1
MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDNDBF
MTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTkw
OTMsNiArOTE2Niw3IEBACiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1
YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUw
IC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUYxRjdBMjYz
QTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1MkFB
MTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQz
QTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBmZDUyNmIyLi4yZDI4ZWU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MjYsNyArOTI2LDYgQEAgdG9vbHMvSlNEb2xsYXJWTVBy
b3RvdHlwZS5jcHAKIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCiB0b29scy9WTUluc3Bl
Y3Rvci5jcHAKIAotd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKIHdhc20vV2FzbUJCUVBsYW4uY3BwCiB3YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtOTM0
LDEyICs5MzMsMTYgQEAgd2FzbS9XYXNtQ2FsbGVlLmNwcAogd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uY3BwCiB3YXNtL1dhc21Db2RlQmxvY2suY3BwCiB3YXNtL1dhc21Db250ZXh0LmNwcAor
d2FzbS9XYXNtRW1iZWRkZXIuaAogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAogd2Fz
bS9XYXNtRm9ybWF0LmNwcAogd2FzbS9XYXNtSW5kZXhPck5hbWUuY3BwCit3YXNtL1dhc21JbnN0
YW5jZS5jcHAKK3dhc20vV2FzbUluc3RhbmNlLmgKIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNw
cAogd2FzbS9XYXNtTWVtb3J5LmNwcAogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCit3
YXNtL1dhc21NZW1vcnlNb2RlLmNwcAogd2FzbS9XYXNtTW9kdWxlLmNwcAogd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uY3BwCiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC05NDksMTAg
Kzk1MiwxNSBAQCB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQu
Y3BwCiB3YXNtL1dhc21QbGFuLmNwcAogd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAord2FzbS9XYXNt
VGFibGUuY3BwCit3YXNtL1dhc21UYWJsZS5oCiB3YXNtL1dhc21UaHVua3MuY3BwCiB3YXNtL1dh
c21WYWxpZGF0ZS5jcHAKIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCit3YXNtL2pzL0pTVG9XYXNt
LmNwcAord2FzbS9qcy9KU1RvV2FzbS5oCit3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAK
QEAgLTk2Miw2ICs5NzAsOCBAQCB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKK3dhc20vanMvV2FzbVRv
SlMuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmgKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5
cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA0MjI4
MGM1Li42ZGY0NDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTE3OSw3ICsxNzksNyBAQCBDYWxsU2l0ZUluZGV4
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6b3JpZ2luYWxDYWxsU2l0ZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gc3R1Ygogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4Y2Vw
dGlvbkhhbmRsZXIoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7Ci0gICAgaml0LT5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0pOworICAgIGppdC0+
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJm1fdm0udG9wRW50
cnlGcmFtZSk7CiAgICAgaWYgKG5lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oKSkg
ewogICAgICAgICAvLyBUbyB0aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4Y2Vw
dGlvbiBoYW5kbGluZwogICAgICAgICAvLyBjYWxsIHNpdGUsIHRoZXkgd2lsbCBleHBlY3QgdGhl
IE9TUiBleGl0IHRvIGJlIGFycml2ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCmluZGV4IDM0OGM2OGMuLjc3MTZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKICAqCkBAIC02NTIsOCArNjUyLDggQEAgdm9pZCBEZWJ1Z2dlcjo6c3RlcE91dE9m
RnVuY3Rpb24oKQogICAgIGlmICghbV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Vk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAg
ICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxs
RnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSkgOiBudWxscHRyOworICAgIEVudHJ5
RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgbV9wYXVzZU9u
Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSh0b3BFbnRyeUZyYW1lKSA6IG51bGxwdHI7CiAgICAgbV9wYXVzZU9uU3RlcE91dCA9
IHRydWU7CiAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG5v
dGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2
b2lkIERlYnVnZ2VyOjpyZXR1cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAo
IW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1l
KiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5
RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJh
bWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIGNhbGws
IHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdlIGFy
ZSByZXR1cm5pbmcgdG8uCiAgICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQgPSB0
cnVlOwpAQCAtODU2LDggKzg1Niw4IEBAIHZvaWQgRGVidWdnZXI6OnVud2luZEV2ZW50KENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1F
bnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50
cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAg
IC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYW4gZXhjZXB0aW9uIGxvY2F0aW9uIGxpa2UgYSBzdGVw
LW91dC4KICAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkK
QEAgLTg4Niw4ICs4ODYsOCBAQCB2b2lkIERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZN
RW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVu
dHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAg
ICAvLyBSZXR1cm5pbmcgZnJvbSBhIHByb2dyYW0sIGNvdWxkIGJlIGV2YWwoKSwgdGhlcmUgd2Fz
IGF0IGxlYXN0IG9uZSBleHByZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVybmlu
ZyB0by4KICAgICBtX3Bhc3RGaXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGQxOWRkYjcu
LmZmOTc4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAg
IC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBh
cmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpAQCAtMTYw
LDcgKzE2MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygp
CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAg
ICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0
aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNTgzYmY5OC4uMDIxZWFhYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTcsNyArMzE3
LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdp
c3RlclNldDo6YWxsRlBScygpKTsKIAogICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSByZWdp
c3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsKLSAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2
bUVudHJ5UmVjb3JkKHZtLT50b3BWTUVudHJ5RnJhbWUpOworICAgIFZNRW50cnlSZWNvcmQqIHJl
Y29yZCA9IHZtRW50cnlSZWNvcmQodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCBjdXJyZW50RW50cnkgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpOwogICAgICAg
ICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWcoKSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAzNDMzMDhjLi5jNzdlMDA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg1LDcgKzE4
NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdChFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7CiAg
ICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNl
IHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgogICAgICAgICAgICAgLy8gU28s
IHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAg
ICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKTsKKyAgICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBq
aXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIGppdC5hZGRQdHIoCkBAIC01Mzcs
NyArNTM3LDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwg
Vk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGppdC5lbWl0TWF0ZXJpYWxp
emVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCZ2bS50b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIERvIGFsbCBkYXRhIGZv
cm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCBiNzMyN2YzLi5lZDBh
ZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC0xMzUsNyAr
MTM1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50cnlKdW1w
RGVzdGluYXRpb24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BF
bnRyeUZyYW1lKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsK
IAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCmluZGV4IGZmMmNlNTYuLjAzZjAyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiAKICAg
ICAvLyBFbWl0IHRoZSBleGNlcHRpb24gaGFuZGxlci4KICAgICAqc3RhdGUuZXhjZXB0aW9uSGFu
ZGxlciA9IGppdC5sYWJlbCgpOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggN2MwMTgxZC4uYWFjODY4MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Myw3ICsxNDMsNyBAQCB2
b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlv
biA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKLSAgICAg
ICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtKTsKKyAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigmdm0udG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAxY2ViYzAxLi5lMGU1
OTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CkBAIC0yNjQsNyArMjY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJh
bWUpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAppbmRleCA4ZTA4MWQ3Li5jZWZjYWQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg2LDcgKzE4
Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIC8vIFRoZSBmaXJzdCB0aGluZyB3
ZSBuZWVkIHRvIGRvIGlzIHJlc3RhYmxpc2ggb3VyIGZyYW1lIGluIHRoZSBjYXNlIG9mIGFuIGV4
Y2VwdGlvbi4KICAgICBpZiAoZXhpdC5pc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoKTsgLy8gVGhlIGZpcnN0IHRp
bWUgd2UgaGl0IHRoaXMgZXhpdCwgbGlrZSBhdCBhbGwgb3RoZXIgdGltZXMsIHRoaXMgZmllbGQg
c2hvdWxkIGJlIG5vbi1udWxsLgotICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgIGppdC5yZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFt
ZSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgp
LCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CkBAIC00MTIsOCArNDEyLDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lz
dGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdp
c3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkgewotICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcFZNRW50cnlGcmFtZSwgR1BSSW5m
bzo6cmVnVDEpOwotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5m
bzo6cmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcEVudHJ5RnJhbWUsIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CiAgICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcg
PD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggOWZhMjlkMC4uYmU2MWE0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTQsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3Bl
LmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KQEAgLTIxNyw3ICsyMTgsNyBAQCBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjp3
YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgaWYgKCFjYWxsZWUoKS5pc1dhc20oKSkKICAgICAgICAgcmV0dXJuIGxleGljYWxH
bG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gV2FzbTo6bG9hZENvbnRleHQodm0pLT5nbG9iYWxP
YmplY3QoKTsKKyAgICByZXR1cm4gdm0ud2FzbUNvbnRleHQubG9hZCgpLT5nbG9iYWxPYmplY3Qo
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICByZXR1cm4gbGV4aWNhbEdsb2Jh
bE9iamVjdCgpOwpAQCAtMjM3LDI0ICsyMzgsMjQgQEAgYm9vbCBDYWxsRnJhbWU6OmlzQW55V2Fz
bUNhbGxlZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1DYWxsRnJhbWUqIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFtZSkKK0NhbGxGcmFtZSog
Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYgY3VyckVudHJ5RnJhbWUpCiB7Ci0g
ICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJyVk1FbnRyeUZyYW1lKSB7
Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29y
ZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAgY3VyclZNRW50cnlGcmFtZSA9IGN1cnJWTUVu
dHJ5UmVjb3JkLT5wcmV2VG9wVk1FbnRyeUZyYW1lKCk7CisgICAgaWYgKGNhbGxlckZyYW1lT3JF
bnRyeUZyYW1lKCkgPT0gY3VyckVudHJ5RnJhbWUpIHsKKyAgICAgICAgVk1FbnRyeVJlY29yZCog
Y3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAgICAg
ICAgY3VyckVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcEVudHJ5RnJhbWUo
KTsKICAgICAgICAgcmV0dXJuIGN1cnJWTUVudHJ5UmVjb3JkLT5wcmV2VG9wQ2FsbEZyYW1lKCk7
CiAgICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9y
Vk1FbnRyeUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxs
ZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsKIH0KIAotU1VQUFJFU1NfQVNBTiBDYWxsRnJhbWUqIENh
bGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFt
ZSkKK1NVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2FmZUNhbGxlckZyYW1l
KEVudHJ5RnJhbWUqJiBjdXJyRW50cnlGcmFtZSkKIHsKLSAgICBpZiAodW5zYWZlQ2FsbGVyRnJh
bWVPclZNRW50cnlGcmFtZSgpID09IGN1cnJWTUVudHJ5RnJhbWUpIHsKLSAgICAgICAgVk1FbnRy
eVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJWTUVudHJ5RnJh
bWUpOwotICAgICAgICBjdXJyVk1FbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnVuc2Fm
ZVByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAgICBpZiAodW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5
RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAgICAgICBWTUVudHJ5UmVjb3JkKiBjdXJy
Vk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyckVudHJ5RnJhbWUpOworICAgICAgICBj
dXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wRW50cnlGcmFt
ZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQtPnVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KHVuc2Fm
ZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENh
bGxGcmFtZSo+KHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCiBTb3VyY2VP
cmlnaW4gQ2FsbEZyYW1lOjpjYWxsZXJTb3VyY2VPcmlnaW4oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDYyMzA5YTAuLjZkNWQ3MjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTE0
MSwxMiArMTQxLDEyIEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBDYWxsRnJhbWUmIG9w
ZXJhdG9yPShjb25zdCBSZWdpc3RlciYgcikgeyAqc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlz
KSA9IHI7IHJldHVybiAqdGhpczsgfQogCi0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yVk1F
bnRyeUZyYW1lKCkpOyB9Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUo
KSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KLSAgICAg
ICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9Cisg
ICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsgfQorICAgICAgICB2b2lk
KiBjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZyYW1lQW5k
UEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVuc2FmZUNh
bGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVB
bmRQQygpLmNhbGxlckZyYW1lOyB9CiAKLSAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxsZXJG
cmFtZShWTUVudHJ5RnJhbWUqJik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYpOworICAgICAgICBDYWxsRnJhbWUqIHVuc2Fm
ZUNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBTb3VyY2VPcmlnaW4gY2FsbGVyU291cmNlT3JpZ2luKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAppbmRleCBjNWI2Yjgz
Li43NmFjZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
RnJhbWVUcmFjZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Zy
YW1lVHJhY2Vycy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBW
TUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIAogY2xhc3MgU3VzcGVuZEV4Y2VwdGlv
blNjb3BlIHsKIHB1YmxpYzoKQEAgLTc0LDMzICs3NCwzMyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAgICAgQVNT
RVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9jYXN0
PHZvaWQqPih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0tPnRv
cEVudHJ5RnJhbWUpKTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAg
ICB9CiB9OwogCiBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB7CiBwdWJs
aWM6Ci0gICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZShW
TSogdm0sIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
KyAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKFZNKiB2
bSwgRW50cnlGcmFtZSogRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAg
IDogbV92bSh2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFTU0VSVChj
YWxsRnJhbWUpOwotICAgICAgICBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50
cnlGcmFtZTsKKyAgICAgICAgbV9zYXZlZFRvcEVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFt
ZTsKICAgICAgICAgbV9zYXZlZFRvcENhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7Ci0gICAg
ICAgIHZtLT50b3BWTUVudHJ5RnJhbWUgPSB2bUVudHJ5RnJhbWU7CisgICAgICAgIHZtLT50b3BF
bnRyeUZyYW1lID0gRW50cnlGcmFtZTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxG
cmFtZTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5OYXRpdmVDYWxsRnJhbWVUcmFjZXJX
aXRoUmVzdG9yZSgpCiAgICAgewotICAgICAgICBtX3ZtLT50b3BWTUVudHJ5RnJhbWUgPSBtX3Nh
dmVkVG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX3ZtLT50b3BFbnRyeUZyYW1lID0gbV9zYXZl
ZFRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1fdm0tPnRvcENhbGxGcmFtZSA9IG1fc2F2ZWRUb3BD
YWxsRnJhbWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwotICAgIFZNRW50cnlG
cmFtZSogbV9zYXZlZFRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBtX3NhdmVkVG9w
RW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIG1fc2F2ZWRUb3BDYWxsRnJhbWU7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApp
bmRleCAxMzUzZTEwLi5hNTEzZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTY1Myw5ICs2NTMsOSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAK
LSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
aXNpdG9yKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodmlzaXRvcik7CiAKLSAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53aW5kaW5nID0gdmlz
aXRvci0+Y2FsbGVySXNWTUVudHJ5RnJhbWUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53
aW5kaW5nID0gdmlzaXRvci0+Y2FsbGVySXNFbnRyeUZyYW1lKCk7CiAgICAgICAgIGlmIChzaG91
bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
IApAQCAtNjYzLDcgKzY2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAgICB7CiAj
aWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSB2aXNpdG9y
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC02NzYsNyArNjc2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaW50cHRyX3QqIGZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdCo+KG1fY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9
IGN1cnJlbnRDYWxsZWVTYXZlcy0+c2l6ZSgpOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNv
cmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgVk1FbnRy
eVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRvcEVudHJ5RnJhbWUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZl
cy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGN1cnJlbnRF
bnRyeS5yZWcoKSkpCkBAIC03MDIsNyArNzAyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBpZiAodW53
aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIGlmIChjYWxsRnJh
bWUtPmNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUpCisg
ICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gdm0udG9w
RW50cnlGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGNhbGxG
cmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggODVkMTQ3YS4uMWRhOTNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxOCArNDQsMTggQEAgU3RhY2tWaXNpdG9yOjpT
dGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0pCiAgICAgQ2FsbEZyYW1l
KiB0b3BGcmFtZTsKICAgICBpZiAoc3RhcnRGcmFtZSkgewogICAgICAgICBBU1NFUlQodm0pOwot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKKyAg
ICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKICAgICAgICAg
dG9wRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgICAgICAKLSAgICAgICAgaWYgKHRvcEZy
YW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKSA9PSBzdGF0
aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7Ci0gICAgICAgICAgICB0b3BGcmFtZSA9IHZtRW50
cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKLSAg
ICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUu
bV9WTUVudHJ5RnJhbWUpLT5tX3ByZXZUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIGlmICh0b3BG
cmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFtZS5tX2VudHJ5RnJhbWUpID09IHN0YXRp
Y19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKKyAgICAgICAgICAgIHRvcEZyYW1lID0gdm1FbnRy
eVJlY29yZChtX2ZyYW1lLm1fZW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKKyAgICAg
ICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fZW50
cnlGcmFtZSktPm1fcHJldlRvcEVudHJ5RnJhbWU7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gMDsKKyAgICAgICAgbV9mcmFtZS5tX2Vu
dHJ5RnJhbWUgPSAwOwogICAgICAgICB0b3BGcmFtZSA9IDA7CiAgICAgfQotICAgIG1fZnJhbWUu
bV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IGZhbHNlOworICAgIG1fZnJhbWUubV9jYWxsZXJJc0Vu
dHJ5RnJhbWUgPSBmYWxzZTsKICAgICByZWFkRnJhbWUodG9wRnJhbWUpOwogCiAgICAgLy8gRmlu
ZCB0aGUgZnJhbWUgdGhlIGNhbGxlciB3YW50cyB0byBzdGFydCB1bndpbmRpbmcgZnJvbS4KQEAg
LTc1LDE0ICs3NSwxNCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSgpCiAgICAg
ICAgICAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCAmaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIpOwogICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG1fZnJhbWUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZTsK
KyAgICAgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlckVudHJ5
RnJhbWU7CiAgICAgICAgICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUuY2FsbEZy
YW1lKCksIGNhbGxlckNvZGVPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2ZyYW1l
Lm1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX0NhbGxlckVudHJ5RnJhbWU7CiAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUo
KSk7CiB9CiAKQEAgLTE1Miw5ICsxNTIsOSBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklu
bGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaQogewog
ICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpOwotICAgIG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fVk1F
bnRyeUZyYW1lOwotICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUobV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSk7Ci0gICAgbV9mcmFtZS5tX2NhbGxl
cklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSAhPSBtX2ZyYW1l
Lm1fVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX2VudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX2NhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZShtX2ZyYW1lLm1fQ2FsbGVyRW50cnlGcmFtZSk7CisgICAgbV9mcmFtZS5tX2Nh
bGxlcklzRW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lICE9IG1fZnJhbWUu
bV9lbnRyeUZyYW1lOwogICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwogCiAgICAg
Q2FsbGVlQml0cyBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwpAQCAtNTAwLDcgKzUwMCw3
IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBJbmRl
bnRlciBpbmRlbnQsIHN0ZDo6ZnVuY3Rpb248CiAKICAgICAgICAgICAgIGluZGVudC0tOwogICAg
ICAgICB9Ci0gICAgICAgIG91dC5wcmludChpbmRlbnQsICJ2bUVudHJ5RnJhbWU6ICIsIFJhd1Bv
aW50ZXIodm1FbnRyeUZyYW1lKCkpLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KGluZGVudCwg
IkVudHJ5RnJhbWU6ICIsIFJhd1BvaW50ZXIobV9lbnRyeUZyYW1lKSwgIlxuIik7CiAgICAgICAg
IGluZGVudC0tOwogICAgIH0KICAgICBvdXQucHJpbnQoaW5kZW50LCAifVxuIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5kZXggOGFk
MDk0MC4uNzA3OWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAg
ICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAgc2l6
ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsgfQotICAgICAgICBib29sIGNhbGxlcklzVk1FbnRyeUZyYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc1ZNRW50cnlGcmFtZTsgfQorICAgICAgICBib29s
IGNhbGxlcklzRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNFbnRyeUZyYW1l
OyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxlckZyYW1lOyB9CiAgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsZWU7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jazsgfQpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgQ2xvbmVk
QXJndW1lbnRzKiBjcmVhdGVBcmd1bWVudHMoKTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2bUVu
dHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX1ZNRW50cnlGcmFtZTsgfQogICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CiAgICAgICAg
IAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBJbmRlbnRlciA9IEluZGVudGVyKCkp
IGNvbnN0OwpAQCAtMTE0LDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICNlbmRpZgogICAgICAgICBDYWxsRnJhbWUqIG1fY2Fs
bEZyYW1lOwotICAgICAgICBWTUVudHJ5RnJhbWUqIG1fVk1FbnRyeUZyYW1lOwotICAgICAgICBW
TUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICBFbnRyeUZyYW1lKiBt
X2VudHJ5RnJhbWU7CisgICAgICAgIEVudHJ5RnJhbWUqIG1fQ2FsbGVyRW50cnlGcmFtZTsKICAg
ICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwogICAgICAgICBDYWxsZWVCaXRzIG1fY2Fs
bGVlOwogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtMTIzLDcgKzEyMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAg
ICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIFdhc206OkluZGV4T3JO
YW1lIG1fd2FzbUZ1bmN0aW9uSW5kZXhPck5hbWU7Ci0gICAgICAgIGJvb2wgbV9jYWxsZXJJc1ZN
RW50cnlGcmFtZSA6IDE7CisgICAgICAgIGJvb2wgbV9jYWxsZXJJc0VudHJ5RnJhbWUgOiAxOwog
ICAgICAgICBib29sIG1faXNXYXNtRnJhbWUgOiAxOwogCiAgICAgICAgIGZyaWVuZCBjbGFzcyBT
dGFja1Zpc2l0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvVk1FbnRyeVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZN
RW50cnlSZWNvcmQuaAppbmRleCBmMzZjMmJlLi4wMTAzYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjks
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFZNRW50cnlGcmFtZTsKK3N0cnVjdCBF
bnRyeUZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKQEAgLTQwLDcgKzQwLDcg
QEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgICAqLwogICAgIFZNKiBtX3ZtOwogICAgIEV4
ZWNTdGF0ZSogbV9wcmV2VG9wQ2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFtZSogbV9wcmV2VG9w
Vk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fcHJldlRvcEVudHJ5RnJhbWU7CiAKICNp
ZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAg
ICBpbnRwdHJfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW05VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTXTsKQEAgLTQ5LDIwICs0OSwyMCBAQCBzdHJ1Y3QgVk1FbnRyeVJlY29yZCB7
CiAgICAgRXhlY1N0YXRlKiBwcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wQ2Fs
bEZyYW1lOyB9CiAgICAgU1VQUFJFU1NfQVNBTiBFeGVjU3RhdGUqIHVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BDYWxsRnJhbWU7IH0KIAotICAgIFZNRW50cnlGcmFt
ZSogcHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcFZNRW50cnlGcmFtZTsg
fQotICAgIFNVUFBSRVNTX0FTQU4gVk1FbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wVk1FbnRyeUZy
YW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wVk1FbnRyeUZyYW1lOyB9CisgICAgRW50cnlGcmFtZSog
cHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BFbnRyeUZyYW1lOyB9CisgICAg
U1VQUFJFU1NfQVNBTiBFbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wRW50cnlGcmFtZSgpIHsgcmV0
dXJuIG1fcHJldlRvcEVudHJ5RnJhbWU7IH0KIH07CiAKLWV4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChWTUVudHJ5RnJhbWUqKTsKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChFbnRyeUZyYW1lKik7CiAKLXN0cnVjdCBWTUVudHJ5RnJhbWUgewor
c3RydWN0IEVudHJ5RnJhbWUgewogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9DQUxMRUVf
U0FWRVNfUkVHSVNURVJTID4gMAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgdm1FbnRyeVJlY29yZE9m
ZnNldCgpCiAgICAgewotICAgICAgICBWTUVudHJ5RnJhbWUqIGZha2VWTUVudHJ5RnJhbWUgPSBy
ZWludGVycHJldF9jYXN0PFZNRW50cnlGcmFtZSo+KDB4MTAwMCk7Ci0gICAgICAgIFZNRW50cnlS
ZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZVZNRW50cnlGcmFtZSk7CisgICAgICAg
IEVudHJ5RnJhbWUqIGZha2VFbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxFbnRyeUZyYW1l
Kj4oMHgxMDAwKTsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29y
ZChmYWtlRW50cnlGcmFtZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGZha2VWTUVudHJ5RnJhbWUpKTsKKyAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYWtlRW50
cnlGcmFtZSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlck9mZnNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKaW5kZXggOGQzMWY3YS4uMzcxOWJhNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoVk0mIHZtLCBHUFJSZWcgc2NyYXRjaDAs
IEdQUlJlZyBzY3JhdGNoMSwKIH0KICNlbmRpZgogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSkK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqKiB0b3BFbnRyeUZyYW1lKQogewogI2lmIE5VTUJF
Ul9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7
CkBAIC02MDUsOCArNjA1LDggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0KICAgICB9CiAgICAg
QVNTRVJUKHNjcmF0Y2ggIT0gSW52YWxpZEdQUlJlZyk7CiAKLSAgICBsb2FkUHRyKCZ2bS50b3BW
TUVudHJ5RnJhbWUsIHNjcmF0Y2gpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZy
YW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBs
b2FkUHRyKHRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
RW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7
CiAKICAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMgZXhjZXB0IGZvciB0aGUgc2NyYXRj
aC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CkBA
IC03NzgsNDEgKzc3OCw0MSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1
ZVRvQm9vbGVhbihWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZQogfQogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dChH
UFJSZWcgZHN0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KEdQUlJlZyBkc3QpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6
dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0
VExTKCkpIHsKICAgICAgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRMU09mZnNldEZvcktleShXVEZf
V0FTTV9DT05URVhUX0tFWSksIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
LSAgICBtb3ZlKFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRQb2lu
dGVyLCBkc3QpOworICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNt
Q29udGV4dEluc3RhbmNlUG9pbnRlciwgZHN0KTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnN0b3JlV2FzbUNvbnRleHQoR1BSUmVnIHNyYykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYykKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNf
SklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKFdh
c206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBzdG9yZVRvVExTUHRyKHNyYywg
ZmFzdFRMU09mZnNldEZvcktleShXVEZfV0FTTV9DT05URVhUX0tFWSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkud2FzbUNvbnRleHRQb2ludGVyKTsKKyAgICBtb3ZlKHNyYywgV2FzbTo6UGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiB9CiAKLWJv
b2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lz
dGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAg
aWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6
OnVzZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIGxvYWRGcm9tVExTUHRyTmVlZHNNYWNyb1Nj
cmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEFz
c2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIo
KQorYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYg
KFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIHN0b3JlVG9UTFNQdHJOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CkBAIC04NzUsMTAgKzg3NSwx
MCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKFZNJiB2bSwgVl9EZWJ1Z09wZXJh
dGlvbl9FUFAgZnVuY3Rpb24sIHZvaWQqIGFyZwogICAgIH0KIH0KIAotdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNh
dmVzQnVmZmVyKQogewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
QnVmZmVyT2Zmc2V0KCkpLCBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBjYWxs
ZWVTYXZlc0J1ZmZlcik7CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2
ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVy
U2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhNjhjMzY5
Li5jMzkxNWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTM2MCwyOCArMzYwLDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSKQogICAgIHsKICNp
ZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHZtR1BSLCBWTTo6dG9wVk1FbnRyeUZyYW1lT2Zmc2V0KCkpLCB2bUdQUik7Ci0gICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZt
R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBWTTo6dG9wRW50cnlGcmFtZU9m
ZnNldCgpKSwgdm1HUFIpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwodm1HUFIpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHZt
R1BSKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0p
CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihF
bnRyeUZyYW1lKiogdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAg
ICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQ
UlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0
cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAgICAgICAgbG9hZFB0
cih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CiAjZWxzZQotICAgICAgICBVTlVTRURf
UEFSQU0odm0pOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CiAgICAgICAg
IFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQg
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJik7
CisgICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKEVudHJ5RnJhbWUqKik7CiAKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9y
UmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSwgY29uc3QgVGVt
cFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCkgfSkKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiogdG9wRW50cnlG
cmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NB
TExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRSZWdp
c3RlcnMuZ2V0RnJlZUdQUigwKTsKQEAgLTM5Miw4ICszOTIsOCBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChjb2RlQmxvY2soKSk7CiAKICAgICAgICAgLy8gQ29weSBzYXZlZCBjYWxsZWVTYXZl
cyBvbiBzdGFjayBvciB1bnNhdmVkIGNhbGxlZVNhdmVzIGluIHJlZ2lzdGVyIHRvIHZtIGNhbGxl
ZVNhdmUgYnVmZmVyCi0gICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwgdGVtcDEp
OwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJl
Z2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVtcDEpOworICAgICAgICBsb2FkUHRyKHRvcEVudHJ5
RnJhbWUsIHRlbXAxKTsKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpj
YWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7CiAKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVS
ZWdpc3Rlck9mZnNldHMoKTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRD
YWxsZWVTYXZlcyA9IGNvZGVCbG9jaygpLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC00MDEs
MTIgKzQwMSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBh
bGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgdm1F
bnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChkb250Q29weVJl
Z2lzdGVycy5nZXQodm1FbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0
IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOworICAgICAgICAgICAgaWYgKGRvbnRDb3B5
UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRD
YWxsZWVTYXZlcy0+ZmluZCh2bUVudHJ5LnJlZygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXQqIGN1cnJlbnRGcmFtZUVudHJ5ID0gY3VycmVudENhbGxlZVNhdmVzLT5maW5kKGVudHJ5
LnJlZygpKTsKIAotICAgICAgICAgICAgaWYgKHZtRW50cnkucmVnKCkuaXNHUFIoKSkgeworICAg
ICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpIHsKICAgICAgICAgICAgICAgICBHUFJS
ZWcgcmVnVG9TdG9yZTsKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBjYWxsZWVTYXZlIGZyb20gc3RhY2sgaW50byB0
ZW1wIHJlZ2lzdGVyCkBAIC00MTQsOSArNDE0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRGcmFtZUVu
dHJ5LT5vZmZzZXQoKSksIHJlZ1RvU3RvcmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgICAgICAvLyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAg
ICAgICAgICAgICAgICAgIHJlZ1RvU3RvcmUgPSB2bUVudHJ5LnJlZygpLmdwcigpOworICAgICAg
ICAgICAgICAgICAgICByZWdUb1N0b3JlID0gZW50cnkucmVnKCkuZ3ByKCk7CiAKLSAgICAgICAg
ICAgICAgICBzdG9yZVB0cihyZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1w
MSwgZW50cnkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgRlBSUmVnIGZwUmVnVG9TdG9yZTsKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1l
RW50cnkpIHsKQEAgLTQyNSwxMyArNDI1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgbG9hZERvdWJsZShBZGRyZXNzKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50RnJhbWVF
bnRyeS0+b2Zmc2V0KCkpLCBmcFJlZ1RvU3RvcmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0g
ICAgICAgICAgICAgICAgICAgIGZwUmVnVG9TdG9yZSA9IHZtRW50cnkucmVnKCkuZnByKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGZwUmVnVG9TdG9yZSA9IGVudHJ5LnJlZygpLmZwcigpOwogCi0g
ICAgICAgICAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2
bUVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUb1N0
b3JlLCBBZGRyZXNzKHRlbXAxLCBlbnRyeS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAjZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0odm0pOworICAgICAgICBVTlVTRURf
UEFSQU0odG9wRW50cnlGcmFtZSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJz
KTsKICNlbmRpZgogICAgIH0KQEAgLTE2NDQsMTQgKzE2NDQsMTQgQEAgcHVibGljOgogI2VuZGlm
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgdm9pZCBsb2FkV2FzbUNvbnRleHQoR1BS
UmVnIGRzdCk7Ci0gICAgdm9pZCBzdG9yZVdhc21Db250ZXh0KEdQUlJlZyBzcmMpOwotICAgIHN0
YXRpYyBib29sIGxvYWRXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKLSAg
ICBzdGF0aWMgYm9vbCBzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rlcigp
OworICAgIHZvaWQgbG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIGRzdCk7CisgICAgdm9p
ZCBzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYyk7CisgICAgc3RhdGljIGJvb2wg
bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CisgICAg
c3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdp
c3RlcigpOwogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZl
cik7CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
ckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKTsKIAogICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCmluZGV4IDVlY2YzYTYuLjdjOTRjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0
aW9uQ2hlY2soKQogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBU
cnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkp
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVy
KCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVT
YXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2
bSgpKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgc2tpcE9wdGlt
aXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKSk7CkBAIC04ODUs
NyArODg1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQog
ICAgIGlmICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkg
ewogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRo
aXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhl
IFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogCkBAIC05MDUsNyArOTA1LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogICAgICAgICBtX2V4
Y2VwdGlvbkhhbmRsZXIgPSBsYWJlbCgpOwogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5r
KHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUg
ZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRF
eGNlcHRpb25zLmNwcAppbmRleCBjYTJkYjhjLi5mMjAxOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw4ICs1Niw4IEBAIHZv
aWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBVbndpbmRTdGFy
dCB1bndpbmRTdGFydCkKICAgICAKICAgICBFeGVjU3RhdGUqIHNoYWRvd0NoaWNrZW5Ub3BGcmFt
ZSA9IGNhbGxGcmFtZTsKICAgICBpZiAodW53aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZy
YW1lKSB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZN
RW50cnlGcmFtZTsKLSAgICAgICAgc2hhZG93Q2hpY2tlblRvcEZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiB0b3BFbnRy
eUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFt
ZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgfQogICAgIHZt
LT5zaGFkb3dDaGlja2VuKCkubG9nKCp2bSwgc2hhZG93Q2hpY2tlblRvcEZyYW1lLCBTaGFkb3dD
aGlja2VuOjpQYWNrZXQ6OnRocm93UGFja2V0KCkpOwogICAgIApAQCAtODQsNyArODQsNyBAQCB2
b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgVW53aW5kU3Rh
cnQgdW53aW5kU3RhcnQpCiAgICAgfSBlbHNlCiAgICAgICAgIGNhdGNoUm91dGluZSA9IExMSW50
OjpnZXRDb2RlUHRyKGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKTsKICAgICAKLSAgICBBU1NFUlQo
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHZtLT50b3BWTUVudHJ5RnJhbWUpKTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BFbnRyeUZy
YW1lKSk7CiAKICAgICB2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPSBjYWxsRnJhbWU7CiAgICAgdm0t
PnRhcmdldE1hY2hpbmVQQ0ZvclRocm93ID0gY2F0Y2hSb3V0aW5lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggOWI0MTY2YS4uY2I2NGIxMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC00NTUsNyArNDU1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRo
cm93LCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CkBAIC01MzQs
NyArNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJl
Z1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsK
QEAgLTk1Miw3ICs5NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaQogICAgIGlmIChjYW5C
ZU9wdGltaXplZCgpKSB7CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0
ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAK
ICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNl
dCk7CiAgICAgICAgIEp1bXAgbm9PcHRpbWl6ZWRFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywg
cmV0dXJuVmFsdWVHUFIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCmluZGV4IGExMjI4ZDMuLjYwN2E0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc2NSw3ICs3NjUsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgIGNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKICAg
ICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDAp
OwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdU
MSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwpAQCAtODI2LDcg
KzgyNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAKIHZvaWQgSklUOjplbWl0X29wX2Nh
dGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICByZXN0
b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BF
bnRyeUZyYW1lKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAg
IC8vIG9wZXJhdGlvblRocm93IHJldHVybnMgdGhlIGNhbGxGcmFtZSBmb3IgdGhlIGhhbmRsZXIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCBjMDRj
ZGM0Li5lNjM5OTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKQEAgLTEwMywxNCArMTAzLDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25U
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayoKICAgICBW
TSogdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZN
RW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJh
bWUodm1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVu
dHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1l
KGVudHJ5RnJhbWUpOwogICAgIGlmICghY2FsbGVyRnJhbWUpIHsKICAgICAgICAgY2FsbGVyRnJh
bWUgPSBleGVjOwotICAgICAgICB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwor
ICAgICAgICBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgfQogCi0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNh
bGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIo
dm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cihjYWxsZXJGcmFtZSwgc2NvcGUpOwogfQogCkBAIC0xMjAsMTAgKzEyMCwxMCBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dEaXZpZGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZN
RW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJh
bWUodm1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVu
dHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1l
KGVudHJ5RnJhbWUpOwogCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJh
Y2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAg
ICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSgqdm0pOwogICAgIHRocm93RXhjZXB0aW9u
KGNhbGxlckZyYW1lLCBzY29wZSwgY3JlYXRlRXJyb3IoY2FsbGVyRnJhbWUsIEFTQ0lJTGl0ZXJh
bCgiRGl2aXNpb24gYnkgemVybyBvciBkaXZpc2lvbiBvdmVyZmxvdy4iKSkpOwogfQpAQCAtMTMz
LDEwICsxMzMsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93T3V0T2ZCb3Vu
ZHNBY2Nlc3NFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAotICAgIFZNRW50
cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICBF
bnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogCi0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNh
bGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIo
dm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJy
b3JTY29wZSgqdm0pOwogICAgIHRocm93RXhjZXB0aW9uKGNhbGxlckZyYW1lLCBzY29wZSwgY3Jl
YXRlRXJyb3IoY2FsbGVyRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiT3V0LW9mLWJvdW5kcyBhY2Nlc3Mu
IikpKTsKIH0KQEAgLTE0OSw5ICsxNDksOSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ2FsbEFyaXR5Q2hlY2soRXhlY1N0YXRlKiBleGVjKQogCiAgICAgaW50MzJfdCBtaXNzaW5n
QXJnQ291bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgKnZtLCBDb2Rl
Rm9yQ2FsbCk7CiAgICAgaWYgKG1pc3NpbmdBcmdDb3VudCA8IDApIHsKLSAgICAgICAgVk1FbnRy
eUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgICAgICBDYWxs
RnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKLSAg
ICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5
RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZt
LT50b3BFbnRyeUZyYW1lOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+
Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldp
dGhSZXN0b3JlIHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgICAgICB0
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUpOwogICAgIH0KIApAQCAt
MTY1LDkgKzE2NSw5IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db25zdHJ1Y3RB
cml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50
ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsICp2bSwgQ29kZUZvckNvbnN0
cnVjdCk7CiAgICAgaWYgKG1pc3NpbmdBcmdDb3VudCA8IDApIHsKLSAgICAgICAgVk1FbnRyeUZy
YW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgICAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKLSAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJh
bWUsIGNhbGxlckZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50
b3BFbnRyeUZyYW1lOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2Fs
bGVyRnJhbWUoZW50cnlGcmFtZSk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhS
ZXN0b3JlIHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgICAgICB0aHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUpOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDkyZTQyYjEu
LmU0Mzk2MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiAgICAgLy8gZXZlbiB0aG91Z2gg
d2Ugd29uJ3QgdXNlIGl0LgogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKIAotICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFt
ZSk7CiAKICAgICBqaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZW5lcmF0b3IoVk0qIHZtLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGsKICAgICAvLyBIYW5kbGUgYW4gZXhjZXB0aW9uCiAgICAgZXhjZXB0
aW9uSGFuZGxlci5saW5rKCZqaXQpOwogCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKICAgICBqaXQu
c3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxG
cmFtZSk7CiAKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAppbmRleCBlOWEwZDJhLi4zNTAzNWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMTg3
Miw4ICsxODcyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50
U3RkRXJyKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gcHJpbnQKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1l
ID0gdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUgPSBleGVj
LT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5
RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOworICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBpZiAoY2FsbGVyRnJhbWUpCiAg
ICAgICAgIHZtLmludGVycHJldGVyLT5kdW1wQ2FsbEZyYW1lKGNhbGxlckZyYW1lKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggNzM1ZTcxYi4uMzY2NGUyMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBA
IC00ODEsMTMgKzQ4MSwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS50b3BW
TUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZy
YW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLnRv
cEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZy
YW1lKHRvcEVudHJ5RnJhbWUpOwogICAgIGlmICghY2FsbGVyRnJhbWUpIHsKICAgICAgICAgY2Fs
bGVyRnJhbWUgPSBleGVjOwotICAgICAgICB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJh
bWU7CisgICAgICAgIHRvcEVudHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOwogICAgIH0KLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIoJnZtLCB2bUVudHJ5RnJh
bWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0
cmFjZXIoJnZtLCB0b3BFbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAKICAgICBMTElOVF9TRVRf
UENfRk9SX1NUVUJTKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVu
a3MuY3BwCmluZGV4IDM2ZjY0ODYuLjUyOTY3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50VGh1bmtzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3ICsxMTYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSB2bUVudHJ5VG9OYXRpdmUodm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFZNKiB2bSwg
UHJvdG9DYWxsRnJhbWUqCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
Ci1leHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoVk1FbnRyeUZyYW1lKiBl
bnRyeUZyYW1lKQorZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKEVudHJ5
RnJhbWUqIGVudHJ5RnJhbWUpCiB7CiAgICAgLy8gVGhlIEMgTG9vcCBkb2Vzbid0IGhhdmUgYW55
IGNhbGxlZSBzYXZlIHJlZ2lzdGVycywgc28gdGhlIFZNRW50cnlSZWNvcmQgaXMgYWxsb2NhdGVk
IGF0IHRoZSBiYXNlIG9mIHRoZSBmcmFtZS4KICAgICBpbnRwdHJfdCBzdGFja0FsaWdubWVudCA9
IHN0YWNrQWxpZ25tZW50Qnl0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCA1ZGRlNjY0Li43YmYxZWNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCkBAIC02NTksNyArNjU5LDcgQEAgZW5kCiAKIG1hY3JvIGNvcHlDYWxsZWVTYXZlc1RvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAgICAgaWYgQVJNNjQgb3IgWDg2
XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0s
IHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1dLCB0ZW1wCiAgICAgICAg
IHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBWTUVudHJ5UmVjb3JkOjpj
YWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAgICAgICAgIGlmIEFSTTY0CkBA
IC03MDEsNyArNzAxLDcgQEAgZW5kCiAKIG1hY3JvIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKICAgICBpZiBBUk02NCBvciBYODZf
NjQgb3IgWDg2XzY0X1dJTgotICAgICAgICBsb2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwg
dGVtcAorICAgICAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0sIHRlbXAKICAgICAgICAg
dm1FbnRyeVJlY29yZCh0ZW1wLCB0ZW1wKQogICAgICAgICBsZWFwIFZNRW50cnlSZWNvcmQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJbdGVtcF0sIHRlbXAKICAgICAgICAgaWYgQVJNNjQKQEAg
LTExNDQsNyArMTE0NCw3IEBAIGlmIG5vdCBDX0xPT1AKICAgICAgICAgc3RvcmVwIGFkZHJlc3Ms
IFZNOjptX2xhc3RTdGFja1RvcFt2bV0KICAgICAgICAgcmV0CiAgICAgCi0gICAgIyBWTUVudHJ5
UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0IFZNRW50cnlGcmFtZSogZW50cnlGcmFtZSkKKyAg
ICAjIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoY29uc3QgRW50cnlGcmFtZSogZW50cnlG
cmFtZSkKICAgICBnbG9iYWwgX3ZtRW50cnlSZWNvcmQKICAgICBfdm1FbnRyeVJlY29yZDoKICAg
ICAgICAgaWYgWDg2IG9yIFg4Nl9XSU4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggMTE0YTk3OC4uMzMw
OTBlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTEyNSw4ICsxMjUsOCBAQCBtYWNybyBkb1ZNRW50
cnkobWFrZUNhbGwpCiAgICAgc3RvcmVwIHZtLCBWTUVudHJ5UmVjb3JkOjptX3ZtW3NwXQogICAg
IGxvYWRwIFZNOjp0b3BDYWxsRnJhbWVbdm1dLCB0NAogICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJl
Y29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXQotICAgIGxvYWRwIFZNOjp0b3BWTUVudHJ5RnJh
bWVbdm1dLCB0NAotICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRy
eUZyYW1lW3NwXQorICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwgdDQKKyAgICBzdG9y
ZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdCiAKICAgICAjIEFs
aWduIHN0YWNrIHBvaW50ZXIKICAgICBpZiBYODZfV0lOIG9yIE1JUFMKQEAgLTE4OSw4ICsxODks
OCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6
bV92bVtzcF0sIHQ1CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1l
W3NwXSwgdDQKICAgICBzdG9yZXAgdDQsIFZNOjp0b3BDYWxsRnJhbWVbdDVdCi0gICAgbG9hZHAg
Vk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDQKLSAgICBzdG9yZXAg
dDQsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDVdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTTo6dG9wRW50cnlGcmFt
ZVt0NV0KIAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNh
dmVTaXplLCB0NQpAQCAtMjQxLDcgKzI0MSw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkK
IAogLmNvcHlBcmdzRG9uZToKICAgICBzdG9yZXAgc3AsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0g
ICAgc3RvcmVwIGNmciwgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAgICBzdG9yZXAgY2ZyLCBW
TTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIG1ha2VDYWxsKGVudHJ5LCB0MywgdDQpCiAKQEAg
LTI1NSw4ICsyNTUsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV92bVtzcF0sIHQ1CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2
VG9wQ2FsbEZyYW1lW3NwXSwgdDQKICAgICBzdG9yZXAgdDQsIFZNOjp0b3BDYWxsRnJhbWVbdDVd
Ci0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDQK
LSAgICBzdG9yZXAgdDQsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDVdCisgICAgbG9hZHAgVk1FbnRy
eVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTTo6
dG9wRW50cnlGcmFtZVt0NV0KIAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxs
ZWVSZWdpc3RlclNhdmVTaXplLCB0NQpAQCAtMzI0LDggKzMyNCw4IEBAIF9oYW5kbGVVbmNhdWdo
dEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ZtW3NwXSwgdDMKICAgICBs
b2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3BdLCB0NQogICAgIHN0b3Jl
cCB0NSwgVk06OnRvcENhbGxGcmFtZVt0M10KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3By
ZXZUb3BWTUVudHJ5RnJhbWVbc3BdLCB0NQotICAgIHN0b3JlcCB0NSwgVk06OnRvcFZNRW50cnlG
cmFtZVt0M10KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3Nw
XSwgdDUKKyAgICBzdG9yZXAgdDUsIFZNOjp0b3BFbnRyeUZyYW1lW3QzXQogCiAgICAgaWYgQVJN
djcKICAgICAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHQzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CmluZGV4IGUzN2EwZjYuLjk1OTA5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0xMjksOCArMTI5LDggQEAg
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29yZDo6
bV92bVtzcF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9yZXAg
dDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBWTTo6
dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1f
cHJldlRvcFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0s
IHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3Nw
XQogCiAgICAgbG9hZGkgUHJvdG9DYWxsRnJhbWU6OnBhZGRlZEFyZ0NvdW50W3Byb3RvQ2FsbEZy
YW1lXSwgdDQKICAgICBhZGRwIENhbGxGcmFtZUhlYWRlclNsb3RzLCB0NCwgdDQKQEAgLTE3MSw4
ICsxNzEsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJl
Y29yZDo6bV92bVt0NF0sIHZtCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2Fs
bEZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCiAgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRv
cENhbGxGcmFtZVt2bV0KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5
RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcKLSAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9w
Vk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5
RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcKKyAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9w
RW50cnlGcmFtZVt2bV0KIAogICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCBz
cAogCkBAIC0yMjAsNyArMjIwLDcgQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGVs
c2UKICAgICAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQogICAgIGVuZAotICAg
IHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAgc3RvcmVwIGNmciwgVk06
OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudChleHRy
YVRlbXBSZWcsIDB4YmFkMGRjMDIpCiAKQEAgLTIzNiw4ICsyMzYsOCBAQCBtYWNybyBkb1ZNRW50
cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVt0NF0sIHZtCiAgICAg
bG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3Q0XSwgdDIKICAgICBzdG9y
ZXAgdDIsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwgdDIKLSAgICBzdG9yZXAgdDIsIFZNOjp0b3BWTUVudHJ5
RnJhbWVbdm1dCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0
NF0sIHQyCisgICAgc3RvcmVwIHQyLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIHN1YnAg
Y2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCBzcAogCkBAIC0yNzYsNyArMjc2LDYgQEAgbWFj
cm8gbWFrZUhvc3RGdW5jdGlvbkNhbGwoZW50cnksIHRlbXApCiAgICAgZW5kCiBlbmQKIAotCiBf
aGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCiAgICAg
YW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCkBAIC0yOTEsOCArMjkwLDggQEAgX2hhbmRsZVVuY2F1
Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bdDJdLCB0MwogICAg
IGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0Ml0sIGV4dHJhVGVtcFJl
ZwogICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9h
ZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3QyXSwgZXh0cmFUZW1wUmVn
Ci0gICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcFZNRW50cnlGcmFtZVt0M10KKyAgICBs
b2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3QyXSwgZXh0cmFUZW1wUmVn
CisgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcEVudHJ5RnJhbWVbdDNdCiAKICAgICBz
dWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCBhNWE1M2M2Li4yYTJiYmRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNDA2LDcgKzQwNiw3IEBAIHN0
YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgICAgICBPcHRpb25zOjp1
c2VXZWJBc3NlbWJseSgpID0gZmFsc2U7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2Vt
Ymx5KCkpCi0gICAgICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdFRMUygpID0gZmFsc2U7
CisgICAgICAgIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpID0gZmFsc2U7CiAg
ICAgCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlv
bnM6OmR1bXBERkdEaXNhc3NlbWJseSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgKaW5kZXggM2NlYzU1Mi4uODQ3NWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaApAQCAtNDY3LDggKzQ2Nyw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0
aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQ
YWdlcywgMTI4LCBOb3JtYWwsICJXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHVzZSA0R2lCIHZp
cnR1YWwgYWxsb2NhdGlvbnMsIHBsdXMgYSByZWR6b25lIChjb3VudGVkIGFzIG11bHRpcGxlIG9m
IDY0S2lCIFdlYkFzc2VtYmx5IHBhZ2VzKSBhdCB0aGUgZW5kIHRvIGNhdGNoIHJlZytpbW0gYWNj
ZXNzZXMgd2hpY2ggZXhjZWVkIDMyLWJpdCwgYW55dGhpbmcgYmV5b25kIHRoZSByZWR6b25lIGlz
IGV4cGxpY2l0bHkgYm91bmRzLWNoZWNrZWQiKSBcCiAgICAgdihib29sLCBjcmFzaElmV2ViQXNz
ZW1ibHlDYW50RmFzdE1lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgY3Jh
c2ggaWYgd2UgY2FuJ3Qgb2J0YWluIGZhc3QgbWVtb3J5IGZvciB3YXNtLiIpIFwKICAgICB2KHVu
c2lnbmVkLCBtYXhOdW1XZWJBc3NlbWJseUZhc3RNZW1vcmllcywgNCwgTm9ybWFsLCBudWxscHRy
KSBcCi0gICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMsIHRydWUsIE5vcm1hbCwgIklm
IHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1sb2NhbCBzdG9yYWdlIGlmIGF2
YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4iKSBcCi0gICAgdihib29sLCB1c2VGYXN0
VExTRm9yV2FzbUNvbnRleHQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUgKGFuZCBmYXN0IFRMUyBp
cyBlbmFibGVkKSwgd2Ugd2lsbCBzdG9yZSBjb250ZXh0IGluIGZhc3QgVExTLiBJZiBmYWxzZSwg
d2Ugd2lsbCBwaW4gaXQgdG8gYSByZWdpc3Rlci4iKSBcCisgICAgdihib29sLCB1c2VGYXN0VExT
Rm9yV2FzbUNvbnRleHQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgc3RvcmUgY29u
dGV4dCBpbiBmYXN0IFRMUy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIu
IikgXAogICAgIHYoYm9vbCwgdXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzLCB0cnVl
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBDYWxsTGlua0luZm8gdG8gaW5saW5lIGNh
Y2hlIFdhc20gdG8gSlMgY2FsbHMuIikgXAogICAgIHYoYm9vbCwgdXNlT2JqZWN0UmVzdFNwcmVh
ZCwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFibGUgT2JqZWN0IFJlc3QvU3By
ZWFkIGZlYXR1cmUuIikgXAogICAgIHYoYm9vbCwgdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5n
LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBvdXIgbm9ybWFsIGFycmF5IGFs
bG9jYXRpb24gcHJvZmlsaW5nLiBJZiBmYWxzZSwgdGhlIGFsbG9jYXRpb24gcHJvZmlsZSB3aWxs
IGFsd2F5cyBjbGFpbSB0byBiZSB1bmRlY2lkZWQuIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKaW5kZXggYTRiZTk1Yi4uM2JjZjZj
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIEZyYW1lV2Fsa2VyKFZNJiB2
bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb2RlQmxvY2tT
ZXRMb2NrZXIsIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBtYWNoaW5lVGhyZWFkc0xvY2tlcikKICAg
ICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKLSAgICAg
ICAgLCBtX3ZtRW50cnlGcmFtZSh2bS50b3BWTUVudHJ5RnJhbWUpCisgICAgICAgICwgbV9lbnRy
eUZyYW1lKHZtLnRvcEVudHJ5RnJhbWUpCiAgICAgICAgICwgbV9jb2RlQmxvY2tTZXRMb2NrZXIo
Y29kZUJsb2NrU2V0TG9ja2VyKQogICAgICAgICAsIG1fbWFjaGluZVRocmVhZHNMb2NrZXIobWFj
aGluZVRocmVhZHNMb2NrZXIpCiAgICAgewpAQCAtMTMwLDcgKzEzMCw3IEBAIHByb3RlY3RlZDoK
ICAgICBTVVBQUkVTU19BU0FOCiAgICAgdm9pZCBhZHZhbmNlVG9QYXJlbnRGcmFtZSgpCiAgICAg
ewotICAgICAgICBtX2NhbGxGcmFtZSA9IG1fY2FsbEZyYW1lLT51bnNhZmVDYWxsZXJGcmFtZSht
X3ZtRW50cnlGcmFtZSk7CisgICAgICAgIG1fY2FsbEZyYW1lID0gbV9jYWxsRnJhbWUtPnVuc2Fm
ZUNhbGxlckZyYW1lKG1fZW50cnlGcmFtZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc0F0VG9wKCkg
Y29uc3QKQEAgLTE4OCw3ICsxODgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBWTSYgbV92bTsKICAg
ICBFeGVjU3RhdGUqIG1fY2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFtZSogbV92bUVudHJ5RnJh
bWU7CisgICAgRW50cnlGcmFtZSogbV9lbnRyeUZyYW1lOwogICAgIGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBtX2NvZGVCbG9ja1NldExvY2tlcjsKICAgICBjb25zdCBBYnN0cmFjdExvY2tlciYgbV9t
YWNoaW5lVGhyZWFkc0xvY2tlcjsKICAgICBib29sIG1fYmFpbGluZ091dCB7IGZhbHNlIH07CkBA
IC01NzcsNyArNTc3LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmll
ZFN0YWNrVHJhY2VzKCkKICAgICAgICAgICAgICAgICAvLyBXZSByZXVzZSBMTEludCBDb2RlQmxv
Y2tzIGZvciB0aGUgYmFzZWxpbmUgSklULCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBib3RoIGpp
dCB0eXBlcy4KICAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFsc28gYmUgZmFsc2UgZm9y
IHZhcmlvdXMgcmVhc29ucyAoa25vd24gYW5kIHVua25vd24pLCBldmVuIHRob3VnaAogICAgICAg
ICAgICAgICAgIC8vIGl0J3Mgc3VwZXIgdW5saWtlbHkuIE9uZSByZWFzb24gdGhhdCB0aGlzIGNh
biBiZSBmYWxzZSBpcyB3aGVuIHdlIHRocm93IGZyb20gYSBERkcgZnJhbWUsCi0gICAgICAgICAg
ICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBhc3QgYSBWTUVudHJ5RnJh
bWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZworICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBl
bmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGFuIEVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVw
IGV4ZWN1dGluZwogICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBoYW5kbGVV
bmNhdWdodEV4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAg
ICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGhyb3dTY29wZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Nj
b3BlLmNwcAppbmRleCAwNmU5MzAzLi40YzY1ZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NywxMyArNTcsMTMgQEAgVGhyb3dTY29wZTo6flRo
cm93U2NvcGUoKQogCiAgICAgYm9vbCB3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQgPSBmYWxzZTsK
ICAgICB2b2lkKiBwcmV2aW91c1Njb3BlID0gbV9wcmV2aW91c1Njb3BlOwotICAgIHZvaWQqIHRv
cFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOworICAgIHZvaWQqIHRvcEVudHJ5
RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CiAKLSAgICAvLyBJZiB0aGUgdG9wVk1FbnRyeUZy
YW1lIHdhcyBwdXNoZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBp
bnN0YW50aWF0ZWQsCisgICAgLy8gSWYgdGhlIHRvcEVudHJ5RnJhbWUgd2FzIHB1c2hlZCBvbiB0
aGUgc3RhY2sgYWZ0ZXIgdGhlIHByZXZpb3VzU2NvcGUgd2FzIGluc3RhbnRpYXRlZCwKICAgICAv
LyB0aGVuIHRoaXMgdGhyb3dTY29wZSB3aWxsIGJlIHJldHVybmluZyB0byBMTElOVCBvciBKSVQg
Y29kZSB0aGF0IGFsd2F5cyBkbyBhbiBleGNlcHRpb24KICAgICAvLyBjaGVjay4gSW4gdGhhdCBj
YXNlLCBza2lwIHRoZSBzaW11bGF0ZWQgdGhyb3cgYmVjYXVzZSB0aGUgTExJbnQgYW5kIEpJVCB3
aWxsIGJlCiAgICAgLy8gY2hlY2tpbmcgZm9yIHRoZSBleGNlcHRpb24gdGhlaXIgb3duIHdheSBp
bnN0ZWFkIG9mIGNhbGxpbmcgVGhyb3dTY29wZTo6ZXhjZXB0aW9uKCkuCi0gICAgaWYgKHRvcFZN
RW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wVk1FbnRyeUZyYW1lKQorICAgIGlmICh0
b3BFbnRyeUZyYW1lICYmIHByZXZpb3VzU2NvcGUgPiB0b3BFbnRyeUZyYW1lKQogICAgICAgICB3
aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQgPSB0cnVlOwogICAgIAogICAgIGlmICghd2lsbEJlSGFu
ZGxlQnlMTEludE9ySklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDE4
MWUzYjcuLjNlZTUxODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTE4
NCw3ICsxODQsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAj
ZW5kaWYKICAgICAsIHZtVHlwZSh2bVR5cGUpCiAgICAgLCBjbGllbnREYXRhKDApCi0gICAgLCB0
b3BWTUVudHJ5RnJhbWUobnVsbHB0cikKKyAgICAsIHRvcEVudHJ5RnJhbWUobnVsbHB0cikKICAg
ICAsIHRvcENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCiAgICAgLCBwcm9taXNlRGVm
ZXJyZWRUaW1lcihzdGQ6Om1ha2VfdW5pcXVlPFByb21pc2VEZWZlcnJlZFRpbWVyPigqdGhpcykp
CiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlKHZtVHlwZSA9PSBEZWZhdWx0ID8gVGhyZWFkOjpj
dXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSA6IG5ldyBBdG9taWNTdHJpbmdUYWJsZSkKQEAg
LTM2OCw3ICszNjgsNyBAQCBWTTo6flZNKCkKICAgICBwcm9taXNlRGVmZXJyZWRUaW1lci0+c3Rv
cFJ1bm5pbmdUYXNrcygpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoV2FzbTo6
ZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpKQotICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgp
LnN0b3BBbGxQbGFuc0ZvclZNKCp0aGlzKTsKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3Qo
KS5zdG9wQWxsUGxhbnNGb3JDb250ZXh0KHdhc21Db250ZXh0KTsKICNlbmRpZgogICAgIGlmIChV
TkxJS0VMWShtX3dhdGNoZG9nKSkKICAgICAgICAgbV93YXRjaGRvZy0+d2lsbERlc3Ryb3lWTSh0
aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDk1NTg1OTQuLmQyMGUzOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1
ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQu
aCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CkBAIC0zMjksMTQgKzMzMCwxNSBA
QCBwdWJsaWM6CiAKICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENsaWVudERhdGEqIGNsaWVudERh
dGE7Ci0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSog
dG9wRW50cnlGcmFtZTsKICAgICAvLyBOT1RFOiBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiB3
aGlsZSByb2xsaW5nIGJhY2sgdGhlIGNhbGwgZnJhbWUsIHRoaXMgbWF5IGJlIGVxdWFsIHRvCi0g
ICAgLy8gdG9wVk1FbnRyeUZyYW1lLgorICAgIC8vIHRvcEVudHJ5RnJhbWUuCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIGEgdm9pZCosIGJlY2F1c2UgaXQgbWlnaHQgbm90IHBvaW50IHRv
IGEgQ2FsbEZyYW1lLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjA0NDEKICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZSB7IG51bGxwdHIgfTsKLSAg
ICAvLyBGSVhNRTogU2F2ZSB0aGlzIHN0YXRlIGVsc2V3aGVyZSB0byBhbGxvdyBQSUMuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3NzMKLSAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIHdhc21Db250ZXh0IHsgbnVsbHB0ciB9OworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICBXYXNtOjpDb250ZXh0IHdhc21Db250ZXh0OworI2VuZGlmCiAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0
ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKQEAgLTUwMSw5ICs1MDMsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHRvcFZNRW50cnlGcmFtZU9mZnNldCgp
CisgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcFZNRW50cnlGcmFtZSk7CisgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUpOwogICAgIH0KIAogICAg
IHZvaWQgcmVzdG9yZVByZXZpb3VzRXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IHNl
dEV4Y2VwdGlvbihleGNlcHRpb24pOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCmluZGV4IGRlYWE0NDkuLjg3M2QzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC04OSw3ICs4OSw3IEBAIGlubGluZSBDYWxsRnJhbWUq
IHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSkKICAgICByZXR1
cm4gdG9wQ2FsbEZyYW1lOwogfQogCi1zdGF0aWMgYm9vbCBpc1NhbmVGcmFtZShDYWxsRnJhbWUq
IGZyYW1lLCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBWTUVudHJ5RnJhbWUqIGVudHJ5RnJhbWUs
IFN0YWNrQm91bmRzIHN0YWNrQm91bmRzKQorc3RhdGljIGJvb2wgaXNTYW5lRnJhbWUoQ2FsbEZy
YW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgRW50cnlGcmFtZSogZW50cnlGcmFt
ZSwgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMpCiB7CiAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZyYW1lKSA+PSByZWludGVycHJldF9jYXN0PHZvaWQqPihlbnRyeUZyYW1lKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIxLDE4ICsxMjEsMTggQEAgdm9pZCBWTVRyYXBzOjp0
cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91
bmRzIHN0YWMKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGZvdW5kQ29kZUJsb2NrID0gbnVsbHB0
cjsKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsK
KyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKIAogICAgIC8v
IFdlIGRvbid0IGhhdmUgYSBjYWxsZWUgdG8gc3RhcnQgd2l0aC4gU28sIHVzZSB0aGUgZW5kIG9m
IHRoZSBzdGFjayB0byBrZWVwIHRoZQogICAgIC8vIGlzU2FuZUZyYW1lKCkgY2hlY2tlciBiZWxv
dyBoYXBweSBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi4gSXQgd2lsbCBzdGlsbCBjaGVjawogICAg
IC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlzIGluIHRoZSBzdGFja0JvdW5kcy4KICAg
ICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihz
dGFja0JvdW5kcy5lbmQoKSk7CiAKLSAgICBpZiAoIXZtRW50cnlGcmFtZSB8fCAhY2FsbEZyYW1l
KQorICAgIGlmICghZW50cnlGcmFtZSB8fCAhY2FsbEZyYW1lKQogICAgICAgICByZXR1cm47IC8v
IE5vdCBydW5uaW5nIEpTIGNvZGUuIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRl
ci4KIAogICAgIGRvIHsKLSAgICAgICAgaWYgKCFpc1NhbmVGcmFtZShjYWxsRnJhbWUsIGNhbGxl
ZUZyYW1lLCB2bUVudHJ5RnJhbWUsIHN0YWNrQm91bmRzKSkKKyAgICAgICAgaWYgKCFpc1NhbmVG
cmFtZShjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBlbnRyeUZyYW1lLCBzdGFja0JvdW5kcykpCiAg
ICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRl
ci4KIAogICAgICAgICBDb2RlQmxvY2sqIGNhbmRpZGF0ZUNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CkBAIC0xNDIsOSArMTQyLDkgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxs
VHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMK
ICAgICAgICAgfQogCiAgICAgICAgIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lOwotICAgICAgICBj
YWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgICAg
IGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAKLSAgICB9
IHdoaWxlIChjYWxsRnJhbWUgJiYgdm1FbnRyeUZyYW1lKTsKKyAgICB9IHdoaWxlIChjYWxsRnJh
bWUgJiYgZW50cnlGcmFtZSk7CiAKICAgICBpZiAoIWZvdW5kQ29kZUJsb2NrKSB7CiAgICAgICAg
IC8vIFdlIG1heSBoYXZlIGp1c3QgZW50ZXJlZCB0aGUgZnJhbWUgYW5kIHRoZSBjb2RlQmxvY2sg
cG9pbnRlciBpcyBub3QKQEAgLTE4MSwxNyArMTgxLDE3IEBAIHZvaWQgVk1UcmFwczo6aW52YWxp
ZGF0ZUNvZGVCbG9ja3NPblN0YWNrKExvY2tlcjxMb2NrPiYsIEV4ZWNTdGF0ZSogdG9wQ2FsbEZy
YW1lCiAKICAgICBtX25lZWRUb0ludmFsaWRhdGVkQ29kZUJsb2NrcyA9IGZhbHNlOwogCi0gICAg
Vk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bSgpLnRvcFZNRW50cnlGcmFtZTsKKyAgICBF
bnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0oKS50b3BFbnRyeUZyYW1lOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gdG9wQ2FsbEZyYW1lOwogCi0gICAgaWYgKCF2bUVudHJ5RnJhbWUpCisg
ICAgaWYgKCFlbnRyeUZyYW1lKQogICAgICAgICByZXR1cm47IC8vIE5vdCBydW5uaW5nIEpTIGNv
ZGUuIE5vdGhpbmcgdG8gaW52YWxpZGF0ZS4KIAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
ICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvbkR1ZVRvVk1UcmFwcyk7Ci0gICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCBhZDdkNjIxLi5hZjZjZmU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCkBAIC00OSw4ICs0OSw2IEBACiAjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAiSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5n
Q29udmVudGlvbi5oIgpAQCAtMTc4LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAK
LSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwg
SW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9y
eU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2Vk
dXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYs
IE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGll
clVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAg
LTI0Nyw3ICsyNDUsNyBAQCBwcml2YXRlOgogCiAgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKIAot
ICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1
ZSopOworICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFz
aWNCbG9jayosIFZhbHVlKik7CiAgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0
ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiwg
QmFzaWNCbG9jayopOwogCiAgICAgT3JpZ2luIG9yaWdpbigpOwpAQCAtMjY3LDcgKzI2NSw3IEBA
IHByaXZhdGU6CiAgICAgSW5zZXJ0aW9uU2V0IG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXM7CiAg
ICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcg
bV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9OwotICAgIEdQUlJlZyBtX3dhc21Db250
ZXh0R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9
OwogCiAgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1ZSB7IG51bGxwdHIgfTsgLy8gQWx3YXlzIHVz
ZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRl
cmlhbGl6ZWQgd2hlbiB1c2VkLgpAQCAtMjkxLDM3ICsyODksMzcgQEAgaW50MzJfdCBCM0lSR2Vu
ZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQz
Ml90IG9mZnMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnJl
c3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1
ZSogYXJnKQordm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQ
cm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJnKQogewotICAgIGlm
ICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMo
KSkgewogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKLSAgICAgICAg
aWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0
ZXIoKSkKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNl
TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKLSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBh
bGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHROZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0
KHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250
ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAg
ICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEJlY2F1c2Ug
V2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5v
dCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgor
ICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4
dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJl
c3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgogICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJv
bSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQg
cmVnaXN0ZXIuCiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CiAgICAgRWZm
ZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIGVmZmVjdHMud3JpdGVzUGlubmVk
ID0gdHJ1ZTsKICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7Ci0gICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxh
dGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEdQUikpOworICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOwogICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwot
ICAgIEdQUlJlZyB3YXNtQ29udGV4dEdQUiA9IG1fd2FzbUNvbnRleHRHUFI7CisgICAgR1BSUmVn
IHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKLSAgICAgICAgaml0Lm1vdmUocGFyYW1b
MF0uZ3ByKCksIHdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3By
KCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUm
IHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgVGllclVwQ291bnQqIHRpZXJVcCkKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5h
bEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUg
Y29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGll
clVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9pbmZv
KGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBp
bGF0aW9uTW9kZSkKQEAgLTMzOSw5ICszMzcsOSBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJh
dG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQog
ICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAg
bV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CiAKLSAgICBtX3dhc21Db250ZXh0
R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dFBvaW50ZXI7Ci0gICAgaWYgKCF1c2VGYXN0VExT
Rm9yQ29udGV4dCgpKQotICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEdQ
Uik7CisgICAgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4
dEluc3RhbmNlUG9pbnRlcjsKKyAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAg
ICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAKICAgICBp
ZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKICAgICAgICAgQVNTRVJUKCFwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CkBAIC0zNTAsNiArMzQ4LDkgQEAg
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIG1fcHJvYy5waW5SZWdpc3Rlcihy
ZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAgICAgfQogCisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlv
bikKKyAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhy
b3dXYXNtRXhjZXB0aW9uKTsKKwogICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3By
b2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBwaW5uZWRHUFIpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKQEAgLTM2Myw2ICszNjQsMTYgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRp
b25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAg
ICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgLy8gTW9zdCBtZW1vcnkgYWNjZXNzZXMg
aW4gc2lnbmFsaW5nIG1vZGUgZG9uJ3QgZG8gYW4gZXhwbGljaXQgZXhjZXB0aW9uIGNoZWNrIGJl
Y2F1c2UgdGhleSBjYW4gcmVseSBvbiBmYXVsdCBoYW5kbGluZyB0byBkZXRlY3Qgb3V0LW9mLWJv
dW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZSB0
aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNhbiBqdW1wIHRvIHRoYXQgdGh1bmsuCisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKICAgICB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2Nh
dGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwpAQCAtMzczLDEyICszODQs
MTIgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0g
c3RhY2tPdmVyZmxvd0NoZWNrOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNv
bWVSZWdpc3RlcihmcmFtZVBvaW50ZXIpOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmNs
b2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAgICAgaWYg
KCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVz
ZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHQgcmVnaXN0ZXIgYW5kIGRvZXMg
bm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUu
CisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5j
ZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0
IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJv
bSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQg
cmVnaXN0ZXIuCiAgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gZmFsc2U7CiAgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMu
cmVhZHNQaW5uZWQgPSB0cnVlOwotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1
bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0R1BSKTsKKyAgICAgICAg
ICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWco
bV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAgICAgICAgfQogICAgICAgICBzdGFja092ZXJm
bG93Q2hlY2stPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDI7CiAgICAgICAgIHN0YWNrT3ZlcmZs
b3dDaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewpAQCAtNDAxLDcgKzQxMiw3IEBAIEIz
SVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8s
IFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dDaGVj
ayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2ZWRa
b25lU2l6ZSgpOwogICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21ha2Vz
Q2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5lZWRV
bmRlcmZsb3dDaGVjazsKIAotICAgICAgICAgICAgR1BSUmVnIGNvbnRleHQgPSB1c2VGYXN0VExT
Rm9yQ29udGV4dCgpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEdQUjsKKyAgICAg
ICAgICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyBw
YXJhbXNbMF0uZ3ByKCkgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAKICAgICAgICAgICAg
IC8vIFRoaXMgYWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYg
dGhlaXIgZnJhbWUgc2l6ZSBpcyB3aXRoaW4KICAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRz
IHNpbmNlIHRoZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCkBA
IC00MTEsMTAgKzQyMiwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKIAotICAgICAgICAgICAg
ICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZFdhc21Db250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1
c2VGYXN0VExTKCkpCisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0
YW5jZShjb250ZXh0SW5zdGFuY2UpOwogCi0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mQ2FjaGVkU3RhY2tM
aW1pdCgpKSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0
Y2gxKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7
CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCkBAIC00
MjMsMTAgKzQzNCwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9u
TGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNt
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIHVzZUZhc3RUTFNGb3JDb250ZXh0
KCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250
ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVj
ayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNv
cnJlY3QuCi0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYg
YWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQo
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
SWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRX
YXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBk
b24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRj
aHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFj
ayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KICAgICAgICAg
ICAgIH0KQEAgLTQzOCw3ICs0NDksNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogCiB2b2lk
IEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9y
eUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBC
YXNpY0Jsb2NrKiBibG9jaykKIHsKLSAgICByZXN0b3JlV2FzbUNvbnRleHQocHJvYywgYmxvY2ss
IGluc3RhbmNlKTsKKyAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwcm9jLCBibG9jaywg
aW5zdGFuY2UpOwogCiAgICAgaWYgKCEhbWVtb3J5KSB7CiAgICAgICAgIGNvbnN0IFBpbm5lZFJl
Z2lzdGVySW5mbyogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAt
NDU4LDEyICs0NjksMTIgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlH
bG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3IKIAogICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBH
UFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdw
cigpLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNp
emVSZWdpc3RlcnM7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwog
ICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxv
d2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVu
dCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9m
ZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5Ojpv
ZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5
OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgaml0
LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0
KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwog
ICAgICAgICB9KTsKQEAgLTU0MSwyNCArNTUyLDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
VW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
R3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewotICAgIGludDMyX3QgKCpncm93TWVtb3J5KSAoQ29udGV4dCos
IGludDMyX3QpID0gW10gKENvbnRleHQqIHdhc21Db250ZXh0LCBpbnQzMl90IGRlbHRhKSAtPiBp
bnQzMl90IHsKLSAgICAgICAgVk0mIHZtID0gKndhc21Db250ZXh0LT52bSgpOwotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgSlNXZWJBc3Nl
bWJseU1lbW9yeSogd2FzbU1lbW9yeSA9IHdhc21Db250ZXh0LT5tZW1vcnkoKTsKLQorICAgIGlu
dDMyX3QgKCpncm93TWVtb3J5KShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBpbnQzMl90KSA9IFtd
IChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQz
Ml90IHsKICAgICAgICAgaWYgKGRlbHRhIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAot
ICAgICAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IGZhbHNlOwotICAg
ICAgICAvLyBncm93KCkgZG9lcyBub3QgcmVxdWlyZSBFeGVjU3RhdGUqIGlmIGl0IGRvZXNuJ3Qg
dGhyb3cgZXhjZXB0aW9ucy4KLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbnVsbHB0cjsKLSAg
ICAgICAgUGFnZUNvdW50IHJlc3VsdCA9IHdhc21NZW1vcnktPmdyb3codm0sIGV4ZWMsIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihkZWx0YSksIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7
Ci0gICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgICAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYXV0byBncm93biA9IGlu
c3RhbmNlLT5pbnRlcm5hbE1lbW9yeSgpLmdyb3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAg
IGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAg
ICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAg
ICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAg
ICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVt
OgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToK
KyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAot
ICAgICAgICByZXR1cm4gcmVzdWx0LnBhZ2VDb3VudCgpOworICAgICAgICByZXR1cm4gZ3Jvd24u
dmFsdWUoKS5wYWdlQ291bnQoKTsKICAgICB9OwogCiAgICAgcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKQEAgLTU3
MiwxMyArNTgxLDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNz
aW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAogYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mTWVtb3J5KCkpKTsKKyAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgp
LCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSk7CiAKLSAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihudWxs
cHRyKS0+bWVtb3J5KCktPm1lbW9yeSgpLnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJj
b2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdp
bigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlNZW1vcnk6
Om9mZnNldE9mU2l6ZSgpKSk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3Rh
dGljX2Nhc3Q8V2FzbTo6TWVtb3J5Kj4obnVsbHB0ciktPnNpemUoKSkpID09IHNpemVvZih1aW50
NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKKyAgICBWYWx1ZSogc2l6ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50
NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KFdhc206Ok1lbW9y
eTo6b2Zmc2V0T2ZTaXplKCkpKTsKICAgICAKICAgICBjb25zdGV4cHIgdWludDMyX3Qgc2hpZnRW
YWx1ZSA9IDE2OwotICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAxIDw8
IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY29y
cmVjdC4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8
PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNv
cnJlY3QuIik7CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKICAgICAgICAgc2l6ZSwgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNoaWZ0VmFs
dWUpKTsKIApAQCAtMTA2OSwxNCArMTA3OCwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAg
ICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxB
cmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCiAgICAgICAg
IC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRp
bmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBi
ZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgIFZhbHVlKiBmdW5jdGlvbkltcG9ydCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKSk7
Ci0gICAgICAgIFZhbHVlKiBqc1R5cGVPZkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4oKSwgZnVuY3Rpb25JbXBvcnQs
IHNhZmVDYXN0PGludDMyX3Q+KEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpKTsKLSAgICAg
ICAgVmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwganNUeXBlT2ZJbXBvcnQsIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBXZWJBc3NlbWJseUZ1bmN0
aW9uVHlwZSkpOworICAgICAgICBWYWx1ZSogdGFyZ2V0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAgICAg
ICBWYWx1ZSogaXNXYXNtQ2FsbCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgTm90RXF1YWwsIG9yaWdpbigpLCB0YXJnZXRJbnN0YW5jZSwgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKTsKIAogICAgICAg
ICBCYXNpY0Jsb2NrKiBpc1dhc21CbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBC
YXNpY0Jsb2NrKiBpc0pTQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNC
bG9jayogaXNFbWJlZGRlckJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2lu
KCksIGlzV2FzbUNhbGwsIEZyZXF1ZW50ZWRCbG9jayhpc1dhc21CbG9jayksIEZyZXF1ZW50ZWRC
bG9jayhpc0pTQmxvY2spKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVu
dGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2NrKSk7
CiAKICAgICAgICAgVmFsdWUqIHdhc21DYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9u
KCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlw
ZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50KSB7CkBAIC0xMDk3LDE1ICsxMTA1LDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAg
ICAgICAgVXBzaWxvblZhbHVlKiB3YXNtQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09
IFZvaWQgPyBudWxscHRyIDogaXNXYXNtQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHdhc21DYWxsUmVzdWx0KTsKICAgICAgICAgaXNXYXNtQmxvY2stPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24p
OwogCi0gICAgICAgIC8vIEZJWE1FOiBMZXRzIHJlbW92ZSB0aGlzIGluZGlyZWN0aW9uIGJ5IGNy
ZWF0aW5nIGEgUElDIGZyaWVuZGx5IElDCisgICAgICAgIC8vIEZJWE1FOiBMZXQncyByZW1vdmUg
dGhpcyBpbmRpcmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmllbmRseSBJQwogICAgICAgICAv
LyBmb3IgY2FsbHMgb3V0IHRvIEpTLiBUaGlzIHNob3VsZG4ndCBiZSB0aGF0IGhhcmQgdG8gZG8u
IFdlIGNvdWxkIHByb2JhYmx5CiAgICAgICAgIC8vIGltcGxlbWVudCB0aGUgSUMgdG8gYmUgb3Zl
ciBXYXNtOjpDb250ZXh0Ki4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MDM3NQotICAgICAgICBWYWx1ZSogY29kZUJsb2NrID0gaXNKU0Jsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKLSAgICAgICAgICAgIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSkpOwotICAgICAgICBWYWx1
ZSoganVtcERlc3RpbmF0aW9uID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywKLSAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxv
Y2ssIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6Om9mZnNldE9mSW1w
b3J0V2FzbVRvSlNTdHViKGZ1bmN0aW9uSW5kZXgpKSk7Ci0gICAgICAgIFZhbHVlKiBqc0NhbGxS
ZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBpc0pTQmxv
Y2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgVmFsdWUq
IGNvZGVCbG9jayA9IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsCisgICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VW
YWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
V2FzbUNvZGVCbG9jaygpKSk7CisgICAgICAgIFZhbHVlKiBqdW1wRGVzdGluYXRpb24gPSBpc0Vt
YmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNvZGVCbG9jaywgc2FmZUNhc3Q8aW50MzJf
dD4oQ29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihmdW5jdGlvbklu
ZGV4KSkpOworICAgICAgICBWYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4oKSwg
YXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbJl0gKFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMu
d3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
LnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTExMTksOCArMTEyNyw4IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwKICAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUg
PT0gVm9pZCA/IDAgOiAxXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgVXBzaWxvblZhbHVlKiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJu
VHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzSlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwganNDYWxsUmVzdWx0KTsKLSAgICAgICAgaXNKU0Jsb2NrLT5h
cHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9u
KTsKKyAgICAgICAgVXBzaWxvblZhbHVlKiBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uID0gcmV0
dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFVw
c2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZW1iZWRkZXJDYWxsUmVzdWx0KTsKKyAgICAg
ICAgaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBv
cmlnaW4oKSwgY29udGludWF0aW9uKTsKIAogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRp
bnVhdGlvbjsKIApAQCAtMTEyOSw3ICsxMTM3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRpbnVhdGlvbi0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIFBoaSwgdG9CM1R5cGUocmV0dXJuVHlwZSksIG9yaWdpbigpKTsK
ICAgICAgICAgICAgIHdhc21DYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7Ci0gICAg
ICAgICAgICBqc0NhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAgICAg
IGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1i
bHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KQEAg
LTExNjUsMTcgKzExNzMsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qo
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICBtX21heE51
bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIGNh
bGxhYmxlRnVuY3Rpb25CdWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUganNGdW5jdGlvbkJ1ZmZl
cjsKKyAgICBFeHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXI7CiAgICAgRXhwcmVzc2lvblR5
cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemU7CiAgICAgewogICAgICAgICBFeHByZXNzaW9u
VHlwZSB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBpbnN0YW5jZVZh
bHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZU
YWJsZSgpKSk7CisgICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtVGFibGUoKSkpOwogICAgICAgICBj
YWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAg
IHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mRnVu
Y3Rpb25zKCkpKTsKLSAgICAgICAganNGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRh
YmxlOjpvZmZzZXRPZkpTRnVuY3Rpb25zKCkpKTsKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2Fz
dDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSkpOworICAgICAgICBp
bnN0YW5jZXNCdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUs
IHNhZmVDYXN0PGludDMyX3Q+KFdhc206OlRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpKSk7CiAg
ICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksCi0gICAgICAg
ICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRP
ZlNpemUoKSkpOworICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFdhc206OlRh
YmxlOjpvZmZzZXRPZlNpemUoKSkpOwogICAgIH0KIAogICAgIC8vIENoZWNrIHRoZSBpbmRleCB3
ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCkBAIC0xMTk1LDYgKzEyMDMsNyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3NpbwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb24gPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNh
bGxhYmxlRnVuY3Rpb25CdWZmZXIsIG9mZnNldCk7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSBD
YWxsYWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAi
aW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgor
ICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0
IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCiAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoQ2FsbGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1
aW50MzJfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpMzIiKTsKICAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBz
YWZlQ2FzdDxpbnQzMl90PihPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0
dXJlSW5kZXgpKSk7CiAgICAgewpAQCAtMTIyMywxOSArMTIzMiwxNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PEV4cHJlc3NpbwogICAgIHsKICAgICAgICAgVmFsdWUqIG9mZnNldCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwg
Y2FsbGVlSW5kZXgpLAotICAgICAgICAgICAgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9m
KFdyaXRlQmFycmllcjxKU09iamVjdD4pKSk7Ci0gICAgICAgIFZhbHVlKiBqc09iamVjdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGpzRnVuY3Rpb25CdWZmZXIsIG9mZnNldCkp
OworICAgICAgICAgICAgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdhc206Okluc3Rh
bmNlKikpKTsKKyAgICAgICAgVmFsdWUqIG5ld0NvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1ZmZlciwgb2Zmc2V0KSk7CiAKICAgICAg
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAg
IEJhc2ljQmxvY2sqIGRvQ29udGV4dFN3aXRjaCA9IG1fcHJvYy5hZGRCbG9jaygpOwogCi0gICAg
ICAgIFZhbHVlKiBuZXdDb250ZXh0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAg
IGpzT2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zm
c2V0T2ZJbnN0YW5jZSgpKSk7Ci0gICAgICAgIFZhbHVlKiBpc1NhbWVDb250ZXh0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCi0gICAg
ICAgICAgICBuZXdDb250ZXh0LCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAgICBWYWx1ZSogaXNT
YW1lQ29udGV4dEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksCisgICAgICAgICAgICBuZXdDb250ZXh0SW5zdGFuY2UsIGlu
c3RhbmNlVmFsdWUoKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIGlzU2FtZUNv
bnRleHQsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBGcmVxdWVudGVkQmxvY2soZG9D
b250ZXh0U3dpdGNoKSk7CisgICAgICAgICAgICBpc1NhbWVDb250ZXh0SW5zdGFuY2UsIEZyZXF1
ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBGcmVxdWVudGVkQmxvY2soZG9Db250ZXh0U3dpdGNo
KSk7CiAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gZG9Db250ZXh0U3dp
dGNoLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4o
KSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAg
LTEyNDMsMjYgKzEyNTAsMjYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qo
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQ
aW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2lu
ZykpOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0LCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG5ld0Nv
bnRleHRJbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgICAgIHBhdGNocG9p
bnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAg
ICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgbmV3Q29udGV4dCA9IHBhcmFtc1swXS5ncHIoKTsKLSAgICAgICAgICAgIEdQ
UlJlZyBvbGRDb250ZXh0ID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG5l
d0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBv
bGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICBjb25zdCBQ
aW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgp
OwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdp
c3RlcnM7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7Ci0gICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dCAhPSBiYXNlTWVtb3J5
KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250
ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOwot
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVz
cyhuZXdDb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwotICAg
ICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHQobmV3Q29udGV4dCk7Ci0gICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dCwgQ29udGV4dDo6b2Zm
c2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBKU1dlYkFzc2VtYmx5TWVtb3J5Ki4KKyAg
ICAgICAgICAgIEFTU0VSVChuZXdDb250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3Rh
bmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwg
YmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgICAgICAgICAgaml0LnN0b3JlV2Fz
bUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNt
OjpNZW1vcnkqLgogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKICAg
ICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7
Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRl
eHQpOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdD
b250ZXh0SW5zdGFuY2UpOwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zm
c2V0KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
TWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBd
LnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgotICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9m
ZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbU1lbW9yeTo6dm9pZCouCisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2Fz
bTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8v
IE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOyAvLyBXYXNtOjpNZW1vcnk6OnZvaWQqLgogICAgICAgICB9KTsKICAgICAgICAgZG9Db250
ZXh0U3dpdGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwg
Y29udGludWF0aW9uKTsKIApAQCAtMTMzOSwxOTQgKzEzNDYsNiBAQCB2b2lkIEIzSVJHZW5lcmF0
b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3Qg
RXhwcmVzcwogICAgIGRhdGFMb2dMbigpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGls
YXRpb25Db250ZXh0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkK
LXsKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpjb21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBv
aW50SklUOwotCi0gICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVu
Y3Rpb24+KCk7Ci0gICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0KLSAgICAvLyBGSVhN
RSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTMyMQotICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTY0KDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVM
b2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5z
dG9yZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0ciogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2Nh
dGlvbjsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxl
ZU1vdmVMb2NhdGlvbik7Ci0gICAgfSk7Ci0KLSAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8m
IHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwotICAgIFJlZ2lzdGVyU2V0
IHRvU2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1vZGUpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgIHVuc2lnbmVkIHRvU2F2ZVNpemUgPSB0b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCk7Ci0g
ICAgLy8gVGhleSBzaG91bGQgYWxsIGJlIGNhbGxlZSBzYXZlcy4KLSAgICB0b1NhdmUuZmlsdGVy
KFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIEFTU0VSVCh0b1NhdmUu
bnVtYmVyT2ZTZXRHUFJzKCkgPT0gdG9TYXZlU2l6ZSk7Ci0jZW5kaWYKLQotICAgIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwodG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlz
dDo6T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJhc2VkKTsKLSAgICByZXN1bHQtPmVudHJ5
cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7Ci0KLSAgICB1bnNp
Z25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZv
aWQqKTsKLSAgICB0b3RhbEZyYW1lU2l6ZSArPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRl
clNpemVJbkJ5dGVzKCk7Ci0gICAgdG90YWxGcmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpOwotICAgIHVuc2lnbmVkIG51bUdQUnMgPSAwOwotICAgIHVuc2lnbmVkIG51bUZQUnMg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKLSAg
ICAgICAgY2FzZSBXYXNtOjpJNjQ6Ci0gICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAg
ICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUo
KSkKLSAgICAgICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOwotICAg
ICAgICAgICAgKytudW1HUFJzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2Fz
bTo6RjMyOgotICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgIGlmIChudW1GUFJz
ID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVt
RlBSczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRv
dGFsRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgdG90YWxGcmFtZVNpemUpOwotICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0KLSAgICAvLyBXZSBzYXZlIGFsbCB0aGVzZSByZWdpc3RlcnMgcmVnYXJkbGVz
cyBvZiBoYXZpbmcgYSBtZW1vcnkgb3Igbm90LgotICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCB3
ZSB1c2Ugb25lIG9mIHRoZXNlIGFzIGEgc2NyYXRjaC4gVGhhdCBzYWlkLAotICAgIC8vIGFsbW9z
dCBhbGwgcmVhbCB3YXNtIHByb2dyYW1zIHVzZSBtZW1vcnksIHNvIGl0J3Mgbm90IHJlYWxseQot
ICAgIC8vIHdvcnRoIG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIHRoYXQgdGhleSBkb24ndC4KLSAg
ICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9T
cGlsbCkgewotICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0g
ICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKLSAgICAgICAg
aml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgd2FzbUNvbnRleHRHUFIg
PSBwaW5uZWRSZWdzLndhc21Db250ZXh0UG9pbnRlcjsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgICAgIG51bUdQUnMgPSAwOwotICAgICAg
ICBudW1GUFJzID0gMDsKLSAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQg
cmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCi0gICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBh
IHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KLSAgICAgICAgR1BSUmVn
IHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotCi0gICAgICAgIHB0
cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBwYXNzZXMgV2FzbTo6
Q29udGV4dCogYXMgdGhlIGZpcnN0IEpTIGFyZ3VtZW50IHdoZW4gd2UncmUKLSAgICAgICAgLy8g
bm90IHVzaW5nIGZhc3QgVExTIHRvIGhvbGQgdGhlIFdhc206OkNvbnRleHQqLgotICAgICAgICBp
ZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQp
LCB3YXNtQ29udGV4dEdQUik7Ci0gICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZih2b2lkKik7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKysp
IHsKLSAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAg
ICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJn
cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChp
KSA9PSBXYXNtOjpJMzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCks
IHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRj
aFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBz
Y3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hS
ZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0
dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkkzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5n
cHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJz
XS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbnVtR1BSczsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAg
ICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6
RjMyKQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbnVtRlBSczsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAganNPZmZzZXQg
Kz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
IWluZm8ubWVtb3J5KSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5i
YXNlTWVtb3J5UG9pbnRlcjsKLQotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkp
Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNvbnRl
eHRHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoYmFz
ZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFz
ZU1lbW9yeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpT
aWduYWxpbmcpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVn
cy5zaXplUmVnaXN0ZXJzOwotICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAx
KTsKLSAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBm
b2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNl
cXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tp
XS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXpl
UmVnaXN0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5
KCkpLCBiYXNlTWVtb3J5KTsKLSAgICB9Ci0KLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9
IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICB1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCk7
Ci0gICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGluZm8uZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBj
YWxsLCBmdW5jdGlvbkluZGV4U3BhY2VdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChjYWxsKSwgZnVuY3Rpb25JbmRleFNwYWNlIH0pOwotICAgIH0pOwotCi0KLSAg
ICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9T
cGlsbCkgewotICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0g
ICAgICAgIEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBw
dHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7Ci0gICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zm
c2V0KSwgcmVnKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkp
IHsKLSAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgaml0Lm1vdmVGbG9hdFRvMzIoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBqaXQuZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCiBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogewogICAgIE9w
Y29kZU9yaWdpbiBvcmlnaW4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXItPmN1
cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKTsKQEAgLTE1MzQsNyArMTM1Myw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gT3JpZ2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxPcmlnaW4+KG9yaWdpbik7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCitF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1
aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9k
ZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQogewogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5h
bEZ1bmN0aW9uPigpOwogCkBAIC0xNTU4LDExICsxMzc3LDExIEBAIEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGls
YXRpb25DCiAgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZl
bCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgp
KTsKIAotICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dChpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5n
ZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVu
Y3Rpb25JbmRleCwgdGllclVwKTsKLSAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBw
YXJzZXIoY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwg
aW5mbyk7CisgICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJl
c3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEZ1bmN0
aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKLSAgICBjb250ZXh0Lmluc2VydENvbnN0YW50
cygpOworICAgIGlyR2VuZXJhdG9yLmluc2VydENvbnN0YW50cygpOwogCiAgICAgcHJvY2VkdXJl
LnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlMmM2YWRi
Li42OWJlNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAj
aW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2lu
Y2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3Vu
dC5oIgpAQCAtNTQsOSArNTUsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlwcm9k
dWN0czsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhf
dCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1v
ZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwotCi1z
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENv
bXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCk7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGls
YXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRy
LCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBs
YW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4
IDIyZWRkMTYuLmQwZWFmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAKQEAgLTI5LDggKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNp
bmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTUzLDIx
ICs1MSwyMSBAQCBuYW1lc3BhY2UgV2FzbUJCUVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0qIHZtLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCi0gICAgOiBCYXNlKHZtLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spKQorQkJR
UGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGlu
Zm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKKyAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92
ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRp
b24pCiAgICAgLCBtX3N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpCiAgICAgLCBtX2FzeW5jV29yayh3
b3JrKQogewogfQogCi1CQlFQbGFuOjpCQlFQbGFuKFZNKiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYg
c291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQkJR
UGxhbih2bSwgYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkp
KSwgd29yaywgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4
dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRh
c2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIs
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBCQlFQbGFuKGNv
bnRleHQsIGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSks
IHdvcmssIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhy
b3dXYXNtRXhjZXB0aW9uKQogewogICAgIG1fc3RhdGUgPSBTdGF0ZTo6SW5pdGlhbDsKIH0KIAot
QkJRUGxhbjo6QkJRUGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNv
dXJjZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6
IEJhc2Uodm0sIHNvdXJjZSwgc291cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6
QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBz
b3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAg
OiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQogICAg
ICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CkBA
IC0yNjksNyArMjY3LDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKIAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1
bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7CiAgICAgICAg
IFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZt
X3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gcGFy
c2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0
c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9u
SW5kZXgsIHRpZXJVcCk7CisgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBD
b21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dh
c21FeGNlcHRpb24pOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVz
dWx0KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAt
Mjg1LDcgKzI4Myw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiAKICAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMu
Y29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9qc1RvV2FzbUludGVy
bmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIobV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9l
bWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBtX2NyZWF0
ZUVtYmVkZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIHNp
Z25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgfQog
CkBAIC0zMTQsMTQgKzMxMiwxNCBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53
YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKGF1dG8ganNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9qc1RvV2FzbUludGVybmFsRnVu
Y3Rpb25zLmdldChmdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgaWYgKGF1dG8gZW1iZWRk
ZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rp
b25zLmdldChmdW5jdGlvbkluZGV4KSkgewogICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcigqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChsb2NrZXIs
IG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBlbnRyeXBv
aW50IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBqc1RvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgZW1iZWRkZXJU
b1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0g
JXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCiAgICAgICAgICAgICAgICAgICAgIFdU
Rk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCAzNTlmMTNiLi5jNmVh
NDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKQEAgLTI4LDEy
ICsyOCwxMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0
aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21Q
bGFuLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5o
PgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtNDEsOCArNDEsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxM
aW5rSW5mbzsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7
CiAKIG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTAsMTIgKzQ4LDEzIEBAIGNsYXNzIEJCUVBsYW4g
ZmluYWwgOiBwdWJsaWMgUGxhbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47CiAg
ICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsK
KwogICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5j
ZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4K
LSAgICBCQlFQbGFuKFZNKiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21w
bGV0aW9uVGFzayYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKFZNKiwgVmVjdG9y
PHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgQkJRUGxhbihD
b250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFz
ayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKENvbnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5
bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dX
YXNtRXhjZXB0aW9uKTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5
IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2
YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJpZCBv
ZiBmdW5jdGlvbiB0ZXN0cyB3ZSBzaG91bGQgcmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMgY29u
c3RydWN0b3IuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSosIGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQXN5bmNX
b3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVs
ZSgpOwogCkBAIC0xNDEsNyArMTQwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAg
SGFzaFNldDx1aW50MzJfdCwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1
bmN0aW9uSW5kaWNlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fanNUb1dhc21JbnRl
cm5hbEZ1bmN0aW9uczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2Nv
bXBpbGF0aW9uQ29udGV4dHM7CiAgICAgVmVjdG9yPFRpZXJVcENvdW50PiBtX3RpZXJVcENvdW50
czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5J
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMu
aAppbmRleCAxYjhiNTZmLi40NDQ3OTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbklubGluZXMuaApAQCAtMzksMTAgKzM5LDEwIEBAIHZvaWQgQkJRUGxh
bjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYgY2FsbGJhY2spCiAgICAgQVNTRVJU
KCFmYWlsZWQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAw
OyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7
ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7CiAKLSAgICAgICAgUmVmUHRyPFdhc206OkNhbGxl
ZT4ganNFbnRyeXBvaW50Q2FsbGVlOwotICAgICAgICBpZiAoYXV0byBqc1RvV2FzbUZ1bmN0aW9u
ID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgp
KSB7Ci0gICAgICAgICAgICBqc0VudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKGpzVG9XYXNtRnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihqc1RvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3Zl
TG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oanNFbnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7
CisgICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsK
KyAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgeworICAgICAg
ICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RG
TW92ZShlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2Fs
bGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENh
bGxlZS5nZXQoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVu
Y3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdl
dCgpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNv
bnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50
cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVu
dHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVT
ZWN0aW9uLmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKIAotICAgICAgICBjYWxsYmFj
ayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoanNFbnRyeXBvaW50Q2FsbGVlKSwgV1RG
TW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1
bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3
YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IDY3Y2NmNWUuLjQ5MTBjODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTI5LDU5NiArMjksMTQgQEAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNp
bmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKLSNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJOYXRpdmVFcnJvckNvbnN0cnVjdG9y
LmgiCi0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgiCi0jaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKLSNpbmNsdWRlICJXYXNtRXhj
ZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiB1c2lu
ZyBKSVQgPSBDQ2FsbEhlbHBlcnM7CiAKLXN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlND
ZWxsKEpJVCYgaml0LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKLXsKLSAg
ICAvLyBXZSdyZSBjYWxsaW5nIG91dCBvZiB0aGUgY3VycmVudCBXZWJBc3NlbWJseS5JbnN0YW5j
ZS4gVGhhdCBJbnN0YW5jZSBoYXMgYSBsaXN0IG9mIGFsbCBpdHMgaW1wb3J0IGZ1bmN0aW9ucy4K
LSAgICBqaXQubG9hZFdhc21Db250ZXh0KHJlc3VsdCk7Ci0gICAgaml0LmxvYWRQdHIoSklUOjpB
ZGRyZXNzKHJlc3VsdCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0
aW9uKGltcG9ydEluZGV4KSksIHJlc3VsdCk7Ci19Ci0KLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pzKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5m
bz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25l
ZCBpbXBvcnRJbmRleCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHBy
b3Blcmx5IGFic3RyYWN0IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KLSAgICAvLyBJdCdk
IGJlIHN1cGVyIGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjk0MDEKLSAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9
IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwotICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9u
JiBqc0NDID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAg
IHVuc2lnbmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBKSVQg
aml0OwotCi0gICAgLy8gTm90ZTogV2FzbUIzSVJHZW5lcmF0b3IgYXNzdW1lcyB0aGF0IHRoaXMg
c3R1YiB0cmVhdHMgU1AgYXMgYSBjYWxsZWUgc2F2ZS4KLSAgICAvLyBJZiB3ZSBldmVyIGNoYW5n
ZSB0aGlzLCB3ZSB3aWxsIGFsc28gbmVlZCB0byBjaGFuZ2UgV2FzbUIzSVJHZW5lcmF0b3IuCi0K
LSAgICAvLyBCZWxvdywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBp
cyBhbHdheXMgb24gdGhlIHN0YWNrLgotICAgIEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6ZSgp
KTsKLSAgICBBU1NFUlQoIWpzQ0MubV9mcHJBcmdzLnNpemUoKSk7Ci0KLSAgICBqaXQuZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigwKSwg
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJWE1F
IFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1MzIxCi0KLSAgICB7Ci0gICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0g
ZmFsc2U7Ci0gICAgICAgIGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpID09
IEk2NDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3Vu
dCAmJiAhaGFzQmFkSTY0VXNlOyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAg
ICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotCi0gICAgICAgICAgICBjYXNlIEk2NDogewotICAgICAgICAgICAgICAg
IGhhc0JhZEk2NFVzZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7Ci0gICAg
ICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigqdm0pOwotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
KEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIENhbGxlZS4K
LSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6
YXJndW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKLQotICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGpp
dC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICAgICAgICAgIHZvaWQgKCp0aHJv
d0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikgPSBbXSAoRXhlY1N0
YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0KSAtPiB2b2lkIHsK
LSAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSgqdm0pOwotICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICBh
dXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVj
dC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVNDSUlMaXRlcmFs
KCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0
ZWQgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+
Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWls
dXJlOjpPdXRPZk1lbW9yeSk7Ci0KLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0
aHJvd0JhZEk2NCk7Ci0gICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWld
IiwgaW1wb3J0SW5kZXgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEhlcmUgd2UgYXNz
dW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBsZWFzdCBhbGwgdGhl
IHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBzYXZlIGFuZCBy
ZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBhbHJlYWR5IHRvb2sg
Y2FyZSBvZiB0aGlzLgotICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVTYXZlcyA9IHdhc21D
Qy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgbWlzc2luZ0NhbGxlZVNhdmVzLmV4Y2x1ZGUo
anNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOwotICAgIEFTU0VSVChtaXNzaW5nQ2FsbGVlU2F2
ZXMuaXNFbXB0eSgpKTsKLQotICAgIGlmICghT3B0aW9uczo6dXNlQ2FsbElDc0ZvcldlYkFzc2Vt
Ymx5VG9KU0NhbGxzKCkpIHsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhcmdDb3VudCAqIHNpemVvZih1aW50NjRfdCkpOwot
ICAgICAgICBjaGFyKiBidWZmZXIgPSBhcmdDb3VudCA/IHN0YXRpY19jYXN0PGNoYXIqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKLSAgICAgICAgdW5zaWduZWQgbWFy
c2hhbGxlZEdQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0g
ICAgICAgIHVuc2lnbmVkIGJ1ZmZlck9mZnNldCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zm
c2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBjb25zdCBHUFJSZWcgc2NyYXRjaEdQUiA9IEdQ
UkluZm86OnJlZ0NTMDsKLSAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNp
emVvZihSZWdpc3RlcikpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpOwotCi0gICAgICAgIGZvciAo
dW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAg
ICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAg
ICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAg
ICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAg
Y2FzZSBJNjQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsK
LSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNp
emUoKSkKLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJz
aGFsbGVkR1BSc10uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdp
c3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBncHJS
ZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
NjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdw
clJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0
cihncHJSZWcsIGdwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBi
dWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IEYzMjogewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAg
aWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBh
bHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFi
bGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJn
dW1lbnRGUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAg
ICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVnLCBm
cHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciAr
IGJ1ZmZlck9mZnNldCk7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7
Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFy
c2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
c3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBz
Y3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAg
ICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJP
ZmZzZXQpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1
ZmZlck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlciksIHNjcmF0Y2hHUFIpOwotICAgICAgICBpZiAoYXJnQ291bnQpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSBHQyBzaG91bGQgbm90IGxvb2sgYXQgdGhpcyBidWZmZXIgYXQgYWxsLCB0
aGVzZSBhcmVuJ3QgSlNWYWx1ZXMuCi0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHVpbnQ2NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
U2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KikgPQotICAgICAgICAgICAgW10gKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGNhbGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVp
bnQ2NF90KiBidWZmZXIpIC0+IHVpbnQ2NF90IHsgCi0gICAgICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAg
ICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVy
ZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGFyZzsKLSAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgVm9pZDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBq
c051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihidWZmZXJbYXJnTnVtXSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRjMyOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9
IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJ1ZmZlclthcmdOdW1dKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICAgICAgICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShjYWxsZWUsIGNh
bGxEYXRhKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxs
VHlwZTo6Tm9uZSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMs
IGNhbGxlZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKLSAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOwotCi0gICAgICAg
ICAgICAgICAgdWludDY0X3QgcmVhbFJlc3VsdDsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlYWxSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHJlc3VsdC50b0ludDMyKGV4ZWMpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAg
ICAgICAgICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihyZXN1bHQudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVhbFJlc3VsdDsKLSAgICAgICAgICAgIH07Ci0gICAgICAg
IAotICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0g
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgICAg
ICAKLSAgICAgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1i
ZXJPZkFyZ3VtZW50UmVnaXN0ZXJzID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2Fs
bCBiZWxvdy4iKTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUlu
ZGV4KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOwotICAgICAgICBhdXRv
IGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRF
eGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVj
ayk7Ci0KLSAgICAgICAgLy8gZXhjZXB0aW9uIGhlcmUuCi0gICAgICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7Ci0gICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSog
ZXhlYykgLT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAg
ICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2Fs
bEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9OwotICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwg
PSBqaXQuY2FsbCgpOwotICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwot
Ci0gICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7Ci0gICAgICAgIHN3aXRjaCAoc2lnbmF0
dXJlLnJldHVyblR5cGUoKSkgewotICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgaml0
Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEYz
MjogewotICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBqaXQuY29udmVydERv
dWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVl
RlBSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGppdC5lbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOwotICAgICAgICBqaXQucmV0KCk7Ci0KLSAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkp
OwotCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjYWxsRnVuYyk7Ci0gICAgICAgIGxp
bmtCdWZmZXIubGluayhleGNlcHRpb25DYWxsLCBkb1Vud2luZGluZyk7Ci0KLSAgICAgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBp
bXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCku
ZGF0YSgpKSk7Ci0gICAgfQotCi0gICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3Jt
IGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJUkdlbmVyYXRvcgotICAgIC8vIHdpbGwg
ZG8gdGhlIHN0YWNrIGNoZWNrIGZvciB1cy4gV2hlbmV2ZXIgaXQgZGV0ZWN0cyB0aGF0IGl0IG1p
Z2h0IG1ha2UKLSAgICAvLyBhIGNhbGwgdG8gdGhpcyB0aHVuaywgaXQnbGwgbWFrZSBzdXJlIGl0
cyBzdGFjayBjaGVjayBpbmNsdWRlcyBzcGFjZQotICAgIC8vIGZvciB1cyBoZXJlLgotCi0gICAg
Y29uc3QgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gYXJnQ291bnQgKyAxOyAvLyBUaGVy
ZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KLSAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlJlZ3NG
b3JDYWxsID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBudW1iZXJPZlBhcmFt
ZXRlcnM7Ci0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBudW1iZXJP
ZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KTsKLSAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKLSAgICBq
aXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIEpJVDo6QWRkcmVzcyBjYWxs
ZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOwotCi0gICAgLy8gRklYTUUgbWFrZSB0aGVzZSBsb29wcyB3aGljaCBzd2l0Y2ggb24g
U2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suIEl0J2xs
IG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdlIHNpZ25hdHVyZXMuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1NDcKLSAgICAKLSAgICAvLyBGaXJzdCBnbyB0aHJv
dWdoIHRoZSBpbnRlZ2VyIHBhcmFtZXRlcnMsIGZyZWVpbmcgdXAgdGhlaXIgcmVnaXN0ZXIgZm9y
IHVzZSBhZnRlcndhcmRzLgotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMg
PSAwOwotICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0gICAgICAgIHVuc2ln
bmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zm
c2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFy
Z051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0g
c2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUp
IHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAg
ICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAg
ICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxl
ZEdQUnNdLmdwcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJz
IGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJ
VDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcp
OwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAg
ICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7IC8vIENsZWFy
IG5vbi1pbnQzMiBhbmQgbm9uLXRhZyBiaXRzLgotICAgICAgICAgICAgICAgIGppdC5ib3hJbnQz
MihncHJSZWcsIEpTVmFsdWVSZWdzKGdwclJlZyksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0g
ICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0
KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQg
Kz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgRjMyOgotICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAg
ICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBiZWxvdy4KLSAgICAgICAgICAgICAgICBpZiAo
bWFyc2hhbGxlZEZQUnMgPj0gd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKytt
YXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIHsKLSAgICAgICAgLy8gSW50ZWdlciByZWdpc3RlcnMg
aGF2ZSBhbHJlYWR5IGJlZW4gc3BpbGxlZCwgdGhlc2UgYXJlIG5vdyBhdmFpbGFibGUuCi0gICAg
ICAgIEdQUlJlZyBkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQ
UjA7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwotICAg
ICAgICBib29sIGhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCA9IGZhbHNlOwotICAg
ICAgICBhdXRvIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0ID0gWyZoYXNNYXRlcmlhbGl6
ZWREb3VibGVFbmNvZGVPZmZzZXQsICZqaXRdIChHUFJSZWcgZGVzdCkgewotICAgICAgICAgICAg
aWYgKCFoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfYXNzZXJ0KERvdWJsZUVuY29kZU9mZnNldCA9PSAxbGwgPDwgNDgsICJjb2RlZ2Vu
IGFzc3VtZXMgdGhpcyBiZWxvdyIpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1
c3RlZEltbTMyKDEpLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBqaXQubHNoaWZ0NjQoSklUOjpU
cnVzdGVkSW1tMzIoNDgpLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBoYXNNYXRlcmlhbGl6ZWRE
b3VibGVFbmNvZGVPZmZzZXQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFy
c2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENh
bGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0p
IHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0p
OwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6
Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAg
ICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAg
ICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBhYm92ZS4KLSAgICAgICAgICAgICAgICBpZiAo
bWFyc2hhbGxlZEdQUnMgPj0gd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKytt
YXJzaGFsbGVkR1BSczsKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBG
MzI6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlm
IChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAg
ICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsK
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxy
ZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxl
IGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3Vt
ZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAg
ICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnBy
UmVnKTsKLSAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAg
ICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAg
ICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVn
KTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBz
Y3JhdGNoKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVl
RnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNo
YWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAg
ICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQot
ICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRG
UFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBh
cmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQ
UkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUo
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJl
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsK
LSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgICAgICBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVP
ZmZzZXRHUFJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZz
ZXRHUFJSZWcsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gs
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBqaXQubG9hZFdhc21D
b250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJ
bmZvOjpyZWdUMDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGgg
YmVsb3cuCi0gICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBv
cnRKU0NlbGxHUFJSZWcpKTsKLQotICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1w
b3J0SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0KLSAgICBqaXQuc3RvcmU2NChpbXBvcnRK
U0NlbGxHUFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIGppdC5zdG9yZTMy
KEpJVDo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhP
ZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpU
cnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKLQotICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBp
cyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4Ci0KLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKCk7Ci0gICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0g
ICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0ZWRJbW1Q
dHIgaW5pdGlhbFJpZ2h0VmFsdWUoMCk7Ci0gICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJy
YW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQ
UlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOwotICAgIEpJVDo6Q2FsbCBm
YXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAo
KTsKLSAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBp
biByZWdUMCBoZXJlLgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJl
IGluIHJlZ1QyLgotICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAg
IGRvbmUubGluaygmaml0KTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9u
Q2hlY2tzOwotCi0gICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2Fz
ZSBWb2lkOgotICAgICAgICAvLyBEaXNjYXJkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1
bmM6Ci0gICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1i
ZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVy
biBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJNjQ6
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92
ZS4KLSAgICB9Ci0gICAgY2FzZSBJMzI6IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBkb25lOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwotICAgICAgICBzbG93UGF0aC5hcHBl
bmQoaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRv
UHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0g
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIHNsb3dQYXRoLmxpbmso
JmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAg
ICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwot
Ci0gICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0g
W10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCi0gICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsK
LSAgICAgICAgfTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0kz
Mik7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKLSAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVy
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAg
ICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBX
ZSdyZSBhbiBpbnQzMgotICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZl
cnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgaXNE
b3VibGUubGluaygmaml0KTsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFn
VHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hZGQ2
NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAg
ICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBk
b25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7
Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNl
cHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAg
ICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKLSAgICAgICAgICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1i
ZXIoZXhlYykpOwotICAgICAgICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
Y29udmVydFRvRjMyKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOwotICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNo
SWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVy
cyk7Ci0gICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVl
UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0g
ICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCi0gICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAg
ICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0K
LSAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAg
ICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5q
dW1wKCkpOwotCi0gICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKLSAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBl
bmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7Ci0KLSAgICAgICAgZG91YmxlICgqY29u
dmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdikgLT4gZG91YmxlIHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
ICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOwotICAgICAgICB9KTsKLQotICAg
ICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAg
ICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBpZiAo
IWV4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5r
KCZqaXQpOwotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigqdm0pOwotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoKTsKLSAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAg
ICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykg
LT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgZ2Vu
ZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOwotICAgICAgICB9OwotCi0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxs
LCBkb1Vud2luZGluZyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0g
ICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0g
ICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhC
ZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKLSAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwoZmFzdENhbGwpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0
dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKLQotICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9y
dFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpKTsKLX0KLQogRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVy
ZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKIHsKICAgICBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAt
NjMzLDI0ICs1MSwyMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdG
YWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIEFTU0VSVChzaXpl
UmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CiAgICAgR1BSUmVnIHNpemVSZWdBc1Nj
cmF0Y2ggPSBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXI7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxDb250ZXh0LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U+Ojp2YWx1ZSwgIlRoaXMg
aXMgYXNzdW1lZCBpbiB0aGUgY29kZSBiZWxvdy4iKTsKICAgICAvLyBCMydzIGNhbGwgY29kZWdl
biBlbnN1cmVzIHRoYXQgdGhlIEpTQ2VsbCBpcyBhIFdlYkFzc2VtYmx5RnVuY3Rpb24uCi0gICAg
aml0LmxvYWRXYXNtQ29udGV4dChzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgot
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24oaW1wb3J0SW5kZXgpKSwgc2NyYXRj
aCk7Ci0KLSAgICAvLyBHZXQgdGhlIGNhbGxlZSdzIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGFuZCBz
ZXQgaXQgYXMgV2FzbUNvbnRleHQuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9y
aW5nIGl0cyBvd24gSW5zdGFuY2UuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0
Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mSW5zdGFuY2UoKSksIGJhc2VNZW1vcnkp
OyAvLyBJbnN0YW5jZSouCi0gICAgaml0LnN0b3JlV2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7Cisg
ICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQg
SW5zdGFuY2UqCisgICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5jZSBh
bmQgc2V0IGl0IGFzIFdhc21Db250ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtl
IGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCisgICAgaml0LmxvYWRQdHIoSklU
OjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZUYXJnZXRJbnN0YW5jZShpbXBvcnRJbmRleCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3Nl
bWJseUluc3RhbmNlKi4KKyAgICAvLyBXaGlsZSB3ZSdyZSBhY2Nlc3NpbmcgdGhhdCBjYWNoZWxp
bmUsIGFsc28gZ2V0IHRoZSB3YXNtIGVudHJ5cG9pbnQgc28gd2UgY2FuIHRhaWwgY2FsbCB0byBp
dCBiZWxvdy4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21FbnRyeXBvaW50KGltcG9ydEluZGV4
KSksIHNjcmF0Y2gpOyAvLyBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbi4KKyAgICBq
aXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKGJhc2VNZW1vcnkpOwogCiAgICAgaml0LmxvYWRQ
dHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVnQXNTY3JhdGNoKTsKICAgICBqaXQu
c3RvcmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKIAogICAgIC8v
IEZJWE1FIHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdlYkFzc2VtYmx5Lklu
c3RhbmNlIGhhdmUgdGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3Mg
YmFzZU1lbW9yeSByZWdpc3RlciBhcyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMu
Ci0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBKU1dlYkFzc2VtYmx5
TWVtb3J5Ki4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBX
YXNtOjpNZW1vcnkqLgogICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRo
ZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1
YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXpl
KCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICBqaXQu
bG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zm
c2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtTWVtb3J5Ojp2b2lkKi4KKyAgICBq
aXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRP
ZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAg
IGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNl
dE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
QVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAg
QVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdpc3RlciAhPSBzY3JhdGNoKTsKQEAgLTY1OCw3ICs3
NSw2IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdh
c21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgfQogCiAgICAgLy8gVGFpbCBjYWxs
IGludG8gdGhlIGNhbGxlZSBXZWJBc3NlbWJseSBmdW5jdGlvbi4KLSAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3Moc2NyYXRjaCwgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbigpKSwgc2NyYXRjaCk7CiAgICAgaml0LmxvYWRQdHIoc2NyYXRj
aCwgc2NyYXRjaCk7CiAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5oCmluZGV4IDRlMjYyYmEuLmZlYzZiZDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCw3IEBACiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIlZN
LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00NCw3ICs0Miw2IEBA
IGVudW0gY2xhc3MgQmluZGluZ0ZhaWx1cmUgewogfTsKIAogRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRl
eCk7Ci1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNt
VG9KcyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRl
eCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCmluZGV4IDcw
ZmVmYjAuLmU1MTM2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suY3BwCkBAIC0zMSwyMCArMzEsMzEgQEAKIAogI2luY2x1ZGUgIldhc21CQlFQbGFuSW5s
aW5lcy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
CiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQorUmVmPENvZGVCbG9jaz4gQ29kZUJsb2NrOjpj
cmVhdGUoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlv
biYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAg
ICBzaXplX3QgaW1wb3J0RnVuY3Rpb25Db3VudCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1
bmN0aW9uQ291bnQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxs
b2MoYWxsb2NhdGlvblNpemUoaW1wb3J0RnVuY3Rpb25Db3VudCkpKSBDb2RlQmxvY2soY29udGV4
dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24sIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVy
KSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcG9y
dEZ1bmN0aW9uQ291bnQ7ICsraSkKKyAgICAgICAgcmVzdWx0LT5pbXBvcnRXYXNtVG9FbWJlZGRl
clN0dWIoaSkgPSBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZigqcmVzdWx0KTsKK30KKwor
Q29kZUJsb2NrOjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBl
ciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbikKICAgICA6IG1fY2FsbGVlQ291bnQobW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkpCiAgICAgLCBtX21vZGUobW9kZSkKIHsKICAgICBSZWZQdHI8Q29kZUJs
b2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsKLSAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJC
UVBsYW4obnVsbHB0ciwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46OkZ1bGxD
b21waWxlLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0qLCBQbGFuJikgeworCisgICAg
bV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIG1ha2VSZWYobW9kdWxlSW5m
b3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpD
YWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlz
KV0gKFBsYW4mKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAg
ICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdl
ID0gbV9wbGFuLT5lcnJvck1lc3NhZ2UoKTsKLSAgICAgICAgICAgIG1fcGxhbiA9IG51bGxwdHI7
CisgICAgICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIApAQCAtNjYsMTAgKzc3LDEwIEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQog
ICAgICAgICBtX3dhc21Ub1dhc21DYWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2Fs
bHNpdGVzKCk7CiAgICAgICAgIG1fdGllclVwQ291bnRzID0gbV9wbGFuLT50YWtlVGllclVwQ291
bnRzKCk7CiAKLSAgICAgICAgbV9wbGFuID0gbnVsbHB0cjsKLSAgICB9KSkpOwotCisgICAgICAg
IHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKKyAgICB9KSwgV1RGTW92ZShjcmVhdGVFbWJlZGRl
cldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pKTsKICAgICBtX3BsYW4tPnNldE1vZGUobW9k
ZSk7CisKICAgICBhdXRvJiB3b3JrbGlzdCA9IFdhc206OmVuc3VyZVdvcmtsaXN0KCk7CiAgICAg
Ly8gTm90ZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgZW5xdWV1ZSB0aGUgcGxhbiwgdGhlcmUgaXMg
YSBjaGFuY2UgdGhlIGFib3ZlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLgogICAgIHdvcmtsaXN0
LmVucXVldWUobWFrZVJlZigqbV9wbGFuLmdldCgpKSk7CkBAIC05Miw3ICsxMDMsNyBAQCB2b2lk
IENvZGVCbG9jazo6d2FpdFVudGlsRmluaXNoZWQoKQogICAgIC8vIGVsc2UsIGlmIHdlIGRvbid0
IGhhdmUgYSBwbGFuLCB3ZSdyZSBhbHJlYWR5IGNvbXBpbGVkLgogfQogCi12b2lkIENvZGVCbG9j
azo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykK
K3ZvaWQgQ29kZUJsb2NrOjpjb21waWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgQXN5bmNDb21w
aWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKIHsKICAgICBSZWZQdHI8UGxhbj4gcGxhbjsKICAgICB7
CkBAIC0xMDQsMTIgKzExNSwxMSBAQCB2b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKFZNJiB2
bSwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKICAgICAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCB0byBrZWVwIGEgUmVmUHRyIG9uIHRoZSBQbGFuIGJlY2F1c2UgdGhlIHdvcmtsaXN0IHdp
bGwga2VlcAogICAgICAgICAvLyBhIFJlZlB0ciBvbiB0aGUgUGxhbiB1bnRpbCB0aGUgcGxhbiBm
aW5pc2hlcyBub3RpZnlpbmcgYWxsIG9mIGl0cyBjYWxsYmFja3MuCiAgICAgICAgIFJlZlB0cjxD
b2RlQmxvY2s+IHByb3RlY3RlZFRoaXMgPSB0aGlzOwotICAgICAgICBwbGFuLT5hZGRDb21wbGV0
aW9uVGFzayh2bSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCB0
YXNrID0gV1RGTW92ZSh0YXNrKSwgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyldIChWTSogdm0sIFBsYW4mKSB7Ci0gICAgICAgICAgICBBU1NFUlQodm0pOwotICAgICAgICAg
ICAgdGFzay0+cnVuKCp2bSwgbWFrZVJlZigqdGhpcykpOworICAgICAgICBwbGFuLT5hZGRDb21w
bGV0aW9uVGFzayhjb250ZXh0LCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4o
W3RoaXMsIHRhc2sgPSBXVEZNb3ZlKHRhc2spLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90
ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgICAgICAgICB0YXNrLT5ydW4obWFrZVJlZigqdGhp
cykpOwogICAgICAgICB9KSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHRhc2stPnJ1bih2bSwgbWFr
ZVJlZigqdGhpcykpOworICAgICAgICB0YXNrLT5ydW4obWFrZVJlZigqdGhpcykpOwogfQogCiBi
b29sIENvZGVCbG9jazo6aXNTYWZlVG9SdW4oTWVtb3J5TW9kZSBtZW1vcnlNb2RlKQpAQCAtMTMw
LDYgKzE0MCwxMyBAQCBib29sIENvZGVCbG9jazo6aXNTYWZlVG9SdW4oTWVtb3J5TW9kZSBtZW1v
cnlNb2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorCit2b2lkIENvZGVCbG9jazo6c2V0Q29t
cGlsYXRpb25GaW5pc2hlZCgpCit7CisgICAgbV9wbGFuID0gbnVsbHB0cjsKKyAgICBtX2NvbXBp
bGF0aW9uRmluaXNoZWQuc3RvcmUodHJ1ZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKaW5kZXggMmRiZjdlNC4uMDIwMTAyNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaApAQCAtMjgsNiArMjgsNyBAQAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3Vu
dC5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAt
MzcsMTEgKzM4LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNw
YWNlIFdhc20gewogCiBjbGFzcyBDYWxsZWU7CitzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIEJCUVBs
YW47CiBjbGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwpAQCAtNTEsMjAg
KzUxLDQyIEBAIGVudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3Q7CiAgICAgCiBjbGFzcyBD
b2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiB7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSYsIFJlZjxDb2RlQmxvY2s+JiYp
OworICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoUmVmPENvZGVCbG9jaz4mJik7CiAgICAg
dXNpbmcgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrID0gUmVmUHRyPFdURjo6U2hhcmVkVGFzazxD
YWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlKE1lbW9yeU1v
ZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQorICAgIHN0YXRp
YyBSZWY8Q29kZUJsb2NrPiBjcmVhdGUoQ29udGV4dCosIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9y
bWF0aW9uJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisK
KyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0U3R1YnMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihzaXplb2YoQ29k
ZUJsb2NrKSk7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVj
a2VkPHNpemVfdD4gZnVuY3Rpb25JbXBvcnRDb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiAo
b2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGZ1bmN0aW9uSW1wb3J0Q291
bnQpLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9FbWJlZGRl
clN0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDb2RlQmxvY2sobW9kZSwgbW9kdWxlSW5mb3JtYXRpb24pKTsKKyAgICAgICAgcmV0
dXJuICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zm
c2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKHVuc2ln
bmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0U3R1
YnMoKSArIHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleDsKKyAgICB9CisKKyAgICBXYXNtOjpX
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9KU0NhbGxTdHViRm9ySW1wb3J0KHVuc2ln
bmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOworICAg
ICAgICByZXR1cm4gJmltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihpbXBvcnRJbmRleCk7CiAgICAg
fQogCiAgICAgdm9pZCB3YWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHZvaWQgY29tcGlsZUFzeW5j
KFZNJiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgY29tcGlsZUFzeW5j
KENvbnRleHQqLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CiAKICAgICBib29sIGNvbXBp
bGF0aW9uRmluaXNoZWQoKQogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOwotICAgICAgICByZXR1cm4gIW1fcGxhbjsKKyAgICAgICAgcmV0dXJuIG1fY29tcGls
YXRpb25GaW5pc2hlZC5sb2FkKCk7CiAgICAgfQogICAgIGJvb2wgcnVubmFibGUoKSB7IHJldHVy
biBjb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIW1fZXJyb3JNZXNzYWdlOyB9CiAKQEAgLTc4LDkg
KzEwMCwxMiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCk7IH0KKyAg
ICAKKyAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25jZSB0
aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgogCiAgICAgQ2FsbGVlJiBqc0VudHJ5cG9p
bnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFj
ZSkKICAgICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAg
ICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25J
bXBvcnRDb3VudCgpOwogCkBAIC05MCw2ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIENh
bGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1w
b3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRl
eFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAgICBpZiAobV9vcHRpbWl6ZWRD
YWxsZWVzW2NhbGxlZUluZGV4XSkKQEAgLTExNyw3ICsxNDMsOCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBPTUdQbGFuOwogCi0gICAgQ29kZUJsb2NrKE1lbW9yeU1vZGUs
IE1vZHVsZUluZm9ybWF0aW9uJik7CisgICAgQ29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2Rl
LCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21F
eGNlcHRpb24pOworICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIHVuc2ln
bmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAgVmVjdG9yPFJl
ZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7CkBAIC0xMjgsNiArMTU1LDcgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3dhc21Ub1dhc21DYWxs
c2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9XYXNtRXhp
dFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CisgICAgc3RkOjphdG9taWM8Ym9v
bD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9lcnJvck1l
c3NhZ2U7CiAgICAgTG9jayBtX2xvY2s7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvbnRleHQuY3BwCmluZGV4IGZlYTE2ZGUuLmUwNTlmYzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5jcHAKQEAgLTI4LDMwICsyOCw0MSBAQAogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKICNpbmNsdWRlIDxtdXRl
eD4KICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYgdm0pCitib29sIENvbnRleHQ6OnVz
ZUZhc3RUTFMoKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgcmV0dXJuIE9wdGlv
bnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNlKiBDb250ZXh0Ojpsb2FkKCkgY29u
c3QKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmICh1c2VGYXN0VExTRm9yQ29u
dGV4dCgpKQotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENvbnRleHQqPihfcHRocmVhZF9n
ZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKKyAgICBpZiAodXNlRmFz
dFRMUygpKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSkpOwog
I2VuZGlmCi0gICAgcmV0dXJuIHZtLndhc21Db250ZXh0OworICAgIHJldHVybiBpbnN0YW5jZTsK
IH0KIAotdm9pZCBzdG9yZUNvbnRleHQoVk0mIHZtLCBDb250ZXh0KiBjb250ZXh0KQordm9pZCBD
b250ZXh0OjpzdG9yZShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGksIHZvaWQqIHNvZnRTdGFja0xp
bWl0KQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKHVzZUZhc3RUTFNGb3JD
b250ZXh0KCkpCi0gICAgICAgIF9wdGhyZWFkX3NldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9D
T05URVhUX0tFWSwgYml0d2lzZV9jYXN0PHZvaWQqPihjb250ZXh0KSk7CisgICAgaWYgKHVzZUZh
c3RUTFMoKSkKKyAgICAgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NP
TlRFWFRfS0VZLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGkpKTsKICNlbmRpZgotICAgIHZtLndhc21D
b250ZXh0ID0gY29udGV4dDsKLSAgICBpZiAoY29udGV4dCkKLSAgICAgICAgY29udGV4dC0+c2V0
Q2FjaGVkU3RhY2tMaW1pdCh2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKyAgICBpbnN0YW5jZSA9IGk7
CisgICAgaWYgKGluc3RhbmNlKQorICAgICAgICBpbnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1p
dChzb2Z0U3RhY2tMaW1pdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAppbmRleCAzY2Y2NWZiLi5jMmI1MWRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKQEAgLTI3LDM3ICsy
NywyMCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgotCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgVk07CitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiAKIG5hbWVzcGFjZSBX
YXNtIHsKIAotLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdGhpcyB0byBiZSBzb21ldGhpbmcgZWxz
ZSBhdCBzb21lIHBvaW50OgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDI2MAotdXNpbmcgQ29udGV4dCA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKLQotaW5s
aW5lIGJvb2wgdXNlRmFzdFRMUygpCi17Ci0jaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBy
ZXR1cm4gT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0VExTKCk7Ci0jZWxzZQotICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgotfQorc3RydWN0IENvbnRleHQgeworICAgIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGFuY2UgeyBudWxscHRyIH07CiAKLWlubGluZSBib29sIHVzZUZhc3RUTFNG
b3JDb250ZXh0KCkKLXsKLSAgICBpZiAodXNlRmFzdFRMUygpKQotICAgICAgICByZXR1cm4gT3B0
aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQor
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogbG9hZCgpIGNvbnN0OworICAgIHZvaWQgc3RvcmUo
SlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdm9pZCogc29mdFN0YWNrTGltaXQpOwogCi1Db250ZXh0
KiBsb2FkQ29udGV4dChWTSYpOwotdm9pZCBzdG9yZUNvbnRleHQoVk0mLCBDb250ZXh0Kik7Cisg
ICAgc3RhdGljIGJvb2wgdXNlRmFzdFRMUygpOworfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVk
ZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg3OTRmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlv
blR5cGUuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTsgLy8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5zdGFuY2UsIHNvIHNob3VsZCB1
c2UgYmVsb3cuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorCituYW1lc3BhY2UgV2FzbSB7
CisKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CitzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbjsK
K3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKK2NsYXNzIFNpZ25hdHVyZTsKK3N0cnVjdCBVbmxp
bmtlZFdhc21Ub1dhc21DYWxsOworCisvLyBDcmVhdGUgd3JhcHBlciBjb2RlIHRvIGNhbGwgZnJv
bSBlbWJlZGRlciAtPiBXZWJBc3NlbWJseS4KK3VzaW5nIENyZWF0ZUVtYmVkZGVyV3JhcHBlciA9
IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+KENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QpPjsK
KworLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW4gZXhjZXB0aW9uIGlzIGRldGVjdGVkLiBUaGUgcmV0
dXJuIHZhbHVlIGlzIHRoZSBQQyB0byBjb250aW51ZSBhdC4KK3VzaW5nIFRocm93V2FzbUV4Y2Vw
dGlvbiA9IHZvaWQqICgqKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmIxZDgyOC4uY2MxZTdkMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5jcHAKQEAgLTMwLDExICszMCwxMSBAQAogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIK
ICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCiAKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCmluZGV4IDM4MTI4MzYuLmU1ZTA3YTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmgKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZN
OwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIHZvaWQgcmVnaXN0ZXJDb2RlKHZvaWQqIHN0YXJ0LCB2
b2lkKiBlbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IGIy
MjIyMTcuLmU3YjNkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgK
QEAgLTQ0LDE0ICs0NCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNGdW5jdGlv
bjsKLQogbmFtZXNwYWNlIEIzIHsKIGNsYXNzIENvbXBpbGF0aW9uOwogfQogCiBuYW1lc3BhY2Ug
V2FzbSB7CiAKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CitzdHJ1Y3QgTW9kdWxlSW5mb3Jt
YXRpb247CisKIGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKIHsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21J
bnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YmUwZTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisKKyNpbmNs
dWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
eworCituYW1lc3BhY2Ugeworc2l6ZV90IGdsb2JhbE1lbW9yeUJ5dGVTaXplKE1vZHVsZSYgbW9k
dWxlKQoreworICAgIHJldHVybiBtb2R1bGUubW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNp
emUoKSAqIHNpemVvZihSZWdpc3Rlcik7Cit9Cit9CisKK0luc3RhbmNlOjpJbnN0YW5jZShSZWY8
TW9kdWxlPiYmIG1vZHVsZSkKKyAgICA6IG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAs
IG1fZ2xvYmFscyhNYWxsb2NQdHI8dWludDY0X3Q+OjptYWxsb2MoZ2xvYmFsTWVtb3J5Qnl0ZVNp
emUobV9tb2R1bGUuZ2V0KCkpKSkKK3sKK30KKworSW5zdGFuY2U6On5JbnN0YW5jZSgpIHsgfQor
CitzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUobV9tb2R1bGUuZ2V0KCkpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42Mzc4YTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisjaW5jbHVkZSAiV2FzbVRh
YmxlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgSW5zdGFu
Y2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW5zdGFuY2U+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPEluc3RhbmNlPiBjcmVhdGUoUmVmPE1vZHVsZT4mJiBtb2R1bGUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnN0YW5jZShXVEZNb3ZlKG1vZHVsZSkp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFJlZjxDb2RlQmxvY2s+
JiYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgbV9jb2RlQmxvY2sgPSBXVEZNb3ZlKGNvZGVC
bG9jayk7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkluc3RhbmNlKCk7CisKKyAg
ICBzaXplX3QgZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSBjb25zdDsKKworICAgIE1vZHVsZSYgbW9k
dWxlKCkgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CisgICAgTWVtb3J5KiBtZW1vcnkoKSB7
IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQorICAgIFRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1f
dGFibGUuZ2V0KCk7IH0KKworICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KKyAgICBpbnQ2NF90IGxvYWRJNjRH
bG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9Cisg
ICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8ZmxvYXQ+KGxvYWRJMzJHbG9iYWwoaSkpOyB9CisgICAgZG91YmxlIGxvYWRGNjRHbG9i
YWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2
NEdsb2JhbChpKSk7IH0KKyAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJp
dHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQorCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5z
dGFuY2UsIG1fY2FjaGVkU3RhY2tMaW1pdCk7IH0KKyAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0
KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9CisgICAgdm9pZCBzZXRDYWNo
ZWRTdGFja0xpbWl0KHZvaWQqIGxpbWl0KSB7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9
CisKKyAgICBmcmllbmQgY2xhc3MgSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1F
IHJlbW92ZSB0aGlzIG9uY2UgcmVmYWN0b3JlZCBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIu
CisKK3ByaXZhdGU6CisgICAgSW5zdGFuY2UoUmVmPE1vZHVsZT4mJik7CisgICAgCisgICAgUmVm
PE1vZHVsZT4gbV9tb2R1bGU7CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7Cisg
ICAgUmVmUHRyPE1lbW9yeT4gbV9tZW1vcnk7CisgICAgUmVmUHRyPFRhYmxlPiBtX3RhYmxlOwor
ICAgIE1hbGxvY1B0cjx1aW50NjRfdD4gbV9nbG9iYWxzOworICAgIHZvaWQqIG1fY2FjaGVkU3Rh
Y2tMaW1pdCB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRy
X3Q+OjptYXgoKSkgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnkuY3BwCmluZGV4IGM1ZjQ4ZTkuLjBkYzc3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0yOCwxMyArMjgsMTkgQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVkZSAiV2FzbVRodW5rcy5oIgor
I2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUg
PHd0Zi9HaWdhY2FnZS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09T
QWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9S
QU1TaXplLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8Y3N0cmluZz4K
KyNpbmNsdWRlIDxtdXRleD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApA
QCAtNTEsMTkgKzU3LDE5IEBAIE5FVkVSX0lOTElORSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZv
aWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpIHsgQ1JBCiBzdHJ1Y3QgTWVtb3J5
UmVzdWx0IHsKICAgICBlbnVtIEtpbmQgewogICAgICAgICBTdWNjZXNzLAotICAgICAgICBTdWNj
ZXNzQW5kQXN5bmNHQywKLSAgICAgICAgU3luY0dDQW5kUmV0cnkKKyAgICAgICAgU3VjY2Vzc0Fu
ZE5vdGlmeU1lbW9yeVByZXNzdXJlLAorICAgICAgICBTeW5jVHJ5VG9SZWNsYWltTWVtb3J5CiAg
ICAgfTsKLSAgICAKKwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0b1N0cmluZyhLaW5kIGtpbmQp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBTdWNjZXNzOgog
ICAgICAgICAgICAgcmV0dXJuICJTdWNjZXNzIjsKLSAgICAgICAgY2FzZSBTdWNjZXNzQW5kQXN5
bmNHQzoKLSAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0FuZEFzeW5jR0MiOwotICAgICAgICBj
YXNlIFN5bmNHQ0FuZFJldHJ5OgotICAgICAgICAgICAgcmV0dXJuICJTeW5jR0NBbmRSZXRyeSI7
CisgICAgICAgIGNhc2UgU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAg
ICAgcmV0dXJuICJTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUiOworICAgICAgICBjYXNl
IFN5bmNUcnlUb1JlY2xhaW1NZW1vcnk6CisgICAgICAgICAgICByZXR1cm4gIlN5bmNUcnlUb1Jl
Y2xhaW1NZW1vcnkiOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTgsMTcgKzEwNCwxNyBAQCBwdWJs
aWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdCByZXN1bHQgPSBbJl0gewogICAgICAgICAgICAgYXV0
byBob2xkZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICAgICAgaWYgKG1fbWVtb3JpZXMu
c2l6ZSgpID49IG1fbWF4Q291bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3Vs
dChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTWVtb3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3luY1RyeVRvUmVj
bGFpbU1lbW9yeSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IEdp
Z2FjYWdlOjp0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBNZW1v
cnk6OmZhc3RNYXBwZWRCeXRlcygpKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5j
R0NBbmRSZXRyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRy
LCBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX21lbW9yaWVzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KAogICAgICAgICAgICAgICAgIHJlc3VsdCwKLSAg
ICAgICAgICAgICAgICBtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50IC8gMiA/IE1lbW9y
eVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0MgOiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3MpOworICAg
ICAgICAgICAgICAgIG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQgLyAyID8gTWVtb3J5
UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUgOiBNZW1vcnlSZXN1bHQ6OlN1
Y2Nlc3MpOwogICAgICAgICB9KCk7CiAgICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bG9n
V2ViQXNzZW1ibHlNZW1vcnkoKSkKQEAgLTE1MywxMiArMTU5LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgTWVtb3J5UmVzdWx0OjpLaW5kIHJlc3VsdCA9IFsmXSB7CiAgICAgICAgICAgICBhdXRvIGhv
bGRlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgICAgICBpZiAobV9waHlzaWNhbEJ5dGVz
ICsgYnl0ZXMgPiBtZW1vcnlMaW1pdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlS
ZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5OworICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1
bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1f
cGh5c2ljYWxCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1f
cGh5c2ljYWxCeXRlcyA+PSBtZW1vcnlMaW1pdCgpIC8gMikKLSAgICAgICAgICAgICAgICByZXR1
cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kQXN5bmNHQzsKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M7CiAgICAgICAg
IH0oKTsKQEAgLTIwNSw3ICsyMTEsNyBAQCBzdGF0aWMgTWVtb3J5TWFuYWdlciYgbWVtb3J5TWFu
YWdlcigpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1ib29sIHRyeUFuZEdDKFZNJiB2
bSwgY29uc3QgRnVuYyYgYWxsb2NhdGUpCitib29sIHRyeUFsbG9jYXRlKGNvbnN0IEZ1bmMmIGFs
bG9jYXRlLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mIG5vdGlmeU1lbW9yeVByZXNzdXJl
LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpCiB7
CiAgICAgdW5zaWduZWQgbnVtVHJpZXMgPSAyOwogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAt
MjE0LDE0ICsyMjAsMTYgQEAgYm9vbCB0cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9j
YXRlKQogICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2VzczoKICAgICAgICAgICAgIGRv
bmUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0
OjpTdWNjZXNzQW5kQXN5bmNHQzoKLSAgICAgICAgICAgIHZtLmhlYXAuY29sbGVjdEFzeW5jKENv
bGxlY3Rpb25TY29wZTo6RnVsbCk7CisgICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTdWNjZXNz
QW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU6CisgICAgICAgICAgICBpZiAobm90aWZ5TWVtb3J5UHJl
c3N1cmUpCisgICAgICAgICAgICAgICAgbm90aWZ5TWVtb3J5UHJlc3N1cmUoKTsKICAgICAgICAg
ICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWVtb3J5
UmVzdWx0OjpTeW5jR0NBbmRSZXRyeToKKyAgICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN5bmNU
cnlUb1JlY2xhaW1NZW1vcnk6CiAgICAgICAgICAgICBpZiAoaSArIDEgPT0gbnVtVHJpZXMpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB2bS5oZWFwLmNvbGxlY3RTeW5jKENv
bGxlY3Rpb25TY29wZTo6RnVsbCk7CisgICAgICAgICAgICBpZiAoc3luY1RyeVRvUmVjbGFpbU1l
bW9yeSkKKyAgICAgICAgICAgICAgICBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIzMCwzMiArMjM4LDMyIEBAIGJvb2wg
dHJ5QW5kR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKIAogfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCiAKLWNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQorTWVt
b3J5OjpNZW1vcnkoKQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgTWVtb3J5TW9k
ZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOwotICAgIGNhc2UgTWVt
b3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7Ci0gICAgfQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwogfQogCi1NZW1vcnk6Ok1l
bW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCitNZW1vcnk6Ok1lbW9y
eShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIEZ1bmN0aW9uPHZvaWQoKT4m
JiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgRnVuY3Rpb248dm9pZCgpPiYmIHN5bmNUcnlUb1JlY2xh
aW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jv
d1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhp
bXVtKG1heGltdW0pCisgICAgLCBtX25vdGlmeU1lbW9yeVByZXNzdXJlKHN0ZDo6Zm9yd2FyZDxX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSkKKyAgICAsIG1fc3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihz
eW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhzdGQ6
OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dT
dWNjZXNzQ2FsbGJhY2spKQogewogICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygpKTsKICAgICBB
U1NFUlQobV9tb2RlID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKTsKICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CiAK
LU1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKK01lbW9y
eTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSwgRnVuY3Rpb248dm9p
ZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1RyeVRv
UmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4m
JiBncm93U3VjY2Vzc0NhbGxiYWNrKQogICAgIDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9z
aXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9t
YXhpbXVtKG1heGltdW0pCiAgICAgLCBtX21hcHBlZENhcGFjaXR5KG1hcHBlZENhcGFjaXR5KQog
ICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX25vdGlmeU1lbW9yeVByZXNzdXJlKHN0ZDo6Zm9y
d2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSkKKyAgICAs
IG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lk
KCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFj
ayhzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+
KGdyb3dTdWNjZXNzQ2FsbGJhY2spKQogewogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1v
cnk6Ok1lbW9yeSBhbGxvY2F0aW5nICIsICp0aGlzKTsKIH0KQEAgLTI3NSw3ICsyODMsMTIgQEAg
c3RhdGljIHZvaWQgY29tbWl0WmVyb1BhZ2VzKHZvaWQqIHN0YXJ0QWRkcmVzcywgc2l6ZV90IHNp
emVJbkJ5dGVzKQogI2VuZGlmCiB9CiAKLVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZN
JiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQorUmVmUHRyPE1lbW9y
eT4gTWVtb3J5OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KCkp
OworfQorICAgIAorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBGdW5jdGlvbjx2b2lkKCk+JiYgbm90aWZ5TWVtb3J5UHJl
c3N1cmUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1
bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2sp
CiB7CiAgICAgQVNTRVJUKGluaXRpYWwpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8
IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3Vy
IGNhbGxlci4KQEAgLTI4MywzMyArMjk2LDI3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3Jl
YXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgIGNv
bnN0IHNpemVfdCBpbml0aWFsQnl0ZXMgPSBpbml0aWFsLmJ5dGVzKCk7CiAgICAgY29uc3Qgc2l6
ZV90IG1heGltdW1CeXRlcyA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiAwOwogCi0gICAg
Ly8gV2UgbmVlZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBzdHViIHByaW9yIHRvIHJ1bm5pbmcgY29k
ZS4KLSAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
ICAgICBpZiAobWF4aW11bSAmJiAhbWF4aW11bUJ5dGVzKSB7CiAgICAgICAgIC8vIFVzZXIgc3Bl
Y2lmaWVkIGEgemVybyBtYXhpbXVtLCBpbml0aWFsIHNpemUgbXVzdCBhbHNvIGJlIHplcm8uCiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbml0aWFsQnl0ZXMpOwotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0sIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVu
Y3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxXVEY6
OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFj
aykpKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBkb25lID0gdHJ5QW5kR0MoCi0gICAgICAgIHZt
LAorICAgIGJvb2wgZG9uZSA9IHRyeUFsbG9jYXRlKAogICAgICAgICBbJl0gKCkgLT4gTWVtb3J5
UmVzdWx0OjpLaW5kIHsKICAgICAgICAgICAgIHJldHVybiBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxs
b2NhdGVQaHlzaWNhbEJ5dGVzKGluaXRpYWxCeXRlcyk7Ci0gICAgICAgIH0pOworICAgICAgICB9
LCBub3RpZnlNZW1vcnlQcmVzc3VyZSwgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgaWYg
KCFkb25lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgY2hhciogZmFz
dE1lbW9yeSA9IG51bGxwdHI7CiAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1l
bW9yeSgpKSB7Ci0gICAgICAgIHRyeUFuZEdDKAotICAgICAgICAgICAgdm0sCisgICAgICAgIHRy
eUFsbG9jYXRlKAogICAgICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAg
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVW
aXJ0dWFsUGFnZXMoKTsKICAgICAgICAgICAgICAgICBmYXN0TWVtb3J5ID0gYml0d2lzZV9jYXN0
PGNoYXIqPihyZXN1bHQuYmFzZVB0cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5r
aW5kOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LCBub3RpZnlNZW1vcnlQcmVzc3Vy
ZSwgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgfQogICAgIAogICAgIGlmIChmYXN0TWVt
b3J5KSB7CkBAIC0zMjAsMTUgKzMyNywxNSBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0
ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICAgICAg
fQogCiAgICAgICAgIGNvbW1pdFplcm9QYWdlcyhmYXN0TWVtb3J5LCBpbml0aWFsQnl0ZXMpOwot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoZmFzdE1lbW9yeSwg
aW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgTWVtb3J5TW9kZTo6
U2lnbmFsaW5nKSk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoZmFzdE1l
bW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgTWVtb3J5
TW9kZTo6U2lnbmFsaW5nLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3Rp
ZnlNZW1vcnlQcmVzc3VyZSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KHN5
bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBh
Z2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKSk7CiAgICAgfQogICAg
IAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1l
bW9yeSgpKSkKICAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpOwogCiAg
ICAgaWYgKCFpbml0aWFsQnl0ZXMpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5
KGluaXRpYWwsIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnko
aW5pdGlhbCwgbWF4aW11bSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4obm90
aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihz
eW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQ
YWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogICAgIAogICAg
IHZvaWQqIHNsb3dNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6
UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCksIGluaXRpYWxCeXRlcyk7CiAgICAgaWYgKCFzbG93
TWVtb3J5KSB7CkBAIC0zMzYsNyArMzQzLDcgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVh
dGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBtZW1zZXQoc2xvd01lbW9yeSwgMCwgaW5pdGlh
bEJ5dGVzKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShzbG93TWVtb3J5LCBpbml0
aWFsLCBtYXhpbXVtLCBpbml0aWFsQnl0ZXMsIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xvd01lbW9yeSwgaW5pdGlhbCwgbWF4
aW11bSwgaW5pdGlhbEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZywgc3RkOjpmb3J3
YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZv
cndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3Rk
Ojpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93
U3VjY2Vzc0NhbGxiYWNrKSkpOwogfQogCiBNZW1vcnk6On5NZW1vcnkoKQpAQCAtMzQ1LDcgKzM1
MiwxMCBAQCBNZW1vcnk6On5NZW1vcnkoKQogICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZVBo
eXNpY2FsQnl0ZXMobV9zaXplKTsKICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKICAgICAgICAg
Y2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Ci0gICAgICAgICAgICBtcHJvdGVjdChtX21lbW9y
eSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cisg
ICAgICAgICAgICBpZiAobXByb3RlY3QobV9tZW1vcnksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVz
KCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygi
bXByb3RlY3QgZmFpbGVkOiAiLCBzdHJlcnJvcihlcnJubyksICJcbiIpOworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZVZpcnR1YWxQYWdlcyhtX21lbW9yeSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKQEAg
LTM3MSwzNCArMzgxLDUwIEBAIGJvb2wgTWVtb3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1v
cnkodm9pZCogYWRkcmVzcykKICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLmNvbnRhaW5zQWRk
cmVzcyhhZGRyZXNzKTsKIH0KIAotYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291bnQg
bmV3U2l6ZSkKK0V4cGVjdGVkPFBhZ2VDb3VudCwgTWVtb3J5OjpHcm93RmFpbFJlYXNvbj4gTWVt
b3J5Ojpncm93KFBhZ2VDb3VudCBkZWx0YSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXpl
ID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisgICAgY29uc3QgV2FzbTo6UGFnZUNv
dW50IG9sZFBhZ2VDb3VudCA9IHNpemVJblBhZ2VzKCk7CiAKLSAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiTWVtb3J5Ojpncm93IHRvICIsIG5ld1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CisgICAg
aWYgKCFkZWx0YS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93
RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhKTsKKyAgICAKKyAgICBjb25zdCBXYXNtOjpQYWdlQ291
bnQgbmV3UGFnZUNvdW50ID0gb2xkUGFnZUNvdW50ICsgZGVsdGE7CisgICAgaWYgKCFuZXdQYWdl
Q291bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6SW52
YWxpZEdyb3dTaXplKTsKIAotICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+IG1heGltdW0o
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gc3VjY2VzcyA9IFsmXSAoKSB7Cisg
ICAgICAgIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhvbGRQYWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7
CisgICAgICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CisgICAgfTsKIAotICAgIHNpemVfdCBkZXNp
cmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKKyAgICBpZiAoZGVsdGEucGFnZUNvdW50KCkgPT0g
MCkKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJNZW1vcnk6Omdyb3coIiwgZGVsdGEsICIpIHRvICIsIG5ld1BhZ2VDb3VudCwgIiBmcm9tICIs
ICp0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdQYWdlQ291bnQgPiBQYWdlQ291bnQ6OmZy
b21CeXRlcyhtX3NpemUpKTsKKworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3UGFnZUNvdW50ID4g
bWF4aW11bSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246
OldvdWxkRXhjZWVkTWF4aW11bSk7CisKKyAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdQYWdl
Q291bnQuYnl0ZXMoKTsKICAgICBSRUxFQVNFX0FTU0VSVChkZXNpcmVkU2l6ZSA+IG1fc2l6ZSk7
CiAgICAgc2l6ZV90IGV4dHJhQnl0ZXMgPSBkZXNpcmVkU2l6ZSAtIG1fc2l6ZTsKICAgICBSRUxF
QVNFX0FTU0VSVChleHRyYUJ5dGVzKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnlBbmRHQygKLSAg
ICAgICAgdm0sCisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VzcyA9IHRyeUFsbG9jYXRlKAogICAg
ICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0OjpLaW5kIHsKICAgICAgICAgICAgIHJldHVybiBt
ZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQaHlzaWNhbEJ5dGVzKGV4dHJhQnl0ZXMpOwotICAg
ICAgICB9KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCisgICAgICAgIH0sIG1fbm90aWZ5TWVtb3J5UHJlc3N1cmUsIG1fc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSk7CisgICAgaWYgKCFhbGxvY2F0aW9uU3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeSk7CisKICAgICBzd2l0Y2gg
KG1vZGUoKSkgewogICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0gMCk7Ci0gICAgICAgIAorCiAg
ICAgICAgIHZvaWQqIG5ld01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIFdURjo6cGFnZVNpemUoKSwgZGVzaXJlZFNpemUpOwogICAgICAgICBp
ZiAoIW5ld01lbW9yeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkpOworCiAgICAg
ICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOwogICAgICAgICBtZW1zZXQo
c3RhdGljX2Nhc3Q8Y2hhcio+KG5ld01lbW9yeSkgKyBtX3NpemUsIDAsIGRlc2lyZWRTaXplIC0g
bV9zaXplKTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQpAQCAtNDA2LDcgKzQzMiw3IEBAIGJvb2wg
TWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCiAgICAgICAgIG1fbWVtb3J5
ID0gbmV3TWVtb3J5OwogICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAg
ICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3MoKTsKICAgICB9CiAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxp
bmc6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkpOwpAQCAtNDE1LDE2ICs0NDEs
MTcgQEAgYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291bnQgbmV3U2l6ZSkKICAgICAg
ICAgCiAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5nIFdlYkFzc2VtYmx5IG1l
bW9yeSdzICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiIGFzIHJlYWQrd3JpdGUgaW4gcmFuZ2Ug
WyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9pbnRlcihzdGFydEFkZHJl
c3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKICAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXJ0QWRkcmVz
cywgZXh0cmFCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgZmFpbGVkICIsICp0aGlz
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRhdGFMb2coIm1wcm90
ZWN0IGZhaWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAiXG4iKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgY29tbWl0WmVyb1Bh
Z2VzKHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRlcyk7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRT
aXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKKyAgICAgICAgcmV0dXJu
IHN1Y2Nlc3MoKTsKKyAgICB9CisgICAgfQorCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKIH0KIAog
dm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCA2MGE5YmI3Li4zZjE4YzE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC0yNyw4ICsyNywxMSBAQAogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKICNpbmNs
dWRlICJXYXNtUGFnZUNvdW50LmgiCiAKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzgsMTggKzQxLDggQEAgY2xhc3MgUHJpbnRTdHJlYW07
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCi0v
LyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotZW51bSBjbGFzcyBNZW1vcnlNb2Rl
IDogdWludDhfdCB7Ci0gICAgQm91bmRzQ2hlY2tpbmcsCi0gICAgU2lnbmFsaW5nCi19Owotc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7Ci1KU19FWFBPUlRf
UFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOwotCiBjbGFzcyBNZW1v
cnkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTcsOCArNTAsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9Ci0g
ICAgCi0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3Jl
YXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShQYWdlQ291bnQgaW5pdGlh
bCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9y
eVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNz
Q2FsbGJhY2spOwogCiAgICAgfk1lbW9yeSgpOwogCkBAIC03NSwyMiArNjksMzQgQEAgcHVibGlj
OgogCiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKLSAg
ICAvLyBncm93KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIEpTV2ViQXNzZW1ibHlN
ZW1vcnkgb2JqZWN0IHNpbmNlIHRoYXQgb2JqZWN0IG5lZWRzIHRvIHVwZGF0ZSBpbnRlcm5hbAot
ICAgIC8vIHBvaW50ZXJzIHdpdGggdGhlIGN1cnJlbnQgYmFzZSBhbmQgc2l6ZS4KLSAgICBib29s
IGdyb3coVk0mLCBQYWdlQ291bnQpOworICAgIGVudW0gY2xhc3MgR3Jvd0ZhaWxSZWFzb24gewor
ICAgICAgICBJbnZhbGlkRGVsdGEsCisgICAgICAgIEludmFsaWRHcm93U2l6ZSwKKyAgICAgICAg
V291bGRFeGNlZWRNYXhpbXVtLAorICAgICAgICBPdXRPZk1lbW9yeSwKKyAgICB9OworICAgIEV4
cGVjdGVkPFBhZ2VDb3VudCwgR3Jvd0ZhaWxSZWFzb24+IGdyb3coUGFnZUNvdW50KTsKIAogICAg
IHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KKworICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
TWVtb3J5LCBtX21lbW9yeSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0KKwogcHJpdmF0ZToK
LSAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1h
eGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7Ci0gICAgTWVtb3J5KFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisgICAgTWVtb3J5KCk7CisgICAg
TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
LCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5
VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQp
PiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOworICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVBy
ZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBX
VEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2Fs
bGJhY2spOwogCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoZXNlIHRvIHRoZSBpbnN0
YW5jZSB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNlIGNhbGxzLgorICAgIC8v
IEZJWE1FOiB3ZSBjYWNoZSB0aGVzZSBvbiB0aGUgaW5zdGFuY2VzIHRvIGF2b2lkIGEgbG9hZCBv
biBpbnN0YW5jZS0+aW5zdGFuY2UgY2FsbHMuIFRoaXMgd2lsbCByZXF1aXJlIHVwZGF0aW5nIGFs
bCB0aGUgaW5zdGFuY2VzIHdoZW4gZ3JvdyBpcyBjYWxsZWQuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUKICAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIg
fTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7CiAg
ICAgUGFnZUNvdW50IG1fbWF4aW11bTsKICAgICBzaXplX3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAg
fTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07
CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fbm90aWZ5TWVtb3J5UHJlc3N1cmU7CisgICAg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeTsKKyAgICBXVEY6
OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiBtX2dyb3dTdWNjZXNzQ2FsbGJh
Y2s7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKaW5kZXggYmY1NjVm
MC4uYjVjMzRiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIGNvbnN0IFBpbm5lZFJlZ2lz
dGVySW5mbyYgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKHN0
YXRpY1Bpbm5lZFJlZ2lzdGVySW5mb0ZsYWcsIFtdICgpIHsKICAgICAgICAgVmVjdG9yPFBpbm5l
ZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CiAgICAgICAgIEdQUlJlZyBiYXNlTWVt
b3J5UG9pbnRlciA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIEdQUlJlZyB3YXNtQ29udGV4dFBv
aW50ZXIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5j
ZVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
c3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyLCBhbmQgd2Ugc2hvdWxk
IGFsbG93IGRpZmZlcmVudAogICAgICAgICAvLyAgICAgICAgV2ViQXNzZW1ibHkuSW5zdGFuY2Ug
dG8gaGF2ZSBkaWZmZXJlbnQgcGlucy4gUmlnaHQgbm93IHdlIHRha2UgYSB2ZWN0b3Igd2l0aCBv
bmx5IG9uZSBlbnRyeS4KQEAgLTY1LDI3ICs2NSwyNyBAQCBjb25zdCBQaW5uZWRSZWdpc3Rlcklu
Zm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAgICAgICAgLy8gICAgICAgIHNlZTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgICAgICBWZWN0
b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07CiAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mUGlubmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6ZXMuc2l6ZSgpICsgMTsKLSAgICAgICAgaWYg
KCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQorICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RU
TFMoKSkKICAgICAgICAgICAgICsrbnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnM7CiAgICAgICAgIFZl
Y3RvcjxHUFJSZWc+IHBpbm5lZFJlZ3MgPSBnZXRQaW5uZWRSZWdpc3RlcnMobnVtYmVyT2ZQaW5u
ZWRSZWdpc3RlcnMpOwogCiAgICAgICAgIGJhc2VNZW1vcnlQb2ludGVyID0gcGlubmVkUmVncy50
YWtlTGFzdCgpOwotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAg
ICAgICB3YXNtQ29udGV4dFBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CisgICAgICAg
IGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgd2FzbUNvbnRleHRJbnN0
YW5jZVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CiAKICAgICAgICAgQVNTRVJUKHBp
bm5lZFNpemVzLnNpemUoKSA9PSBwaW5uZWRSZWdzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwaW5uZWRTaXplcy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIHNp
emVSZWdpc3RlcnMuYXBwZW5kKHsgcGlubmVkUmVnc1tpXSwgcGlubmVkU2l6ZXNbaV0gfSk7Ci0g
ICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RGTW92ZShzaXplUmVn
aXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0UG9pbnRlcik7CisgICAgICAg
IHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RGTW92ZShzaXplUmVnaXN0ZXJz
KSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKICAgICB9
KTsKIAogICAgIHJldHVybiBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uZ2V0KCk7CiB9CiAKLVBp
bm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVn
aXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BS
UmVnIHdhc21Db250ZXh0UG9pbnRlcikKK1Bpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0
ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQ
UlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
KQogICAgIDogc2l6ZVJlZ2lzdGVycyhXVEZNb3ZlKHNpemVSZWdpc3RlcnMpKQogICAgICwgYmFz
ZU1lbW9yeVBvaW50ZXIoYmFzZU1lbW9yeVBvaW50ZXIpCi0gICAgLCB3YXNtQ29udGV4dFBvaW50
ZXIod2FzbUNvbnRleHRQb2ludGVyKQorICAgICwgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIo
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKaW5kZXggNDIzN2JhYy4uMjMz
MjllYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7
CiBzdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJbmZvIHsKICAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lz
dGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKICAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Ci0g
ICAgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRlcjsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0
YW5jZVBvaW50ZXI7CiAgICAgc3RhdGljIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgZ2V0KCk7
CiAgICAgUGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYm
LCBHUFJSZWcsIEdQUlJlZyk7CiAKQEAgLTUyLDggKzUyLDggQEAgc3RydWN0IFBpbm5lZFJlZ2lz
dGVySW5mbyB7CiAgICAgewogICAgICAgICBSZWdpc3RlclNldCByZXN1bHQ7CiAgICAgICAgIHJl
c3VsdC5zZXQoYmFzZU1lbW9yeVBvaW50ZXIpOwotICAgICAgICBpZiAod2FzbUNvbnRleHRQb2lu
dGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICByZXN1bHQuc2V0KHdhc21Db250ZXh0
UG9pbnRlcik7CisgICAgICAgIGlmICh3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgcmVzdWx0LnNldCh3YXNtQ29udGV4dEluc3RhbmNlUG9p
bnRlcik7CiAgICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewogICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogc2l6ZVJlZ2lzdGVycykKICAgICAgICAg
ICAgICAgICByZXN1bHQuc2V0KGluZm8uc2l6ZVJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iMWJjOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5TW9kZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKKworY29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlNb2RlIG1vZGUpCit7
CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2lu
ZzogcmV0dXJuICJCb3VuZHNDaGVja2luZyI7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxp
bmc6IHJldHVybiAiU2lnbmFsaW5nIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gIiI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeU1vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xNGZjODk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeU1vZGUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJKU0V4cG9ydE1hY3Jvcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIFdhc20geworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIg
bW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5
MworZW51bSBjbGFzcyBNZW1vcnlNb2RlIDogdWludDhfdCB7CisgICAgQm91bmRzQ2hlY2tpbmcs
CisgICAgU2lnbmFsaW5nCit9OworCitzdGF0aWMgY29uc3RleHByIHNpemVfdCBOdW1iZXJPZk1l
bW9yeU1vZGVzID0gMjsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmco
TWVtb3J5TW9kZSk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1MWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5j
cHAKaW5kZXggOGUzNjZmNC4uOTkyZTNkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZS5jcHAKQEAgLTU2LDI3ICs1NiwyNiBAQCBzdGF0aWMgTW9kdWxlOjpWYWxpZGF0
aW9uUmVzdWx0IG1ha2VWYWxpZGF0aW9uUmVzdWx0KEJCUVBsYW4mIHBsYW4pCiAKIHN0YXRpYyBQ
bGFuOjpDb21wbGV0aW9uVGFzayBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKE1vZHVsZTo6QXN5bmNW
YWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICByZXR1cm4gY3JlYXRlU2hhcmVk
VGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAo
Vk0qIHZtLCBQbGFuJiBwbGFuKSB7CisgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6
Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFBsYW4mIHBsYW4p
IHsKICAgICAgICAgQVNTRVJUKCFwbGFuLmhhc1dvcmsoKSk7Ci0gICAgICAgIEFTU0VSVCh2bSk7
Ci0gICAgICAgIGNhbGxiYWNrLT5ydW4oKnZtLCBtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNf
Y2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKKyAgICAgICAgY2FsbGJhY2stPnJ1bihtYWtlVmFsaWRh
dGlvblJlc3VsdChzdGF0aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKICAgICB9KTsKIH0KIAot
TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKFZNJiB2bSwgVmVj
dG9yPHVpbnQ4X3Q+JiYgc291cmNlKQorTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6
dmFsaWRhdGVTeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkK
IHsKLSAgICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbigmdm0sIFdU
Rk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkp
KTsKKyAgICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0
LCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6
ZSgpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVs
ZSgpOwogICAgIHJldHVybiBtYWtlVmFsaWRhdGlvblJlc3VsdChwbGFuLmdldCgpKTsKIH0KIAot
dm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMoVk0mIHZtLCBWZWN0b3I8dWludDhfdD4mJiBzb3Vy
Y2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgTW9k
dWxlOjp2YWxpZGF0ZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNv
dXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAg
IFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKCZ2bSwgV1RGTW92ZShzb3Vy
Y2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKFdURk1vdmUo
Y2FsbGJhY2spKSkpOworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFu
KGNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlk
YXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSksIG51bGxwdHIsIG51bGxwdHIpKTsKICAg
ICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAKLVJl
ZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2Rl
KQorUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBj
b250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVt
YmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsK
ICAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwpAQCAtODcsMjMgKzg2LDIzIEBAIFJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6
Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlKQogICAgIC8vIEZJWE1FOiBXZSBt
aWdodCB3YW50IHRvIGJhY2sgb2ZmIHJldHJ5aW5nIGF0IHNvbWUgcG9pbnQ6CiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYwNwogICAgIGlmICghY29k
ZUJsb2NrIHx8IChjb2RlQmxvY2stPmNvbXBpbGF0aW9uRmluaXNoZWQoKSAmJiAhY29kZUJsb2Nr
LT5ydW5uYWJsZSgpKSkgewotICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZSht
b2RlLCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24oKSkp
OworICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZShjb250ZXh0LCBtb2RlLCBj
b25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24oKSksIFdURk1v
dmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICAgICAg
bV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXSA9IGNvZGVCbG9jazsKICAg
ICB9CiAgICAgcmV0dXJuIGNvZGVCbG9jay5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1SZWY8Q29k
ZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKE1lbW9yeU1vZGUgbW9kZSkKK1JlZjxDb2RlQmxv
Y2s+IE1vZHVsZTo6Y29tcGlsZVN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2Rl
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2Fz
bUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29k
ZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2sobW9kZSk7CisgICAgUmVmPENvZGVCbG9jaz4g
Y29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgV1RGTW92ZShj
cmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIGNvZGVCbG9j
ay0+d2FpdFVudGlsRmluaXNoZWQoKTsKICAgICByZXR1cm4gY29kZUJsb2NrOwogfQogCi12b2lk
IE1vZHVsZTo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgTWVtb3J5TW9kZSBtb2RlLCBDb2RlQmxvY2s6
OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCit2b2lkIE1vZHVsZTo6Y29tcGlsZUFz
eW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3luY0Nv
bXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVF
bWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7
Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2sobW9k
ZSk7Ci0gICAgY29kZUJsb2NrLT5jb21waWxlQXN5bmModm0sIFdURk1vdmUodGFzaykpOworICAg
IFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQs
IG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9u
KTsKKyAgICBjb2RlQmxvY2stPmNvbXBpbGVBc3luYyhjb250ZXh0LCBXVEZNb3ZlKHRhc2spKTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGUuaAppbmRleCBhMWFmNzU4Li5hNmFlMjlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21FbWJl
ZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtMzYsMTkgKzM3LDIwIEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKK3N0cnVjdCBDb250ZXh0Owogc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uOwogY2xhc3MgUGxhbjsKIAogdXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1aW50
MzJfdDsKLSAgICAKKwogY2xhc3MgTW9kdWxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PE1vZHVsZT4gewogcHVibGljOgogICAgIHVzaW5nIFZhbGlkYXRpb25SZXN1bHQgPSBXVEY6OkV4
cGVjdGVkPFJlZlB0cjxNb2R1bGU+LCBTdHJpbmc+OwotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFj
a1R5cGUoVk0mLCBWYWxpZGF0aW9uUmVzdWx0JiYpOworICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFj
a1R5cGUoVmFsaWRhdGlvblJlc3VsdCYmKTsKICAgICB1c2luZyBBc3luY1ZhbGlkYXRpb25DYWxs
YmFjayA9IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwogCi0gICAgc3RhdGljIFZh
bGlkYXRpb25SZXN1bHQgdmFsaWRhdGVTeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNl
KTsKLSAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYg
c291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOworICAgIHN0YXRpYyBW
YWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlU3luYyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYg
c291cmNlKTsKKyAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKENvbnRleHQqLCBWZWN0b3I8
dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJik7CiAK
ICAgICBzdGF0aWMgUmVmPE1vZHVsZT4gY3JlYXRlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJiBt
b2R1bGVJbmZvcm1hdGlvbikKICAgICB7CkBAIC01OCwxNCArNjAsMTQgQEAgcHVibGljOgogICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OwogICAgIGNvbnN0IFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KIAotICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5j
KE1lbW9yeU1vZGUpOwotICAgIHZvaWQgY29tcGlsZUFzeW5jKFZNJiwgTWVtb3J5TW9kZSwgQ29k
ZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CisgICAgUmVmPENvZGVCbG9jaz4g
Y29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYm
LCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBN
ZW1vcnlNb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmLCBDcmVhdGVF
bWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIH5Nb2R1bGUoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yKE1lbW9yeU1v
ZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUp
XS5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVC
bG9jayhNZW1vcnlNb2RlKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVCbG9j
ayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2Fz
bUV4Y2VwdGlvbik7CiAKICAgICBNb2R1bGUoUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmKTsKICAg
ICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDZjOTQ4YjUu
LjZkNDRhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAj
aW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFi
bGUuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNt
TmFtZVNlY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCkBAIC0yNjUsNyArMjY0
LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCkg
LT4gUGFydGlhbFJlc3VsdAogICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFi
bGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7CiAgICAgaWYgKFVOTElLRUxZKCFsaW1pdHMpKQog
ICAgICAgICByZXR1cm4gbGltaXRzLmdldFVuZXhwZWN0ZWQoKTsKLSAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRTaXplKGluaXRpYWwpLCAiVGFibGUn
cyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4VGFibGVFbnRyaWVzLCAiVGFibGUncyBp
bml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyB0b28gYmlnLCBtYXhpbXVtICIs
IG1heFRhYmxlRW50cmllcyk7CiAKICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0g
aW5pdGlhbCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
TUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApp
bmRleCA3NGNmNjUzLi5jY2RmNzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR1BsYW4uY3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24u
aCIKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJXYXNt
QjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNt
Q29udGV4dC5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUgIldh
c21NZW1vcnkuaCIKQEAgLTUxLDEwICs1MiwxMCBAQCBuYW1lc3BhY2UgV2FzbU9NR1BsYW5JbnRl
cm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLU9NR1BsYW46
Ok9NR1BsYW4oUmVmPE1vZHVsZT4gbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1v
cnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2UobnVsbHB0ciwg
bWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJbmZv
cm1hdGlvbigpKSksIFdURk1vdmUodGFzaykpCi0gICAgLCBtX21vZHVsZShtb2R1bGUuY29weVJl
ZigpKQotICAgICwgbV9jb2RlQmxvY2soKm1vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQorT01H
UGxhbjo6T01HUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRh
c2spCisgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1h
dGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQorICAg
ICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQorICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxl
LT5jb2RlQmxvY2tGb3IobW9kZSkpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRl
eCkKIHsKICAgICBzZXRNb2RlKG1vZGUpOwpAQCAtMTYyLDEzICsxNjMsMTMgQEAgdm9pZCBPTUdQ
bGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9j
aykpOwogfQogCi12b2lkIHJ1bk9NR1BsYW5Gb3JJbmRleChDb250ZXh0KiBjb250ZXh0LCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4KQordm9pZCBPTUdQbGFuOjpydW5Gb3JJbmRleChKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogewotICAgIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvbnRleHQtPmNvZGVCbG9jaygpOwot
ICAgIEFTU0VSVChjb250ZXh0LT5tZW1vcnlNb2RlKCkgPT0gY29kZUJsb2NrLT5tX2NvZGVCbG9j
ay0+bW9kZSgpKTsKKyAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jayA9IGluc3RhbmNlLT53
YXNtQ29kZUJsb2NrKCk7CisgICAgQVNTRVJUKGluc3RhbmNlLT53YXNtTWVtb3J5KCktPm1vZGUo
KSA9PSBjb2RlQmxvY2subW9kZSgpKTsKIAotICAgIGlmIChjb2RlQmxvY2stPm1fY29kZUJsb2Nr
LT50aWVyVXBDb3VudChmdW5jdGlvbkluZGV4KS5zaG91bGRTdGFydFRpZXJVcCgpKSB7Ci0gICAg
ICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKGNvbnRleHQtPm1vZHVs
ZSgpLT5tb2R1bGUoKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+bW9k
ZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAgIGlmIChjb2RlQmxvY2sudGllclVwQ291
bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAoKSkgeworICAgICAgICBSZWY8UGxh
bj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8
V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+d2FzbU1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29k
ZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAgZW5zdXJlV29y
a2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFP
cHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNv
bXBsZXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
TUdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCmluZGV4
IDcxNjRhOWUuLmI4MDgyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5j
bHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21Nb2R1
bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgpAQCAtNDEsMTcgKzQwLDIwIEBAIG5hbWVzcGFj
ZSBXYXNtIHsKIGNsYXNzIE9NR1BsYW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CiBwdWJsaWM6CiAg
ICAgdXNpbmcgQmFzZSA9IFBsYW47Ci0gICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxk
IG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJl
IGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR1BsYW4oUmVmPE1vZHVsZT4sIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgYm9vbCBo
YXNXb3JrKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fY29tcGxldGVkOyB9CiAgICAgdm9p
ZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKICAgICBib29sIG11bHRpVGhyZWFk
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgc3RhdGljIHZvaWQg
cnVuRm9ySW5kZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCk7CisKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24n
dCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KICAgICB1c2luZyBCYXNlOjptX2xvY2s7CiAK
KyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2Ug
dG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisg
ICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CisKICAgICBib29sIGlzQ29tcGxldGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbXBsZXRlZDsgfQogICAgIHZvaWQgY29tcGxl
dGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikgb3ZlcnJpZGUKICAgICB7CkBAIC02NSw4
ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwogfTsKIAot
dm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCosIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgp
OwotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VD
b3VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCmluZGV4
IGU0Mzg0N2MuLmVmMDVmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QYWdlQ291bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFn
ZUNvdW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHBh
Z2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CiAgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNWYWxpZChtX3BhZ2VDb3VudCk7CisgICAg
fQogCiAgICAgc3RhdGljIFBhZ2VDb3VudCBmcm9tQnl0ZXModWludDY0X3QgYnl0ZXMpCiAgICAg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGJhMjdjZjkuLmQw
NjNjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOCArMjks
NiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24u
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtNTEsMjAgKzQ5LDI3IEBAIG5hbWVzcGFjZSBX
YXNtUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0K
IAotUGxhbjo6UGxhbihWTSogdm0sIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uKQogICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKGluZm8pKQor
ICAgICwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBw
ZXIpKQorICAgICwgbV90aHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKQogICAg
ICwgbV9zb3VyY2UobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkKICAgICAsIG1f
c291cmNlTGVuZ3RoKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkpCiB7Ci0gICAg
bV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHZtLCBXVEZNb3ZlKHRhc2sp
KSk7CisgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQs
IFdURk1vdmUodGFzaykpKTsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxh
bjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENv
bXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4oY29udGV4dCwgV1RGTW92ZShpbmZvKSwg
V1RGTW92ZSh0YXNrKSwgbnVsbHB0ciwgbnVsbHB0cikKK3sKK30KKworUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgs
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRS
ZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQogICAgICwgbV9z
b3VyY2Uoc291cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQogewotICAg
IG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih2bSwgV1RGTW92ZSh0YXNr
KSkpOworICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0
LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKIHZvaWQgUGxhbjo6cnVuQ29tcGxldGlvblRhc2tzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJikKQEAgLTcyLDE4ICs3NywxOCBAQCB2b2lkIFBsYW46OnJ1bkNv
bXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgQVNTRVJUKGlzQ29tcGxl
dGUoKSAmJiAhaGFzV29yaygpKTsKIAogICAgIGZvciAoYXV0byYgdGFzayA6IG1fY29tcGxldGlv
blRhc2tzKQotICAgICAgICB0YXNrLnNlY29uZC0+cnVuKHRhc2suZmlyc3QsICp0aGlzKTsKKyAg
ICAgICAgdGFzay5zZWNvbmQtPnJ1bigqdGhpcyk7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuY2xl
YXIoKTsKICAgICBtX2NvbXBsZXRlZC5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBQbGFuOjphZGRD
b21wbGV0aW9uVGFzayhWTSYgdm0sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK3ZvaWQgUGxhbjo6
YWRkQ29tcGxldGlvblRhc2soQ29udGV4dCogY29udGV4dCwgQ29tcGxldGlvblRhc2smJiB0YXNr
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgaWYgKCFpc0NvbXBsZXRl
KCkpCi0gICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdm0s
IFdURk1vdmUodGFzaykpKTsKKyAgICAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKICAgICBlbHNlCi0gICAgICAgIHRh
c2stPnJ1bigmdm0sICp0aGlzKTsKKyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsKIH0KIAogdm9p
ZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCkBAIC05NCwxOSArOTksMTkgQEAgdm9pZCBQbGFu
Ojp3YWl0Rm9yQ29tcGxldGlvbigpCiAgICAgfQogfQogCi1ib29sIFBsYW46OnRyeVJlbW92ZVZN
QW5kQ2FuY2VsSWZMYXN0KFZNJiB2bSkKK2Jvb2wgUGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENh
bmNlbElmTGFzdChDb250ZXh0JiBjb250ZXh0KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bG9jayk7CiAKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBXZSBhbGxv
dyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNrIHRvIG5vdCBoYXZlIGEgdm0uCisgICAgICAgIC8v
IFdlIGFsbG93IHRoZSBmaXJzdCBjb21wbGV0aW9uIHRhc2sgdG8gbm90IGhhdmUgYSBDb250ZXh0
LgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9jb21wbGV0aW9uVGFza3Muc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBBU1NFUlQobV9jb21wbGV0aW9uVGFza3NbaV0uZmlyc3Qp
OwogICAgIH0KIAogICAgIGJvb2wgcmVtb3ZlZEFueVRhc2tzID0gZmFsc2U7Ci0gICAgbV9jb21w
bGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBzdGQ6OnBhaXI8Vk0qLCBD
b21wbGV0aW9uVGFzaz4mIHBhaXIpIHsKLSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmUgPSBwYWly
LmZpcnN0ID09ICZ2bTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5yZW1vdmVBbGxNYXRjaGluZyhb
Jl0gKGNvbnN0IHN0ZDo6cGFpcjxDb250ZXh0KiwgQ29tcGxldGlvblRhc2s+JiBwYWlyKSB7Cisg
ICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFpci5maXJzdCA9PSAmY29udGV4dDsKICAgICAg
ICAgcmVtb3ZlZEFueVRhc2tzIHw9IHNob3VsZFJlbW92ZTsKICAgICAgICAgcmV0dXJuIHNob3Vs
ZFJlbW92ZTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4
IDEwZjhhMWIuLjdhMDdiZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApA
QCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNv
bXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21Nb2R1
bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvU2hh
cmVkVGFzay5oPgpAQCAtMzksMjUgKzM5LDI3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
Q2FsbExpbmtJbmZvOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1Byb21pc2VEZWZl
cnJlZDsKIAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKKwogY2xhc3MgUGxh
biA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiBwdWJsaWM6Ci0gICAgdHlw
ZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSosIFBsYW4mKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2Fs
bGJhY2tUeXBlKFBsYW4mKTsKICAgICB1c2luZyBDb21wbGV0aW9uVGFzayA9IFJlZlB0cjxTaGFy
ZWRUYXNrPENhbGxiYWNrVHlwZT4+OwotICAgIHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250Rmlu
YWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oVk0qLCBQ
bGFuJikgeyB9KTsgfQotICAgIFBsYW4oVk0qLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21w
bGV0aW9uVGFzayYmKTsKKworICAgIHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250RmluYWxpemUo
KSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oUGxhbiYpIHsgfSk7
IH0KKyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9u
VGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAg
ICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYm
KTsKIAogICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBp
ZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlkYXRpb24v
ZnVuY3Rpb24gdGVzdHMKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgY29uc3QgdWlu
dDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
UGxhbihDb250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7
CiAgICAgdmlydHVhbCBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwogCiAgICAgLy8gSWYgeW91
IGd1YXJhbnRlZSB0aGUgb3JkZXJpbmcgaGVyZSwgeW91IGNhbiByZWx5IG9uIEZJRk8gb2YgdGhl
CiAgICAgLy8gY29tcGxldGlvbiB0YXNrcyBiZWluZyBjYWxsZWQuCi0gICAgdm9pZCBhZGRDb21w
bGV0aW9uVGFzayhWTSYsIENvbXBsZXRpb25UYXNrJiYpOworICAgIHZvaWQgYWRkQ29tcGxldGlv
blRhc2soQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgdm9pZCBzZXRNb2RlKE1l
bW9yeU1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CiAgICAgTWVtb3J5TW9kZSBtb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkBAIC03Miw3ICs3NCw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY2Fu
Y2VsbGVkIHRoZSBwbGFuLgotICAgIGJvb2wgdHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3QoVk0m
KTsKKyAgICBib29sIHRyeVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYpOwog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBydW5Db21wbGV0aW9uVGFza3MoY29uc3QgQWJzdHJhY3RM
b2NrZXImKTsKQEAgLTgzLDcgKzg1LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIFJlZjxNb2R1bGVJ
bmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Vk0qLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRhc2tzOworICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiwgMT4gbV9jb21wbGV0aW9uVGFza3M7
CisKKyAgICBDcmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7Cisg
ICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9Owog
CiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAgY29uc3Qgc2l6ZV90IG1fc291cmNl
TGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25h
dHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcApp
bmRleCA4YjYwMGVkLi42YTQyZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2lnbmF0dXJlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2lnbmF0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgK
aW5kZXggZTQxM2IyNS4uYWFjZWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNpZ25hdHVyZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TaWduYXR1cmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Myw4ICs0Myw2IEBAIGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgU2lnbmF0
dXJlQXJnQ291bnQgPSB1aW50MzJfdDsKQEAgLTE1Niw3ICsxNTQsNyBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFzaD4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi0vLyBTaWdu
YXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5IFZNcyB0byBh
bGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3
YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1vZHVs
ZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4KKy8vIFNpZ25hdHVyZSBpbmZvcm1h
dGlvbiBpcyBoZWxkIGdsb2JhbGx5IGFuZCBzaGFyZWQgYnkgdGhlIGVudGlyZSBwcm9jZXNzIHRv
IGFsbG93IGFsbCBzaWduYXR1cmVzIHRvIGJlIHVuaXF1ZS4gVGhpcyBpcyByZXF1aXJlZCB3aGVu
IHdhc20gY2FsbHMgYW5vdGhlciB3YXNtIGluc3RhbmNlLCBhbmQgbXVzdCB3b3JrIHdoZW4gbW9k
dWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgVk1zLgogLy8gTm90ZTogc2lnbmF0dXJl
cyBhcmUgbmV2ZXIgcmVtb3ZlZCBiZWNhdXNlIHRoYXQgd291bGQgcmVxdWlyZSBhY2NvdW50aW5n
IGZvciBhbGwgV2ViQXNzZW1ibHkuTW9kdWxlIGFuZCB3aGljaCBzaWduYXR1cmVzIHRoZXkgdXNl
LiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBpcyBib3VuZGVkLCBhbmQgaXNuJ3Qg
d29ydGggdGhlIGNvdW50aW5nIG92ZXJoZWFkLiBXZSBjb3VsZCBjbGVhciBldmVyeXRoaW5nIHdo
ZW4gd2UgcmVhY2ggemVybyBvdXRzdGFuZGluZyBXZWJBc3NlbWJseS5Nb2R1bGUuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMzcKIGNsYXNzIFNpZ25hdHVyZUlu
Zm9ybWF0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaWduYXR1cmVJbmZvcm1hdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGVmYWVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworUmVmUHRy
PFRhYmxlPiBUYWJsZTo6Y3JlYXRlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IG1heGltdW0pCit7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgZmFz
dE1hbGxvYyhzaXplb2YoVGFibGUpKSkgVGFibGUoaW5pdGlhbCwgbWF4aW11bSkpOworfQorCitU
YWJsZTo6flRhYmxlKCkKK3sKK30KKworVGFibGU6OlRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgbV9zaXplID0gaW5pdGlhbDsK
KyAgICBtX21heGltdW0gPSBtYXhpbXVtOworICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3NpemUp
KTsKKyAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7CisKKyAg
ICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhp
bXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCisgICAgLy8gQnV0IGZvciBu
b3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgorICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdh
c206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rp
b24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICBtX2luc3RhbmNlcyA9IE1h
bGxvY1B0cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPjo6bWFsbG9jKHNpemVvZihKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIG5ldyAoJm1fZnVuY3Rp
b25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVCht
X2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6Omlu
dmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAg
ICBtX2luc3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKK3sKKyAgICBpZiAoZGVs
dGEgPT0gMCkKKyAgICAgICAgcmV0dXJuIHNpemUoKTsKKworICAgIHVzaW5nIENoZWNrZWQgPSBD
aGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz47CisgICAgQ2hlY2tlZCBuZXdTaXplQ2hl
Y2tlZCA9IHNpemUoKTsKKyAgICBuZXdTaXplQ2hlY2tlZCArPSBkZWx0YTsKKyAgICB1aW50MzJf
dCBuZXdTaXplOworICAgIGlmIChuZXdTaXplQ2hlY2tlZC5zYWZlR2V0KG5ld1NpemUpID09IENo
ZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBpZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICB7CisgICAgICAgIENoZWNrZWQgcmVhbGxvY0Z1
bmN0aW9uc1NpemVDaGVja2VkID0gbmV3U2l6ZUNoZWNrZWQ7CisgICAgICAgIHJlYWxsb2NGdW5j
dGlvbnNTaXplQ2hlY2tlZCAqPSBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbik7CisgICAgICAgIHVp
bnQzMl90IHJlYWxsb2NGdW5jdGlvbnNTaXplOworICAgICAgICBpZiAocmVhbGxvY0Z1bmN0aW9u
c1NpemVDaGVja2VkLnNhZmVHZXQocmVhbGxvY0Z1bmN0aW9uc1NpemUpID09IENoZWNrZWRTdGF0
ZTo6RGlkT3ZlcmZsb3cpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAg
ICBtX2Z1bmN0aW9ucy5yZWFsbG9jKHJlYWxsb2NGdW5jdGlvbnNTaXplKTsKKyAgICAgICAgZm9y
ICh1aW50MzJfdCBpID0gbV9zaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgbmV3
ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICB9
CisgICAgCisgICAgeworICAgICAgICBDaGVja2VkIHJlYWxsb2NJbnN0YW5jZXNTaXplQ2hlY2tl
ZCA9IG5ld1NpemVDaGVja2VkOworICAgICAgICByZWFsbG9jSW5zdGFuY2VzU2l6ZUNoZWNrZWQg
Kj0gc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworICAgICAgICB1aW50MzJfdCByZWFs
bG9jSW5zdGFuY2VzU2l6ZTsKKyAgICAgICAgaWYgKHJlYWxsb2NJbnN0YW5jZXNTaXplQ2hlY2tl
ZC5zYWZlR2V0KHJlYWxsb2NJbnN0YW5jZXNTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJm
bG93KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgbV9pbnN0YW5j
ZXMucmVhbGxvYyhyZWFsbG9jSW5zdGFuY2VzU2l6ZSk7CisgICAgICAgIGZvciAodWludDMyX3Qg
aSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgIG1faW5zdGFuY2VzLmdl
dCgpW2ldID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX3NpemUgPSBuZXdTaXplOworCisgICAg
cmV0dXJuIG5ld1NpemU7Cit9CisKK3ZvaWQgVGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3Qg
aW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIG1fZnVu
Y3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICBBU1NF
UlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25h
dHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUu
CisgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXhdID0gbnVsbHB0cjsKK30KKwordm9pZCBUYWJs
ZTo6c2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgsIENhbGxhYmxlRnVuY3Rpb24gZnVuY3Rpb24s
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
aW5kZXggPCBzaXplKCkpOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9u
OworICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IGluc3RhbmNlOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6VGFibGUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjkwOGVjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UYWJsZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTGlt
aXRzLmgiCisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTsgLy8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5zdGFuY2UgaHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTc3NDcyCisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgVGFibGUgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGFibGU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENy
ZWF0ZUZhaWwgeworICAgICAgICBJbnZhbGlkU2l6ZSwKKyAgICB9OworICAgIHN0YXRpYyBSZWZQ
dHI8VGFibGU+IGNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBtYXhpbXVtKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UYWJsZSgpOworCisgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsg
fQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIHNldEZ1bmN0
aW9uKHVpbnQzMl90LCBDYWxsYWJsZUZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIFdhc206Okluc3RhbmNlLiBodHRwczovL3dlYmtpdC5vcmcvYi8x
Nzc0NzIKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFRhYmxlLCBtX3NpemUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkZ1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9mdW5jdGlv
bnMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlcygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9pbnN0YW5jZXMpOyB9CisKKyAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBzaXplIDwgbWF4VGFibGVFbnRy
aWVzOyB9CisKK3ByaXZhdGU6CisgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
X21heGltdW07CisgICAgdWludDMyX3QgbV9zaXplOworICAgIE1hbGxvY1B0cjxDYWxsYWJsZUZ1
bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICAvLyBjYWxsX2luZGlyZWN0IG5lZWRzIHRvIGRvIGFu
IEluc3RhbmNlIGNoZWNrIHRvIHBvdGVudGlhbGx5IGNvbnRleHQgc3dpdGNoIHdoZW4gY2FsbGlu
ZyBhIGZ1bmN0aW9uIHRvIGFub3RoZXIgaW5zdGFuY2UuIFdlIGNhbiBob2xkIHJhdyBwb2ludGVy
cyB0byBJbnN0YW5jZSBoZXJlIGJlY2F1c2UgdGhlIGVtYmVkZGVyIGVuc3VyZXMgdGhhdCBUYWJs
ZSBrZWVwcyBhbGwgdGhlIGluc3RhbmNlcyBhbGl2ZS4gV2UgY291bGRuJ3QgaG9sZCBhIFJlZiBo
ZXJlIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgY3ljbGVzLgorICAgIE1hbGxvY1B0cjxKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqPiBtX2luc3RhbmNlczsgLy8gRklYTUUgbWFrZSB0aGlzIGEgV2FzbTo6
SW5zdGFuY2UuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKaW5kZXggOTc3YjAxYi4uYzIzNTk4MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTI5LDExICsy
OSw5IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiSGVhcENlbGxJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKQEAgLTQ4LDQ2ICs0NiwxOCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJgogCiAgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVyZSBtdXN0IG1v
dmUgRXhjZXB0aW9uVHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYmVmb3JlIGp1bXBpbmcgaGVy
ZS4KICAgICAvLyBXZSdyZSBhbGxvd2VkIHRvIHVzZSB0ZW1wIHJlZ2lzdGVycyBoZXJlLiBXZSBh
cmUgbm90IGFsbG93ZWQgdG8gdXNlIGNhbGxlZSBzYXZlcy4KLSAgICBqaXQubG9hZFdhc21Db250
ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQ29udGV4dDo6b2Zmc2V0T2ZWTSgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
ICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CiAgICAg
aml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGppdC5icmVha3BvaW50KCk7
IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAotICAgIHZvaWQqICgqdGhyb3dXYXNtRXhj
ZXB0aW9uKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBXYXNtOjpDb250ZXh0Kikg
PSBbXSAoRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIFdhc206OkNv
bnRleHQqIHdhc21Db250ZXh0KSAtPiB2b2lkKiB7Ci0gICAgICAgIFZNKiB2bSA9IHdhc21Db250
ZXh0LT52bSgpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKCp2bSk7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotCi0gICAgICAgICAgICBKU09iamVjdCog
ZXJyb3I7IAotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3RhY2tPdmVy
ZmxvdykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihl
eGVjLCBnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVy
cm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGV4ZWMsICp2bSwgZ2xvYmFs
T2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1l
c3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdlbmVyaWNV
bndpbmQodm0sIGV4ZWMpOwotICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gp
OwotICAgICAgICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwotICAgICAg
ICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKLSAgICAgICAgLy8gVGhpcyBp
cyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uKQotICAgICAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVl
IGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJl
Ci0gICAgICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZN
IHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KLSAgICAgICAg
Ly8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwg
ZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKLSAgICAgICAgLy8gdG8gdGhlIGV4Y2VwdGlv
biBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUg
aGFjay4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MDQ0MAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtDYWxsRnJhbWVT
bG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih3YXNtQ29udGV4dC0+d2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlKCkpOwotICAgICAgICByZXR1cm4gdm0tPnRhcmdldE1hY2hpbmVQQ0Zv
clRocm93OwotICAgIH07Ci0KKyAgICBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0
aW9uID0gVGh1bmtzOjpzaW5nbGV0b24oKS50aHJvd1dhc21FeGNlcHRpb24oKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93
V2FzbUV4Y2VwdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKHRo
cm93V2FzbUV4Y2VwdGlvbikpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
ICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpKTsKIH0KIApAQCAtMTE5LDggKzg5LDEwIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IoY29u
c3QgQWJzdHJhY3RMb2NrZXImKQogI2VuZGlmCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5
dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwg
ZXh0cmFQYWRkaW5nQnl0ZXMpOwogCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjph
cmd1bWVudEdQUjApOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJ1bk9NR1BsYW5Gb3JJbmRleCkpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjph
cmd1bWVudEdQUjApOworICAgIHR5cGVkZWYgdm9pZCAoKlJ1bikoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiwgdWludDMyX3QpOworICAgIFJ1biBydW4gPSBPTUdQbGFuOjpydW5Gb3JJbmRleDsKKyAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPihydW4pKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuY2FsbChHUFJJ
bmZvOjphcmd1bWVudEdQUjIpOwogCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0
b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJlZ2lz
dGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwg
ZXh0cmFQYWRkaW5nQnl0ZXMpOwpAQCAtMTQyLDYgKzExNCwxOSBAQCBUaHVua3MmIFRodW5rczo6
c2luZ2xldG9uKCkKICAgICByZXR1cm4gKnRodW5rczsKIH0KIAordm9pZCBUaHVua3M6OnNldFRo
cm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAvLyBUaGUgdGh1bmtz
IGFyZSB1bmlxdWUgZm9yIHRoZSBlbnRpcmUgcHJvY2VzcywgdGhlcmVmb3JlIGNoYW5naW5nIHRo
ZSB0aHJvd2luZyBmdW5jdGlvbiBjaGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBvZiBXZWJBc3NlbWJs
eS4KKyAgICBSRUxFQVNFX0FTU0VSVCghbV90aHJvd1dhc21FeGNlcHRpb24gfHwgbV90aHJvd1dh
c21FeGNlcHRpb24gPT0gdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBtX3Rocm93V2FzbUV4Y2Vw
dGlvbiA9IHRocm93V2FzbUV4Y2VwdGlvbjsKK30KKworVGhyb3dXYXNtRXhjZXB0aW9uIFRodW5r
czo6dGhyb3dXYXNtRXhjZXB0aW9uKCkKK3sKKyAgICByZXR1cm4gbV90aHJvd1dhc21FeGNlcHRp
b247Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6OnN0dWIoVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBkZjE0Y2EyLi41Mjk3NjRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CiAKQEAgLTQyLDYgKzQzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoKTsKICAgICBzdGF0aWMgVGh1bmtzJiBzaW5nbGV0b24oKTsKIAorICAg
IHZvaWQgc2V0VGhyb3dXYXNtRXhjZXB0aW9uKFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbigpOworCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHN0dWIoVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzdHViKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IpOwpAQCAtNTAsNiAr
NTQsNyBAQCBwcml2YXRlOgogICAgIFRodW5rcygpID0gZGVmYXVsdDsKIAogICAgIEhhc2hNYXA8
VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9zdHViczsKKyAgICBUaHJv
d1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRyIH07CiAgICAgTG9j
ayBtX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmNwcAppbmRleCA5YzViNjg0Li4yZmUxMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Fz
bVdvcmtsaXN0LmgiCiAKQEAgLTE3MiwxMyArMTczLDEzIEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBs
ZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYgcGxhbikKICAgICBwbGFuLndhaXRGb3JDb21wbGV0
aW9uKCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKK3Zv
aWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRleHQoQ29udGV4dCYgY29udGV4dCkKIHsK
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBWZWN0b3I8UXVldWVFbGVtZW50
PiBlbGVtZW50czsKICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIFF1
ZXVlRWxlbWVudCBlbGVtZW50ID0gbV9xdWV1ZS5kZXF1ZXVlKCk7Ci0gICAgICAgIGJvb2wgZGlk
Q2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7Cisg
ICAgICAgIGJvb2wgZGlkQ2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250ZXh0QW5k
Q2FuY2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICBpZiAoIWRpZENhbmNlbCkKICAgICAgICAg
ICAgIGVsZW1lbnRzLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICB9CkBAIC0xODgsNyAr
MTg5LDcgQEAgdm9pZCBXb3JrbGlzdDo6c3RvcEFsbFBsYW5zRm9yVk0oVk0mIHZtKQogCiAgICAg
Zm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKICAgICAgICAgaWYgKHRocmVhZC0+ZWxl
bWVudC5wbGFuKSB7Ci0gICAgICAgICAgICBib29sIGRpZENhbmNlbCA9IHRocmVhZC0+ZWxlbWVu
dC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7CisgICAgICAgICAgICBib29s
IGRpZENhbmNlbCA9IHRocmVhZC0+ZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250ZXh0QW5kQ2Fu
Y2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGRpZENhbmNlbCkgewogICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5n
IHNpbmNlIHRoZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjaGVja2luZyBmb3IgYSBuZXcg
cGxhbiBhbmQgbXVzdCBob2xkIHRoZSBsb2NrIHRvIGRvIHNvLgogICAgICAgICAgICAgICAgIHRo
cmVhZC0+c3luY2hyb25pemUud2FpdCgqbV9sb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVdvcmtsaXN0LmgKaW5kZXggNmI2OTM1Mi4uNzQ4YTllYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTI3LDggKzI3LDYgQEAKIAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0KICNpbmNsdWRlIDxxdWV1ZT4K
IAogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KQEAgLTM3LDEwICszNSw5IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKLQogbmFtZXNwYWNl
IFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIFBsYW47CiAKIGNsYXNzIFdvcmtsaXN0
IHsKQEAgLTUwLDEzICs0NywxMCBAQCBwdWJsaWM6CiAgICAgfldvcmtsaXN0KCk7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGVucXVldWUoUmVmPFBsYW4+KTsKLSAgICB2b2lkIHN0b3BB
bGxQbGFuc0ZvclZNKFZNJik7CisgICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JDb250ZXh0KENvbnRl
eHQmKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFuU3luY2hyb25v
dXNseShQbGFuJik7CiAKLSAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VEZWZlcnJlZCos
IFBsYW4qKTsKLSAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4q
KTsKLQogICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgewogICAgICAgICBTaHV0ZG93biwKICAgICAg
ICAgU3luY2hyb25vdXMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNzEwOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAt
MCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlv
bkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25D
b250ZXh0LmpzRW50cnlwb2ludEpJVDsKKworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OworCisgICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKKyAgICBqaXQuc3RvcmU2NChDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJl
bFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
KyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0
LT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOworCisgICAgY29uc3QgUGlu
bmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsK
KyAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2RlKTsKKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCB0b1NhdmVTaXplID0gdG9TYXZlLm51bWJl
ck9mU2V0R1BScygpOworICAgIC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUgc2F2ZXMuCisg
ICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAg
ICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUpOworI2VuZGlm
CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRvU2F2ZSwgUmVn
aXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCk7Cisg
ICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1Nw
aWxsOworCisgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNp
emUoKSAqIHNpemVvZih2b2lkKik7CisgICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxpbmdD
b252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOworICAgIHRvdGFsRnJhbWVTaXplIC09IHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICB1bnNpZ25lZCBudW1HUFJzID0gMDsKKyAgICB1
bnNpZ25lZCBudW1GUFJzID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFy
Z3VtZW50KGkpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBjYXNlIFdhc206
OkkzMjoKKyAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigp
Lm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6
ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAg
ICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6
ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7Cisg
ICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKKyAgICBqaXQuc3ViUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2Ugc2F2ZSBhbGwgdGhlc2UgcmVn
aXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KKyAgICAvLyBUaGUg
cmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2guIFRoYXQgc2Fp
ZCwKKyAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVtb3J5LCBzbyBp
dCdzIG5vdCByZWFsbHkKKyAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0
IHRoZXkgZG9uJ3QuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNl
dCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0
LnJlZygpLmdwcigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zm
c2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQorCisgICAgR1BSUmVn
IHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyOworCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJh
bWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykp
KTsKKyAgICAgICAgbnVtR1BScyA9IDA7CisgICAgICAgIG51bUZQUnMgPSAwOworICAgICAgICAv
LyBXZSdyZSBnb2luZyB0byBzZXQgdGhlIHBpbm5lZCByZWdpc3RlcnMgYWZ0ZXIgdGhpcy4gU28K
KyAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGlzIGFzIGEgc2NyYXRjaCBmb3Igbm93IHNpbmNlIHdl
IHNhdmVkIGl0IGFib3ZlLgorICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHBpbm5lZFJlZ3Mu
YmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0ID0gQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKworICAgICAg
ICAvLyB2bUVudHJ5VG9XYXNtIHBhc3NlcyBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlIGFzIHRo
ZSBmaXJzdCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCisgICAgICAgIC8vIG5vdCB1c2luZyBmYXN0
IFRMUyB0byBob2xkIHRoZSBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlLgorICAgICAgICBpZiAo
IUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdh
c21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0
ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsg
aSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAg
ICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAg
ICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dw
ckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1l
bnQoaSkgPT0gV2FzbTo6STMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZz
ZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNj
cmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0
KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3Jh
dGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lk
Kik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNp
Z25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BS
c10uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVt
R1BSc10uZ3ByKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUdQ
UnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoK
KyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJz
ID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0
aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhP
ZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdh
c206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21D
YWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQp
LCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpzT2Zm
c2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExT
KCkpCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNv
bnRleHRJbnN0YW5jZUdQUiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1v
cnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGppdC5sb2Fk
V2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAgICAgIGNvbnN0
IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAg
QVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJl
Z3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0
IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUg
dG8gMC4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
TWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5Ojpv
ZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgdW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVu
Y3Rpb25Db3VudCgpOworICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0
aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsKKyAg
ICB9KTsKKworCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6
IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJl
ZygpLmdwcigpOworICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7CisgICAgfQorCisgICAgc3dpdGNoIChzaWduYXR1cmUu
cmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGppdC5tb3ZlRmxv
YXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICBqaXQubW92ZURv
dWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Yjk4ZDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgi
CisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNs
dWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3Bh
Y2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCnNpbWls
YXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9K
U1dlYkFzc2VtYmx5LmNwcApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L0pTV2ViQXNzZW1ibHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHkuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAppbmRleCAwZmFmOTc3Li5jNTc4ZGYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCkBAIC0yOCwzMSArMjgs
MzEgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU09iamVjdC5oIgot
I2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKLSNpbmNsdWRlICJqcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TGlua0Vy
cm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIgotI2luY2x1ZGUgImpz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVRhYmxlLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKLSNpbmNs
dWRlICJqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMv
V2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCi0j
aW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UHJvdG90
eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCi0jaW5j
bHVkZSAianMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVy
cm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5SW5zdGFuY2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUxpbmtFcnJvckNv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIKKyNp
bmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rv
ci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCisjaW5j
bHVkZSAiV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VG9KU0NhbGxlZS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmOTFlNmM3Li4wODI1MTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIK
IAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC00NCw3ICs0NCw3IEBAIGNvbnN0
IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJs
eUNvZGVCbG9jayIsIG51bGxwCiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjpjcmVhdGUoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxvY2ss
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSkKIHsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZSgpLm1vZHVsZUlu
Zm9ybWF0aW9uKCk7Ci0gICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxl
SW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sodm0sIFdURk1vdmUoY29kZUJsb2NrKSwgbW9kdWxlSW5mb3JtYXRpb24pOworICAgIGF1dG8q
IHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVCbG9j
ayksIG1vZHVsZUluZm9ybWF0aW9uKTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBt
b2R1bGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01OCw3ICs1OCw3IEBAIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBSZWY8V2FzbTo6
Q29kZUJsb2NrPiYmIGNvCiAgICAgbV93YXNtVG9KU0V4aXRTdHVicy5yZXNlcnZlQ2FwYWNpdHko
bV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
bXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0
Q291bnQoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5hdChpbXBvcnRJbmRleCk7Ci0gICAgICAgIGF1dG8gYmluZGluZyA9IFdhc206Ondh
c21Ub0pzKCZ2bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0SW5kZXgp
OworICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9KUygmdm0sIG1fY2FsbExpbmtJ
bmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KCFiaW5kaW5nKSkgewogICAgICAgICAgICAgc3dpdGNoIChiaW5kaW5nLmVycm9yKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgV2FzbTo6QmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5OgpAQCAtNjgs
NyArNjgsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBtX3dhc21Ub0pTRXhpdFN0
dWJzLnVuY2hlY2tlZEFwcGVuZChiaW5kaW5nLnZhbHVlKCkpOwotICAgICAgICBpbXBvcnRXYXNt
VG9KU1N0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRJbmRleF0u
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5pbXBvcnRX
YXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBv
cnRJbmRleF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogfQogCkBAIC04Mywx
MSArODMsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKS0+SlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soKTsKIH0KIAotYm9v
bCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5
KiBtZW1vcnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1NhZmVUb1J1biht
ZW1vcnktPm1lbW9yeSgpLm1vZGUoKSk7Ci19Ci0KIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6Y2xlYXJKU0NhbGxJQ3MoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxs
TGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCmluZGV4IDUyNzAz
ZjguLmFiYjhjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTY0LDM5ICs2NCwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiAmdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZTsKICAgICB9CiAKLSAg
ICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxv
Y2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsgfQotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1v
ZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgV2FzbTo6Q29kZUJs
b2NrJiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogCi0gICAgYm9v
bCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CisgICAgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KIAog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKik7CiAKLSAg
ICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25jZSB0aGUgY2Fs
bGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgotCi0gICAgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9p
bnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFj
ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKLSAgICAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQotICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFibGUo
KSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRp
b25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQotCi0g
ICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbVRvSnNDYWxsU3R1YkZvcklt
cG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChydW5uYWJs
ZSgpKTsKLSAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIo
dW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0T2ZJbXBv
cnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGltcG9ydEluZGV4OwotICAgIH0KLQotICAgIFdh
c206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0K
LQogICAgIHZvaWQgY2xlYXJKU0NhbGxJQ3MoVk0mKTsKIAogICAgIGJvb2wgcnVubmFibGUoKSBj
b25zdCB7IHJldHVybiAhbV9lcnJvck1lc3NhZ2U7IH0KQEAgLTExNCwyMSArODcsNiBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZkltcG9ydFN0dWJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2spKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8
c2l6ZV90PiBmdW5jdGlvbkltcG9ydENvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIChvZmZz
ZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogZnVuY3Rpb25JbXBvcnRDb3VudCku
dW5zYWZlR2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZComIGltcG9ydFdhc21Ub0pTU3R1Yih1bnNp
Z25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZv
aWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRvSlNT
dHViKGltcG9ydEluZGV4KSk7Ci0gICAgfQotCiAgICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFs
aXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewogICAgICAgICB2b2lk
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CiAgICAgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
CmluZGV4IGM3N2ZhMDUuLmM1MmVlYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtNDksMTIgKzQ5LDE3
IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1J
bXBvcnRGdW5jdGlvbnMpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5j
dGlvbnMsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKKyAgICAsIG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiAgICAgLCBtX3Zt
KCZ2bSkKKyAgICAsIG1fd2FzbU1vZHVsZShtX2luc3RhbmNlLT5tb2R1bGUoKSkKKyAgICAsIG1f
d2FzbVRhYmxlKG1faW5zdGFuY2UtPm1fdGFibGUuZ2V0KCkpCisgICAgLCBtX2dsb2JhbHMobV9p
bnN0YW5jZS0+bV9nbG9iYWxzLmdldCgpKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMobnVt
SW1wb3J0RnVuY3Rpb25zKQogewotICAgIG1lbXNldChpbXBvcnRGdW5jdGlvbnMoKSwgMCwgbV9u
dW1JbXBvcnRGdW5jdGlvbnMgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUltcG9ydEZ1bmN0aW9uczsgKytpKQorICAg
ICAgICBuZXcgKGltcG9ydEZ1bmN0aW9uSW5mbyhpKSkgSW1wb3J0RnVuY3Rpb25JbmZvKCk7CiB9
CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVs
ZU5hbWVzcGFjZU9iamVjdCkKQEAgLTYzLDEyICs2OCwxMCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1
bGUsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIG1fbW9kdWxlLnNl
dCh2bSwgdGhpcywgbW9kdWxlKTsKLSAgICBjb25zdCBzaXplX3QgZXh0cmFNZW1vcnlTaXplID0g
Z2xvYmFsTWVtb3J5Qnl0ZVNpemUoKTsKLSAgICBtX2dsb2JhbHMgPSBNYWxsb2NQdHI8dWludDY0
X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7Ci0KICAgICBtX21vZHVsZU5hbWVzcGFjZU9i
amVjdC5zZXQodm0sIHRoaXMsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgbV9jYWxsZWUu
c2V0KHZtLCB0aGlzLCBtb2R1bGUtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBoZWFwKCktPnJlcG9y
dEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkp
OwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
CkBAIC04OCw0MCArOTEsNDQgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUpOwot
ICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmdsb2JhbE1l
bW9yeUJ5dGVTaXplKCkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRo
aXNPYmplY3QtPm1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0aW9uczsgKytp
KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbnMoKVtp
XSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uSW5m
byhpKS0+aW1wb3J0RnVuY3Rpb24pOyAvLyBUaGlzIGFsc28ga2VlcHMgdGhlIGZ1bmN0aW9ucycg
SlNXZWJBc3NlbWJseUluc3RhbmNlIGFsaXZlLgogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgUmVmPFdhc206
OkNvZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrKQogeworICAgIG1faW5zdGFuY2UtPmZpbmFsaXpl
Q3JlYXRpb24od2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOworICAgIG1fd2FzbUNvZGVCbG9jayA9
IHdhc21Db2RlQmxvY2sucHRyKCk7CisKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBpZiAoIXdhc21Db2RlQmxvY2stPnJ1bm5hYmxlKCkpIHsKICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNy
ZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0
dXJlKCksIHdhc21Db2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVCh3YXNtQ29kZUJsb2NrLT5pc1NhZmVUb1J1biht
ZW1vcnlNb2RlKCkpKTsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBt
b2R1bGUoKS0+Y29kZUJsb2NrKG1lbW9yeU1vZGUoKSk7Ci0gICAgaWYgKGNvZGVCbG9jaykgewor
ICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGpzQ29kZUJsb2NrID0gbV9tb2R1bGUtPmNvZGVC
bG9jayhtZW1vcnlNb2RlKCkpOworICAgIGlmIChqc0NvZGVCbG9jaykgewogICAgICAgICAvLyBB
IENvZGVCbG9jayBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxlZC4gSWYgc28sIGl0IG1l
YW5zCiAgICAgICAgIC8vIHRoYXQgdGhlIENvZGVCbG9jayB3ZSBhcmUgdHJ5aW5nIHRvIGNvbXBp
bGUgbXVzdCBiZSB0aGUgc2FtZQogICAgICAgICAvLyBiZWNhdXNlIHdlIHdpbGwgbmV2ZXIgY29t
cGlsZSBhIENvZGVCbG9jayBhZ2FpbiBvbmNlIGl0J3MKICAgICAgICAgLy8gcnVubmFibGUuCi0g
ICAgICAgIEFTU0VSVCgmY29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29kZUJsb2NrLnB0
cigpKTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAg
ICAgICBBU1NFUlQoJmpzQ29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29kZUJsb2NrLnB0
cigpKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBqc0NvZGVCbG9jayk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
Y3JlYXRlKHZtLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSwgbV9tb2R1bGUuZ2V0KCkpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpjcmVh
dGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtFcnJvclN0cnVjdHVy
ZSgpLCBjb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIGpzQ29kZUJsb2NrID0g
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHdhc21Db2RlQmxvY2sp
LCBtX21vZHVsZS5nZXQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghanNDb2RlQmxvY2stPnJ1
bm5hYmxlKCkpKSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+V2Vi
QXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwganNDb2RlQmxvY2stPmVycm9yTWVzc2FnZSgp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2su
c2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgICAgICBtb2R1bGUoKS0+c2V0Q29kZUJsb2Nr
KHZtLCBtZW1vcnlNb2RlKCksIGNvZGVCbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLnNldCh2
bSwgdGhpcywganNDb2RlQmxvY2spOworICAgICAgICBtX21vZHVsZS0+c2V0Q29kZUJsb2NrKHZt
LCBtZW1vcnlNb2RlKCksIGpzQ29kZUJsb2NrKTsKICAgICB9CiAKICAgICBhdXRvKiBtb2R1bGVS
ZWNvcmQgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21vZHVsZU5hbWVzcGFj
ZU9iamVjdC0+bW9kdWxlUmVjb3JkKCkpOwotICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBt
b2R1bGUoKSwgdGhpcyk7CisgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIG1fbW9kdWxlLmdl
dCgpLCB0aGlzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAg
ICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoZXhlYyk7CkBA
IC0xMjksNyArMTM2LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3Jl
YXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjoKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0
dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGlu
c3RhbmNlU3RydWN0dXJlLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYgaW5zdGFuY2UpCiB7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogZ2xv
YmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTU4LDggKzE2NSw4
IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dCogbW9kdWxlTmFtZXNwYWNlID0gbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhl
Yyk7CiAgICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5IGJpZyB3ZSBz
aG91bGQgdHJ5IHRvIHRocm93IE9PTSBoZXJlLgotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5oZWFwLCBhbGxv
Y2F0aW9uU2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpKSkgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRp
b24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOworICAgIGF1dG8qIGpzSW5zdGFuY2UgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAs
IGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkp
KSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBtb2R1bGVJbmZv
cm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCksIFdURk1vdmUoaW5zdGFuY2UpKTsKKyAgICBq
c0luc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1vZHVsZU5hbWVzcGFjZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKIAogICAgIC8v
IExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMg
b2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0
cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgpAQCAtMTkwLDE1
ICsxOTcsMjEgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIGlmICghdmFs
dWUuaXNGdW5jdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0
LCAiaW1wb3J0IGZ1bmN0aW9uIiwgIm11c3QgYmUgY2FsbGFibGUiKSkpOwogCisgICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50ID0g
bnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVj
dCo+KHZhbHVlKTsKKwogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVu
Y3Rpb24gRXhvdGljIE9iamVjdDoKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdh
c21GdW5jdGlvbjsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNt
V3JhcHBlckZ1bmN0aW9uOwogICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rp
b24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CiAg
ICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90IG1hdGNo
IHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCiAgICAg
ICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRleDsK
LSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIGlmICh3
YXNtRnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRl
eCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbGVlSW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdhc21FbnRyeXBvaW50ID0gd2FzbUZ1bmN0aW9uLT53YXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbigpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVu
Y3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBj
bG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCkBAIC0yMTUsNyArMjI4LDEwIEBAIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICAvLyBOb3RlOiBhZGRpbmcgdGhlIEpTQ2VsbCB0byB0
aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBjbG9zdXJlIHJlcXVpcmVtZW50cyBiLiBhYm92ZSAo
dGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdpbCBiZSBrZXB0IGFsaXZlKSBhbmQgdi4gYmVsb3cg
KHRoZSBKU0Z1bmN0aW9uKS4KIAogICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEZ1bmN0aW9u
cyA9PSBpbXBvcnQua2luZEluZGV4KTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5pbXBvcnRGdW5j
dGlvbnMoKVtudW1JbXBvcnRGdW5jdGlvbnMrK10uc2V0KHZtLCBpbnN0YW5jZSwgZnVuY3Rpb24p
OworICAgICAgICAgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbmZvID0ganNJbnN0YW5jZS0+aW1w
b3J0RnVuY3Rpb25JbmZvKG51bUltcG9ydEZ1bmN0aW9ucysrKTsKKyAgICAgICAgICAgIGluZm8t
PnRhcmdldEluc3RhbmNlID0gY2FsbGVlSW5zdGFuY2U7CisgICAgICAgICAgICBpbmZvLT53YXNt
RW50cnlwb2ludCA9IHdhc21FbnRyeXBvaW50OworICAgICAgICAgICAgaW5mby0+aW1wb3J0RnVu
Y3Rpb24uc2V0KHZtLCBqc0luc3RhbmNlLCBmdW5jdGlvbik7CiAgICAgICAgICAgICAvLyB2LiBB
cHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTI0Myw3ICsyNTksOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgICAg
ICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgogICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQg
di5bW1RhYmxlXV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5tX3RhYmxlLnNl
dCh2bSwgaW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPm1fdGFibGUu
c2V0KHZtLCBqc0luc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5tX3dh
c21UYWJsZSA9IHRhYmxlLT50YWJsZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IApAQCAtMjczLDggKzI5MCw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICAgICAg
ICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBw
ZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgQVNTRVJUKCFpbnN0YW5j
ZS0+bV9tZW1vcnkpOwotICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5z
dGFuY2UsIG1lbW9yeSk7CisgICAgICAgICAgICBBU1NFUlQoIWpzSW5zdGFuY2UtPm1fbWVtb3J5
KTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgbWVtb3J5KTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjkxLDEzICszMDgsMTMgQEAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlMKICAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IGltcG9y
dC5raW5kSW5kZXgpOwogICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9i
YWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STMy
OgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysr
LCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0
YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIHZhbHVlLnRvSW50MzIoZXhlYykp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0g
ICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChleGVjKSkpOworICAgICAgICAgICAg
ICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywg
Yml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgICAg
ICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5jZS0+
aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTMxNSwxNCArMzMyLDIxIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNNZW1v
cnlJbXBvcnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkuaXNJbXBvcnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkg
d2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQdHI8V2FzbTo6
TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lmlz
SW1wb3J0KCkpOworCisgICAgICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpNZW1v
cnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9y
eS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCksCisgICAgICAg
ICAgICAgICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6
OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0U3lu
YyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsmdm0sIGpzTWVt
b3J5XSAoV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1Bh
Z2VDb3VudCkgeyBqc01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNvdW50
LCBuZXdQYWdlQ291bnQpOyB9KTsKICAgICAgICAgICAgIGlmICghbWVtb3J5KQogICAgICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAK
LSAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLAotICAgICAg
ICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBtZW1vcnku
cmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICAgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwg
anNNZW1vcnkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBu
dWxscHRyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMzNiwxOSArMzYwLDI0IEBAIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5m
b3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKTsKICAgICAg
ICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRlZmluaXRpb24u
Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRh
YmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgIG1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9y
bWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6VGFibGU+IHdhc21U
YWJsZSA9IFdhc206OlRhYmxlOjpjcmVhdGUobW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1h
dGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11
bSgpKTsKKyAgICAgICAgICAgIGlmICghd2FzbVRhYmxlKQorICAgICAgICAgICAgICAgIHJldHVy
biBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgImNvdWxk
bid0IGNyZWF0ZSBUYWJsZSIpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFi
bGUgPSBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0
byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlUYWJsZSB3ZSd2ZSBkZWZpbmVkLgogICAgICAgICAg
ICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJlIHRvbyBsYXJnZSwgd2Ugc2hvdWxkIGhhdmUgdGhy
b3duIGEgdmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7Ci0gICAgICAgICAgICBpbnN0
YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0lu
c3RhbmNlLT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAg
anNJbnN0YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFibGUoKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgeworICAgIGlmICghanNJbnN0
YW5jZS0+bWVtb3J5KCkpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBt
ZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBu
dWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KLSAgICAg
ICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3Nl
bWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgMCwgMCkucmVs
ZWFzZU5vbk51bGwoKSkpOworICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAganNNZW1vcnktPmFkb3B0KFdhc206
Ok1lbW9yeTo6Y3JlYXRlKCkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGpzSW5zdGFuY2Ut
PnNldE1lbW9yeSh2bSwganNNZW1vcnkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIG51bGxwdHIpOwogICAgIH0KICAgICAKQEAgLTM2MCwyMCArMzg5LDEzIEBAIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZt
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxp
emF0aW9uVHlwZSAhPSBXYXNtOjpHbG9iYWw6OklzSW1wb3J0KTsKICAgICAgICAgICAgIGlmIChn
bG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID09IFdhc206Okdsb2JhbDo6RnJvbUdsb2JhbEltcG9y
dCkgewogICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51
bWJlciA8IG51bUltcG9ydEdsb2JhbHMpOwotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRH
bG9iYWwoZ2xvYmFsSW5kZXgsIGluc3RhbmNlLT5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFs
Qml0c09ySW1wb3J0TnVtYmVyKSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFu
Y2UoKS5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEk2
NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOwogICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwg
Z2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOworICAgICAgICAgICAgICAgIGpzSW5z
dGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2JhbEluZGV4LCBnbG9iYWwuaW5pdGlhbEJp
dHNPckltcG9ydE51bWJlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQoIWluc3Rh
bmNlLT5jb2RlQmxvY2soKSk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLXNpemVfdCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBz
aXplb2YoUmVnaXN0ZXIpOworICAgIHJldHVybiBqc0luc3RhbmNlOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgKaW5kZXggM2NmZTU0OS4uZDUyNTUwYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAg
LTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJs
ZS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw3NSArNDEsOTQgQEAgY2xhc3MgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlOwogCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDb2RlQmxvY2s7Citj
bGFzcyBUYWJsZTsgLy8gRklYTUUgcmVtb3ZlIHRoaXMgYWZ0ZXIgcmVmYWN0b3JpbmcuIGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfQorCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2Ug
OiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNE
ZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU09iamVj
dCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNP
YmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYmKTsK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLmdl
dCgpOyB9CiAgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFZNJiwgRXhlY1N0YXRlKiwgUmVmPFdh
c206OkNvZGVCbG9jaz4mJik7Ci0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotCi0gICAgSlNPYmplY3QqIGltcG9ydEZ1
bmN0aW9uKHVuc2lnbmVkIGlkeCkgeyBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1
bmN0aW9ucyk7IHJldHVybiBpbXBvcnRGdW5jdGlvbnMoKVtpZHhdLmdldCgpOyB9Ci0KKyAgICAK
KyAgICBXYXNtOjpJbnN0YW5jZSYgaW5zdGFuY2UoKSB7IHJldHVybiBtX2luc3RhbmNlLmdldCgp
OyB9CisgICAgV2FzbTo6Q29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX3ZtLT53
YXNtQ29udGV4dDsgfQogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3Bh
Y2VPYmplY3QoKSB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5nZXQoKTsgfQorICAg
IEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9Cisg
ICAgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiB3ZWJBc3NlbWJseVRvSlNDYWxsZWUoKSB7IHJldHVy
biBtX2NhbGxlZS5nZXQoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkg
eyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBtX21lbW9yeS5z
ZXQodm0sIHRoaXMsIHZhbHVlKTsgfQorICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNXZWJB
c3NlbWJseU1lbW9yeSogdmFsdWUpIHsgQVNTRVJUKCFtZW1vcnkoKSk7IG1fbWVtb3J5LnNldCh2
bSwgdGhpcywgdmFsdWUpOyBtX3dhc21NZW1vcnkgPSAmbWVtb3J5KCktPm1lbW9yeSgpOyB9CiAg
ICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5KCktPm1lbW9y
eSgpLm1vZGUoKTsgfQogCi0gICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgpIHsgcmV0dXJu
IG1fdGFibGUuZ2V0KCk7IH0KLQotICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KLSAgICBpbnQ2NF90IGxvYWRJ
NjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9
Ci0gICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8ZmxvYXQ+KGxvYWRJMzJHbG9iYWwoaSkpOyB9Ci0gICAgZG91YmxlIGxvYWRGNjRH
bG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9h
ZEk2NEdsb2JhbChpKSk7IH0KLSAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90
IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQotCi0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UsIG1fbWVtb3J5KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZU
YWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1f
dGFibGUpOyB9CisgICAgLy8gVGFpbCBhY2Nlc3NvcnMuCisgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZlRhaWwoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2
NF90KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9CisgICAgc3RydWN0IEltcG9y
dEZ1bmN0aW9uSW5mbyB7CisgICAgICAgIC8vIFRhcmdldCBpbnN0YW5jZSBhbmQgZW50cnlwb2lu
dCBhcmUgb25seSBzZXQgZm9yIHdhc20tPndhc20gY2FsbHMsIGFuZCBhcmUgb3RoZXJ3aXNlIG51
bGxwdHIuIFRoZSBlbWJlZGRlci1zcGVjaWZpYyBsb2dpYyBvY2N1cnMgdGhyb3VnaCBpbXBvcnQg
ZnVuY3Rpb24uCisgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogdGFyZ2V0SW5zdGFuY2Ug
eyBudWxscHRyIH07CisgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdh
c21FbnRyeXBvaW50IHsgbnVsbHB0ciB9OworICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
IGltcG9ydEZ1bmN0aW9uIHsgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpIH07CisgICAgfTsKKyAg
ICBJbXBvcnRGdW5jdGlvbkluZm8qIGltcG9ydEZ1bmN0aW9uSW5mbyhzaXplX3QgaW1wb3J0RnVu
Y3Rpb25OdW0pIHsgcmV0dXJuICZiaXR3aXNlX2Nhc3Q8SW1wb3J0RnVuY3Rpb25JbmZvKj4oYml0
d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mVGFpbCgpKVtpbXBvcnRGdW5jdGlvbk51
bV07IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mVGFyZ2V0SW5zdGFuY2Uoc2l6ZV90IGlt
cG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9u
TnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0
RnVuY3Rpb25JbmZvLCB0YXJnZXRJbnN0YW5jZSk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mV2FzbUVudHJ5cG9pbnQoc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZz
ZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5m
bykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNtRW50cnlwb2ludCk7
IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6ZV90IGltcG9y
dEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVt
ICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVu
Y3Rpb25JbmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBKU09iamVjdCogaW1wb3J0RnVuY3Rp
b24odW5zaWduZWQgaW1wb3J0RnVuY3Rpb25OdW0pIHsgUkVMRUFTRV9BU1NFUlQoaW1wb3J0RnVu
Y3Rpb25OdW0gPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVybiBpbXBvcnRGdW5jdGlvbklu
Zm8oaW1wb3J0RnVuY3Rpb25OdW0pLT5pbXBvcnRGdW5jdGlvbi5nZXQoKTsgfQorICAgIAorICAg
IC8vIEZJWE1FIHJlbW92ZSB0aGVzZSBhZnRlciByZWZhY3RvcmluZyB0aGVtIG91dC4gaHR0cHM6
Ly93ZWJraXQub3JnL2IvMTc3NDcyCisgICAgV2FzbTo6TWVtb3J5JiBpbnRlcm5hbE1lbW9yeSgp
IHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKTsgfQorICAgIFdhc206OkNvZGVCbG9jayYgd2Fz
bUNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RhbmNlLT5jb2RlQmxvY2soKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtVGFibGUoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21UYWJsZSk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jYWxsZWUpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUlu
c3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZNKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV92bSk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jb2RlQmxvY2spOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZldhc21Db2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJB
c3NlbWJseUluc3RhbmNlLCBtX3dhc21Db2RlQmxvY2spOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlLCBtX2NhY2hlZFN0YWNrTGltaXQpOyB9Ci0gICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pPihzaXplb2YoSlNXZWJBc3NlbWJs
eUluc3RhbmNlKSk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24o
c2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0aW9u
cygpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2Yoc2l6ZW9mKFdyaXRlQmFycmllcjxKU0Nl
bGw+KSk7IH0KLQotICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogd2ViQXNzZW1ibHlUb0pTQ2Fs
bGVlKCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KLQotICAgIHZvaWQqIGNhY2hlZFN0YWNr
TGltaXQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7IH0KLSAgICB2b2lkIHNl
dENhY2hlZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9jYWNoZWRTdGFja0xpbWl0ID0gbGlt
aXQ7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbU1lbW9yeSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fd2FzbU1lbW9yeSk7IH0K
KyAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVChtX2lu
c3RhbmNlLT5jYWNoZWRTdGFja0xpbWl0KCkgPT0gbV9jYWNoZWRTdGFja0xpbWl0KTsgcmV0dXJu
IG1fY2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lk
KiBsaW1pdCkgeyBtX2luc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGxpbWl0KTsgbV9jYWNo
ZWRTdGFja0xpbWl0ID0gbGltaXQ7IH0KKyAgICBXYXNtOjpNZW1vcnkqIHdhc21NZW1vcnkoKSB7
IHJldHVybiBtX3dhc21NZW1vcnk7IH0KKyAgICBXYXNtOjpNb2R1bGUmIHdhc21Nb2R1bGUoKSB7
IHJldHVybiBtX3dhc21Nb2R1bGU7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyk7Cisg
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbnVtSW1w
b3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYpOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qq
KTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBzaXplX3Qg
YWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IG51bUltcG9ydEZ1bmN0aW9ucykKICAgICB7
Ci0gICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIHNpemVvZihXcml0
ZUJhcnJpZXI8SlNDZWxsPikgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdldCgpOworICAg
ICAgICByZXR1cm4gKG9mZnNldE9mVGFpbCgpICsgc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykg
KiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdldCgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBWTSogbV92bTsKLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlvbnMo
KSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+KGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsgfQotICAgIHNp
emVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0OworICAgIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisKKyAgICBSZWY8
V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAKKyAgICBWTSogbV92bTsKICAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU01v
ZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5VGFibGU+IG1fdGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5
VG9KU0NhbGxlZT4gbV9jYWxsZWU7Ci0gICAgTWFsbG9jUHRyPHVpbnQ2NF90PiBtX2dsb2JhbHM7
CisgICAgCisgICAgLy8gRklYTUUgcmVtb3ZlIHRoZXNlIGFmdGVyIHJlZmFjdG9yaW5nIHRoZW0g
b3V0LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKICAgICB2b2lkKiBtX2NhY2hlZFN0YWNr
TGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90
Pjo6bWF4KCkpIH07CisgICAgV2FzbTo6Q29kZUJsb2NrKiBtX3dhc21Db2RlQmxvY2sgeyBudWxs
cHRyIH07CisgICAgV2FzbTo6TW9kdWxlJiBtX3dhc21Nb2R1bGU7CisgICAgV2FzbTo6TWVtb3J5
KiBtX3dhc21NZW1vcnkgeyBudWxscHRyIH07CisgICAgV2FzbTo6VGFibGUqIG1fd2FzbVRhYmxl
IHsgbnVsbHB0ciB9OworICAgIHVpbnQ2NF90KiBtX2dsb2JhbHMgeyBudWxscHRyIH07CisKICAg
ICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKaW5kZXggMjIz
YzU4Yi4uZDY0MGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7ICJX
ZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CiAKLUpTV2ViQXNzZW1ibHlN
ZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQorSlNX
ZWJBc3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC01MCwxMCArNTAsMTYgQEAgSlNXZWJBc3Nl
bWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtLCBTdHJ1Y3QKICAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFibGVk
KCkpCiAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CiAKLSAgICBhdXRv
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1v
cnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUo
bWVtb3J5KSk7Ci0gICAgaW5zdGFuY2UtPm1fbWVtb3J5LT5jaGVjaygpOwotICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOworICAgIGF1dG8qIG1l
bW9yeSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZt
LmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAgIG1lbW9yeS0+
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBtZW1vcnk7Cit9CisgICAgCit2b2lkIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQorewor
ICAgIG1fbWVtb3J5LnN3YXAobWVtb3J5KTsKKyAgICBBU1NFUlQobV9tZW1vcnktPnJlZkNvdW50
KCkgPT0gMSk7CisgICAgbV9tZW1vcnktPmNoZWNrKCk7CiB9CiAKIFN0cnVjdHVyZSogSlNXZWJB
c3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC02MSwxMyArNjcsMTAgQEAgU3RydWN0
dXJlKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnko
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkp
CitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX21lbW9y
eShXVEZNb3ZlKG1lbW9yeSkpCisgICAgLCBtX21lbW9yeShXYXNtOjpNZW1vcnk6OmNyZWF0ZSgp
LnJlbGVhc2VOb25OdWxsKCkpCiB7Ci0gICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgpID09
IDEpOwotICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVtb3J5LT5tZW1vcnkoKTsKLSAgICBtX21lbW9y
eVNpemUgPSBtX21lbW9yeS0+c2l6ZSgpOwogfQogCiBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpA
QCAtODUsNTIgKzg4LDQ1IEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1
ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJuIG1f
YnVmZmVyV3JhcHBlci5nZXQoKTsKIH0KIAotV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlN
ZW1vcnk6Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhLCBib29s
IHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKK1dhc206OlBhZ2VDb3VudCBKU1dlYkFz
c2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0
YSkKIHsKLSAgICAvLyBOb3RlOiBXZSBjYW4gb25seSB1c2UgZXhlYyBpZiBzaG91bGRUaHJvd0V4
Y2VwdGlvbnNPbkZhaWx1cmUgaXMgdHJ1ZS4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBt
ZW1vcnkoKS5zaXplSW5QYWdlcygpOwotCi0gICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFs
aWQoZGVsdGEpKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUp
CisgICAgYXV0byBncm93biA9IG1lbW9yeSgpLmdyb3coV2FzbTo6UGFnZUNvdW50KGRlbHRhKSk7
CisgICAgaWYgKCFncm93bikgeworICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAg
ICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CiAg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0
aGUgZGVsdGEgdG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50IikpKTsKLSAgICAgICAgcmV0dXJuIFdh
c206OlBhZ2VDb3VudCgpOwotICAgIH0KLQotICAgIFdhc206OlBhZ2VDb3VudCBuZXdTaXplID0g
b2xkUGFnZUNvdW50ICsgV2FzbTo6UGFnZUNvdW50KGRlbHRhKTsKLSAgICBpZiAoIW5ld1NpemUp
IHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246Oklu
dmFsaWRHcm93U2l6ZToKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1v
cnkuZ3JvdyBleHBlY3RzIHRoZSBncm93biBzaXplIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCIp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dG
YWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
V2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgd291bGQgZXhjZWVkIHRoZSBtZW1vcnkncyBkZWNsYXJl
ZCBtYXhpbXVtIHNpemUiKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2Fz
bTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBXYXNtOjpQ
YWdlQ291bnQoKTsKICAgICB9CiAKLSAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAgYm9vbCBzdWNj
ZXNzID0gbWVtb3J5KCkuZ3Jvdyh2bSwgbmV3U2l6ZSk7Ci0gICAgICAgIGlmICghc3VjY2Vzcykg
ewotICAgICAgICAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZSA9PSBtZW1vcnkoKS5tZW1vcnkoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplID09IG1lbW9yeSgpLnNpemUoKSk7Ci0g
ICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQotICAgICAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5
RXJyb3IoZXhlYykpOwotICAgICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwotICAg
ICAgICB9Ci0gICAgICAgIG1fbWVtb3J5QmFzZSA9IG1lbW9yeSgpLm1lbW9yeSgpOwotICAgICAg
ICBtX21lbW9yeVNpemUgPSBtZW1vcnkoKS5zaXplKCk7Ci0gICAgfQorICAgIHJldHVybiBncm93
bi52YWx1ZSgpOworfQogCi0gICAgLy8gV2UgbmVlZCB0byBjbGVhciBvdXQgdGhlIG9sZCBhcnJh
eSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUgcG9pbnRpbmcKLSAgICAvLyB0byBzdGFs
ZSBtZW1vcnkuCit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3dTdWNjZXNzQ2FsbGJhY2so
Vk0mIHZtLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdlQ291bnQgbmV3
UGFnZUNvdW50KQoreworICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgYXJyYXkg
YnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nIHRvIHN0YWxlIG1lbW9yeS4K
ICAgICAvLyBOZXV0ZXIgdGhlIG9sZCBhcnJheS4KICAgICBpZiAobV9idWZmZXIpIHsKICAgICAg
ICAgbV9idWZmZXItPm5ldXRlcih2bSk7CiAgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKICAg
ICAgICAgbV9idWZmZXJXcmFwcGVyLmNsZWFyKCk7CiAgICAgfQotCisgICAgCiAgICAgbWVtb3J5
KCkuY2hlY2soKTsKLQotICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoV2Fz
bTo6UGFnZUNvdW50KGRlbHRhKS5ieXRlcygpKTsKLSAgICByZXR1cm4gb2xkUGFnZUNvdW50Owor
ICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3UGFnZUNvdW50
LmJ5dGVzKCkgLSBvbGRQYWdlQ291bnQuYnl0ZXMoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJs
eU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCmluZGV4IDFkMDZjNGMuLjRiYmJj
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TWVtb3J5LmgKQEAgLTQ4LDI2ICs0OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAm
dm0uZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CiAgICAgfQogCi0gICAgc3Rh
dGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVy
ZSosIFJlZjxXYXNtOjpNZW1vcnk+JiYpOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5
KiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAorICAgIHZvaWQgYWRvcHQoUmVmPFdhc206Ok1lbW9y
eT4mJik7CiAgICAgV2FzbTo6TWVtb3J5JiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQo
KTsgfQogICAgIEpTQXJyYXlCdWZmZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kik7
Ci0gICAgV2FzbTo6UGFnZUNvdW50IGdyb3coVk0mLCBFeGVjU3RhdGUqLCB1aW50MzJfdCBkZWx0
YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwotCi0gICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFz
c2VtYmx5TWVtb3J5LCBtX21lbW9yeUJhc2UpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwg
bV9tZW1vcnlTaXplKTsgfQorICAgIFdhc206OlBhZ2VDb3VudCBncm93KFZNJiwgRXhlY1N0YXRl
KiwgdWludDMyX3QgZGVsdGEpOworICAgIHZvaWQgZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhWTSYsIFdh
c206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQp
OwogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqLCBS
ZWY8V2FzbTo6TWVtb3J5PiYmKTsKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCi0gICAgdm9pZCogbV9tZW1vcnlCYXNlOwotICAgIHNpemVfdCBtX21l
bW9yeVNpemU7CiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJy
aWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKICAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IG1fYnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCBiYWIxMTgxLi40MGMxMDA2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21Nb2R1
bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTYxLDYgKzYyLDcgQEAg
U3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiB9CiAKKwogSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJs
eU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6TW9kdWxlPiYm
IG1vZHVsZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fbW9kdWxlKFdURk1v
dmUobW9kdWxlKSkKQEAgLTkxLDYgKzkzLDM2IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAgICAgV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OnRy
eUNsZWFudXAoKTsKIH0KIAorY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9t
b2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7Cit9CisKK1N5bWJvbFRhYmxlKiBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXhw
b3J0U3ltYm9sVGFibGUuZ2V0KCk7Cit9CisKK1dhc206OlNpZ25hdHVyZUluZGV4IEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5zaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKK30K
KworV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjYWxsZWUoKSBj
b25zdAoreworICAgIHJldHVybiBtX2NhbGxlZS5nZXQoKTsKK30KKworSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUg
bW9kZSkKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9k
ZSldLmdldCgpOworfQorCitXYXNtOjpNb2R1bGUmIEpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVs
ZSgpCit7CisgICAgcmV0dXJuIG1fbW9kdWxlLmdldCgpOworfQorCiB2b2lkIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OnNldENvZGVCbG9jayhWTSYgdm0sIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIG1fY29kZUJsb2Nrc1tzdGF0
aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5k
ZXggM2RjNjdhMy4uMDFiNWQwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMzAsMTUgKzMwLDE5IEBACiAjaW5jbHVk
ZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1
ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKLSNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisj
aW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVk
ZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNt
IHsKIGNsYXNzIE1vZHVsZTsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIGNsYXNzIFBsYW47
Cit1c2luZyBTaWduYXR1cmVJbmRleCA9IHVpbnQzMl90OwogfQogCiBjbGFzcyBTeW1ib2xUYWJs
ZTsKQEAgLTUyLDIzICs1NiwyMCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNy
ZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpNb2R1bGU6OlZhbGlk
YXRpb25SZXN1bHQmJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIGNyZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBXVEY6OkV4
cGVjdGVkPFJlZlB0cjxXYXNtOjpNb2R1bGU+LCBTdHJpbmc+JiYpOwogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAK
LSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsgfQotICAgIFN5bWJv
bFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwb3J0U3ltYm9s
VGFibGUuZ2V0KCk7IH0KLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICB9Ci0gICAgV2ViQXNzZW1ibHlU
b0pTQ2FsbGVlKiBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZS5nZXQoKTsgfQorICAg
IGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0
OworICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0OworICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OworICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxl
ZSogY2FsbGVlKCkgY29uc3Q7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxv
Y2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nh
c3Q8c2l6ZV90Pihtb2RlKV0uZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBj
b2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKTsKKyAgICB2b2lkIHNldENvZGVCbG9jayhW
TSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsKIAogICAgIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlKCkgY29uc3Q7CiAKLSAgICBXYXNtOjpNb2R1bGUm
IG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRDb2RlQmxv
Y2soVk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKTsKIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9jazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCmluZGV4IGZmNDZk
NGQuLmFkYWE3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVRhYmxlLmNwcApAQCAtMjksMzAgKzI5LDIyIEBACiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5VGFibGU6OnNfaW5mbyA9IHsgIldl
YkFzc2VtYmx5LlRhYmxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5VGFibGUpIH07CiAKLUpTV2ViQXNzZW1ibHlUYWJs
ZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBtYXhpbXVtKQorSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxX
YXNtOjpUYWJsZT4mJiB0YWJsZSkKIHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAKLSAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9y
KSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAg
ICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFibGVkKCkpIHsKKyAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH07Ci0KLSAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGV4
ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7Ci0K
LSAgICBpZiAoIWlzVmFsaWRTaXplKGluaXRpYWwpKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgIH0KIAotICAgIGF1dG8qIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRhYmxlPih2bS5o
ZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUsIGluaXRpYWwsIG1heGltdW0p
OworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJB
c3NlbWJseVRhYmxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUs
IFdURk1vdmUodGFibGUpKTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTYyLDIzICs1NCwxNSBAQCBTdHJ1Y3R1cmUqIEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iagogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
IH0KIAotSlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gbWF4aW11bSkKK0pTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpUYWJsZT4mJiB0YWJsZSkKICAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFibGUoV1RGTW92ZSh0YWJsZSkpCiB7Ci0g
ICAgbV9zaXplID0gaW5pdGlhbDsKLSAgICBBU1NFUlQoaXNWYWxpZFNpemUobV9zaXplKSk7Ci0g
ICAgbV9tYXhpbXVtID0gbWF4aW11bTsKLSAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhp
bXVtID49IG1fc2l6ZSk7Ci0KICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5n
IHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcg
c28uCiAgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgotICAgIG1fZnVu
Y3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9m
KFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpKTsK
LSAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+Ojpt
YWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX3NpemUpKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpIHsK
LSAgICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rp
b24oKTsKLSAgICAgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4
ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGlu
IGNvbXBpbGVkIGNvZGUuCisgICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0
YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IHNpemUoKTsgKytpKQogICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgfQogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJs
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtOTksNyArODMsNyBAQCB2b2lkIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3NpemU7ICsraSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c2l6ZSgpOyArK2kpCiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pOwog
fQogCkBAIC0xMDcsNDcgKzkxLDQ0IEBAIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVp
bnQzMl90IGRlbHRhKQogewogICAgIGlmIChkZWx0YSA9PSAwKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gbmV3U2l6ZUNoZWNrZWQg
PSBtX3NpemU7Ci0gICAgbmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7Ci0gICAgdWludDMyX3QgbmV3
U2l6ZTsKLSAgICBpZiAobmV3U2l6ZUNoZWNrZWQuc2FmZUdldChuZXdTaXplKSA9PSBDaGVja2Vk
U3RhdGU6OkRpZE92ZXJmbG93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1heGlt
dW0oKSAmJiBuZXdTaXplID4gKm1heGltdW0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHNpemUo
KTsKKworICAgIGF1dG8gZ3JldyA9IG1fdGFibGUtPmdyb3coZGVsdGEpOworICAgIGlmICghZ3Jl
dykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mdW5jdGlvbnMucmVhbGxvYyhzaXpl
b2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG5ld1NpemUp
KTsKLSAgICBtX2pzRnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVj
dD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CisgICAgc2l6ZV90IG5ld1NpemUg
PSBncmV3LnZhbHVlKCk7CisgICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+KSAqIG5ld1NpemUpOwogCi0gICAgZm9yICh1aW50MzJfdCBpID0gbV9z
aXplOyBpIDwgbmV3U2l6ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgp
W2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgZm9yIChzaXplX3QgaSA9IG9sZFNp
emU7IGkgPCBuZXdTaXplOyArK2kpCiAgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClb
aV0pIFdyaXRlQmFycmllcjxKU09iamVjdD4oKTsKLSAgICB9Ci0gICAgbV9zaXplID0gbmV3U2l6
ZTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCitKU09iamVjdCogSlNXZWJBc3NlbWJseVRhYmxl
OjpnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRl
eCA8IHNpemUoKSk7CisgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgp
OworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xlYXJGdW5jdGlvbih1aW50MzJfdCBp
bmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJs
ZS0+Y2xlYXJGdW5jdGlvbihpbmRleCk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0g
PSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhd
ID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwotICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQo
KVtpbmRleF0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgp
OyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KIH0KIAogdm9pZCBKU1dlYkFz
c2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIGZ1bmN0aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9z
aXplKTsKKyAgICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxl
RnVuY3Rpb24oKSwgZnVuY3Rpb24tPmluc3RhbmNlKCkpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0
KClbaW5kZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwotICAgIG1fZnVuY3Rpb25zLmdldCgp
W2luZGV4XSA9IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIHZvaWQgSlNXZWJB
c3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiogZnVuY3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5k
ZXggPCBtX3NpemUpOworICAgIG1fdGFibGUtPnNldEZ1bmN0aW9uKGluZGV4LCBmdW5jdGlvbi0+
Y2FsbGFibGVGdW5jdGlvbigpLCBmdW5jdGlvbi0+aW5zdGFuY2UoKSk7CiAgICAgbV9qc0Z1bmN0
aW9ucy5nZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9mdW5jdGlv
bnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5oCmluZGV4IGRmODNlOTcuLjQ0ODc1MzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDU3ICsy
OSw0MiBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIldhc21MaW1pdHMuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUu
aCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldl
YkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1zdHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbjsK
LX0KLQogY2xhc3MgSlNXZWJBc3NlbWJseVRhYmxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAK
LSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBT
dHJ1Y3R1cmUqLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhp
bXVtKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwg
Vk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAg
ICBERUNMQVJFX0lORk87CiAKLSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0gICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNp
emUpIHsgcmV0dXJuIFdhc206OlRhYmxlOjppc1ZhbGlkU2l6ZShzaXplKTsgfQorICAgIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5tYXhp
bXVtKCk7IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+c2l6
ZSgpOyB9CiAgICAgYm9vbCBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9SRVRVUk47
Ci0gICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQotICAgIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgICAgICByZXR1cm4gbV9qc0Z1
bmN0aW9ucy5nZXQoKVtpbmRleF0uZ2V0KCk7Ci0gICAgfQotICAgIHZvaWQgY2xlYXJGdW5jdGlv
bih1aW50MzJfdCBpbmRleCk7Ci0gICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90IGlu
ZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7Ci0gICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVp
bnQzMl90IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiopOwotCi0gICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJB
c3NlbWJseVRhYmxlLCBtX3NpemUpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1
bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1f
ZnVuY3Rpb25zKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKU0Z1bmN0aW9ucygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fanNGdW5jdGlv
bnMpOyB9CisgICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIGNs
ZWFyRnVuY3Rpb24odWludDMyX3QpOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJf
dCwgV2ViQXNzZW1ibHlGdW5jdGlvbiopOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50
MzJfdCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsKIAotICAgIHN0YXRpYyBib29sIGlz
VmFsaWRTaXplKHVpbnQzMl90IHNpemUpCi0gICAgewotICAgICAgICAvLyBUaGlzIHRvcHMgb3V0
IGF0IH4zODQgTUIgd29ydGggb2YgZGF0YSBpbiB0aGlzIGNsYXNzLgotICAgICAgICByZXR1cm4g
c2l6ZSA8ICgxIDw8IDI0KTsKLSAgICB9CisgICAgV2FzbTo6VGFibGUqIHRhYmxlKCkgeyByZXR1
cm4gbV90YWJsZS5wdHIoKTsgfQogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlUYWJsZShW
TSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IG1heGltdW0pOworICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxX
YXNtOjpUYWJsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVu
Y3Rpb24+IG1fZnVuY3Rpb25zOworICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKICAgICBN
YWxsb2NQdHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj4gbV9qc0Z1bmN0aW9uczsKLSAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBtX21heGltdW07Ci0gICAgdWludDMyX3QgbV9zaXplOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNt
VG9KUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyMDQ4OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNw
cApAQCAtMCwwICsxLDY1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgi
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
KyNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKKyNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKKyNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCisjaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IlRodW5rR2VuZXJhdG9ycy5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgor
I2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwordXNpbmcgSklUID0gQ0NhbGxI
ZWxwZXJzOworCitzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwg
dW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgLy8gV2UncmUgY2Fs
bGluZyBvdXQgb2YgdGhlIGN1cnJlbnQgV2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFu
Y2UgaGFzIGEgbGlzdCBvZiBhbGwgaXRzIGltcG9ydCBmdW5jdGlvbnMuCisgICAgaml0LmxvYWRX
YXNtQ29udGV4dEluc3RhbmNlKHJlc3VsdCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KHJlc3VsdCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGlt
cG9ydEluZGV4KSksIHJlc3VsdCk7Cit9CisKK0V4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNh
bGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBv
cnRJbmRleCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5
IGFic3RyYWN0IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KKyAgICAvLyBJdCdkIGJlIHN1
cGVyIGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjk0MDEKKyAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpOworICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc0ND
ID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIHVuc2ln
bmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBKSVQgaml0Owor
CisgICAgLy8gTm90ZTogV2FzbUIzSVJHZW5lcmF0b3IgYXNzdW1lcyB0aGF0IHRoaXMgc3R1YiB0
cmVhdHMgU1AgYXMgYSBjYWxsZWUgc2F2ZS4KKyAgICAvLyBJZiB3ZSBldmVyIGNoYW5nZSB0aGlz
LCB3ZSB3aWxsIGFsc28gbmVlZCB0byBjaGFuZ2UgV2FzbUIzSVJHZW5lcmF0b3IuCisKKyAgICAv
LyBCZWxvdywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBpcyBhbHdh
eXMgb24gdGhlIHN0YWNrLgorICAgIEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6ZSgpKTsKKyAg
ICBBU1NFUlQoIWpzQ0MubV9mcHJBcmdzLnNpemUoKSk7CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKKyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigwKSwgSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJWE1FIFN0b3Ag
dXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1MzIxCisKKyAgICB7CisgICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7
CisgICAgICAgIGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpID09IEk2NDsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudCAmJiAh
aGFzQmFkSTY0VXNlOyArK2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2ln
bmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsK
KyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAg
ICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworCisgICAgICAgICAgICBjYXNlIEk2NDogeworICAgICAgICAgICAgICAgIGhhc0Jh
ZEk2NFVzZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7CisgICAgICAgICAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50
b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgaml0LmxvYWRXYXNt
Q29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisKKyAgICAgICAgICAgIC8v
IFN0b3JlIENhbGxlZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
KyAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CisKKyAgICAgICAg
ICAgIHZvaWQgKCp0aHJvd0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNl
KikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNl
KSAtPiB2b2lkIHsKKyAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAg
ICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGds
b2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVND
SUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8g
YW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJp
bmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CisKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCB0aHJvd0JhZEk2NCk7CisgICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBp
bXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEhl
cmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBsZWFz
dCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBz
YXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBhbHJl
YWR5IHRvb2sgY2FyZSBvZiB0aGlzLgorICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVTYXZl
cyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgbWlzc2luZ0NhbGxlZVNhdmVz
LmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIEFTU0VSVChtaXNzaW5n
Q2FsbGVlU2F2ZXMuaXNFbXB0eSgpKTsKKworICAgIGlmICghT3B0aW9uczo6dXNlQ2FsbElDc0Zv
cldlYkFzc2VtYmx5VG9KU0NhbGxzKCkpIHsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhcmdDb3VudCAqIHNpemVvZih1aW50
NjRfdCkpOworICAgICAgICBjaGFyKiBidWZmZXIgPSBhcmdDb3VudCA/IHN0YXRpY19jYXN0PGNo
YXIqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKKyAgICAgICAgdW5z
aWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBS
cyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGJ1ZmZlck9mZnNldCA9IDA7CisgICAgICAgIHVuc2ln
bmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBjb25zdCBHUFJSZWcgc2NyYXRj
aEdQUiA9IEdQUkluZm86OnJlZ0NTMDsKKyAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIHNpemVvZihSZWdpc3RlcikpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVt
KSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVt
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lk
OgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAg
ICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAgICAgICAgICAgR1BSUmVn
IGdwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9n
cHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3By
QXJnc1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0
aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAg
ICAgICBncHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgICAgICAgICAgICAg
IGppdC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9m
ZnNldCksIGdwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
Z3ByUmVnLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hh
bGxlZEdQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAg
ICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisg
ICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQ
UnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAv
LyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFy
ZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBS
SW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJ
VDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcp
OworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUo
ZnByUmVnLCBmcHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJS
ZWcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIs
IGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBS
czsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgRjY0OiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAg
ICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnBy
KCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3Zl
IGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWls
YWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjph
cmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAg
ICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIg
KyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGJ1ZmZlck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICB9CisgICAg
ICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlciksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoYXJnQ291bnQp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBHQyBzaG91bGQgbm90IGxvb2sgYXQgdGhpcyBidWZmZXIg
YXQgYWxsLCB0aGVzZSBhcmVuJ3QgSlNWYWx1ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVu
Z3RoKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgaml0LnN0b3JlUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgfQorCisgICAgICAgIHVpbnQ2NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgU2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KikgPQorICAgICAgICAgICAgW10gKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNhbGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgsIHVpbnQ2NF90KiBidWZmZXIpIC0+IHVpbnQ2NF90IHsgCisgICAgICAgICAgICAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
CisgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCk7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9
IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
IGFyZzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
STY0OgorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJMzI6CisgICAgICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihidWZmZXJbYXJnTnVtXSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RjMyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZyA9IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJ1ZmZlclthcmdOdW1dKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICAgICAgICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShj
YWxsZWUsIGNhbGxEYXRhKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlw
ZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBj
YWxsKGV4ZWMsIGNhbGxlZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdz
KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOwor
CisgICAgICAgICAgICAgICAgdWludDY0X3QgcmVhbFJlc3VsdDsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZ1
bmM6CisgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgICAgIGNhc2Ug
STY0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSTMyOiB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlYWxSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHJlc3VsdC50b0ludDMyKGV4ZWMpKSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEY2
NDoKKyAgICAgICAgICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgICAgICAgICByZWFs
UmVzdWx0ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihyZXN1bHQudG9OdW1iZXIoZXhlYykpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhbFJlc3VsdDsKKyAgICAgICAgICAgIH07
CisgICAgICAgIAorICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNh
bGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7CisgICAgICAgIAorICAgICAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQs
IGltcG9ydEluZGV4LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgPj0gNCwgIldlIHJlbHkgb24g
dGhpcyB3aXRoIHRoZSBjYWxsIGJlbG93LiIpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc2lnbmF0dXJlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYnVmZmVy
KSk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGF1dG8gbm9FeGNl
cHRpb24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpJbnZl
cnRlZEV4Y2VwdGlvbkNoZWNrKTsKKworICAgICAgICAvLyBleGNlcHRpb24gaGVyZS4KKyAgICAg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+
dG9wRW50cnlGcmFtZSk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcp
KEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7
CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICB9
OworICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQu
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgIG5vRXhjZXB0aW9uLmxpbmso
JmppdCk7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgICAg
ICBjYXNlIEY2NDogeworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgaml0Lm1vdmU2
NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
Uik7CisgICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICBqaXQucmV0
KCk7CisKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZl
ci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBjYWxsRnVuYyk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25DYWxs
LCBkb1Vud2luZGluZyk7CisKKyAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZl
ciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgs
IHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7CisgICAgfQorCisgICAgLy8g
Tm90ZTogV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBX
YXNtQjNJUkdlbmVyYXRvcgorICAgIC8vIHdpbGwgZG8gdGhlIHN0YWNrIGNoZWNrIGZvciB1cy4g
V2hlbmV2ZXIgaXQgZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IG1ha2UKKyAgICAvLyBhIGNhbGwgdG8g
dGhpcyB0aHVuaywgaXQnbGwgbWFrZSBzdXJlIGl0cyBzdGFjayBjaGVjayBpbmNsdWRlcyBzcGFj
ZQorICAgIC8vIGZvciB1cyBoZXJlLgorCisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZQYXJh
bWV0ZXJzID0gYXJnQ291bnQgKyAxOyAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KKyAg
ICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisgICAgY29uc3QgdW5zaWduZWQg
bnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lz
dGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFj
a09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCks
IG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRk
cmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgLy8gRklYTUUgbWFr
ZSB0aGVzZSBsb29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55
IGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdl
IHNpZ25hdHVyZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1
NDcKKyAgICAKKyAgICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRoZSBpbnRlZ2VyIHBhcmFtZXRlcnMs
IGZyZWVpbmcgdXAgdGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBhZnRlcndhcmRzLgorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkRlBScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2Fs
bEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSk7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkg
eworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7
CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoK
KyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAg
ICAgICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAg
ICAgICAgICAgIEdQUlJlZyBncHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRH
UFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGdwclJl
ZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQg
YWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4K
KyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAg
ICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9m
ZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICArK21hcnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJU
b1B0cihncHJSZWcsIGdwclJlZyk7IC8vIENsZWFyIG5vbi1pbnQzMiBhbmQgbm9uLXRhZyBiaXRz
LgorICAgICAgICAgICAgICAgIGppdC5ib3hJbnQzMihncHJSZWcsIEpTVmFsdWVSZWdzKGdwclJl
ZyksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
Z3ByUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CisgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjMyOgor
ICAgICAgICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxl
ZCBiZWxvdy4KKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPj0gd2FzbUNDLm1f
ZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAg
ICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHsK
KyAgICAgICAgLy8gSW50ZWdlciByZWdpc3RlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc3BpbGxlZCwg
dGhlc2UgYXJlIG5vdyBhdmFpbGFibGUuCisgICAgICAgIEdQUlJlZyBkb3VibGVFbmNvZGVPZmZz
ZXRHUFJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgICAgICBib29sIGhhc01hdGVyaWFsaXplZERv
dWJsZUVuY29kZU9mZnNldCA9IGZhbHNlOworICAgICAgICBhdXRvIG1hdGVyaWFsaXplRG91Ymxl
RW5jb2RlT2Zmc2V0ID0gWyZoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQsICZqaXRd
IChHUFJSZWcgZGVzdCkgeworICAgICAgICAgICAgaWYgKCFoYXNNYXRlcmlhbGl6ZWREb3VibGVF
bmNvZGVPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KERvdWJsZUVuY29k
ZU9mZnNldCA9PSAxbGwgPDwgNDgsICJjb2RlZ2VuIGFzc3VtZXMgdGhpcyBiZWxvdyIpOworICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKDEpLCBkZXN0KTsKKyAgICAg
ICAgICAgICAgICBqaXQubHNoaWZ0NjQoSklUOjpUcnVzdGVkSW1tMzIoNDgpLCBkZXN0KTsKKyAg
ICAgICAgICAgICAgICBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRH
UFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1
bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBm
ck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAw
OyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlw
ZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdU
eXBlKSB7CisgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6Cisg
ICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgor
ICAgICAgICAgICAgY2FzZSBJMzI6CisgICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxl
ZCBhYm92ZS4KKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPj0gd2FzbUNDLm1f
Z3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKKyAgICAgICAgICAg
ICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcgZnByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5t
X2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9m
cHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMs
IHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAg
ICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGZyT2Zmc2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6
ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0LmNv
bnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQu
cHVyaWZ5TmFOKGZwclJlZyk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZw
clJlZywgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVP
ZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRk
NjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zm
c2V0KSk7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcgZnByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBS
cyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcg
PSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFs
bCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisg
ICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZy
T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZURv
dWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZURv
dWJsZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcpOworICAgICAgICAgICAg
ICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcsIHNjcmF0Y2gpOworICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2Fs
bGVlRnJhbWVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1
bWVudEdQUjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwor
CisgICAgR1BSUmVnIGltcG9ydEpTQ2VsbEdQUlJlZyA9IEdQUkluZm86OnJlZ1QwOyAvLyBDYWxs
ZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgZm9yIHNsb3cgcGF0aCBiZWxvdy4KKyAgICBBU1NFUlQo
IXdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMuZ2V0KGltcG9ydEpTQ2VsbEdQUlJlZykpOwor
CisgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgaW1wb3J0SlND
ZWxsR1BSUmVnKTsKKworICAgIGppdC5zdG9yZTY0KGltcG9ydEpTQ2VsbEdQUlJlZywgY2FsbGVl
RnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgaml0LnN0b3JlMzIoSklUOjpUcnVzdGVkSW1tMzIo
bnVtYmVyT2ZQYXJhbWV0ZXJzKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBh
eWxvYWRPZmZzZXQpKTsKKyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW02NChWYWx1ZVVu
ZGVmaW5lZCksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3Vt
ZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworCisgICAgLy8gRklY
TUUgVGFpbCBjYWxsIGlmIHRoZSB3YXNtIHJldHVybiB0eXBlIGlzIHZvaWQgYW5kIG5vIHJlZ2lz
dGVycyB3ZXJlIHNwaWxsZWQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjU0ODgKKworICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZv
cy5hZGQoKTsKKyAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGws
IENvZGVPcmlnaW4oKSwgaW1wb3J0SlNDZWxsR1BSUmVnKTsKKyAgICBKSVQ6OkRhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrOworICAgIEpJVDo6VHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1
ZSgwKTsKKyAgICBKSVQ6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaW1wb3J0SlNDZWxsR1BSUmVnLCB0YXJnZXRUb0NoZWNr
LCBpbml0aWFsUmlnaHRWYWx1ZSk7CisgICAgSklUOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJD
YWxsKCk7CisgICAgSklUOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworICAgIHNsb3dQYXRoLmxp
bmsoJmppdCk7CisgICAgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGhlcmUuCisgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gcmVnVDIuCisgICAgSklU
OjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgZG9uZS5saW5rKCZqaXQpOwor
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7CisKKyAgICBzd2l0
Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIC8v
IERpc2NhcmQuCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuYzoKKyAgICBjYXNlIEFueWZ1
bmM6CisgICAgICAgIC8vIEZvciB0aGUgSmF2YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMgd2l0
aCB0aGVzZSB0eXBlcyBpbiB0aGVpciBzaWduYXR1cmUgcmV0dXJuIGFyZSBhIFdlYkFzc2VtYmx5
Lk1vZHVsZSB2YWxpZGF0aW9uIGVycm9yLgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEk2NDogeworICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgIH0KKyAgICBjYXNl
IEkzMjogeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZl
VGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJ
bnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1Jl
Z2lzdGVycykpOworICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CisKKyAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5h
cHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgaW50MzJfdCAo
KmNvbnZlcnRUb0kzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHYpIC0+IGludDMyX3QgeyAKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CisgICAgICAgICAgICByZXR1cm4gdi50b0ludDMyKGV4ZWMpOworICAgICAgICB9OworICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvSTMyKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBGMzI6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBh
dXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBq
aXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiks
IERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAg
ICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBk
b25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOwor
ICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZh
bHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQubW92ZTY0VG9E
b3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsK
KyAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBS
LCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOworCisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQo
aml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgZmxvYXQgKCpjb252ZXJ0
VG9GMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2KSAtPiBmbG9hdCB7IAorICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odi50b051bWJlcihleGVjKSk7CisgICAgICAg
IH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GMzIpOworICAg
ICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEY2NDogeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7
CisgICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBp
c0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgLy8gV2UncmUgYW4g
aW50MzIKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5jb252ZXJ0SW50NjRU
b0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIp
OworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5s
aW5rKCZqaXQpOworICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVt
YmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBq
aXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVy
blZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAg
bm90QU51bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0
LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4
Y2VwdGlvbigqdm0pKTsKKworICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0
ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUg
eyAKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gdi50
b051bWJlcihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIGNvbnZlcnRUb0Y2NCk7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIGlmICghZXhjZXB0aW9uQ2hlY2tzLmVt
cHR5KCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7CisgICAgICAgIGpp
dC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVu
dHJ5RnJhbWUpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
KyAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAgICB2b2lk
ICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9p
ZCB7CisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vu
d2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpOworICAgICAgICB9OworCisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vu
d2luZGluZyk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYg
KFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbChzbG93Q2FsbCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKKyAgICBDb2RlTG9jYXRpb25O
ZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFz
dENhbGwpOworICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9j
YXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0g
JXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsK
K30KKwordm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNl
cHRpb25UeXBlIHR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAg
Vk0qIHZtID0gaW5zdGFuY2UtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisKKyAgICB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKworICAgICAgICBKU09iamVjdCogZXJyb3I7Cisg
ICAgICAgIGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCisgICAgICAg
ICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3I6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1l
RXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBl
KSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAg
ICB9CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICBBU1NFUlQoISF2bS0+Y2Fs
bEZyYW1lRm9yQ2F0Y2gpOworICAgIEFTU0VSVCghIXZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJv
dyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhp
cyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRs
ZVVuY2F1Z2h0RXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUg
ZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUK
KyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2lu
dGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4
Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVn
aXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElm
IHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICBiaXR3
aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lz
ZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkpOworICAg
IHJldHVybiB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mYzI0YWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2FzbVRvSlMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJX
YXNtQmluZGluZy5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgorI2luY2x1ZGUgPHd0Zi9C
YWcuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIENhbGxMaW5rSW5mbzsKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiwg
QmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1bnNpZ25l
ZCBpbXBvcnRJbmRleCk7CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSosIFdh
c206OkV4Y2VwdGlvblR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAppbmRleCAwZDI3NzY1Li5jNTg1ZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNjAsNyArNjAsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUg
PSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAogICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5nIHRvIHJ1
biB3aXRoIG1hdGNoZXMgdGhlIG9uZSB3ZSBleHBlY3QuCi0gICAgQVNTRVJUKHdhc21GdW5jdGlv
bi0+aW5zdGFuY2UoKS0+Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5z
dGFuY2UoKS0+bWVtb3J5KCkpKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgp
LT5pbnN0YW5jZSgpLmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3Rh
bmNlKCktPm1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCkpKTsKICAgICB7CiAgICAgICAgIC8vIENo
ZWNrIGlmIHdlIGhhdmUgYSBkaXNhbGxvd2VkIEk2NCB1c2UuCiAKQEAgLTgyLDExICs4MiwxMSBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2Vt
Ymx5RXhlY3V0ZVN0YXJ0LCBXZWJBc3NlbWJseUV4ZWN1dGVFbmQpOwogCiAgICAgVmVjdG9yPEpT
VmFsdWU+IGJveGVkQXJnczsKLSAgICBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCA9IHdhc21G
dW5jdGlvbi0+aW5zdGFuY2UoKTsKLSAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0
byBzdG9yZSB0aGUgY29udGV4dCwgdGhlIGpzCi0gICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3Rz
IHRoZSBXYXNtQ29udGV4dCogYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgotICAgIGlmICghV2FzbTo6
dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgYm94ZWRBcmdzLmFwcGVuZCh3YXNtQ29u
dGV4dCk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IHdhc21GdW5jdGlv
bi0+aW5zdGFuY2UoKTsKKyAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0byBzdG9y
ZSB0aGUgY29udGV4dCwgdGhlIEpTCisgICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3RzIHRoZSBp
bnN0YW5jZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgaWYgKCFXYXNtOjpDb250ZXh0Ojp1
c2VGYXN0VExTKCkpCisgICAgICAgIGJveGVkQXJncy5hcHBlbmQoaW5zdGFuY2UpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgKythcmdJbmRleCkgewogICAgICAgICBKU1ZhbHVlIGFyZyA9IGV4ZWMtPmFyZ3Vt
ZW50KGFyZ0luZGV4KTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rpb24sIGZpcnN0QXJndW1l
bnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKIAogICAgIC8vIEZJWE1FIERvIGF3YXkgd2l0
aCB0aGlzIGVudGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50IGdlbmVy
YXRlZCBieSBCMy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ4
NgotICAgIFdhc206OkNvbnRleHQqIHByZXZXYXNtQ29udGV4dCA9IFdhc206OmxvYWRDb250ZXh0
KHZtKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHByZXZJbnN0YW5jZSA9IHZtLndhc21D
b250ZXh0LmxvYWQoKTsKICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBzdGFjayBjaGVjayBo
ZXJlIGZvciB0aGUgd3JhcHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0CiAgICAgICAgIC8v
IHdhbnQgdG8gZW1pdCBhIHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFwcGVyIGZ1bmN0aW9u
LgpAQCAtMTM3LDIyICsxMzcsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBpZiAo
VU5MSUtFTFkoKHNwIDwgc3RhY2tTcGFjZVVzZWQpIHx8ICgoc3AgLSBzdGFja1NwYWNlVXNlZCkg
PCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZtLnNvZnRTdGFja0xpbWl0KCkpKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVD
b250ZXh0KHZtLCB3YXNtQ29udGV4dCk7CisgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUoaW5zdGFu
Y2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3Rh
bmNlKCkpOwotICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkgPT0gV2FzbTo6bG9h
ZENvbnRleHQodm0pKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpID09IHZt
Lndhc21Db250ZXh0LmxvYWQoKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1F
bnRyeVRvV2FzbSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludCgpLCAmdm0sICZwcm90b0NhbGxG
cmFtZSk7CiAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBpbiBhIHJlZ2lzdGVy
IG9yIG9uIHRoZSBzdGFjayBzaW5jZSBpdCdzIHN0b3JlZCBpbiBWZWN0b3I8SlNWYWx1ZT4uCiAg
ICAgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIHNpbmNlIHRoZSBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBzaG91bGQga2VlcCB0aGUgaW5zdGFuY2UKICAgICAvLyBhbGl2
ZS4gQnV0IGl0J3MgZ29vZCBoeWdpZW5lLgotICAgIHdhc21Db250ZXh0LT51c2UoKTsKLSAgICBp
ZiAocHJldldhc21Db250ZXh0ICE9IHdhc21Db250ZXh0KSB7CisgICAgaW5zdGFuY2UtPnVzZSgp
OworICAgIGlmIChwcmV2SW5zdGFuY2UgIT0gaW5zdGFuY2UpIHsKICAgICAgICAgLy8gVGhpcyBp
cyBqdXN0IGZvciBzb21lIGV4dHJhIHNhZmV0eSBpbnN0ZWFkIG9mIGxlYXZpbmcgYSBjYWNoZWQK
ICAgICAgICAgLy8gdmFsdWUgaW4gdGhlcmUuIElmIHdlIGV2ZXIgZm9yZ2V0IHRvIHNldCB0aGUg
dmFsdWUgdG8gYmUgYSByZWFsCiAgICAgICAgIC8vIGJvdW5kcywgdGhpcyB3aWxsIGZvcmNlIGV2
ZXJ5IHN0YWNrIG92ZXJmbG93IGNoZWNrIHRvIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vIGZpcmUu
Ci0gICAgICAgIHdhc21Db250ZXh0LT5zZXRDYWNoZWRTdGFja0xpbWl0KGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkpOworICAgICAgICBp
bnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVD
b250ZXh0KHZtLCBwcmV2V2FzbUNvbnRleHQpOworICAgIHZtLndhc21Db250ZXh0LnN0b3JlKHBy
ZXZJbnN0YW5jZSwgdm0uc29mdFN0YWNrTGltaXQoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYTlkOGYwZC4uMmZkZDVhNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0zMiwxMiArMzIsMTQgQEAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2lu
Y2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVs
ZS5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNs
dWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAj
aW5jbHVkZSAiV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgpAQCAtNzUsMTAgKzc3LDEw
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVj
dHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4
ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNl
U3RydWN0dXJlKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBp
bnN0YW5jZVN0cnVjdHVyZSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2FzbTo6TW9kdWxl
Pihtb2R1bGUtPm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKLSAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYywgbW9kdWxlLT5t
b2R1bGUoKS5jb21waWxlU3luYyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSk7CisgICAgaW5zdGFu
Y2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5
bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCAmV2FzbTo6Y3JlYXRl
SlNUb1dhc21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaW5z
dGFuY2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAppbmRleCA2NDk4OWI1Li44NmY4
MTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcApAQCAtOTYsMTMgKzk2LDE4IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlN
ZW1vcnkoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8V2Fz
bTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbFBhZ2VD
b3VudCwgbWF4aW11bVBhZ2VDb3VudCk7CisgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+
IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1Q
YWdlQ291bnQsCisgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0QXN5bmMoQ29sbGVj
dGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RT
eW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgIFsmdm0sIGpzTWVtb3J5XSAo
V2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3Vu
dCkgeyBqc01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNvdW50LCBuZXdQ
YWdlQ291bnQpOyB9KTsKICAgICBpZiAoIW1lbW9yeSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKGV4ZWMpKSk7CiAKLSAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3Nl
bWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqbWVtb3J5LmxlYWtSZWYoKSkpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0KKyAg
ICBqc01lbW9yeS0+YWRvcHQobWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOworICAgIAogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNNZW1vcnkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5j
cHAKaW5kZXggZTk5NGRjOC4uNGZjYThjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcApAQCAt
NzcsOCArNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVt
b3J5UHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgdWludDMyX3QgZGVsdGEgPSB0
b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKLSAgICBib29sIHNob3VsZFRocm93RXhj
ZXB0aW9uc09uRmFpbHVyZSA9IHRydWU7Ci0gICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1l
bW9yeS0+Z3Jvdyh2bSwgZXhlYywgZGVsdGEsIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVy
ZSk7CisgICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3Jvdyh2bSwgZXhlYywg
ZGVsdGEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0LnBhZ2VDb3VudCgpKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDk2MTAyNGQuLjE2NjEwNmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwCkBAIC0xNjEsMTEgKzE2MSwxMiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TW9kdWxlRXhwb3J0cyhFeGVjU3RhdGUqIGV4ZWMp
CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2Vt
Ymx5TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8q
IHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4
ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVh
dGVNb2R1bGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIHN0cnVjdHVyZSkpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAKKyAgICBWZWN0b3I8dWludDhf
dD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBleGVjLT5h
cmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlTW9kdWxlKGV4ZWMsIFdURk1vdmUoc291cmNlKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4
ZWMpCkBAIC0xNzUsMTYgKzE3NiwxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9u
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIikpOwogfQogCi1KU1Zh
bHVlIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYnVmZmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1i
bHlNb2R1bGUqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVj
U3RhdGUqIGV4ZWMsIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUo
dm0sIGV4ZWMsIGJ1ZmZlcik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4g
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXYXNt
OjpNb2R1bGU6OnZhbGlkYXRlU3luYyh2bSwgV1RGTW92ZShzb3VyY2UpKSk7CisgICAgcmV0dXJu
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV2Fz
bTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKGJ1ZmZlcikp
KTsKIH0KIAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlNb2R1bGVD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2Vt
Ymx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5o
CmluZGV4IDYwMjVjOTguLjEzYWNhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKQEAgLTMw
LDggKzMwLDExIEBACiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgV2ViQXNzZW1ibHlNb2R1bGVQcm90
b3R5cGU7CiAKIGNsYXNzIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7CkBAIC00NCw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVf
SU5GTzsKIAotICAgIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBKU1Zh
bHVlIGJ1ZmZlciwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IGNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5TW9kdWxl
UHJvdG90eXBlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggY2IxZmVjMS4uMGE4NjZlZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxl
LAogICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
Y29kZUJsb2NrID0gaW5zdGFuY2UtPmNvZGVCbG9jaygpOworICAgIFdhc206OkNvZGVCbG9jayog
Y29kZUJsb2NrID0gaW5zdGFuY2UtPmluc3RhbmNlKCkuY29kZUJsb2NrKCk7CiAgICAgY29uc3Qg
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpOwogCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0g
bW9kdWxlLT5leHBvcnRTeW1ib2xUYWJsZSgpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBtb2R1bGUsCiAgICAgICAgICAgICAvLyBSZXR1cm4gVG9KU1ZhbHVlKHYpLgogICAg
ICAgICAgICAgc3dpdGNoIChnbG9iYWwudHlwZSkgewogICAgICAgICAgICAgY2FzZSBXYXNtOjpJ
MzI6Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxv
YWRJMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFs
dWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoZXhwLmtpbmRJ
bmRleCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFdhc206
Okk2NDoKQEAgLTE2MCwxMSArMTYwLDExIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAg
ICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEYzMkdsb2Jh
bChleHAua2luZEluZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFs
dWUoaW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEYzMkdsb2JhbChleHAua2luZEluZGV4KSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAg
ICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkRjY0R2xv
YmFsKGV4cC5raW5kSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNW
YWx1ZShpbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkRjY0R2xvYmFsKGV4cC5raW5kSW5kZXgpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTIxNywx
MiArMjE3LDEyIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSogZXhlYykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1v
ZHVsZSA9IG1faW5zdGFuY2UtPm1vZHVsZSgpOwotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IG1faW5zdGFuY2UtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKTsKKyAgICBXYXNtOjpNb2R1bGUmIG1vZHVsZSA9IG1faW5zdGFuY2UtPmluc3RhbmNl
KCkubW9kdWxlKCk7CisgICAgV2FzbTo6Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNl
LT5pbnN0YW5jZSgpLmNvZGVCbG9jaygpOworICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS5tb2R1bGVJbmZvcm1hdGlvbigpOwogICAg
IEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBtX2luc3RhbmNlLT50YWJsZSgpOwogCi0gICAg
Y29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4mIGRhdGEgPSBtX2luc3RhbmNlLT5tb2R1
bGUoKS0+bW9kdWxlSW5mb3JtYXRpb24oKS5kYXRhOworICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpT
ZWdtZW50OjpQdHI+JiBkYXRhID0gbW9kdWxlSW5mb3JtYXRpb24uZGF0YTsKICAgICBKU1dlYkFz
c2VtYmx5TWVtb3J5KiBqc01lbW9yeSA9IG1faW5zdGFuY2UtPm1lbW9yeSgpOwogCiAgICAgc3Rk
OjpvcHRpb25hbDxKU1ZhbHVlPiBleGNlcHRpb247CkBAIC0yMzksNyArMjM5LDcgQEAgSlNWYWx1
ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4
ID0gZWxlbWVudC5vZmZzZXQuaXNHbG9iYWxJbXBvcnQoKQotICAgICAgICAgICAgICAgID8gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmxvYWRJMzJHbG9iYWwoZWxlbWVudC5vZmZz
ZXQuZ2xvYmFsSW1wb3J0SW5kZXgoKSkpCisgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1
aW50MzJfdD4obV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xvYmFsKGVsZW1lbnQub2Zm
c2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQogICAgICAgICAgICAgICAgIDogZWxlbWVudC5vZmZz
ZXQuY29uc3RWYWx1ZSgpOwogCiAgICAgICAgICAgICBmbihlbGVtZW50LCB0YWJsZUluZGV4KTsK
QEAgLTI1NSw3ICsyNTUsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFs
dWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpTZWdtZW50
OjpQdHImIHNlZ21lbnQgOiBkYXRhKSB7CiAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQgPSBz
ZWdtZW50LT5vZmZzZXQuaXNHbG9iYWxJbXBvcnQoKQotICAgICAgICAgICAgICAgID8gc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0
Lmdsb2JhbEltcG9ydEluZGV4KCkpKQorICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KG1faW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChzZWdtZW50LT5vZmZz
ZXQuZ2xvYmFsSW1wb3J0SW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgOiBzZWdtZW50LT5vZmZz
ZXQuY29uc3RWYWx1ZSgpOwogCiAgICAgICAgICAgICBmbihtZW1vcnksIHNpemVJbkJ5dGVzLCBz
ZWdtZW50LCBvZmZzZXQpOwpAQCAtMjkzLDcgKzI5Myw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIC8vIGZv
ciB0aGUgaW1wb3J0LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTUxMAogICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9
IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOwotICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwg
Y29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKICAgICAgICAgICAgICAgICBKU09i
amVjdCogZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBv
cnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNz
ZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCmluZGV4
IGU5YTYzNGEuLjFmYjk0M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCkBAIC00MCw2ICs0MSw3IEBA
CiAjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJTdHJvbmdJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiV2FzbUJCUVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgog
I2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCIK
QEAgLTk0LDcgKzk2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2Vi
QXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKHZtLCBXVEZN
b3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+
KFtwcm9taXNlLCBnbG9iYWxPYmplY3RdIChWTSYgdm0sIFdhc206Ok1vZHVsZTo6VmFsaWRhdGlv
blJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIFdhc206Ok1vZHVsZTo6dmFsaWRh
dGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFz
azxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGdsb2JhbE9iamVjdCwgJnZt
XSAoV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21p
c2UsIFtwcm9taXNlLCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZt
XSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CiAgICAgICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0xMzUsNyArMTM3LDcgQEAgc3RhdGljIHZvaWQgaW5zdGFu
dGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNl
LCBKU1cKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAg
Ly8gSW4gb3JkZXIgdG8gYXZvaWQgcG90ZW50aWFsbHkgcmVjb21waWxpbmcgYSBtb2R1bGUuIFdl
IGZpcnN0IGdhdGhlciBhbGwgdGhlIGltcG9ydC9tZW1vcnkgaW5mb3JtYXRpb24gcHJpb3IgdG8g
Y29tcGlsaW5nIGNvZGUuCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVj
dCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0
dXJlKCkpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpLCBX
YXNtOjpJbnN0YW5jZTo6Y3JlYXRlKFJlZjxXYXNtOjpNb2R1bGU+KG1vZHVsZS0+bW9kdWxlKCkp
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0KGV4ZWMsIHNjb3BlLCBw
cm9taXNlKSk7CiAKICAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKQEAg
LTE0MywxMyArMTQ1LDEzIEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiAgICAgZGVwZW5kZW5j
aWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW5zdGFuY2UpKTsKICAgICB2bS5wcm9taXNl
RGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRl
bmNpZXMpKTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbXBsZXRpb24gdGFzayBtYXkgb3IgbWF5IG5v
dCBnZXQgY2FsbGVkIGltbWVkaWF0ZWx5LgotICAgIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZUFz
eW5jKHZtLCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206OkNv
ZGVCbG9jazo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2
ZUtpbmRdIChWTSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgcmVmQ29kZUJsb2NrKSBtdXRh
YmxlIHsKKyAgICBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVBc3luYygmdm0ud2FzbUNvbnRleHQs
IGluc3RhbmNlLT5tZW1vcnlNb2RlKCksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q29kZUJsb2Nr
OjpDYWxsYmFja1R5cGU+KFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZCwg
JnZtXSAoUmVmPFdhc206OkNvZGVCbG9jaz4mJiByZWZDb2RlQmxvY2spIG11dGFibGUgewogICAg
ICAgICBSZWZQdHI8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBXVEZNb3ZlKHJlZkNvZGVC
bG9jayk7CiAgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29u
KHByb21pc2UsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZCwgJnZtLCBj
b2RlQmxvY2sgPSBXVEZNb3ZlKGNvZGVCbG9jayldICgpIG11dGFibGUgewogICAgICAgICAgICAg
RXhlY1N0YXRlKiBleGVjID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CiAgICAgICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxl
LCBjb2RlQmxvY2sucmVsZWFzZU5vbk51bGwoKSwgcmVzb2x2ZUtpbmQpOwogICAgICAgICB9KTsK
LSAgICB9KSk7CisgICAgfSksICZXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIsICZXYXNtOjp3
YXNtVG9KU0V4Y2VwdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0
ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpT
VmFsdWUgYnVmZmVyLCBKU09iamVjdCogaW1wb3J0T2JqZWN0KQpAQCAtMTY1LDcgKzE2Nyw3IEBA
IHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YywgSlNQcm9taXNlRGVmZXJyZWQqIHByCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNy
ZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpKTsKIAotICAg
IFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyh2bSwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVT
aGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW1wb3J0T2Jq
ZWN0LCBnbG9iYWxPYmplY3RdIChWTSYgdm0sIFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3Vs
dCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2
bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1v
ZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3Qs
ICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7
CiAgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21p
c2UsIFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0ID0gV1RGTW92
ZShyZXN1bHQpLCAmdm1dICgpIG11dGFibGUgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yMTMsNyArMjE1LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRl
KiBleGVjKQogICAgIHNpemVfdCBieXRlU2l6ZTsKICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2Fz
bUJ1ZmZlckZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgYnl0ZU9mZnNldCwgYnl0
ZVNpemUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIEJCUVBsYW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgQkJR
UGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOworICAgIEJCUVBsYW4gcGxh
bigmdm0ud2FzbUNvbnRleHQsIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgQkJRUGxhbjo6
VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdo
dCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBz
b21ldGhpbmcgd2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjAxNQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBs
YW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcApp
bmRleCAxMTg2NWY1Li4yYzViYzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTkw
LDggKzkwLDE1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBSZWZQdHI8V2FzbTo6VGFibGU+IHdhc21UYWJsZSA9IFdhc206OlRhYmxlOjpjcmVhdGUo
aW5pdGlhbCwgbWF4aW11bSk7CisgICAgaWYgKCF3YXNtVGFibGUpIHsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAg
ICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNvdWxkbid0IGNyZWF0
ZSBUYWJsZSIpKSkpOworICAgIH0KKwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgp
LCBpbml0aWFsLCBtYXhpbXVtKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgd2FzbVRhYmxlLnJlbGVhc2VOb25OdWxs
KCkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2Vi
QXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5k
ZXggMDIxYzYxOC4uNjhlOTU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtNjMsNyAr
NjMsNyBAQCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsTwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
IWZ1bmN0aW9uLT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmluZm8o
KSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwog
ICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50
cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0g
ICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCB7IHNpZ25hdHVyZUluZGV4LCBpbnN0YW5j
ZS0+Y29kZUJsb2NrKCktPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpIH0p
OworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgV2FzbTo6Q2FsbGFibGVGdW5jdGlv
biB7IHNpZ25hdHVyZUluZGV4LCBpbnN0YW5jZS0+d2FzbUNvZGVCbG9jaygpLndhc21Ub0pTQ2Fs
bFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpIH0gKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJl
SW5kZXgpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0YW5jZSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3dhc20vV2FzbU1vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd2Fz
bS9XYXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwYjlk
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dh
c20vV2FzbU1vZHVsZS5oCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvV2FzbU1vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOTc1YzljOS4uNzg0MDNl
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC03OSw2ICs3OSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFy
cmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNpbmNsdWRl
IDx3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaD4KKyNpbmNsdWRlIDx3YXNtL1dhc21Nb2R1
bGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLS0gCjIuOS4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321839</attachid>
            <date>2017-09-26 10:42:53 -0700</date>
            <delta_ts>2017-09-27 12:23:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>430901</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA0Njk3ZTExY2QzZDA3MDI1ZWVjNzU1NjY4ODU3ZWRhMzBiNmY5N2U0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NDcgKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgICAgICAgICB8ICAyMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaCAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaCAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCAgICAgICAgICAgfCAxMjYgKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAgICAgICAgfCAgNzYgKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCAgICAgICAgICB8ICA1OSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oICAgICAgICAgICAgfCAg
IDUgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCAgICAgICAg
fCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oICAgICAg
ICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAg
ICAgICAgICB8IDIyNyArKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oICAgICAgICAgICB8ICA0OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgfCAgIDAKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4g
anN9L0pTV2ViQXNzZW1ibHkuaCAgIHwgIDUwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAgICAgICAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTE4ICsrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDg1ICsrLQogLi4uL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgfCAgNzYgKystCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggICB8ICAxMyAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAg
MzIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAg
fCAgMjUgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAgIHwgIDc1ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmggfCAgNDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCAgICAgICAgIHwgNjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8
ICAxOSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAg
ICAgfCAgIDUgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAg
ICAgICAgIHwgIDIyICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgICB8ICAxNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVj
dG9yLmNwcCAgICAgICAgfCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAgICAgICAgIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93YXNtL1dhc21Nb2R1bGUuaCB8ICAgMiArCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8ICAgMSArCiAxMTEgZmlsZXMgY2hhbmdlZCwgMzA4
MSBpbnNlcnRpb25zKCspLCAxNzQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeU1vZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAwJSkKIHJlbmFtZSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggKDYyJSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd2Fz
bS9XYXNtTW9kdWxlLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDgyZWYxNmQuLjZiNjc2N2UgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDkt
MjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRXhjZWVkaW5nIG1h
eCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyCisgICAg
ICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdlOiBpdCB1c2Vk
IHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIHRl
c3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qczoKKyAgICAgICAgKGFz
c2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAgKGFzc2Vy
dC50aHJvd3MpOgorCiAyMDE3LTA5LTIzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBpbmZpbml0ZSBsb29waW5nIHRlc3QyNjIgdGVzdApkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uN2ZlNmIxMyAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0IGJ1ZmZlciBv
ZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIqNjQqMTAyNCk7
CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5jZSBpdCBmYWls
cy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVycm9yLCAiT3V0
IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCks
IFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNlZWQgdGhlIG1l
bW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOyAKICAgICBhc3NlcnRFcShidWZmZXIuYnl0
ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnkuYnVmZmVyLCBidWZmZXIp
OwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pTVGVzdHMv
d2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0ZCAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rh
YmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQo
dGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBp
bml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRz
IG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0cyBoYXMg
YSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4g
aXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAy
KiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUncyBpbml0aWFs
IHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQgLyAyNzogVGFi
bGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBtYXhpbXVt
IDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAy
MTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAg
XTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDlkNzc4ZjEuLmJmOWMyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ1MCBAQAorMjAxNy0wOS0yNSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBh
cHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBl
dmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZW50YWlscyBjbGVhbmluZyB1cCBhbmQgc3BsaXR0
aW5nIGEgYnVuY2ggb2YgY29kZSB3aGljaCB3ZSBoYWQKKyAgICAgICAgaW50ZXJ0d2luZWQgYmV0
d2VlbiBDKysgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgSlMgb2JqZWN0cywgYW5kIHB1cmUgQysr
CisgICAgICAgIGltcGxlbWVudGF0aW9uIG9iamVjdHMuIFRoaXMgc3BlY2lmaWMgY2hhbmdlIGdv
ZXMgbW9zdCBvZiB0aGUgd2F5IHRvd2FyZHMKKyAgICAgICAgYWxsb3dpbmcgSlNDJ3MgV2ViQXNz
ZW1ibHkgdG8gd29yayB3aXRob3V0IFZNIC8gSlMsIHVwIHRvIGJ1dCBleGNsdWRpbmcKKyAgICAg
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlICh0aGVyZSdzIFdhc206Okluc3RhbmNlLCBidXQgaXQn
cyBub3QgKnRoZSogdGhpbmcKKyAgICAgICAgeWV0KS4gQmVjYXVzZSBvZiB0aGlzIHdlIHN0aWxs
IGhhdmUgYSBmZXcgRklYTUUgaWRlbnRpZnlpbmcgcGxhY2VzIHRoYXQgbmVlZCB0bworICAgICAg
ICBjaGFuZ2UuIEEgZm9sbG93LXVwIGNoYW5nZSB3aWxsIGdvIHRoZSByZXN0IG9mIHRoZSB3YXku
CisKKyAgICAgICAgSSB3ZW50IGFib3V0IHRoaXMgY2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkg
cG9zc2libGU6IGdyZXAgdGhlCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3dhc20gZGlyZWN0b3J5
IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNsdWRlIHRoZSAvanMvCisgICAg
ICAgIHN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1lbnRhdGlvbiBv
ZiBXZWJBc3NlbWJseSkuCisKKyAgICAgICAgTm9uZSBvZiB0aGlzIGNoYW5nZSByZW1vdmVzIHRo
ZSBuZWVkIGZvciBhIEpJVCBlbnRpdGxlbWVudCB0byBiZSBhYmxlIHRvIHVzZQorICAgICAgICBX
ZWJBc3NlbWJseS4gV2UgZG9uJ3QgaGF2ZSBhbiBpbnRlcnByZXRlciwgdGhlIHByb2Nlc3MgdGhl
cmVmb3JlIHN0aWxsIG5lZWRzIHRvCisgICAgICAgIGJlIGFsbG93ZWQgdG8gSklUIHRvIHVzZSB0
aGVzZSBwdXJlLUMrKyBBUElzLgorCisgICAgICAgIEludGVyZXN0aW5nIHRoaW5ncyB0byBub3Rl
OgorCisgICAgICAgICAgLSBSZW1vdmUgVk0gZnJvbSBQbGFuIGFuZCBhc3NvY2lhdGVkIHBsYWNl
cy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KKyAgICAgICAgICAgIHRoZSBjYWxs
YmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCisgICAgICAgICAgLSBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCisg
ICAgICAgICAgICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNv
bnN0cnVjdGlvbiB0aW1lIGZvciB0aGlzCisgICAgICAgICAgICBwdXJwb3NlOiBvbmUgdG8gbm90
aWZ5IG9mIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCisgICAgICAg
ICAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIg
Y3JlYXRlcyB0aGUgbWVtb3J5IHRvCisgICAgICAgICAgICBkaWN0YXRlIGhvdyB0byByZWFjdCB0
byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1iZWRkaW5nIHRoYXQncyB0bworICAg
ICAgICAgICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3RpdmVseSkuCisgICAg
ICAgICAgLSBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdhc206
Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCisgICAgICAgICAgICB0aGVyZSwgd2l0aCBhbiBl
bnVtIGNsYXNzIGZvciBmYWlsdXJlIHR5cGVzLgorICAgICAgICAgIC0gRXhjZWVkaW5nIG1heCBv
biBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRo
aXMKKyAgICAgICAgICAgIGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNl
ZCB0byB0aHJvdyBPT00gZXJyb3IuIFVwZGF0ZSB0aGUKKyAgICAgICAgICAgIGNvcnJlc3BvbmRp
bmcgdGVzdC4KKyAgICAgICAgICAtIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3Jvd19tZW1vcnkgb3Bj
b2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCisgICAgICAgICAgICByZWFjaCBk
aXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgorICAgICAgICAgIC0gSlNXZWJB
c3NlbWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNh
dXNlIGl0J3Mgb25seQorICAgICAgICAgICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20g
Z3Jvd19tZW1vcnkgYXMgYmVmb3JlKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9yeSBub3cgdGFr
ZXMgYSBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCisgICAg
ICAgICAgICB3cmFwcGVycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2Nl
ZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CisgICAgICAgICAgICBrbm93bmluZyBhbnl0aGluZyBh
Ym91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxpc3Qgb2YgY2FsbGJhY2tzCisg
ICAgICAgICAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xsIHdhbnQgdG8g
bm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAorICAgICAgICAgICAgdW5kZXIgYSBsb2NrKS4KKyAg
ICAgICAgICAtIFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9m
IHRydXRoIGFib3V0IGFkZHJlc3MgLyBzaXplLAorICAgICAgICAgICAgdXNlZCBkaXJlY3RseSBi
eSBnZW5lcmF0ZWQgY29kZSBpbnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCisgICAgICAg
ICAgLSBNb3ZlIHdhc21Ub0pTIGZyb20gdGhlIGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRv
IGl0cyBvd24gaGVhZGVyIHVuZGVyCisgICAgICAgICAgICB3YXNtL2pzLiBJdCdzIG9ubHkgdXNl
ZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwLCBhbmQgdXNlcyBWTSwKKyAg
ICAgICAgICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3NlbWJseS4KKyAgICAg
ICAgICAtIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVjdCBo
b2xkaW5nIGEKKyAgICAgICAgICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3Rl
YWQgb2YgYW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcworICAgICAgICAgICAgZG9lc24n
dCBhZGQgYW55dGhpbmcgdG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0
dWFsbHkgZ2V0cworICAgICAgICAgICAgcGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBU
TFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAgICAgIHBvdGVu
dGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVudGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hh
bmdlIGlzIHRvCisgICAgICAgICAgICBhbGxvdyBwYXNzaW5nIFdhc206OkNvbnRleHQgYXJvdW5k
IHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZNCisgICAgICAgICAgICBj
b250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3RpdmVseSB0
aGUgc2FtZSwgYnV0IHdpdGgKKyAgICAgICAgICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRk
aW5nIGlzIG11Y2ggYmV0dGVyIG9mZi4KKyAgICAgICAgICAtIE1vdmUgSlNXZWJBc3NlbWJseSBp
bnRvIHRoZSBKUyBmb2xkZXIuCisgICAgICAgICAgLSBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJs
b2NrIGRpcmVjdGx5IGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KKyAgICAgICAg
ICAtIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24gV2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyBy
YXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKKyAgICAgICAgICAgIGJlaW5nIG9uIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5FbWJlZGRlcgorICAgICAgICAg
ICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jaywgYW5kIGlzIHN0aWxsCisgICAgICAgICAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCisg
ICAgICAgICAgICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRv
IGNhbGwgYmFjayBpbnRvIHRoZQorICAgICAgICAgICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRk
aW5nIGFueSBpbmRpcmVjdGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQorICAgICAg
ICAgICAgdGhlIEIzIElSIGdlbmVyYXRvciBub3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2Nr
IGluc3RlYWQgb2YKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suCisgICAgICAg
ICAgLSBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24gY29tcGxldGlvbiBp
cyBub3cgbWFya2VkIGJ5IGl0cyBvd24KKyAgICAgICAgICAgIGF0b21pYzxib29sPiBmbGFnIGlu
c3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBhbmQK
KyAgICAgICAgICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVj
YXVzZSBiZWZvcmUgbXkgY2hhbmdlcworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayBkaWQgaXRzIG93biBjb21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQorICAgICAg
ICAgICAgV2FzbTo6Q29kZUJsb2NrLCB3aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0
IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRo
ZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2VyLCB0aGUgbG9jayB3YXMgYmVpbmcKKyAg
ICAgICAgICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2VydGlvbi4KKyAgICAgICAg
ICAtIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhyb3VnaCBh
IGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKKyAgICAgICAgICAgIGluIGF0IGNvbXBpbGF0aW9uIHRp
bWUsIGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4K
KyAgICAgICAgICAtIFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQg
aGFuZGxpbmcgdGh1bmtzLiBPbmx5IHRoZSBJUgorICAgICAgICAgICAgZ2VuZXJhdG9yIHNob3Vs
ZCBrbm93LCBhbmQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcK
KyAgICAgICAgICAgIHRodW5rIGlzIGdlbmVyYXRlZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQg
KG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5vdAorICAgICAgICAgICAgYWxsIG9mIHRoZW0g
Z2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KKyAgICAgICAgICAtIE1ha2UgZXhjZXB0aW9u
IHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNvZGVkCisgICAg
ICAgICAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKKyAgICAgICAgICAgIGNvZGUgd2hlbiBhIFdlYkFz
c2VtYmx5IGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBn
ZXQKKyAgICAgICAgICAgIGNhbGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNh
biBvbmx5IGhhdmUgYSBzaW5nbGUgb2YgdGhlc2UKKyAgICAgICAgICAgIGZ1bmN0aW9ucyAoaS5l
LiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJvY2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVy
IGlzIGEKKyAgICAgICAgICAgIHNpbmdsZXRvbi4gVGhhdCBjYW4gYmUgZml4ZWQgaW4gaW4gIzE3
NzQ3NS4KKyAgICAgICAgICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVyZSBhbGwgZW1iZWRk
ZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgorICAgICAgICAgIC0gU3BsaXQgdXAgSlNXZWJBc3NlbWJs
eVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKKyAgICAgICAgICAgIHJlZmNvdW50ZWQu
IEpTV2ViQXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGlu
IHRoZQorICAgICAgICAgICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBi
eSB0aGUgSklUIGNvZGUgdG8gbG9va3VwIHdoZXJlIHRvCisgICAgICAgICAgICBjYWxsIGFuZCBk
byB0aGUgaW5zdGFuY2UgY2hlY2sgKGZvciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlz
IGNyZWF0ZXMKKyAgICAgICAgICAgIGFuIGV4dHJhIGFsbG9jYXRpb24gZm9yIGFsbCB0aGUgaW5z
dGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhjaGFuZ2UKKyAgICAgICAgICAgIHJlbW92
ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUgaW5zdGFuY2UgdXNlZCB0
byBiZSBvYnRhaW5lZAorICAgICAgICAgICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4gQWxzbyBu
b3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKKyAgICAgICAgICAgIGlu
c3RhbmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRl
ciB0byB0aGUKKyAgICAgICAgICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ug
d291bGQgY2F1c2UgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICAgICAgICAtIEFkZCBXYXNtSW5zdGFu
Y2UuIEl0IGRvZXNuJ3QgZG8gbXVjaCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCisgICAgICAgICAg
LSBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBkb2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1w
b3J0ZWQgZnVuY3Rpb25zIGFzCisgICAgICAgICAgICBKU09iamVjdHMsIGl0IGFsc28gaGFzIHRo
ZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3YXNtCisgICAgICAgICAgICBl
bnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIgaW5zdGFuY2Un
cyBpbXBvcnRlZAorICAgICAgICAgICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAorICAgICAgICAgICAg
Y3JlYXRlcyBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBk
aXNhc3NvY2lhdGUKKyAgICAgICAgICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVt
YmVkZGVyLW5ldXRyYWwgdGhpbmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKKyAgICAgICAgICAgIHdp
biBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBnZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZklt
cG9ydEZ1bmN0aW9uIGZvcgorICAgICAgICAgICAgdGhlIGNhbGwgb3Bjb2RlICh3aGVuIHRoZSBj
YWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdoZXRoZXIgdGhlCisgICAgICAgICAg
ICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhpcyBpc24ndCBrbm93
biBhdCBjb21waWxlLXRpbWUKKyAgICAgICAgICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQgb24g
dGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgorICAgICAg
ICAgICAgdGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3Rh
bmNlIChvbmx5IHdhc20tPndhc20KKyAgICAgICAgICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2Ug
aXMgd2FzbUJpbmRpbmcgd2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCisgICAg
ICAgICAgICBmaWd1cmUgb3V0IHRoZSB3YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRo
ZW4gZ2V0cworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwKKyAgICAgICAgICAgIGNhbGwuIFRoZSBk
aXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5zdGFuY2UgY2FuIGJlCisg
ICAgICAgICAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBDb250ZXh0
IGlzLCBhbmQKKyAgICAgICAgICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVh
ZHkgZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKKyAgICAgICAgICAgIGNh
biBtb3ZlIHRoaXMgdGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRv
IFdhc206Okluc3RhbmNlLAorICAgICAgICAgICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGlu
IGFzIGFuIG9wYXF1ZSBwb2ludGVyIHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAorICAgICAg
ICAgICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdyaXRlQmFycmllcjxKU09iamVjdD4uCisgICAg
ICAgICAgLSBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJhbWUsIGFuZCBpbiBtYW55IHBs
YWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAorICAgICAgICAgICAgYXJvdW5kIGluc3RlYWQgb2Yg
Vk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1lcyB3aGljaAor
ICAgICAgICAgICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYworICAgICAgICAgICAgbG9jYXRpb24uIFRoYXQg
Y2hhbmdlIHdvbid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwg
YnV0CisgICAgICAgICAgICB3aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hp
bmVyeSBpbiBhIGdlbmVyaWMgbWFubmVyIHdpdGhvdXQKKyAgICAgICAgICAgIGhhdmluZyBhIFZN
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxp
Y2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW53aW5k
RXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0pOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogZGZnL0RGR09TUkVu
dHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxl
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dW5zYWZlQ2Fs
bGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0
YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWNT
dGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUgY29uc3QpOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAgICAoSlNDOjpOYXRpdmVDYWxsRnJhbWVU
cmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxG
cmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSk6
CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjp+TmF0aXZl
Q2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IpOgorICAgICAgICAoSlNDOjpTdGFj
a1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJl
YWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaDoKKyAgICAg
ICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVySXNFbnRyeUZyYW1lIGNvbnN0KToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmg6CisgICAgICAgIChKU0M6OlZN
RW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVJl
Y29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAoSlNDOjpFbnRyeUZyYW1l
Ojp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRl
ck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKiBq
c2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlND
Ojp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAg
ICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9P
cHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6Cisg
ICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OkZyYW1lV2Fsa2VyKToKKyAg
ICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VUb1BhcmVudEZyYW1lKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcyk6Cisg
ICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dTY29w
ZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZN
Lmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KToKKyAgICAgICAgKiBy
dW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjppc1NhbmVGcmFtZSk6CisgICAgICAg
IChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAgICAgICAoSlND
OjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2spOgorICAgICAgICAqIHdhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2FzbUJC
UVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6
Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmg6
CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRp
bmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNt
L1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpD
b2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29t
cGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpzZXRDb21waWxhdGlv
bkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFN0dWJzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNv
ZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yik6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCk6CisgICAgICAg
IChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0LmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUyk6CisgICAgICAgIChK
U0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250
ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAgICAgICAqIHdh
c20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIu
aC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtSW5z
dGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om1lbW9yeSk6
CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0YWJsZSk6CisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkU3RhY2tMaW1p
dCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRDYWNoZWRTdGFja0xp
bWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3Rlcklu
Zm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6CisgICAgICAgIChK
U0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9TYXZlIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlVmFsaWRhdGlvbkNh
bGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y29tcGls
ZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBh
cnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50
Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnJ1bkNv
bXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmFkZENvbXBsZXRpb25U
YXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNl
bElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6
CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgICogd2FzbS9XYXNtVGFi
bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJs
ZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChK
U0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFi
bGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpvZmZz
ZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAqIHdhc20vV2FzbVRo
dW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c2V0VGhyb3dXYXNtRXhjZXB0
aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtzOjp0aHJvd1dhc21FeGNlcHRpb24pOgor
ICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRl
eHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0Lmg6CisgICAgICAgICogd2FzbS9qcy9K
U1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDogQ29waWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaC4KKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Lmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmguCisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbnN0YW5jZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0NhbGxlZSk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVybmFsTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29kZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21UYWJsZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscyk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNhY2hlZFN0YWNrTGltaXQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldENhY2hlZFN0YWNrTGltaXQp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21NZW1vcnkpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21Nb2R1bGUpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUgY29uc3QpOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9y
eSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKToKKyAgICAgICAg
KiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRh
YmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAuCisg
ICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KU0V4Y2VwdGlv
bik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJseUZ1bmN0aW9u
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5TWVt
b3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVs
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1v
ZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmg6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21waWxlRnVu
Yyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGlsZUFu
ZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMpOgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTctMDktMjUgIERldmluIFJvdXNzbyAg
PHdlYmtpdEBkZXZpbnJvdXNzby5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBD
b25zb2xlLmFkZEluc3BlY3RlZE5vZGUgdG8gRE9NLnNldEluc3BlY3RlZE5vZGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTc2MmY2OC4uOWVlNTdlZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEwODIsNyArMTA4Miw3IEBACiAJCTc5QzRCMTVFMUJBMjE1OEYw
MEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThG
MDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Q0ZDNkYwMUMz
M0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQ
Q1Jhbmdlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUQ1Q0Q1OTFDMTEwNkE5
MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNt
RXhjZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87
IH07CisJCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlEQUUyNzkxRTAz
QzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAzIC8q
IEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZFMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xNDYwLDcgKzE0NjAsNiBAQAogCQlBRDJGQ0MyMDFEQjU5Q0Iy
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMTQxREI1OUM1OTAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKIAkJQUQyRkND
MjExREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MxNTFEQjU5
QzU5MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAqLzsgfTsKIAkJ
QUQyRkNDMkQxREI4MzhGRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MyNzFEQjgzOEM0
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLzsgfTsKLQkJQUQyRkNDMzExREI4
M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5LmggKi87IH07CiAJCUFENDEyQjM0MUU3QjJFOUUwMDhBRjE1NyAvKiBXYXNtQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0MTJC
MzIxRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ0MjUyNTExRTVEMEUxNDAwOUQyQTk3IC8q
IEZ1bGxDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDQyNTI1MDFFNUQwREVCMDA5RDJBOTcgLyogRnVsbENvZGVPcmlnaW4uaCAqLzsg
fTsKIAkJQUQ0OTM3QzQxRERCRTYxNDAwNzdDODA3IC8qIEFic3RyYWN0TW9kdWxlUmVjb3JkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDMjFE
REJFNjBBMDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ2OCw2ICsxNDY3LDEzIEBACiAJ
CUFENDkzN0Q0MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDQTFEREQyNzM0
MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovOyB9OwogCQlBRDRCMURGQTFERjI0
NEUyMDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGlu
Zy5oICovOyB9OwogCQlBRDVCNDE2RjFFQkFGQjc3MDA4RUZBNDMgLyogV2FzbU5hbWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUI0MTZFMUVCQUZC
NjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUFENUMzNkREMUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUMz
NkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYg
LyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RTYxRjY5
RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMz
NkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9X
YXNtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUYzMUY2MjQ4MkUwMDEzMTND
MiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdhc21Ub0pTLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREQwOUFFRTFGNUY2
MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFRjFGN0EyNjNBMDAwQkNBQUYgLyogV2FzbU1lbW9y
eU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
NUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENzQzOEMwMUUwNDU3QTQwMEZE
MEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEODZB
OTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDg2QTkzRDFBQTREODdDMDAyRkU3N0Yg
LyogV2Vha0dDTWFwSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOEZG
Mzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDE1Niw5ICs0MTYyLDI1IEBACiAJ
CUFEMkZDQzE1MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0MyNjFEQjgz
OEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
RDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgcGF0aCA9
IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViQXNzZW1ibHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAv
KiBXYXNtRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Gb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0NzFGNEJB
Nzg2MDA2Njk5MTIgLyogV0FCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBQmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0QTFGNERFNjhDMDA2Njk5MTIgLyogV0FJbnN0
YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQUluc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFEM0YxRTRCMUY0REU2OEMwMDY2OTkxMiAvKiBXQVRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdBVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNEMx
RjRERTY4QzAwNjY5OTEyIC8qIFdBTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBTWVtb3J5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUyMUY0RjRBRTUwMDY2OTkxMiAv
KiBXQU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1lbW9yeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUzMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1vZHVs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUFEM0YxRTU0MUY0RjRBRTUwMDY2OTkxMiAvKiBXQUluc3RhbmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdBSW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXQVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNjQxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
RXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY1MUY1MEU1
N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUV4Y2Vw
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY4MUY1NDdDQjYw
MDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FN
ZW1vcnlEZXNjcmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQU1lbW9yeURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQz
RjFFNkExRjU0N0NCNjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdBSW1wb3J0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZC
MUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
QVRhYmxlRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2
QzFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0FJbXBvcnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNG
MUU2RDFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0FUYWJsZURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDNGMUU3MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXQUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTcx
MUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
RnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQxMkIzMTFFN0Iy
RThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUQ0MTJCMzUxRTdCNTdDMDAwOEFGMTU3IC8qIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZUlmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MTczLDE1ICs0MTk1LDI4IEBACiAJCUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNt
QmluZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENEIxREY4MURGMjQ0RDcw
MDcxQUUzMiAvKiBXYXNtQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDVCNDE2RTFF
QkFGQjY1MDA4RUZBNDMgLyogV2FzbU5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbU5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REMx
RjY4OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtRW1i
ZWRkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REUxRjY5OUVCNjAw
MEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSW5zdGFu
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZERjFGNjk5RUI2MDAw
QkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21JbnN0YW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWJsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFi
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbU1lbW9yeU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU2lnbmF0dXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21T
aWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNpZ25hdHVy
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDg2QTkzRDFBQTREODdDMDAyRkU3
N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWFrR0NNYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOERE
NkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1RvV2Fz
bS5oOyBwYXRoID0ganMvSlNUb1dhc20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUQ4REQ2RDAxRjY3MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEpTVG9XYXNtLmNwcDsgcGF0aCA9IGpzL0pTVG9XYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5kZXhPck5hbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtSW5kZXhPck5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDlF
ODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEQjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QYWdlQ291bnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMjFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRvSlNDYWxs
ZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMzFERjhFQTAwMDA1
QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlU
b0pTQ2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUVFMUY1RjYy
M0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXYXNtVG9KUy5oOyBwYXRo
ID0ganMvV2FzbVRvSlMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRUYx
RjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdhc21U
b0pTLmNwcDsgcGF0aCA9IGpzL1dhc21Ub0pTLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRjMxRjYyNDgyRTAwMTMx
M0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseS5oOyBw
YXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcxMDBERjU0MkYgLyogV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQxOTEsNiArNDIyNiw4IEBACiAJCUFERTgwMjk2MUUwOEYxQzkwMDU4
REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7
IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk3MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJs
eUxpbmtFcnJvclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOUQx
RTA4RjIyNjAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JD
b25zdHJ1Y3Rvci5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQURGQzMwRjcxRjQ3QTdCODAwNjQ1
MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFzc2VtYmx5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY5MUY0N0E4QzAwMDY0NTFEMyAvKiBXQU1v
ZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0
aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OUY4OTM4MTg5MUFE
QjUwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyog
VG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0g
VG9vbEV4ZWN1dGFibGUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NjQ1LDYgKzU2ODIsMjYgQEAKIAkJCQk4NkYzRUVCNjE2ODU1QTVCMDA3N0I5MkEgLyogT2JqY1J1
bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVl
SlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5oICovLAorCQkJCUFEM0YxRTQ3MUY0QkE3ODYwMDY2OTkxMiAvKiBXQUJhc2UuaCAq
LywKKwkJCQlBRDNGMUU2NTFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uY3BwICovLAor
CQkJCUFEM0YxRTY0MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5oICovLAorCQkJCUFE
M0YxRTcxMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLywKKwkJCQlBRDNGMUU3
MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovLAorCQkJCUFEM0YxRTZDMUY1NDdD
QjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5jcHAgKi8sCisJCQkJQUQzRjFFNkExRjU0N0NC
NjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8sCisJCQkJQUQzRjFFNTQxRjRGNEFFNTAw
NjY5OTEyIC8qIFdBSW5zdGFuY2UuY3BwICovLAorCQkJCUFEM0YxRTRBMUY0REU2OEMwMDY2OTkx
MiAvKiBXQUluc3RhbmNlLmggKi8sCisJCQkJQUQzRjFFNTIxRjRGNEFFNTAwNjY5OTEyIC8qIFdB
TWVtb3J5LmNwcCAqLywKKwkJCQlBRDNGMUU0QzFGNERFNjhDMDA2Njk5MTIgLyogV0FNZW1vcnku
aCAqLywKKwkJCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9y
LmNwcCAqLywKKwkJCQlBRDNGMUU2OTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlw
dG9yLmggKi8sCisJCQkJQUQzRjFFNTMxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTW9kdWxlLmNwcCAq
LywKKwkJCQlBREZDMzBGOTFGNDdBOEMwMDA2NDUxRDMgLyogV0FNb2R1bGUuaCAqLywKKwkJCQlB
RDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8sCisJCQkJQUQzRjFFNEIx
RjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUuaCAqLywKKwkJCQlBRDNGMUU2RDFGNTQ3Q0I4MDA2
Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovLAorCQkJCUFEM0YxRTZCMUY1NDdDQjgw
MDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovLAorCQkJCUFERkMzMEY3MUY0N0E3Qjgw
MDY0NTFEMyAvKiBXZWJBc3NlbWJseS5oICovLAogCQkJCTVERTNEMEY0MEREOERERkIwMDQ2ODcx
NCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQVBJOwpAQCAt
NTk3OSw4ICs2MDM2LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAotCQkJCUFEMkZDQzJFMURCODM5
RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLywKLQkJCQlBRDJGQ0MyRjFEQjgzOUY3
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5
QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBFOTIxRDVBNEFCMzAw
OTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJNTNDQTczMDcxRUE1MzNEODAw
NzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAqLywKQEAgLTU5OTYsNiArNjA1MSw3IEBACiAJCQkJ
NTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCAqLywKIAkJCQlBRDQx
MkIzMTFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovLAogCQkJCUFENDEyQjMy
MUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICovLAorCQkJCUFENUMzNkRDMUY2ODhC
NUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLywKIAkJCQk3OURBRTI3OTFFMDNDODIyMDBC
NTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLywKIAkJCQk1MzgxQjkzNjFFNjBFOTY2MDA5
MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCiAJCQkJNTM4MUI5MzgxRTYw
RTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLywKQEAgLTYwMDQsNiAr
NjA2MCw4IEBACiAJCQkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBh
cnNlci5oICovLAogCQkJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuY3BwICovLAogCQkJCUFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5h
bWUuaCAqLywKKwkJCQlBRDVDMzZERTFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNw
cCAqLywKKwkJCQlBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8s
CiAJCQkJQUQwMDY1OUQxRUNBQzdGRTAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCAqLywKIAkJCQk1
M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLywKIAkJ
CQk1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8sCkBA
IC02MDExLDYgKzYwNjksOCBAQAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNt
TWVtb3J5LmggKi8sCiAJCQkJNzlCNzU5NzExREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAgKi8sCiAJCQkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oICovLAorCQkJCUFENUMzNkYwMUY3QTI2QkYwMDBCQ0FBRiAvKiBX
YXNtTWVtb3J5TW9kZS5jcHAgKi8sCisJCQkJQUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdh
c21NZW1vcnlNb2RlLmggKi8sCiAJCQkJNzkwMDgxMzYxRTk1QThFQzAwNTJEN0NEIC8qIFdhc21N
b2R1bGUuY3BwICovLAogCQkJCTc5MDA4MTM3MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxl
LmggKi8sCiAJCQkJNTNFNzc3RTExRTkyRTI2NTAwN0NCRUM0IC8qIFdhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAgKi8sCkBAIC02MDMyLDYgKzYwOTIsOCBAQAogCQkJCTUzRjQwRTg0MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBD
MkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJB
IC8qIFdhc21TaWduYXR1cmUuaCAqLywKKwkJCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmNwcCAqLywKKwkJCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3Bw
ICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggKi8sCiAJ
CQkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICovLApAQCAt
NzYzMiw2ICs3Njk0LDEwIEBACiAJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQUQ4REQ2RDAxRjY3
MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLywKKwkJCQlBRDhERDZDRjFGNjcwODlGMDAw
NEVCNTIgLyogSlNUb1dhc20uaCAqLywKKwkJCQlBREQwOUFGMjFGNjI0ODI5MDAxMzEzQzIgLyog
SlNXZWJBc3NlbWJseS5jcHAgKi8sCisJCQkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpT
V2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJCQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8q
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RG
RUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcCAqLywKQEAgLTc2NTEsNiAr
NzcxNyw4IEBACiAJCQkJQUQyRkNCQUQxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBRTFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseVRhYmxlLmNwcCAqLywKIAkJCQlBRDJGQ0JBRjFEQjU4REE0MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseVRhYmxlLmggKi8sCisJCQkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdh
c21Ub0pTLmNwcCAqLywKKwkJCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMu
aCAqLywKIAkJCQlBRDJGQ0JCMDFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQUQyRkNCQjExREI1OERBNDAwQjNFNzM2IC8q
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCMjFE
QjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3BwICov
LApAQCAtNzkyNiw2ICs3OTk0LDcgQEAKIAkJCQkwRkVDODVCQjFCRTE0NjJGMDA4MEZGNzQgLyog
QjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRGNjdEMjFEOUM2
RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzZFNTQ1MzFDNDY4
RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzMTlEQTA0MUMxQkU0MEQwMDFEMjYwQiAvKiBCM0xvd2VyTWFjcm9zQWZ0
ZXJPcHRpbWl6YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxRTFCREFDREFDMDA4
MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMTYsNiArODA4NSw3
IEBACiAJCQkJRTMyOERBRUIxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8q
IEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNjAx
RjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MjE5LDYgKzgyODksNyBAQAogCQkJCTBGQTU4MUJDMTUwRTk1MzAwMEI5QTJEOSAvKiBERkdOb2Rl
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3NTAwMEMyMzk2IC8qIERG
R051bGxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFNzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQUQ1QzM2REQxRjY4OEI2NTAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjlDRTkxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGRjFDOTBD
NTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTgzMjksOCArODQw
MCwxMCBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVz
c2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUExRjc1QUQ2QTAwMEJD
QUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M1NzFGMzNBNDUzMDBG
NTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzRFREJGNzFEQjVGRkM5MDBEQzg3QTUgLyogRnJh
bWVUcmFjZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTg3MzEsNyArODgwNCw2IEBACiAJCQkJQTc0
ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFr
U2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBRDJGQ0MzMTFEQjgzRDQ5MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlF
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUZENDg0
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjQsNiArODk5Niw3IEBACiAJCQkJ
QkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBL
ZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBS
ZWdFeHBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZEMUM4RjY1OTUwMDQ4MDE1
MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDNDBF
MTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTkw
OTMsNiArOTE2Niw3IEBACiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1
YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkIzOTMxRTE3N0E3MjAwQTlCRTUw
IC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUYxRjdBMjYz
QTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1MkFB
MTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQz
QTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBmZDUyNmIyLi4yZDI4ZWU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MjYsNyArOTI2LDYgQEAgdG9vbHMvSlNEb2xsYXJWTVBy
b3RvdHlwZS5jcHAKIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCiB0b29scy9WTUluc3Bl
Y3Rvci5jcHAKIAotd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKIHdhc20vV2FzbUJCUVBsYW4uY3BwCiB3YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtOTM0
LDEyICs5MzMsMTYgQEAgd2FzbS9XYXNtQ2FsbGVlLmNwcAogd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uY3BwCiB3YXNtL1dhc21Db2RlQmxvY2suY3BwCiB3YXNtL1dhc21Db250ZXh0LmNwcAor
d2FzbS9XYXNtRW1iZWRkZXIuaAogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAogd2Fz
bS9XYXNtRm9ybWF0LmNwcAogd2FzbS9XYXNtSW5kZXhPck5hbWUuY3BwCit3YXNtL1dhc21JbnN0
YW5jZS5jcHAKK3dhc20vV2FzbUluc3RhbmNlLmgKIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNw
cAogd2FzbS9XYXNtTWVtb3J5LmNwcAogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCit3
YXNtL1dhc21NZW1vcnlNb2RlLmNwcAogd2FzbS9XYXNtTW9kdWxlLmNwcAogd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uY3BwCiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC05NDksMTAg
Kzk1MiwxNSBAQCB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQu
Y3BwCiB3YXNtL1dhc21QbGFuLmNwcAogd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAord2FzbS9XYXNt
VGFibGUuY3BwCit3YXNtL1dhc21UYWJsZS5oCiB3YXNtL1dhc21UaHVua3MuY3BwCiB3YXNtL1dh
c21WYWxpZGF0ZS5jcHAKIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCit3YXNtL2pzL0pTVG9XYXNt
LmNwcAord2FzbS9qcy9KU1RvV2FzbS5oCit3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAK
QEAgLTk2Miw2ICs5NzAsOCBAQCB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKK3dhc20vanMvV2FzbVRv
SlMuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmgKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5
cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA0MjI4
MGM1Li42ZGY0NDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTE3OSw3ICsxNzksNyBAQCBDYWxsU2l0ZUluZGV4
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6b3JpZ2luYWxDYWxsU2l0ZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gc3R1Ygogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4Y2Vw
dGlvbkhhbmRsZXIoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7Ci0gICAgaml0LT5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0pOworICAgIGppdC0+
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJm1fdm0udG9wRW50
cnlGcmFtZSk7CiAgICAgaWYgKG5lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oKSkg
ewogICAgICAgICAvLyBUbyB0aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4Y2Vw
dGlvbiBoYW5kbGluZwogICAgICAgICAvLyBjYWxsIHNpdGUsIHRoZXkgd2lsbCBleHBlY3QgdGhl
IE9TUiBleGl0IHRvIGJlIGFycml2ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCmluZGV4IDM0OGM2OGMuLjc3MTZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKICAqCkBAIC02NTIsOCArNjUyLDggQEAgdm9pZCBEZWJ1Z2dlcjo6c3RlcE91dE9m
RnVuY3Rpb24oKQogICAgIGlmICghbV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Vk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAg
ICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxs
RnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSkgOiBudWxscHRyOworICAgIEVudHJ5
RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgbV9wYXVzZU9u
Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSh0b3BFbnRyeUZyYW1lKSA6IG51bGxwdHI7CiAgICAgbV9wYXVzZU9uU3RlcE91dCA9
IHRydWU7CiAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG5v
dGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2
b2lkIERlYnVnZ2VyOjpyZXR1cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAo
IW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1l
KiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5
RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJh
bWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIGNhbGws
IHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdlIGFy
ZSByZXR1cm5pbmcgdG8uCiAgICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQgPSB0
cnVlOwpAQCAtODU2LDggKzg1Niw4IEBAIHZvaWQgRGVidWdnZXI6OnVud2luZEV2ZW50KENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1F
bnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50
cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAg
IC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYW4gZXhjZXB0aW9uIGxvY2F0aW9uIGxpa2UgYSBzdGVw
LW91dC4KICAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkK
QEAgLTg4Niw4ICs4ODYsOCBAQCB2b2lkIERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZN
RW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVu
dHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAg
ICAvLyBSZXR1cm5pbmcgZnJvbSBhIHByb2dyYW0sIGNvdWxkIGJlIGV2YWwoKSwgdGhlcmUgd2Fz
IGF0IGxlYXN0IG9uZSBleHByZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVybmlu
ZyB0by4KICAgICBtX3Bhc3RGaXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGQxOWRkYjcu
LmZmOTc4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAg
IC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBh
cmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpAQCAtMTYw
LDcgKzE2MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygp
CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAg
ICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0
aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNTgzYmY5OC4uMDIxZWFhYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTcsNyArMzE3
LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdp
c3RlclNldDo6YWxsRlBScygpKTsKIAogICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSByZWdp
c3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsKLSAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2
bUVudHJ5UmVjb3JkKHZtLT50b3BWTUVudHJ5RnJhbWUpOworICAgIFZNRW50cnlSZWNvcmQqIHJl
Y29yZCA9IHZtRW50cnlSZWNvcmQodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCBjdXJyZW50RW50cnkgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpOwogICAgICAg
ICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWcoKSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAzNDMzMDhjLi5jNzdlMDA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg1LDcgKzE4
NSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdChFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7CiAg
ICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNl
IHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgogICAgICAgICAgICAgLy8gU28s
IHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAg
ICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKTsKKyAgICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBq
aXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIGppdC5hZGRQdHIoCkBAIC01Mzcs
NyArNTM3LDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwg
Vk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGppdC5lbWl0TWF0ZXJpYWxp
emVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCZ2bS50b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIERvIGFsbCBkYXRhIGZv
cm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCBiNzMyN2YzLi5lZDBh
ZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC0xMzUsNyAr
MTM1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50cnlKdW1w
RGVzdGluYXRpb24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BF
bnRyeUZyYW1lKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsK
IAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCmluZGV4IGZmMmNlNTYuLjAzZjAyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiAKICAg
ICAvLyBFbWl0IHRoZSBleGNlcHRpb24gaGFuZGxlci4KICAgICAqc3RhdGUuZXhjZXB0aW9uSGFu
ZGxlciA9IGppdC5sYWJlbCgpOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggN2MwMTgxZC4uYWFjODY4MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Myw3ICsxNDMsNyBAQCB2
b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlv
biA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKLSAgICAg
ICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtKTsKKyAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigmdm0udG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAxY2ViYzAxLi5lMGU1
OTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CkBAIC0yNjQsNyArMjY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJh
bWUpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAppbmRleCA4ZTA4MWQ3Li5jZWZjYWQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg2LDcgKzE4
Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIC8vIFRoZSBmaXJzdCB0aGluZyB3
ZSBuZWVkIHRvIGRvIGlzIHJlc3RhYmxpc2ggb3VyIGZyYW1lIGluIHRoZSBjYXNlIG9mIGFuIGV4
Y2VwdGlvbi4KICAgICBpZiAoZXhpdC5pc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoKTsgLy8gVGhlIGZpcnN0IHRp
bWUgd2UgaGl0IHRoaXMgZXhpdCwgbGlrZSBhdCBhbGwgb3RoZXIgdGltZXMsIHRoaXMgZmllbGQg
c2hvdWxkIGJlIG5vbi1udWxsLgotICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAgIGppdC5yZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFt
ZSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgp
LCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CkBAIC00MTIsOCArNDEyLDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lz
dGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdp
c3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkgewotICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcFZNRW50cnlGcmFtZSwgR1BSSW5m
bzo6cmVnVDEpOwotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5m
bzo6cmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcEVudHJ5RnJhbWUsIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CiAgICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcg
PD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggOWZhMjlkMC4uYmU2MWE0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTQsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3Bl
LmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KQEAgLTIxNyw3ICsyMTgsNyBAQCBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjp3
YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgaWYgKCFjYWxsZWUoKS5pc1dhc20oKSkKICAgICAgICAgcmV0dXJuIGxleGljYWxH
bG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gV2FzbTo6bG9hZENvbnRleHQodm0pLT5nbG9iYWxP
YmplY3QoKTsKKyAgICByZXR1cm4gdm0ud2FzbUNvbnRleHQubG9hZCgpLT5nbG9iYWxPYmplY3Qo
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICByZXR1cm4gbGV4aWNhbEdsb2Jh
bE9iamVjdCgpOwpAQCAtMjM3LDI0ICsyMzgsMjQgQEAgYm9vbCBDYWxsRnJhbWU6OmlzQW55V2Fz
bUNhbGxlZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1DYWxsRnJhbWUqIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFtZSkKK0NhbGxGcmFtZSog
Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYgY3VyckVudHJ5RnJhbWUpCiB7Ci0g
ICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJyVk1FbnRyeUZyYW1lKSB7
Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29y
ZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAgY3VyclZNRW50cnlGcmFtZSA9IGN1cnJWTUVu
dHJ5UmVjb3JkLT5wcmV2VG9wVk1FbnRyeUZyYW1lKCk7CisgICAgaWYgKGNhbGxlckZyYW1lT3JF
bnRyeUZyYW1lKCkgPT0gY3VyckVudHJ5RnJhbWUpIHsKKyAgICAgICAgVk1FbnRyeVJlY29yZCog
Y3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAgICAg
ICAgY3VyckVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcEVudHJ5RnJhbWUo
KTsKICAgICAgICAgcmV0dXJuIGN1cnJWTUVudHJ5UmVjb3JkLT5wcmV2VG9wQ2FsbEZyYW1lKCk7
CiAgICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9y
Vk1FbnRyeUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxs
ZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsKIH0KIAotU1VQUFJFU1NfQVNBTiBDYWxsRnJhbWUqIENh
bGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFt
ZSkKK1NVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2FmZUNhbGxlckZyYW1l
KEVudHJ5RnJhbWUqJiBjdXJyRW50cnlGcmFtZSkKIHsKLSAgICBpZiAodW5zYWZlQ2FsbGVyRnJh
bWVPclZNRW50cnlGcmFtZSgpID09IGN1cnJWTUVudHJ5RnJhbWUpIHsKLSAgICAgICAgVk1FbnRy
eVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJWTUVudHJ5RnJh
bWUpOwotICAgICAgICBjdXJyVk1FbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnVuc2Fm
ZVByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAgICBpZiAodW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5
RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAgICAgICBWTUVudHJ5UmVjb3JkKiBjdXJy
Vk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyckVudHJ5RnJhbWUpOworICAgICAgICBj
dXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wRW50cnlGcmFt
ZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQtPnVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KHVuc2Fm
ZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENh
bGxGcmFtZSo+KHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCiBTb3VyY2VP
cmlnaW4gQ2FsbEZyYW1lOjpjYWxsZXJTb3VyY2VPcmlnaW4oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDYyMzA5YTAuLjZkNWQ3MjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKQEAgLTE0
MSwxMiArMTQxLDEyIEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBDYWxsRnJhbWUmIG9w
ZXJhdG9yPShjb25zdCBSZWdpc3RlciYgcikgeyAqc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlz
KSA9IHI7IHJldHVybiAqdGhpczsgfQogCi0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yVk1F
bnRyeUZyYW1lKCkpOyB9Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUo
KSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KLSAgICAg
ICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9Cisg
ICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsgfQorICAgICAgICB2b2lk
KiBjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZyYW1lQW5k
UEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVuc2FmZUNh
bGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVB
bmRQQygpLmNhbGxlckZyYW1lOyB9CiAKLSAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxsZXJG
cmFtZShWTUVudHJ5RnJhbWUqJik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYpOworICAgICAgICBDYWxsRnJhbWUqIHVuc2Fm
ZUNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBTb3VyY2VPcmlnaW4gY2FsbGVyU291cmNlT3JpZ2luKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAppbmRleCBjNWI2Yjgz
Li43NmFjZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
RnJhbWVUcmFjZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Zy
YW1lVHJhY2Vycy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBW
TUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIAogY2xhc3MgU3VzcGVuZEV4Y2VwdGlv
blNjb3BlIHsKIHB1YmxpYzoKQEAgLTc0LDMzICs3NCwzMyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAgICAgQVNT
RVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJldF9jYXN0
PHZvaWQqPih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0tPnRv
cEVudHJ5RnJhbWUpKTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAg
ICB9CiB9OwogCiBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB7CiBwdWJs
aWM6Ci0gICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZShW
TSogdm0sIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
KyAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKFZNKiB2
bSwgRW50cnlGcmFtZSogRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAg
IDogbV92bSh2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFTU0VSVChj
YWxsRnJhbWUpOwotICAgICAgICBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50
cnlGcmFtZTsKKyAgICAgICAgbV9zYXZlZFRvcEVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFt
ZTsKICAgICAgICAgbV9zYXZlZFRvcENhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7Ci0gICAg
ICAgIHZtLT50b3BWTUVudHJ5RnJhbWUgPSB2bUVudHJ5RnJhbWU7CisgICAgICAgIHZtLT50b3BF
bnRyeUZyYW1lID0gRW50cnlGcmFtZTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxG
cmFtZTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5OYXRpdmVDYWxsRnJhbWVUcmFjZXJX
aXRoUmVzdG9yZSgpCiAgICAgewotICAgICAgICBtX3ZtLT50b3BWTUVudHJ5RnJhbWUgPSBtX3Nh
dmVkVG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX3ZtLT50b3BFbnRyeUZyYW1lID0gbV9zYXZl
ZFRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1fdm0tPnRvcENhbGxGcmFtZSA9IG1fc2F2ZWRUb3BD
YWxsRnJhbWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwotICAgIFZNRW50cnlG
cmFtZSogbV9zYXZlZFRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBtX3NhdmVkVG9w
RW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIG1fc2F2ZWRUb3BDYWxsRnJhbWU7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApp
bmRleCAxMzUzZTEwLi5hNTEzZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTY1Myw5ICs2NTMsOSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAK
LSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
aXNpdG9yKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodmlzaXRvcik7CiAKLSAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53aW5kaW5nID0gdmlz
aXRvci0+Y2FsbGVySXNWTUVudHJ5RnJhbWUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53
aW5kaW5nID0gdmlzaXRvci0+Y2FsbGVySXNFbnRyeUZyYW1lKCk7CiAgICAgICAgIGlmIChzaG91
bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
IApAQCAtNjYzLDcgKzY2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlz
aXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAgICB7CiAj
aWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSB2aXNpdG9y
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC02NzYsNyArNjc2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaW50cHRyX3QqIGZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdCo+KG1fY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9
IGN1cnJlbnRDYWxsZWVTYXZlcy0+c2l6ZSgpOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNv
cmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgVk1FbnRy
eVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRvcEVudHJ5RnJhbWUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZl
cy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGN1cnJlbnRF
bnRyeS5yZWcoKSkpCkBAIC03MDIsNyArNzAyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGMK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBpZiAodW53
aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIGlmIChjYWxsRnJh
bWUtPmNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUpCisg
ICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gdm0udG9w
RW50cnlGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGNhbGxG
cmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggODVkMTQ3YS4uMWRhOTNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxOCArNDQsMTggQEAgU3RhY2tWaXNpdG9yOjpT
dGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0pCiAgICAgQ2FsbEZyYW1l
KiB0b3BGcmFtZTsKICAgICBpZiAoc3RhcnRGcmFtZSkgewogICAgICAgICBBU1NFUlQodm0pOwot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKKyAg
ICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKICAgICAgICAg
dG9wRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgICAgICAKLSAgICAgICAgaWYgKHRvcEZy
YW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKSA9PSBzdGF0
aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7Ci0gICAgICAgICAgICB0b3BGcmFtZSA9IHZtRW50
cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKLSAg
ICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUu
bV9WTUVudHJ5RnJhbWUpLT5tX3ByZXZUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIGlmICh0b3BG
cmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFtZS5tX2VudHJ5RnJhbWUpID09IHN0YXRp
Y19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKKyAgICAgICAgICAgIHRvcEZyYW1lID0gdm1FbnRy
eVJlY29yZChtX2ZyYW1lLm1fZW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsKKyAgICAg
ICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fZW50
cnlGcmFtZSktPm1fcHJldlRvcEVudHJ5RnJhbWU7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gMDsKKyAgICAgICAgbV9mcmFtZS5tX2Vu
dHJ5RnJhbWUgPSAwOwogICAgICAgICB0b3BGcmFtZSA9IDA7CiAgICAgfQotICAgIG1fZnJhbWUu
bV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IGZhbHNlOworICAgIG1fZnJhbWUubV9jYWxsZXJJc0Vu
dHJ5RnJhbWUgPSBmYWxzZTsKICAgICByZWFkRnJhbWUodG9wRnJhbWUpOwogCiAgICAgLy8gRmlu
ZCB0aGUgZnJhbWUgdGhlIGNhbGxlciB3YW50cyB0byBzdGFydCB1bndpbmRpbmcgZnJvbS4KQEAg
LTc1LDE0ICs3NSwxNCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSgpCiAgICAg
ICAgICAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCAmaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIpOwogICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG1fZnJhbWUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZTsK
KyAgICAgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlckVudHJ5
RnJhbWU7CiAgICAgICAgICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUuY2FsbEZy
YW1lKCksIGNhbGxlckNvZGVPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2ZyYW1l
Lm1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX0NhbGxlckVudHJ5RnJhbWU7CiAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUo
KSk7CiB9CiAKQEAgLTE1Miw5ICsxNTIsOSBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklu
bGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaQogewog
ICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpOwotICAgIG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fVk1F
bnRyeUZyYW1lOwotICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUobV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSk7Ci0gICAgbV9mcmFtZS5tX2NhbGxl
cklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSAhPSBtX2ZyYW1l
Lm1fVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX2VudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX2NhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZShtX2ZyYW1lLm1fQ2FsbGVyRW50cnlGcmFtZSk7CisgICAgbV9mcmFtZS5tX2Nh
bGxlcklzRW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJFbnRyeUZyYW1lICE9IG1fZnJhbWUu
bV9lbnRyeUZyYW1lOwogICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwogCiAgICAg
Q2FsbGVlQml0cyBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwpAQCAtNTAwLDcgKzUwMCw3
IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBJbmRl
bnRlciBpbmRlbnQsIHN0ZDo6ZnVuY3Rpb248CiAKICAgICAgICAgICAgIGluZGVudC0tOwogICAg
ICAgICB9Ci0gICAgICAgIG91dC5wcmludChpbmRlbnQsICJ2bUVudHJ5RnJhbWU6ICIsIFJhd1Bv
aW50ZXIodm1FbnRyeUZyYW1lKCkpLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KGluZGVudCwg
IkVudHJ5RnJhbWU6ICIsIFJhd1BvaW50ZXIobV9lbnRyeUZyYW1lKSwgIlxuIik7CiAgICAgICAg
IGluZGVudC0tOwogICAgIH0KICAgICBvdXQucHJpbnQoaW5kZW50LCAifVxuIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5kZXggOGFk
MDk0MC4uNzA3OWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAg
ICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAgc2l6
ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsgfQotICAgICAgICBib29sIGNhbGxlcklzVk1FbnRyeUZyYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc1ZNRW50cnlGcmFtZTsgfQorICAgICAgICBib29s
IGNhbGxlcklzRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNFbnRyeUZyYW1l
OyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxlckZyYW1lOyB9CiAgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsZWU7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jazsgfQpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgQ2xvbmVk
QXJndW1lbnRzKiBjcmVhdGVBcmd1bWVudHMoKTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2bUVu
dHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX1ZNRW50cnlGcmFtZTsgfQogICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CiAgICAgICAg
IAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBJbmRlbnRlciA9IEluZGVudGVyKCkp
IGNvbnN0OwpAQCAtMTE0LDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICNlbmRpZgogICAgICAgICBDYWxsRnJhbWUqIG1fY2Fs
bEZyYW1lOwotICAgICAgICBWTUVudHJ5RnJhbWUqIG1fVk1FbnRyeUZyYW1lOwotICAgICAgICBW
TUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICBFbnRyeUZyYW1lKiBt
X2VudHJ5RnJhbWU7CisgICAgICAgIEVudHJ5RnJhbWUqIG1fQ2FsbGVyRW50cnlGcmFtZTsKICAg
ICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwogICAgICAgICBDYWxsZWVCaXRzIG1fY2Fs
bGVlOwogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtMTIzLDcgKzEyMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAg
ICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIFdhc206OkluZGV4T3JO
YW1lIG1fd2FzbUZ1bmN0aW9uSW5kZXhPck5hbWU7Ci0gICAgICAgIGJvb2wgbV9jYWxsZXJJc1ZN
RW50cnlGcmFtZSA6IDE7CisgICAgICAgIGJvb2wgbV9jYWxsZXJJc0VudHJ5RnJhbWUgOiAxOwog
ICAgICAgICBib29sIG1faXNXYXNtRnJhbWUgOiAxOwogCiAgICAgICAgIGZyaWVuZCBjbGFzcyBT
dGFja1Zpc2l0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvVk1FbnRyeVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZN
RW50cnlSZWNvcmQuaAppbmRleCBmMzZjMmJlLi4wMTAzYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjks
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFZNRW50cnlGcmFtZTsKK3N0cnVjdCBF
bnRyeUZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKQEAgLTQwLDcgKzQwLDcg
QEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgICAqLwogICAgIFZNKiBtX3ZtOwogICAgIEV4
ZWNTdGF0ZSogbV9wcmV2VG9wQ2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFtZSogbV9wcmV2VG9w
Vk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fcHJldlRvcEVudHJ5RnJhbWU7CiAKICNp
ZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAg
ICBpbnRwdHJfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW05VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTXTsKQEAgLTQ5LDIwICs0OSwyMCBAQCBzdHJ1Y3QgVk1FbnRyeVJlY29yZCB7
CiAgICAgRXhlY1N0YXRlKiBwcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wQ2Fs
bEZyYW1lOyB9CiAgICAgU1VQUFJFU1NfQVNBTiBFeGVjU3RhdGUqIHVuc2FmZVByZXZUb3BDYWxs
RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BDYWxsRnJhbWU7IH0KIAotICAgIFZNRW50cnlGcmFt
ZSogcHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcFZNRW50cnlGcmFtZTsg
fQotICAgIFNVUFBSRVNTX0FTQU4gVk1FbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wVk1FbnRyeUZy
YW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wVk1FbnRyeUZyYW1lOyB9CisgICAgRW50cnlGcmFtZSog
cHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BFbnRyeUZyYW1lOyB9CisgICAg
U1VQUFJFU1NfQVNBTiBFbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wRW50cnlGcmFtZSgpIHsgcmV0
dXJuIG1fcHJldlRvcEVudHJ5RnJhbWU7IH0KIH07CiAKLWV4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChWTUVudHJ5RnJhbWUqKTsKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29y
ZCogdm1FbnRyeVJlY29yZChFbnRyeUZyYW1lKik7CiAKLXN0cnVjdCBWTUVudHJ5RnJhbWUgewor
c3RydWN0IEVudHJ5RnJhbWUgewogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9DQUxMRUVf
U0FWRVNfUkVHSVNURVJTID4gMAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgdm1FbnRyeVJlY29yZE9m
ZnNldCgpCiAgICAgewotICAgICAgICBWTUVudHJ5RnJhbWUqIGZha2VWTUVudHJ5RnJhbWUgPSBy
ZWludGVycHJldF9jYXN0PFZNRW50cnlGcmFtZSo+KDB4MTAwMCk7Ci0gICAgICAgIFZNRW50cnlS
ZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZVZNRW50cnlGcmFtZSk7CisgICAgICAg
IEVudHJ5RnJhbWUqIGZha2VFbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxFbnRyeUZyYW1l
Kj4oMHgxMDAwKTsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29y
ZChmYWtlRW50cnlGcmFtZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGZha2VWTUVudHJ5RnJhbWUpKTsKKyAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYWtlRW50
cnlGcmFtZSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlck9mZnNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKaW5kZXggOGQzMWY3YS4uMWRlMDA5ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKFZNJiB2bSwgR1BSUmVnIHNjcmF0Y2gw
LCBHUFJSZWcgc2NyYXRjaDEsCiB9CiAjZW5kaWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0p
Cit2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiogdG9wRW50cnlGcmFtZSkKIHsKICNpZiBOVU1C
RVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogYWxsQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygp
OwpAQCAtNjA1LDggKzYwNSw4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtCiAgICAgfQogICAg
IEFTU0VSVChzY3JhdGNoICE9IEludmFsaWRHUFJSZWcpOwogCi0gICAgbG9hZFB0cigmdm0udG9w
Vk1FbnRyeUZyYW1lLCBzY3JhdGNoKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlG
cmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAg
bG9hZFB0cih0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHNjcmF0Y2gp
OwogCiAgICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzIGV4Y2VwdCBmb3IgdGhlIHNjcmF0
Y2guCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewpA
QCAtNjI3LDcgKzYyNyw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2
ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtCiAgICAgQVNTRVJUKHNj
cmF0Y2ggPT0gZW50cnkucmVnKCkuZ3ByKCkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNo
LCBlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0p
OworICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKICNlbmRpZgogfQogCkBAIC03Nzgs
NDEgKzc3OCw0MSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1ZVRvQm9v
bGVhbihWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZQogfQogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dChHUFJSZWcg
ZHN0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJl
ZyBkc3QpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6dXNlRmFz
dFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkp
IHsKICAgICAgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRMU09mZnNldEZvcktleShXVEZfV0FTTV9D
T05URVhUX0tFWSksIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBt
b3ZlKFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRQb2ludGVyLCBk
c3QpOworICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4
dEluc3RhbmNlUG9pbnRlciwgZHN0KTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OnN0b3Jl
V2FzbUNvbnRleHQoR1BSUmVnIHNyYykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21D
b250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYykKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQot
ICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKFdhc206OkNv
bnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBzdG9yZVRvVExTUHRyKHNyYywgZmFzdFRM
U09mZnNldEZvcktleShXVEZfV0FTTV9DT05URVhUX0tFWSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2VuZGlmCi0gICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCkud2FzbUNvbnRleHRQb2ludGVyKTsKKyAgICBtb3ZlKHNyYywgV2FzbTo6UGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiB9CiAKLWJvb2wgQXNz
ZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkK
K2Jvb2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9T
Y3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKFdh
c206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKICAgICAgICAgcmV0dXJuIGxvYWRGcm9tVExTUHRyTmVlZHNNYWNyb1NjcmF0Y2hS
ZWdpc3RlcigpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEFzc2VtYmx5
SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQorYm9v
bCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3Jh
dGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKFdhc206
OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVzZUZhc3RU
TFMoKSkKICAgICAgICAgcmV0dXJuIHN0b3JlVG9UTFNQdHJOZWVkc01hY3JvU2NyYXRjaFJlZ2lz
dGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CkBAIC04NzUsMTAgKzg3NSwxMCBAQCB2
b2lkIEFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKFZNJiB2bSwgVl9EZWJ1Z09wZXJhdGlvbl9F
UFAgZnVuY3Rpb24sIHZvaWQqIGFyZwogICAgIH0KIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJl
ZyBjYWxsZWVTYXZlc0J1ZmZlcikKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVm
ZmVyKQogewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVy
T2Zmc2V0KCkpLCBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihF
bnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBjYWxsZWVTYXZl
c0J1ZmZlcik7CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBW
TTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVyU2V0IGRv
bnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhNjhjMzY5Li5jMzkx
NWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAg
LTM2MCwyOCArMzYwLDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSKQogICAgIHsKICNpZiBOVU1C
RVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHZtR1BSLCBWTTo6dG9wVk1FbnRyeUZyYW1lT2Zmc2V0KCkpLCB2bUdQUik7Ci0gICAgICAgIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZtR1BSKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBWTTo6dG9wRW50cnlGcmFtZU9mZnNldCgp
KSwgdm1HUFIpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlckltcGwodm1HUFIpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHZtR1BSKTsK
ICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCisgICAg
dm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZy
YW1lKiogdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
ID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAgICB7CiAj
aWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQUlJlZyB0
ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdm0u
dG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAgICAgICAgbG9hZFB0cih0b3BF
bnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CiAjZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0o
dm0pOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CiAgICAgICAgIFVOVVNF
RF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgcmVzdG9y
ZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJik7CisgICAg
dm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVu
dHJ5RnJhbWUqKik7CiAKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0
ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSwgY29uc3QgVGVtcFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCkgfSkKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiogdG9wRW50cnlGcmFtZSwg
Y29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMu
Z2V0RnJlZUdQUigwKTsKQEAgLTM5Miw4ICszOTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChjb2RlQmxvY2soKSk7CiAKICAgICAgICAgLy8gQ29weSBzYXZlZCBjYWxsZWVTYXZlcyBvbiBz
dGFjayBvciB1bnNhdmVkIGNhbGxlZVNhdmVzIGluIHJlZ2lzdGVyIHRvIHZtIGNhbGxlZVNhdmUg
YnVmZmVyCi0gICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwgdGVtcDEpOwotICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
c0J1ZmZlck9mZnNldCgpKSwgdGVtcDEpOworICAgICAgICBsb2FkUHRyKHRvcEVudHJ5RnJhbWUs
IHRlbXAxKTsKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVT
YXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7CiAKICAgICAgICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rl
ck9mZnNldHMoKTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVT
YXZlcyA9IGNvZGVCbG9jaygpLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC00MDEsMTIgKzQw
MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxs
ZWVTYXZlcy0+c2l6ZSgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdp
c3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgdm1FbnRyeSA9
IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVy
cy5nZXQodm1FbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5
ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOworICAgICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0
ZXJzLmdldChlbnRyeS5yZWcoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxsZWVT
YXZlcy0+ZmluZCh2bUVudHJ5LnJlZygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQq
IGN1cnJlbnRGcmFtZUVudHJ5ID0gY3VycmVudENhbGxlZVNhdmVzLT5maW5kKGVudHJ5LnJlZygp
KTsKIAotICAgICAgICAgICAgaWYgKHZtRW50cnkucmVnKCkuaXNHUFIoKSkgeworICAgICAgICAg
ICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpIHsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVn
VG9TdG9yZTsKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gTG9hZCBjYWxsZWVTYXZlIGZyb20gc3RhY2sgaW50byB0ZW1wIHJl
Z2lzdGVyCkBAIC00MTQsOSArNDE0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5v
ZmZzZXQoKSksIHJlZ1RvU3RvcmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgICAgICAvLyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAg
ICAgICAgICAgIHJlZ1RvU3RvcmUgPSB2bUVudHJ5LnJlZygpLmdwcigpOworICAgICAgICAgICAg
ICAgICAgICByZWdUb1N0b3JlID0gZW50cnkucmVnKCkuZ3ByKCk7CiAKLSAgICAgICAgICAgICAg
ICBzdG9yZVB0cihyZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7
CisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgZW50
cnkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgRlBS
UmVnIGZwUmVnVG9TdG9yZTsKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkp
IHsKQEAgLTQyNSwxMyArNDI1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbG9h
ZERvdWJsZShBZGRyZXNzKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50RnJhbWVFbnRyeS0+
b2Zmc2V0KCkpLCBmcFJlZ1RvU3RvcmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgICAgICAvLyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAg
ICAgICAgICAgICAgIGZwUmVnVG9TdG9yZSA9IHZtRW50cnkucmVnKCkuZnByKCk7CisgICAgICAg
ICAgICAgICAgICAgIGZwUmVnVG9TdG9yZSA9IGVudHJ5LnJlZygpLmZwcigpOwogCi0gICAgICAg
ICAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5
Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUb1N0b3JlLCBB
ZGRyZXNzKHRlbXAxLCBlbnRyeS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAjZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0odm0pOworICAgICAgICBVTlVTRURfUEFSQU0o
dG9wRW50cnlGcmFtZSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKICNl
bmRpZgogICAgIH0KQEAgLTE2NDQsMTQgKzE2NDQsMTQgQEAgcHVibGljOgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgdm9pZCBsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRz
dCk7Ci0gICAgdm9pZCBzdG9yZVdhc21Db250ZXh0KEdQUlJlZyBzcmMpOwotICAgIHN0YXRpYyBi
b29sIGxvYWRXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKLSAgICBzdGF0
aWMgYm9vbCBzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOworICAg
IHZvaWQgbG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIGRzdCk7CisgICAgdm9pZCBzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYyk7CisgICAgc3RhdGljIGJvb2wgbG9hZFdh
c21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgc3RhdGlj
IGJvb2wgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rlcigp
OwogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7Cisg
ICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwo
R1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKTsKIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCmluZGV4IDVlY2YzYTYuLjdjOTRjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hl
Y2soKQogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVk
SW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNv
bHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7
CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVTYXZlc0Zy
b21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsK
KyAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgc2tpcE9wdGltaXplLmFw
cGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKSk7CkBAIC04ODUsNyArODg1
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogICAgIGlm
ICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAg
ICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwog
Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9u
SGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFu
ZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogCkBAIC05MDUsNyArOTA1LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogICAgICAgICBtX2V4Y2VwdGlv
bkhhbmRsZXIgPSBsYWJlbCgpOwogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMp
OwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0
aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAo
dGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmNwcAppbmRleCBjYTJkYjhjLi5mMjAxOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw4ICs1Niw4IEBAIHZvaWQgZ2Vu
ZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBVbndpbmRTdGFydCB1bndp
bmRTdGFydCkKICAgICAKICAgICBFeGVjU3RhdGUqIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNh
bGxGcmFtZTsKICAgICBpZiAodW53aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7
Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlG
cmFtZTsKLSAgICAgICAgc2hhZG93Q2hpY2tlblRvcEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1l
ID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgfQogICAgIHZtLT5zaGFk
b3dDaGlja2VuKCkubG9nKCp2bSwgc2hhZG93Q2hpY2tlblRvcEZyYW1lLCBTaGFkb3dDaGlja2Vu
OjpQYWNrZXQ6OnRocm93UGFja2V0KCkpOwogICAgIApAQCAtODQsNyArODQsNyBAQCB2b2lkIGdl
bmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgVW53aW5kU3RhcnQgdW53
aW5kU3RhcnQpCiAgICAgfSBlbHNlCiAgICAgICAgIGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRD
b2RlUHRyKGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKTsKICAgICAKLSAgICBBU1NFUlQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZt
LT50b3BWTUVudHJ5RnJhbWUpKTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
Y2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BFbnRyeUZyYW1lKSk7
CiAKICAgICB2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPSBjYWxsRnJhbWU7CiAgICAgdm0tPnRhcmdl
dE1hY2hpbmVQQ0ZvclRocm93ID0gY2F0Y2hSb3V0aW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggOWI0MTY2YS4uY2I2NGIxMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFT
U0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVn
VDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBy
ZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CkBAIC01MzQsNyArNTM0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBW
TTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTk1
Miw3ICs5NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaQogICAgIGlmIChjYW5CZU9wdGlt
aXplZCgpKSB7CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgICAgICBjb3B5Q2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CiAg
ICAgICAgIEp1bXAgbm9PcHRpbWl6ZWRFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJu
VmFsdWVHUFIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCmluZGV4IGExMjI4ZDMuLjYwN2E0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNv
bT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc2NSw3ICs3NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NF
UlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0
TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOwogICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVn
VDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwpAQCAtODI2LDcgKzgyNiw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVzdG9yZUNhbGxlZVNhdmVz
RnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bSgpLT50b3BFbnRyeUZy
YW1lKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIC8vIG9w
ZXJhdGlvblRocm93IHJldHVybnMgdGhlIGNhbGxGcmFtZSBmb3IgdGhlIGhhbmRsZXIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCBjMDRjZGM0Li5l
NjM5OTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
QEAgLTEwMywxNCArMTAzLDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayoKICAgICBWTSogdm0g
PSBjb2RlQmxvY2stPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlG
cmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1F
bnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJh
bWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5
RnJhbWUpOwogICAgIGlmICghY2FsbGVyRnJhbWUpIHsKICAgICAgICAgY2FsbGVyRnJhbWUgPSBl
eGVjOwotICAgICAgICB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOworICAgICAg
ICBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgfQogCi0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZy
YW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVu
dHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
ZXJGcmFtZSwgc2NvcGUpOwogfQogCkBAIC0xMjAsMTAgKzEyMCwxMCBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGhyb3dEaXZpZGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlG
cmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1F
bnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJh
bWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5
RnJhbWUpOwogCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZt
LCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJX
aXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICBFcnJv
ckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSgqdm0pOwogICAgIHRocm93RXhjZXB0aW9uKGNhbGxl
ckZyYW1lLCBzY29wZSwgY3JlYXRlRXJyb3IoY2FsbGVyRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiRGl2
aXNpb24gYnkgemVybyBvciBkaXZpc2lvbiBvdmVyZmxvdy4iKSkpOwogfQpAQCAtMTMzLDEwICsx
MzMsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93T3V0T2ZCb3VuZHNBY2Nl
c3NFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAotICAgIFZNRW50cnlGcmFt
ZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZy
YW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogCi0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZy
YW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVu
dHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29w
ZSgqdm0pOwogICAgIHRocm93RXhjZXB0aW9uKGNhbGxlckZyYW1lLCBzY29wZSwgY3JlYXRlRXJy
b3IoY2FsbGVyRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiT3V0LW9mLWJvdW5kcyBhY2Nlc3MuIikpKTsK
IH0KQEAgLTE0OSw5ICsxNDksOSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2soRXhlY1N0YXRlKiBleGVjKQogCiAgICAgaW50MzJfdCBtaXNzaW5nQXJnQ291
bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgKnZtLCBDb2RlRm9yQ2Fs
bCk7CiAgICAgaWYgKG1pc3NpbmdBcmdDb3VudCA8IDApIHsKLSAgICAgICAgVk1FbnRyeUZyYW1l
KiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgICAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKLSAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUs
IGNhbGxlckZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BF
bnRyeUZyYW1lOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVy
RnJhbWUoZW50cnlGcmFtZSk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0
b3JlIHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgICAgICB0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUpOwogICAgIH0KIApAQCAtMTY1LDkg
KzE2NSw5IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNo
ZWNrKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29t
bW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsICp2bSwgQ29kZUZvckNvbnN0cnVjdCk7
CiAgICAgaWYgKG1pc3NpbmdBcmdDb3VudCA8IDApIHsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2
bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgICAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKLSAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNh
bGxlckZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRy
eUZyYW1lOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJh
bWUoZW50cnlGcmFtZSk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3Jl
IHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgICAgICB0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDkyZTQyYjEuLmU0Mzk2
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAK
QEAgLTY2LDcgKzY2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiAgICAgLy8gZXZlbiB0aG91Z2ggd2Ugd29u
J3QgdXNlIGl0LgogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKIAotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50cnlGcmFtZSk7CiAK
ICAgICBqaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZW5lcmF0b3IoVk0qIHZtLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGsKICAgICAvLyBIYW5kbGUgYW4gZXhjZXB0aW9uCiAgICAgZXhjZXB0aW9uSGFu
ZGxlci5saW5rKCZqaXQpOwogCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRyeUZyYW1lKTsKICAgICBqaXQuc3RvcmVQ
dHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7
CiAKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApp
bmRleCBlOWEwZDJhLi4zNTAzNWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMTg3Miw4ICsx
ODcyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U3RkRXJy
KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gcHJpbnQKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gdm0u
dG9wVk1FbnRyeUZyYW1lOwotICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxs
ZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUg
PSB2bS50b3BFbnRyeUZyYW1lOworICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUgPSBleGVjLT5j
YWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBpZiAoY2FsbGVyRnJhbWUpCiAgICAgICAg
IHZtLmludGVycHJldGVyLT5kdW1wQ2FsbEZyYW1lKGNhbGxlckZyYW1lKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggNzM1ZTcxYi4uMzY2NGUyMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC00ODEs
MTMgKzQ4MSwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5
RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZt
RW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLnRvcEVudHJ5
RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHRv
cEVudHJ5RnJhbWUpOwogICAgIGlmICghY2FsbGVyRnJhbWUpIHsKICAgICAgICAgY2FsbGVyRnJh
bWUgPSBleGVjOwotICAgICAgICB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7Cisg
ICAgICAgIHRvcEVudHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOwogICAgIH0KLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIoJnZtLCB2bUVudHJ5RnJhbWUsIGNh
bGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIo
JnZtLCB0b3BFbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAKICAgICBMTElOVF9TRVRfUENfRk9S
X1NUVUJTKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3Bw
CmluZGV4IDM2ZjY0ODYuLjUyOTY3ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFRodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50VGh1bmtzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3ICsxMTYsNyBAQCBFbmNvZGVkSlNWYWx1
ZSB2bUVudHJ5VG9OYXRpdmUodm9pZCogZXhlY3V0YWJsZUFkZHJlc3MsIFZNKiB2bSwgUHJvdG9D
YWxsRnJhbWUqCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1leHRl
cm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoVk1FbnRyeUZyYW1lKiBlbnRyeUZy
YW1lKQorZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKEVudHJ5RnJhbWUq
IGVudHJ5RnJhbWUpCiB7CiAgICAgLy8gVGhlIEMgTG9vcCBkb2Vzbid0IGhhdmUgYW55IGNhbGxl
ZSBzYXZlIHJlZ2lzdGVycywgc28gdGhlIFZNRW50cnlSZWNvcmQgaXMgYWxsb2NhdGVkIGF0IHRo
ZSBiYXNlIG9mIHRoZSBmcmFtZS4KICAgICBpbnRwdHJfdCBzdGFja0FsaWdubWVudCA9IHN0YWNr
QWxpZ25tZW50Qnl0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCA1ZGRlNjY0Li43YmYxZWNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBA
IC02NTksNyArNjU5LDcgQEAgZW5kCiAKIG1hY3JvIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAgICAgaWYgQVJNNjQgb3IgWDg2XzY0IG9y
IFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHRlbXAK
KyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1dLCB0ZW1wCiAgICAgICAgIHZtRW50
cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBWTUVudHJ5UmVjb3JkOjpjYWxsZWVT
YXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAgICAgICAgIGlmIEFSTTY0CkBAIC03MDEs
NyArNzAxLDcgQEAgZW5kCiAKIG1hY3JvIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKICAgICBpZiBBUk02NCBvciBYODZfNjQgb3Ig
WDg2XzY0X1dJTgotICAgICAgICBsb2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdGVtcAor
ICAgICAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0sIHRlbXAKICAgICAgICAgdm1FbnRy
eVJlY29yZCh0ZW1wLCB0ZW1wKQogICAgICAgICBsZWFwIFZNRW50cnlSZWNvcmQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnNCdWZmZXJbdGVtcF0sIHRlbXAKICAgICAgICAgaWYgQVJNNjQKQEAgLTExNDQs
NyArMTE0NCw3IEBAIGlmIG5vdCBDX0xPT1AKICAgICAgICAgc3RvcmVwIGFkZHJlc3MsIFZNOjpt
X2xhc3RTdGFja1RvcFt2bV0KICAgICAgICAgcmV0CiAgICAgCi0gICAgIyBWTUVudHJ5UmVjb3Jk
KiB2bUVudHJ5UmVjb3JkKGNvbnN0IFZNRW50cnlGcmFtZSogZW50cnlGcmFtZSkKKyAgICAjIFZN
RW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoY29uc3QgRW50cnlGcmFtZSogZW50cnlGcmFtZSkK
ICAgICBnbG9iYWwgX3ZtRW50cnlSZWNvcmQKICAgICBfdm1FbnRyeVJlY29yZDoKICAgICAgICAg
aWYgWDg2IG9yIFg4Nl9XSU4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggMTE0YTk3OC4uMzMwOTBlMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTEyNSw4ICsxMjUsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFr
ZUNhbGwpCiAgICAgc3RvcmVwIHZtLCBWTUVudHJ5UmVjb3JkOjptX3ZtW3NwXQogICAgIGxvYWRw
IFZNOjp0b3BDYWxsRnJhbWVbdm1dLCB0NAogICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6
bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXQotICAgIGxvYWRwIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1d
LCB0NAotICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1l
W3NwXQorICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwgdDQKKyAgICBzdG9yZXAgdDQs
IFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdCiAKICAgICAjIEFsaWduIHN0
YWNrIHBvaW50ZXIKICAgICBpZiBYODZfV0lOIG9yIE1JUFMKQEAgLTE4OSw4ICsxODksOCBAQCBt
YWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtz
cF0sIHQ1CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwg
dDQKICAgICBzdG9yZXAgdDQsIFZNOjp0b3BDYWxsRnJhbWVbdDVdCi0gICAgbG9hZHAgVk1FbnRy
eVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZN
Ojp0b3BWTUVudHJ5RnJhbWVbdDVdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
RW50cnlGcmFtZVtzcF0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTTo6dG9wRW50cnlGcmFtZVt0NV0K
IAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXpl
LCB0NQpAQCAtMjQxLDcgKzI0MSw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKIAogLmNv
cHlBcmdzRG9uZToKICAgICBzdG9yZXAgc3AsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgc3Rv
cmVwIGNmciwgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAgICBzdG9yZXAgY2ZyLCBWTTo6dG9w
RW50cnlGcmFtZVt2bV0KIAogICAgIG1ha2VDYWxsKGVudHJ5LCB0MywgdDQpCiAKQEAgLTI1NSw4
ICsyNTUsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJl
Y29yZDo6bV92bVtzcF0sIHQ1CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2Fs
bEZyYW1lW3NwXSwgdDQKICAgICBzdG9yZXAgdDQsIFZNOjp0b3BDYWxsRnJhbWVbdDVdCi0gICAg
bG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDQKLSAgICBz
dG9yZXAgdDQsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDVdCisgICAgbG9hZHAgVk1FbnRyeVJlY29y
ZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTTo6dG9wRW50
cnlGcmFtZVt0NV0KIAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdp
c3RlclNhdmVTaXplLCB0NQpAQCAtMzI0LDggKzMyNCw4IEBAIF9oYW5kbGVVbmNhdWdodEV4Y2Vw
dGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ZtW3NwXSwgdDMKICAgICBsb2FkcCBW
TUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3BdLCB0NQogICAgIHN0b3JlcCB0NSwg
Vk06OnRvcENhbGxGcmFtZVt0M10KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BW
TUVudHJ5RnJhbWVbc3BdLCB0NQotICAgIHN0b3JlcCB0NSwgVk06OnRvcFZNRW50cnlGcmFtZVt0
M10KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3NwXSwgdDUK
KyAgICBzdG9yZXAgdDUsIFZNOjp0b3BFbnRyeUZyYW1lW3QzXQogCiAgICAgaWYgQVJNdjcKICAg
ICAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHQzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4
IGUzN2EwZjYuLjk1OTA5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0xMjksOCArMTI5LDggQEAgbWFjcm8g
ZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29yZDo6bV92bVtz
cF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9yZXAgdDQsIFZN
RW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBWTTo6dG9wVk1F
bnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRv
cFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0sIHQ0Cisg
ICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3NwXQogCiAg
ICAgbG9hZGkgUHJvdG9DYWxsRnJhbWU6OnBhZGRlZEFyZ0NvdW50W3Byb3RvQ2FsbEZyYW1lXSwg
dDQKICAgICBhZGRwIENhbGxGcmFtZUhlYWRlclNsb3RzLCB0NCwgdDQKQEAgLTE3MSw4ICsxNzEs
OCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6
bV92bVt0NF0sIHZtCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1l
W3Q0XSwgZXh0cmFUZW1wUmVnCiAgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcENhbGxG
cmFtZVt2bV0KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVb
dDRdLCBleHRyYVRlbXBSZWcKLSAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wVk1FbnRy
eUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVb
dDRdLCBleHRyYVRlbXBSZWcKKyAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wRW50cnlG
cmFtZVt2bV0KIAogICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCBzcAogCkBA
IC0yMjAsNyArMjIwLDcgQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGVsc2UKICAg
ICAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQogICAgIGVuZAotICAgIHN0b3Jl
cCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAgc3RvcmVwIGNmciwgVk06OnRvcEVu
dHJ5RnJhbWVbdm1dCiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudChleHRyYVRlbXBS
ZWcsIDB4YmFkMGRjMDIpCiAKQEAgLTIzNiw4ICsyMzYsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFr
ZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVt0NF0sIHZtCiAgICAgbG9hZHAg
Vk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3Q0XSwgdDIKICAgICBzdG9yZXAgdDIs
IFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
Vk1FbnRyeUZyYW1lW3Q0XSwgdDIKLSAgICBzdG9yZXAgdDIsIFZNOjp0b3BWTUVudHJ5RnJhbWVb
dm1dCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0NF0sIHQy
CisgICAgc3RvcmVwIHQyLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIHN1YnAgY2ZyLCBD
YWxsZWVSZWdpc3RlclNhdmVTaXplLCBzcAogCkBAIC0yNzYsNyArMjc2LDYgQEAgbWFjcm8gbWFr
ZUhvc3RGdW5jdGlvbkNhbGwoZW50cnksIHRlbXApCiAgICAgZW5kCiBlbmQKIAotCiBfaGFuZGxl
VW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCiAgICAgYW5kcCBN
YXJrZWRCbG9ja01hc2ssIHQzCkBAIC0yOTEsOCArMjkwLDggQEAgX2hhbmRsZVVuY2F1Z2h0RXhj
ZXB0aW9uOgogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bdDJdLCB0MwogICAgIGxvYWRw
IFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0Ml0sIGV4dHJhVGVtcFJlZwogICAg
IHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3QyXSwgZXh0cmFUZW1wUmVnCi0gICAg
c3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcFZNRW50cnlGcmFtZVt0M10KKyAgICBsb2FkcCBW
TUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3QyXSwgZXh0cmFUZW1wUmVnCisgICAg
c3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcEVudHJ5RnJhbWVbdDNdCiAKICAgICBzdWJwIGNm
ciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAppbmRleCBhNWE1M2M2Li4yYTJiYmRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyB2
b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgICAgICBPcHRpb25zOjp1c2VXZWJB
c3NlbWJseSgpID0gZmFsc2U7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5KCkp
Ci0gICAgICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdFRMUygpID0gZmFsc2U7CisgICAg
ICAgIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpID0gZmFsc2U7CiAgICAgCiAg
ICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1
bXBERkdEaXNhc3NlbWJseSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgK
aW5kZXggM2NlYzU1Mi4uODQ3NWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaApAQCAtNDY3LDggKzQ2Nyw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3Ry
aW5nOwogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcywg
MTI4LCBOb3JtYWwsICJXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHVzZSA0R2lCIHZpcnR1YWwg
YWxsb2NhdGlvbnMsIHBsdXMgYSByZWR6b25lIChjb3VudGVkIGFzIG11bHRpcGxlIG9mIDY0S2lC
IFdlYkFzc2VtYmx5IHBhZ2VzKSBhdCB0aGUgZW5kIHRvIGNhdGNoIHJlZytpbW0gYWNjZXNzZXMg
d2hpY2ggZXhjZWVkIDMyLWJpdCwgYW55dGhpbmcgYmV5b25kIHRoZSByZWR6b25lIGlzIGV4cGxp
Y2l0bHkgYm91bmRzLWNoZWNrZWQiKSBcCiAgICAgdihib29sLCBjcmFzaElmV2ViQXNzZW1ibHlD
YW50RmFzdE1lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgY3Jhc2ggaWYg
d2UgY2FuJ3Qgb2J0YWluIGZhc3QgbWVtb3J5IGZvciB3YXNtLiIpIFwKICAgICB2KHVuc2lnbmVk
LCBtYXhOdW1XZWJBc3NlbWJseUZhc3RNZW1vcmllcywgNCwgTm9ybWFsLCBudWxscHRyKSBcCi0g
ICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUs
IHdlIHdpbGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1sb2NhbCBzdG9yYWdlIGlmIGF2YWlsYWJs
ZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4iKSBcCi0gICAgdihib29sLCB1c2VGYXN0VExTRm9y
V2FzbUNvbnRleHQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUgKGFuZCBmYXN0IFRMUyBpcyBlbmFi
bGVkKSwgd2Ugd2lsbCBzdG9yZSBjb250ZXh0IGluIGZhc3QgVExTLiBJZiBmYWxzZSwgd2Ugd2ls
bCBwaW4gaXQgdG8gYSByZWdpc3Rlci4iKSBcCisgICAgdihib29sLCB1c2VGYXN0VExTRm9yV2Fz
bUNvbnRleHQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgc3RvcmUgY29udGV4dCBp
biBmYXN0IFRMUy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAog
ICAgIHYoYm9vbCwgdXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzLCB0cnVlLCBOb3Jt
YWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBDYWxsTGlua0luZm8gdG8gaW5saW5lIGNhY2hlIFdh
c20gdG8gSlMgY2FsbHMuIikgXAogICAgIHYoYm9vbCwgdXNlT2JqZWN0UmVzdFNwcmVhZCwgdHJ1
ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFibGUgT2JqZWN0IFJlc3QvU3ByZWFkIGZl
YXR1cmUuIikgXAogICAgIHYoYm9vbCwgdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nLCB0cnVl
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBvdXIgbm9ybWFsIGFycmF5IGFsbG9jYXRp
b24gcHJvZmlsaW5nLiBJZiBmYWxzZSwgdGhlIGFsbG9jYXRpb24gcHJvZmlsZSB3aWxsIGFsd2F5
cyBjbGFpbSB0byBiZSB1bmRlY2lkZWQuIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKaW5kZXggYTRiZTk1Yi4uM2JjZjZjMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIEZyYW1lV2Fsa2VyKFZNJiB2bSwgRXhl
Y1N0YXRlKiBjYWxsRnJhbWUsIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBjb2RlQmxvY2tTZXRMb2Nr
ZXIsIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBtYWNoaW5lVGhyZWFkc0xvY2tlcikKICAgICAgICAg
OiBtX3ZtKHZtKQogICAgICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKLSAgICAgICAgLCBt
X3ZtRW50cnlGcmFtZSh2bS50b3BWTUVudHJ5RnJhbWUpCisgICAgICAgICwgbV9lbnRyeUZyYW1l
KHZtLnRvcEVudHJ5RnJhbWUpCiAgICAgICAgICwgbV9jb2RlQmxvY2tTZXRMb2NrZXIoY29kZUJs
b2NrU2V0TG9ja2VyKQogICAgICAgICAsIG1fbWFjaGluZVRocmVhZHNMb2NrZXIobWFjaGluZVRo
cmVhZHNMb2NrZXIpCiAgICAgewpAQCAtMTMwLDcgKzEzMCw3IEBAIHByb3RlY3RlZDoKICAgICBT
VVBQUkVTU19BU0FOCiAgICAgdm9pZCBhZHZhbmNlVG9QYXJlbnRGcmFtZSgpCiAgICAgewotICAg
ICAgICBtX2NhbGxGcmFtZSA9IG1fY2FsbEZyYW1lLT51bnNhZmVDYWxsZXJGcmFtZShtX3ZtRW50
cnlGcmFtZSk7CisgICAgICAgIG1fY2FsbEZyYW1lID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxl
ckZyYW1lKG1fZW50cnlGcmFtZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc0F0VG9wKCkgY29uc3QK
QEAgLTE4OCw3ICsxODgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBWTSYgbV92bTsKICAgICBFeGVj
U3RhdGUqIG1fY2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFtZSogbV92bUVudHJ5RnJhbWU7Cisg
ICAgRW50cnlGcmFtZSogbV9lbnRyeUZyYW1lOwogICAgIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBt
X2NvZGVCbG9ja1NldExvY2tlcjsKICAgICBjb25zdCBBYnN0cmFjdExvY2tlciYgbV9tYWNoaW5l
VGhyZWFkc0xvY2tlcjsKICAgICBib29sIG1fYmFpbGluZ091dCB7IGZhbHNlIH07CkBAIC01Nzcs
NyArNTc3LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNr
VHJhY2VzKCkKICAgICAgICAgICAgICAgICAvLyBXZSByZXVzZSBMTEludCBDb2RlQmxvY2tzIGZv
ciB0aGUgYmFzZWxpbmUgSklULCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBib3RoIGppdCB0eXBl
cy4KICAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFsc28gYmUgZmFsc2UgZm9yIHZhcmlv
dXMgcmVhc29ucyAoa25vd24gYW5kIHVua25vd24pLCBldmVuIHRob3VnaAogICAgICAgICAgICAg
ICAgIC8vIGl0J3Mgc3VwZXIgdW5saWtlbHkuIE9uZSByZWFzb24gdGhhdCB0aGlzIGNhbiBiZSBm
YWxzZSBpcyB3aGVuIHdlIHRocm93IGZyb20gYSBERkcgZnJhbWUsCi0gICAgICAgICAgICAgICAg
Ly8gYW5kIHdlIGVuZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBhc3QgYSBWTUVudHJ5RnJhbWUsIHdl
IHdpbGwgZW5kIHVwIGV4ZWN1dGluZworICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAg
aGF2aW5nIHRvIHVud2luZCBwYXN0IGFuIEVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1
dGluZwogICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBoYW5kbGVVbmNhdWdo
dEV4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAgICAg
ICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhy
b3dTY29wZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNw
cAppbmRleCAwNmU5MzAzLi40YzY1ZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UaHJvd1Njb3BlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01NywxMyArNTcsMTMgQEAgVGhyb3dTY29wZTo6flRocm93U2Nv
cGUoKQogCiAgICAgYm9vbCB3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQgPSBmYWxzZTsKICAgICB2
b2lkKiBwcmV2aW91c1Njb3BlID0gbV9wcmV2aW91c1Njb3BlOwotICAgIHZvaWQqIHRvcFZNRW50
cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOworICAgIHZvaWQqIHRvcEVudHJ5RnJhbWUg
PSBtX3ZtLnRvcEVudHJ5RnJhbWU7CiAKLSAgICAvLyBJZiB0aGUgdG9wVk1FbnRyeUZyYW1lIHdh
cyBwdXNoZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBpbnN0YW50
aWF0ZWQsCisgICAgLy8gSWYgdGhlIHRvcEVudHJ5RnJhbWUgd2FzIHB1c2hlZCBvbiB0aGUgc3Rh
Y2sgYWZ0ZXIgdGhlIHByZXZpb3VzU2NvcGUgd2FzIGluc3RhbnRpYXRlZCwKICAgICAvLyB0aGVu
IHRoaXMgdGhyb3dTY29wZSB3aWxsIGJlIHJldHVybmluZyB0byBMTElOVCBvciBKSVQgY29kZSB0
aGF0IGFsd2F5cyBkbyBhbiBleGNlcHRpb24KICAgICAvLyBjaGVjay4gSW4gdGhhdCBjYXNlLCBz
a2lwIHRoZSBzaW11bGF0ZWQgdGhyb3cgYmVjYXVzZSB0aGUgTExJbnQgYW5kIEpJVCB3aWxsIGJl
CiAgICAgLy8gY2hlY2tpbmcgZm9yIHRoZSBleGNlcHRpb24gdGhlaXIgb3duIHdheSBpbnN0ZWFk
IG9mIGNhbGxpbmcgVGhyb3dTY29wZTo6ZXhjZXB0aW9uKCkuCi0gICAgaWYgKHRvcFZNRW50cnlG
cmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wVk1FbnRyeUZyYW1lKQorICAgIGlmICh0b3BFbnRy
eUZyYW1lICYmIHByZXZpb3VzU2NvcGUgPiB0b3BFbnRyeUZyYW1lKQogICAgICAgICB3aWxsQmVI
YW5kbGVCeUxMSW50T3JKSVQgPSB0cnVlOwogICAgIAogICAgIGlmICghd2lsbEJlSGFuZGxlQnlM
TEludE9ySklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDE4MWUzYjcu
LjNlZTUxODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTE4NCw3ICsx
ODQsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYK
ICAgICAsIHZtVHlwZSh2bVR5cGUpCiAgICAgLCBjbGllbnREYXRhKDApCi0gICAgLCB0b3BWTUVu
dHJ5RnJhbWUobnVsbHB0cikKKyAgICAsIHRvcEVudHJ5RnJhbWUobnVsbHB0cikKICAgICAsIHRv
cENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCiAgICAgLCBwcm9taXNlRGVmZXJyZWRU
aW1lcihzdGQ6Om1ha2VfdW5pcXVlPFByb21pc2VEZWZlcnJlZFRpbWVyPigqdGhpcykpCiAgICAg
LCBtX2F0b21pY1N0cmluZ1RhYmxlKHZtVHlwZSA9PSBEZWZhdWx0ID8gVGhyZWFkOjpjdXJyZW50
KCkuYXRvbWljU3RyaW5nVGFibGUoKSA6IG5ldyBBdG9taWNTdHJpbmdUYWJsZSkKQEAgLTM2OCw3
ICszNjgsNyBAQCBWTTo6flZNKCkKICAgICBwcm9taXNlRGVmZXJyZWRUaW1lci0+c3RvcFJ1bm5p
bmdUYXNrcygpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoV2FzbTo6ZXhpc3Rp
bmdXb3JrbGlzdE9yTnVsbCgpKQotICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLnN0b3BB
bGxQbGFuc0ZvclZNKCp0aGlzKTsKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5zdG9w
QWxsUGxhbnNGb3JDb250ZXh0KHdhc21Db250ZXh0KTsKICNlbmRpZgogICAgIGlmIChVTkxJS0VM
WShtX3dhdGNoZG9nKSkKICAgICAgICAgbV93YXRjaGRvZy0+d2lsbERlc3Ryb3lWTSh0aGlzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDk1NTg1OTQuLmQyMGUzOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlRl
bXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNp
bmNsdWRlICJWTVRyYXBzLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJX
YXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CkBAIC0zMjksMTQgKzMzMCwxNSBAQCBwdWJs
aWM6CiAKICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENsaWVudERhdGEqIGNsaWVudERhdGE7Ci0g
ICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogdG9wRW50
cnlGcmFtZTsKICAgICAvLyBOT1RFOiBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiB3aGlsZSBy
b2xsaW5nIGJhY2sgdGhlIGNhbGwgZnJhbWUsIHRoaXMgbWF5IGJlIGVxdWFsIHRvCi0gICAgLy8g
dG9wVk1FbnRyeUZyYW1lLgorICAgIC8vIHRvcEVudHJ5RnJhbWUuCiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGEgdm9pZCosIGJlY2F1c2UgaXQgbWlnaHQgbm90IHBvaW50IHRvIGEgQ2Fs
bEZyYW1lLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjA0NDEKICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZSB7IG51bGxwdHIgfTsKLSAgICAvLyBG
SVhNRTogU2F2ZSB0aGlzIHN0YXRlIGVsc2V3aGVyZSB0byBhbGxvdyBQSUMuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3NzMKLSAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIHdhc21Db250ZXh0IHsgbnVsbHB0ciB9OworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KyAgICBXYXNtOjpDb250ZXh0IHdhc21Db250ZXh0OworI2VuZGlmCiAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVy
ZVJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvclN0cnVjdHVyZTsKQEAgLTUwMSw5ICs1MDMsOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHRvcFZNRW50cnlGcmFtZU9mZnNldCgpCisgICAg
c3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcFZNRW50cnlGcmFtZSk7CisgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUpOwogICAgIH0KIAogICAgIHZvaWQg
cmVzdG9yZVByZXZpb3VzRXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IHNldEV4Y2Vw
dGlvbihleGNlcHRpb24pOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwCmluZGV4IGRlYWE0NDkuLjg3M2QzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNVHJhcHMuY3BwCkBAIC04OSw3ICs4OSw3IEBAIGlubGluZSBDYWxsRnJhbWUqIHNhbml0
aXplZFRvcENhbGxGcmFtZShDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSkKICAgICByZXR1cm4gdG9w
Q2FsbEZyYW1lOwogfQogCi1zdGF0aWMgYm9vbCBpc1NhbmVGcmFtZShDYWxsRnJhbWUqIGZyYW1l
LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBWTUVudHJ5RnJhbWUqIGVudHJ5RnJhbWUsIFN0YWNr
Qm91bmRzIHN0YWNrQm91bmRzKQorc3RhdGljIGJvb2wgaXNTYW5lRnJhbWUoQ2FsbEZyYW1lKiBm
cmFtZSwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgRW50cnlGcmFtZSogZW50cnlGcmFtZSwgU3Rh
Y2tCb3VuZHMgc3RhY2tCb3VuZHMpCiB7CiAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGZyYW1lKSA+PSByZWludGVycHJldF9jYXN0PHZvaWQqPihlbnRyeUZyYW1lKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTIxLDE4ICsxMjEsMTggQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0
YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0
YWMKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGZvdW5kQ29kZUJsb2NrID0gbnVsbHB0cjsKLSAg
ICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKKyAgICBF
bnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKIAogICAgIC8vIFdlIGRv
bid0IGhhdmUgYSBjYWxsZWUgdG8gc3RhcnQgd2l0aC4gU28sIHVzZSB0aGUgZW5kIG9mIHRoZSBz
dGFjayB0byBrZWVwIHRoZQogICAgIC8vIGlzU2FuZUZyYW1lKCkgY2hlY2tlciBiZWxvdyBoYXBw
eSBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi4gSXQgd2lsbCBzdGlsbCBjaGVjawogICAgIC8vIHRv
IGVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlzIGluIHRoZSBzdGFja0JvdW5kcy4KICAgICBDYWxs
RnJhbWUqIGNhbGxlZUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihzdGFja0Jv
dW5kcy5lbmQoKSk7CiAKLSAgICBpZiAoIXZtRW50cnlGcmFtZSB8fCAhY2FsbEZyYW1lKQorICAg
IGlmICghZW50cnlGcmFtZSB8fCAhY2FsbEZyYW1lKQogICAgICAgICByZXR1cm47IC8vIE5vdCBy
dW5uaW5nIEpTIGNvZGUuIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAog
ICAgIGRvIHsKLSAgICAgICAgaWYgKCFpc1NhbmVGcmFtZShjYWxsRnJhbWUsIGNhbGxlZUZyYW1l
LCB2bUVudHJ5RnJhbWUsIHN0YWNrQm91bmRzKSkKKyAgICAgICAgaWYgKCFpc1NhbmVGcmFtZShj
YWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBlbnRyeUZyYW1lLCBzdGFja0JvdW5kcykpCiAgICAgICAg
ICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAog
ICAgICAgICBDb2RlQmxvY2sqIGNhbmRpZGF0ZUNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CkBAIC0xNDIsOSArMTQyLDkgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJy
ZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMKICAgICAg
ICAgfQogCiAgICAgICAgIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lOwotICAgICAgICBjYWxsRnJh
bWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgICAgIGNhbGxG
cmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAKLSAgICB9IHdoaWxl
IChjYWxsRnJhbWUgJiYgdm1FbnRyeUZyYW1lKTsKKyAgICB9IHdoaWxlIChjYWxsRnJhbWUgJiYg
ZW50cnlGcmFtZSk7CiAKICAgICBpZiAoIWZvdW5kQ29kZUJsb2NrKSB7CiAgICAgICAgIC8vIFdl
IG1heSBoYXZlIGp1c3QgZW50ZXJlZCB0aGUgZnJhbWUgYW5kIHRoZSBjb2RlQmxvY2sgcG9pbnRl
ciBpcyBub3QKQEAgLTE4MSwxNyArMTgxLDE3IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNv
ZGVCbG9ja3NPblN0YWNrKExvY2tlcjxMb2NrPiYsIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lCiAK
ICAgICBtX25lZWRUb0ludmFsaWRhdGVkQ29kZUJsb2NrcyA9IGZhbHNlOwogCi0gICAgVk1FbnRy
eUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bSgpLnRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZy
YW1lKiBlbnRyeUZyYW1lID0gdm0oKS50b3BFbnRyeUZyYW1lOwogICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gdG9wQ2FsbEZyYW1lOwogCi0gICAgaWYgKCF2bUVudHJ5RnJhbWUpCisgICAgaWYg
KCFlbnRyeUZyYW1lKQogICAgICAgICByZXR1cm47IC8vIE5vdCBydW5uaW5nIEpTIGNvZGUuIE5v
dGhpbmcgdG8gaW52YWxpZGF0ZS4KIAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBp
ZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5
cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNv
bkR1ZVRvVk1UcmFwcyk7Ci0gICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUodm1FbnRyeUZyYW1lKTsKKyAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZShlbnRyeUZyYW1lKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCBhZDdkNjIxLi5hZjZjZmU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBA
IC00OSw4ICs0OSw2IEBACiAjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIK
LSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVu
dGlvbi5oIgpAQCAtMTc4LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBm
YWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBC
M0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJu
YWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUs
IENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqKTsK
KyAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwg
SW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9y
eU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTI0Nyw3
ICsyNDUsNyBAQCBwcml2YXRlOgogCiAgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4
dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKIAotICAgIHZv
aWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwor
ICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFzaWNCbG9j
ayosIFZhbHVlKik7CiAgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25z
dCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiwgQmFzaWNC
bG9jayopOwogCiAgICAgT3JpZ2luIG9yaWdpbigpOwpAQCAtMjY3LDcgKzI2NSw3IEBAIHByaXZh
dGU6CiAgICAgSW5zZXJ0aW9uU2V0IG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXM7CiAgICAgR1BS
UmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV9tZW1v
cnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9OwotICAgIEdQUlJlZyBtX3dhc21Db250ZXh0R1BS
IHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIg
eyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OwogCiAg
ICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1ZSB7IG51bGxwdHIgfTsgLy8gQWx3YXlzIHVzZSB0aGUg
YWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6
ZWQgd2hlbiB1c2VkLgpAQCAtMjkxLDM3ICsyODksMzcgQEAgaW50MzJfdCBCM0lSR2VuZXJhdG9y
OjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9m
ZnMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
YXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJn
KQordm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9jZWR1
cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJnKQogewotICAgIGlmICh1c2VG
YXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewog
ICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKLSAgICAgICAgaWYgKEND
YWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkK
KyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNN
YWNyb1NjcmF0Y2hSZWdpc3RlcigpKQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihS
ZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgICAgICBwYXRjaHBvaW50
LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsK
ICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
LSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1Nj
cmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KHBhcmFt
c1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5z
dGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgICAgIH0p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRv
V2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0
b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgIC8v
IEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3Rh
bmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUg
aXQgaW4gdGhlIGNhbGxlciBzaWRlLgogICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2lu
ZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0
ZXIuCiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CiAgICAgRWZmZWN0cyBl
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1
ZTsKICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7Ci0gICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVn
aXN0ZXJTZXQobV93YXNtQ29udGV4dEdQUikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRl
KFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOwogICAgIHBhdGNocG9pbnQt
PmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAgIEdQ
UlJlZyB3YXNtQ29udGV4dEdQUiA9IG1fd2FzbUNvbnRleHRHUFI7CisgICAgR1BSUmVnIHdhc21D
b250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKLSAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3By
KCksIHdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdh
c21Db250ZXh0SW5zdGFuY2VHUFIpOwogICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29t
cGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGll
clVwQ291bnQqIHRpZXJVcCkKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0
aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGls
YXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBU
aHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9pbmZvKGluZm8p
CiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9u
TW9kZSkKQEAgLTMzOSw5ICszMzcsOSBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgIG1f
bWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgbV9wcm9j
LnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CiAKLSAgICBtX3dhc21Db250ZXh0R1BSID0g
cGlubmVkUmVncy53YXNtQ29udGV4dFBvaW50ZXI7Ci0gICAgaWYgKCF1c2VGYXN0VExTRm9yQ29u
dGV4dCgpKQotICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEdQUik7Cisg
ICAgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3Rh
bmNlUG9pbnRlcjsKKyAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgbV9w
cm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAKICAgICBpZiAobW9k
ZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKICAgICAgICAgQVNTRVJUKCFwaW5uZWRSZWdz
LnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CkBAIC0zNTAsNiArMzQ4LDkgQEAgQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihyZWdJbmZv
LnNpemVSZWdpc3Rlcik7CiAgICAgfQogCisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKKyAg
ICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNt
RXhjZXB0aW9uKTsKKwogICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3Byb2Muc2V0
V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBw
aW5uZWRHUFIpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKQEAgLTM2Myw2ICszNjQsMTYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9j
ZWR1cmUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVj
ayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAg
fSk7CisKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2Rl
OjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9y
eU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgLy8gTW9zdCBtZW1vcnkgYWNjZXNzZXMgaW4gc2ln
bmFsaW5nIG1vZGUgZG9uJ3QgZG8gYW4gZXhwbGljaXQgZXhjZXB0aW9uIGNoZWNrIGJlY2F1c2Ug
dGhleSBjYW4gcmVseSBvbiBmYXVsdCBoYW5kbGluZyB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBh
Y2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZSB0aHVuayB0
byBleGlzdCBzbyB0aGF0IGl0IGNhbiBqdW1wIHRvIHRoYXQgdGh1bmsuCisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21X
YXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwg
bV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwpAQCAtMzczLDEyICszODQsMTIgQEAg
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gc3RhY2tP
dmVyZmxvd0NoZWNrOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVSZWdp
c3RlcihmcmFtZVBvaW50ZXIpOwogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAgICAgaWYgKCF1c2VG
YXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNt
VG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHQgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJl
c3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAg
ICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
QmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdp
c3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRo
ZSBjYWxsZXIgc2lkZS4KICAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2lu
ZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0
ZXIuCiAgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVk
ID0gZmFsc2U7CiAgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQ
aW5uZWQgPSB0cnVlOwotICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25z
dHJhaW50ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0R1BSKTsKKyAgICAgICAgICAgIHN0
YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNt
Q29udGV4dEluc3RhbmNlR1BSKTsKICAgICAgICAgfQogICAgICAgICBzdGFja092ZXJmbG93Q2hl
Y2stPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDI7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVj
ay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewpAQCAtNDAxLDcgKzQxMiw3IEBAIEIzSVJHZW5l
cmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2Nl
ZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dDaGVjayA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6
ZSgpOwogICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21ha2VzQ2FsbHMg
fHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5lZWRVbmRlcmZs
b3dDaGVjazsKIAotICAgICAgICAgICAgR1BSUmVnIGNvbnRleHQgPSB1c2VGYXN0VExTRm9yQ29u
dGV4dCgpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEdQUjsKKyAgICAgICAgICAg
IEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyBwYXJhbXNb
MF0uZ3ByKCkgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAKICAgICAgICAgICAgIC8vIFRo
aXMgYWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIg
ZnJhbWUgc2l6ZSBpcyB3aXRoaW4KICAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNl
IHRoZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCkBAIC00MTEs
MTAgKzQyMiwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKIAotICAgICAgICAgICAgICAgIGlm
ICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0
VExTKCkpCisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShj
b250ZXh0SW5zdGFuY2UpOwogCi0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGNvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgp
KSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRTdGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CiAgICAg
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCkBAIC00MjMsMTAg
KzQzNCwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9uTGFiZWwo
VGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1
c2VGYXN0VExTKCkpIHsKICAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVjayBpcyBu
ZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3Qu
Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dT
Y3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoY29udGV4
dCk7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxs
b3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBkb24ndCBh
Y3R1YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRjaHBvaW50
IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFjayBjaGVj
aykgd2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KICAgICAgICAgICAgIH0K
QEAgLTQzOCw3ICs0NDksNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogCiB2b2lkIEIzSVJH
ZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9yeUluZm9y
bWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Js
b2NrKiBibG9jaykKIHsKLSAgICByZXN0b3JlV2FzbUNvbnRleHQocHJvYywgYmxvY2ssIGluc3Rh
bmNlKTsKKyAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwcm9jLCBibG9jaywgaW5zdGFu
Y2UpOwogCiAgICAgaWYgKCEhbWVtb3J5KSB7CiAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVy
SW5mbyogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNDU4LDEy
ICs0NjksMTIgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxT
dGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3IKIAogICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBHUFJSZWcg
YmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7
CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdp
c3RlcnM7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwogICAgICAg
ICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBj
b2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXpl
IHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9m
U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRP
ZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZz
ZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgaml0LmFkZDY0
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwogICAgICAg
ICB9KTsKQEAgLTU0MSwyNCArNTUyLDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFj
aGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01l
bW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAogewotICAgIGludDMyX3QgKCpncm93TWVtb3J5KSAoQ29udGV4dCosIGludDMy
X3QpID0gW10gKENvbnRleHQqIHdhc21Db250ZXh0LCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90
IHsKLSAgICAgICAgVk0mIHZtID0gKndhc21Db250ZXh0LT52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgSlNXZWJBc3NlbWJseU1l
bW9yeSogd2FzbU1lbW9yeSA9IHdhc21Db250ZXh0LT5tZW1vcnkoKTsKLQorICAgIGludDMyX3Qg
KCpncm93TWVtb3J5KShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBpbnQzMl90KSA9IFtdIChKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsK
ICAgICAgICAgaWYgKGRlbHRhIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAg
ICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IGZhbHNlOwotICAgICAgICAv
LyBncm93KCkgZG9lcyBub3QgcmVxdWlyZSBFeGVjU3RhdGUqIGlmIGl0IGRvZXNuJ3QgdGhyb3cg
ZXhjZXB0aW9ucy4KLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbnVsbHB0cjsKLSAgICAgICAg
UGFnZUNvdW50IHJlc3VsdCA9IHdhc21NZW1vcnktPmdyb3codm0sIGV4ZWMsIHN0YXRpY19jYXN0
PHVpbnQzMl90PihkZWx0YSksIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7Ci0gICAg
ICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgICAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYXV0byBncm93biA9IGluc3RhbmNl
LT5pbnRlcm5hbE1lbW9yeSgpLmdyb3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICgh
Z3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAg
ICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAg
ICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAg
ICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAg
ICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAg
ICByZXR1cm4gcmVzdWx0LnBhZ2VDb3VudCgpOworICAgICAgICByZXR1cm4gZ3Jvd24udmFsdWUo
KS5wYWdlQ291bnQoKTsKICAgICB9OwogCiAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSwKQEAgLTU3MiwxMyAr
NTgxLDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlw
ZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAogYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKLSAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFu
Y2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mTWVtb3J5KCkpKTsKKyAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSk7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihkZWNsdHlwZShzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihudWxscHRyKS0+
bWVtb3J5KCktPm1lbW9yeSgpLnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2Vu
IHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBt
ZW1vcnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNl
dE9mU2l6ZSgpKSk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nh
c3Q8V2FzbTo6TWVtb3J5Kj4obnVsbHB0ciktPnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCks
ICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKKyAgICBWYWx1ZSogc2l6ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9y
aWdpbigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KFdhc206Ok1lbW9yeTo6b2Zm
c2V0T2ZTaXplKCkpKTsKICAgICAKICAgICBjb25zdGV4cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9
IDE2OwotICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAxIDw8IHNoaWZ0
VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4i
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlm
dFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3Qu
Iik7CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKICAgICAgICAgc2l6ZSwgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNoaWZ0VmFsdWUpKTsK
IApAQCAtMTA2OSwxNCArMTA3OCwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAg
IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVu
dHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCiAgICAgICAgIC8vIEZJ
WE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBw
YXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUg
QjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY2NDYyCi0gICAgICAgIFZhbHVlKiBmdW5jdGlvbkltcG9ydCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKSk7Ci0gICAg
ICAgIFZhbHVlKiBqc1R5cGVPZkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4oKSwgZnVuY3Rpb25JbXBvcnQsIHNhZmVD
YXN0PGludDMyX3Q+KEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpKTsKLSAgICAgICAgVmFs
dWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEVxdWFsLCBvcmlnaW4oKSwganNUeXBlT2ZJbXBvcnQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBXZWJBc3NlbWJseUZ1bmN0aW9uVHlw
ZSkpOworICAgICAgICBWYWx1ZSogdGFyZ2V0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAgICAgICBWYWx1
ZSogaXNXYXNtQ2FsbCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
Tm90RXF1YWwsIG9yaWdpbigpLCB0YXJnZXRJbnN0YW5jZSwgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKTsKIAogICAgICAgICBCYXNp
Y0Jsb2NrKiBpc1dhc21CbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBCYXNpY0Js
b2NrKiBpc0pTQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayog
aXNFbWJlZGRlckJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sq
IGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGlz
V2FzbUNhbGwsIEZyZXF1ZW50ZWRCbG9jayhpc1dhc21CbG9jayksIEZyZXF1ZW50ZWRCbG9jayhp
c0pTQmxvY2spKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxv
Y2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2NrKSk7CiAKICAg
ICAgICAgVmFsdWUqIHdhc21DYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0
dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1
cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7
CkBAIC0xMDk3LDE1ICsxMTA1LDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAg
VXBzaWxvblZhbHVlKiB3YXNtQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZvaWQg
PyBudWxscHRyIDogaXNXYXNtQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHdhc21DYWxsUmVzdWx0KTsKICAgICAgICAgaXNXYXNtQmxvY2stPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24pOwogCi0g
ICAgICAgIC8vIEZJWE1FOiBMZXRzIHJlbW92ZSB0aGlzIGluZGlyZWN0aW9uIGJ5IGNyZWF0aW5n
IGEgUElDIGZyaWVuZGx5IElDCisgICAgICAgIC8vIEZJWE1FOiBMZXQncyByZW1vdmUgdGhpcyBp
bmRpcmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmllbmRseSBJQwogICAgICAgICAvLyBmb3Ig
Y2FsbHMgb3V0IHRvIEpTLiBUaGlzIHNob3VsZG4ndCBiZSB0aGF0IGhhcmQgdG8gZG8uIFdlIGNv
dWxkIHByb2JhYmx5CiAgICAgICAgIC8vIGltcGxlbWVudCB0aGUgSUMgdG8gYmUgb3ZlciBXYXNt
OjpDb250ZXh0Ki4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MDM3NQotICAgICAgICBWYWx1ZSogY29kZUJsb2NrID0gaXNKU0Jsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKLSAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSkpOwotICAgICAgICBWYWx1ZSoganVt
cERlc3RpbmF0aW9uID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywK
LSAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIHNh
ZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6Om9mZnNldE9mSW1wb3J0V2Fz
bVRvSlNTdHViKGZ1bmN0aW9uSW5kZXgpKSk7Ci0gICAgICAgIFZhbHVlKiBqc0NhbGxSZXN1bHQg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBpc0pTQmxvY2ssIG9y
aWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgVmFsdWUqIGNvZGVC
bG9jayA9IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCisg
ICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgp
LCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbUNv
ZGVCbG9jaygpKSk7CisgICAgICAgIFZhbHVlKiBqdW1wRGVzdGluYXRpb24gPSBpc0VtYmVkZGVy
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNvZGVCbG9jaywgc2FmZUNhc3Q8aW50MzJfdD4oQ29k
ZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihmdW5jdGlvbkluZGV4KSkp
OworICAgICAgICBWYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbJl0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKQEAgLTExMTksOCArMTEyNyw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwKICAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9p
ZCA/IDAgOiAxXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsK
LSAgICAgICAgVXBzaWxvblZhbHVlKiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9
PSBWb2lkID8gbnVsbHB0ciA6IGlzSlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwganNDYWxsUmVzdWx0KTsKLSAgICAgICAgaXNKU0Jsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgVXBzaWxvblZhbHVlKiBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlw
ZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25W
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZW1iZWRkZXJDYWxsUmVzdWx0KTsKKyAgICAgICAgaXNF
bWJlZGRlckJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4o
KSwgY29udGludWF0aW9uKTsKIAogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKIApAQCAtMTEyOSw3ICsxMTM3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIFBoaSwgdG9CM1R5cGUocmV0dXJuVHlwZSksIG9yaWdpbigpKTsKICAgICAg
ICAgICAgIHdhc21DYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7Ci0gICAgICAgICAg
ICBqc0NhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAgICAgIGVtYmVk
ZGVyQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5z
dGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KQEAgLTExNjUs
MTcgKzExNzMsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICBtX21heE51bUpTQ2Fs
bEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUganNGdW5jdGlvbkJ1ZmZlcjsKKyAg
ICBFeHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXI7CiAgICAgRXhwcmVzc2lvblR5cGUgY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlclNpemU7CiAgICAgewogICAgICAgICBFeHByZXNzaW9uVHlwZSB0
YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCks
IHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgp
KSk7CisgICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtVGFibGUoKSkpOwogICAgICAgICBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIHRhYmxl
LCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mRnVuY3Rpb25z
KCkpKTsKLSAgICAgICAganNGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0g
ICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpv
ZmZzZXRPZkpTRnVuY3Rpb25zKCkpKTsKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQz
Ml90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSkpOworICAgICAgICBpbnN0YW5j
ZXNCdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVD
YXN0PGludDMyX3Q+KFdhc206OlRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpKSk7CiAgICAgICAg
IGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksCi0gICAgICAgICAgICB0
YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZlNpemUo
KSkpOworICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFdhc206OlRhYmxlOjpv
ZmZzZXRPZlNpemUoKSkpOwogICAgIH0KIAogICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBhcmUg
bG9va2luZyBmb3IgaXMgdmFsaWQuCkBAIC0xMTk1LDYgKzEyMDMsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PEV4cHJlc3NpbwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXIsIG9mZnNldCk7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJs
ZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxp
ZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgorICAgIC8v
IEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBj
YWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCiAgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoQ2FsbGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50MzJf
dCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpMzIiKTsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxs
ZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2Fz
dDxpbnQzMl90PihPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5k
ZXgpKSk7CiAgICAgewpAQCAtMTIyMywxOSArMTIzMiwxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJl
c3NpbwogICAgIHsKICAgICAgICAgVmFsdWUqIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVl
SW5kZXgpLAotICAgICAgICAgICAgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdyaXRl
QmFycmllcjxKU09iamVjdD4pKSk7Ci0gICAgICAgIFZhbHVlKiBqc09iamVjdCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGpzRnVuY3Rpb25CdWZmZXIsIG9mZnNldCkpOworICAg
ICAgICAgICAgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdhc206Okluc3RhbmNlKikp
KTsKKyAgICAgICAgVmFsdWUqIG5ld0NvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1ZmZlciwgb2Zmc2V0KSk7CiAKICAgICAgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJhc2lj
QmxvY2sqIGRvQ29udGV4dFN3aXRjaCA9IG1fcHJvYy5hZGRCbG9jaygpOwogCi0gICAgICAgIFZh
bHVlKiBuZXdDb250ZXh0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIGpzT2Jq
ZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZJ
bnN0YW5jZSgpKSk7Ci0gICAgICAgIFZhbHVlKiBpc1NhbWVDb250ZXh0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCi0gICAgICAgICAg
ICBuZXdDb250ZXh0LCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAgICBWYWx1ZSogaXNTYW1lQ29u
dGV4dEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBF
cXVhbCwgb3JpZ2luKCksCisgICAgICAgICAgICBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNl
VmFsdWUoKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIGlzU2FtZUNvbnRleHQs
IEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBGcmVxdWVudGVkQmxvY2soZG9Db250ZXh0
U3dpdGNoKSk7CisgICAgICAgICAgICBpc1NhbWVDb250ZXh0SW5zdGFuY2UsIEZyZXF1ZW50ZWRC
bG9jayhjb250aW51YXRpb24pLCBGcmVxdWVudGVkQmxvY2soZG9Db250ZXh0U3dpdGNoKSk7CiAK
ICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gZG9Db250ZXh0U3dpdGNoLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAgLTEyNDMs
MjYgKzEyNTAsMjYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRS
ZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwog
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0LCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG5ld0NvbnRleHRJ
bnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBH
UFJSZWcgbmV3Q29udGV4dCA9IHBhcmFtc1swXS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBv
bGRDb250ZXh0ID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRl
eHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvbGRDb250
ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwogICAg
ICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7
CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBv
aW50ZXI7Ci0gICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dCAhPSBiYXNlTWVtb3J5KTsKLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0LCBD
b250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOwotICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdD
b250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwotICAgICAgICAg
ICAgaml0LnN0b3JlV2FzbUNvbnRleHQobmV3Q29udGV4dCk7Ci0gICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBKU1dlYkFzc2VtYmx5TWVtb3J5Ki4KKyAgICAgICAg
ICAgIEFTU0VSVChuZXdDb250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1l
bW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1v
cnkqLgogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKICAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHQpOwor
ICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0
SW5zdGFuY2UpOwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsK
LSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5
LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVS
ZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9m
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbU1lbW9yeTo6dm9pZCouCisgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVt
b3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9y
eSBzaXplLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAv
LyBXYXNtOjpNZW1vcnk6OnZvaWQqLgogICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dp
dGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGlu
dWF0aW9uKTsKIApAQCAtMTMzOSwxOTQgKzEzNDYsNiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVz
cwogICAgIGRhdGFMb2dMbigpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkKLXsKLSAg
ICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpjb21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBvaW50SklU
OwotCi0gICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVuY3Rpb24+
KCk7Ci0gICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0KLSAgICAvLyBGSVhNRSBTdG9w
IHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NTMyMQotICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlv
biA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxw
dHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5zdG9yZVB0
cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIENvZGVMb2NhdGlvbkRhdGFM
YWJlbFB0ciogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsK
LSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxlZU1vdmVM
b2NhdGlvbik7Ci0gICAgfSk7Ci0KLSAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5l
ZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwotICAgIFJlZ2lzdGVyU2V0IHRvU2F2
ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1vZGUpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAg
IHVuc2lnbmVkIHRvU2F2ZVNpemUgPSB0b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCk7Ci0gICAgLy8g
VGhleSBzaG91bGQgYWxsIGJlIGNhbGxlZSBzYXZlcy4KLSAgICB0b1NhdmUuZmlsdGVyKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIEFTU0VSVCh0b1NhdmUubnVtYmVy
T2ZTZXRHUFJzKCkgPT0gdG9TYXZlU2l6ZSk7Ci0jZW5kaWYKLQotICAgIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwodG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zm
c2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJhc2VkKTsKLSAgICByZXN1bHQtPmVudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7Ci0KLSAgICB1bnNpZ25lZCB0
b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsK
LSAgICB0b3RhbEZyYW1lU2l6ZSArPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJ
bkJ5dGVzKCk7Ci0gICAgdG90YWxGcmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
OwotICAgIHVuc2lnbmVkIG51bUdQUnMgPSAwOwotICAgIHVuc2lnbmVkIG51bUZQUnMgPSAwOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBp
KyspIHsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKLSAgICAgICAg
Y2FzZSBXYXNtOjpJNjQ6Ci0gICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgaWYg
KG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOwotICAgICAgICAg
ICAgKytudW1HUFJzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6RjMy
OgotICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAg
dG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVtRlBSczsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRvdGFsRnJh
bWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
dG90YWxGcmFtZVNpemUpOwotICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0KLSAgICAvLyBXZSBzYXZlIGFsbCB0aGVzZSByZWdpc3RlcnMgcmVnYXJkbGVzcyBvZiBo
YXZpbmcgYSBtZW1vcnkgb3Igbm90LgotICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCB3ZSB1c2Ug
b25lIG9mIHRoZXNlIGFzIGEgc2NyYXRjaC4gVGhhdCBzYWlkLAotICAgIC8vIGFsbW9zdCBhbGwg
cmVhbCB3YXNtIHByb2dyYW1zIHVzZSBtZW1vcnksIHNvIGl0J3Mgbm90IHJlYWxseQotICAgIC8v
IHdvcnRoIG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIHRoYXQgdGhleSBkb24ndC4KLSAgICBmb3Ig
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkg
ewotICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0gICAgICAg
IHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKLSAgICAgICAgaml0LnN0
b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgd2FzbUNvbnRleHRHUFIgPSBwaW5u
ZWRSZWdzLndhc21Db250ZXh0UG9pbnRlcjsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgICAgIG51bUdQUnMgPSAwOwotICAgICAgICBudW1G
UFJzID0gMDsKLSAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0
ZXJzIGFmdGVyIHRoaXMuIFNvCi0gICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0
Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotCi0gICAgICAgIHB0cmRpZmZf
dCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7Ci0KLSAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBwYXNzZXMgV2FzbTo6Q29udGV4
dCogYXMgdGhlIGZpcnN0IEpTIGFyZ3VtZW50IHdoZW4gd2UncmUKLSAgICAgICAgLy8gbm90IHVz
aW5nIGZhc3QgVExTIHRvIGhvbGQgdGhlIFdhc206OkNvbnRleHQqLgotICAgICAgICBpZiAoIXVz
ZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNt
Q29udGV4dEdQUik7Ci0gICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZih2b2lkKik7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7Ci0gICAgICAgICAgICBj
YXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICAgICAg
ICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5zaXpl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBX
YXNtOjpJMzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0
Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywg
Y2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNo
UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFy
Z3VtZW50KGkpID09IFdhc206OkkzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
MzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09m
ZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5s
b2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBq
c09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbnVtR1BSczsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAg
ICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNh
bGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdh
c21PZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNt
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2Fz
bU9mZnNldCArPSBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKQot
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxs
aW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICsrbnVtRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghIWluZm8u
bWVtb3J5KSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVt
b3J5UG9pbnRlcjsKLQotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNvbnRleHRHUFIs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoYmFzZU1lbW9y
eSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9y
eSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxp
bmcpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzOwotICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dp
bmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQg
c2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZz
ZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAg
ICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXpl
T2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0
ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsKLSAgICB9Ci0KLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50
aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAg
QVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGluZm8uZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKLSAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBm
dW5jdGlvbkluZGV4U3BhY2VdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChjYWxsKSwgZnVuY3Rpb25JbmRleFNwYWNlIH0pOwotICAgIH0pOwotCi0KLSAgICBmb3Ig
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkg
ewotICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0gICAgICAg
IEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBwdHJkaWZm
X3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwg
cmVnKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAg
ICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgaml0Lm1vdmVGbG9hdFRvMzIoRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
CiBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogewogICAgIE9wY29kZU9y
aWdpbiBvcmlnaW4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXItPmN1cnJlbnRP
cGNvZGVTdGFydGluZ09mZnNldCgpKTsKQEAgLTE1MzQsNyArMTM1Myw3IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6b3JpZ2luKCkgLT4gT3JpZ2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmln
aW4+KG9yaWdpbik7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxh
dGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1v
ZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90
KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2Rl
LCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0
aW9uKQogewogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0
aW9uPigpOwogCkBAIC0xNTU4LDExICsxMzc3LDExIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25D
CiAgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCgpCiAg
ICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAot
ICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dChpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25J
bmRleCwgdGllclVwKTsKLSAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIo
Y29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7
CisgICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5n
ZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVu
Y3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEZ1bmN0aW9uUGFy
c2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVu
Y3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKLSAgICBjb250ZXh0Lmluc2VydENvbnN0YW50cygpOwor
ICAgIGlyR2VuZXJhdG9yLmluc2VydENvbnN0YW50cygpOwogCiAgICAgcHJvY2VkdXJlLnJlc2V0
UmVhY2hhYmlsaXR5KCk7CiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlMmM2YWRiLi42OWJl
NDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVk
ZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5j
bHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUg
Ildhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgpA
QCAtNTQsOSArNTUsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlwcm9kdWN0czsK
IH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNp
emVfdCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Jiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwotCi1zdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCk7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4s
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25N
b2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJv
d1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IDIyZWRk
MTYuLmQwZWFmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAKQEAgLTI5LDggKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRl
ICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTUzLDIxICs1MSwy
MSBAQCBuYW1lc3BhY2UgV2FzbUJCUVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0qIHZtLCBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
Ci0gICAgOiBCYXNlKHZtLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6
QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFz
eW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBl
ciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbikKKyAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNr
KSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCiAg
ICAgLCBtX3N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQog
ewogfQogCi1CQlFQbGFuOjpCQlFQbGFuKFZNKiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNl
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQkJRUGxhbih2
bSwgYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwgd29y
aywgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgVmVj
dG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0
YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBCQlFQbGFuKGNvbnRleHQs
IGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSksIHdvcmss
IFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNt
RXhjZXB0aW9uKQogewogICAgIG1fc3RhdGUgPSBTdGF0ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxh
bjo6QkJRUGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxl
bmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2Uo
dm0sIHNvdXJjZSwgc291cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxh
bihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VM
ZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNl
KGNvbnRleHQsIHNvdXJjZSwgc291cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9z
dGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC0yNjks
NyArMjY3LDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKIAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7CiAgICAgICAgIFRpZXJV
cENvdW50KiB0aWVyVXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJV
cENvdW50c1tmdW5jdGlvbkluZGV4XSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gcGFyc2VBbmRD
b21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgs
IHRpZXJVcCk7CisgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRD
b21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tm
dW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxh
dGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNl
cHRpb24pOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkg
ewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjg1LDcg
KzI4Myw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiAKICAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFp
bnMoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9qc1RvV2FzbUludGVybmFsRnVu
Y3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRl
clRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBtX2NyZWF0ZUVtYmVk
ZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVy
ZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgfQogCkBAIC0z
MTQsMTQgKzMxMiwxNCBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIpCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50
cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGF1
dG8ganNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25z
LmdldChmdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdl
dChmdW5jdGlvbkluZGV4KSkgewogICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cigqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChsb2NrZXIsIG1ha2VT
dHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBlbnRyeXBvaW50IGF0
IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBqc1Rv
V2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2Vf
dW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dhc21J
bnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBm
dW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50
b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUo
Y29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCAzNTlmMTNiLi5jNmVhNDk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKQEAgLTI4LDEyICsyOCwx
MiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVz
dWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgi
CiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgpAQCAtNDEsOCArNDEsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxMaW5rSW5m
bzsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5h
bWVzcGFjZSBXYXNtIHsKIApAQCAtNTAsMTIgKzQ4LDEzIEBAIGNsYXNzIEJCUVBsYW4gZmluYWwg
OiBwdWJsaWMgUGxhbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47CiAgICAgZW51
bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKKwogICAg
IC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0
aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBC
QlFQbGFuKFZNKiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0
KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBD
cmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBCQlFQbGFuKENvbnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3Jr
LCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhj
ZXB0aW9uKTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVz
ZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0
aW9uL2Z1bmN0aW9uIHRlc3RzCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJpZCBvZiBmdW5j
dGlvbiB0ZXN0cyB3ZSBzaG91bGQgcmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMgY29uc3RydWN0
b3IuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgQkJRUGxhbihDb250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQXN5bmNXb3JrLCBD
b21wbGV0aW9uVGFzayYmKTsKIAogICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwog
CkBAIC0xNDEsNyArMTQwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgSGFzaFNl
dDx1aW50MzJfdCwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1bmN0aW9u
SW5kaWNlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fanNUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRl
cm5hbEZ1bmN0aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0
aW9uQ29udGV4dHM7CiAgICAgVmVjdG9yPFRpZXJVcENvdW50PiBtX3RpZXJVcENvdW50czsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaAppbmRl
eCAxYjhiNTZmLi40NDQ3OTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbklubGluZXMuaApAQCAtMzksMTAgKzM5LDEwIEBAIHZvaWQgQkJRUGxhbjo6aW5p
dGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYgY2FsbGJhY2spCiAgICAgQVNTRVJUKCFmYWls
ZWQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRl
cm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50
ZXJuYWxGdW5jdGlvbkluZGV4KSB7CiAKLSAgICAgICAgUmVmUHRyPFdhc206OkNhbGxlZT4ganNF
bnRyeXBvaW50Q2FsbGVlOwotICAgICAgICBpZiAoYXV0byBqc1RvV2FzbUZ1bmN0aW9uID0gbV9q
c1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKSB7Ci0g
ICAgICAgICAgICBqc0VudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZN
b3ZlKGpzVG9XYXNtRnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihqc1RvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRp
b24sIENhbGxlZUJpdHM6OmJveFdhc20oanNFbnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7CisgICAg
ICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKKyAgICAg
ICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRl
cm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAg
ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShl
bWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92
ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5n
ZXQoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24g
PSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwpA
QCAtNTAsNyArNTAsNyBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1
bmN0b3ImIGNhbGxiYWNrKQogICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2lu
dENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9p
bnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9u
LmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdh
c20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKIAotICAgICAgICBjYWxsYmFjayhpbnRl
cm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoanNFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3
YXNtRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9u
SW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50
cnlwb2ludENhbGxlZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwCmluZGV4IDY3Y2NmNWUuLjQ5MTBjODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTI5LDU5NiArMjksMTQgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRl
ICJGcmFtZVRyYWNlcnMuaCIKLSNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgiCi0j
aW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgiCi0jaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKLSNpbmNsdWRlICJXYXNtRXhjZXB0aW9u
VHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiB1c2luZyBKSVQg
PSBDQ2FsbEhlbHBlcnM7CiAKLXN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKEpJ
VCYgaml0LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKLXsKLSAgICAvLyBX
ZSdyZSBjYWxsaW5nIG91dCBvZiB0aGUgY3VycmVudCBXZWJBc3NlbWJseS5JbnN0YW5jZS4gVGhh
dCBJbnN0YW5jZSBoYXMgYSBsaXN0IG9mIGFsbCBpdHMgaW1wb3J0IGZ1bmN0aW9ucy4KLSAgICBq
aXQubG9hZFdhc21Db250ZXh0KHJlc3VsdCk7Ci0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KHJlc3VsdCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGlt
cG9ydEluZGV4KSksIHJlc3VsdCk7Ci19Ci0KLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pzKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNh
bGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBv
cnRJbmRleCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5
IGFic3RyYWN0IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KLSAgICAvLyBJdCdkIGJlIHN1
cGVyIGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjk0MDEKLSAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpOwotICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc0ND
ID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgIHVuc2ln
bmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBKSVQgaml0Owot
Ci0gICAgLy8gTm90ZTogV2FzbUIzSVJHZW5lcmF0b3IgYXNzdW1lcyB0aGF0IHRoaXMgc3R1YiB0
cmVhdHMgU1AgYXMgYSBjYWxsZWUgc2F2ZS4KLSAgICAvLyBJZiB3ZSBldmVyIGNoYW5nZSB0aGlz
LCB3ZSB3aWxsIGFsc28gbmVlZCB0byBjaGFuZ2UgV2FzbUIzSVJHZW5lcmF0b3IuCi0KLSAgICAv
LyBCZWxvdywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBpcyBhbHdh
eXMgb24gdGhlIHN0YWNrLgotICAgIEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6ZSgpKTsKLSAg
ICBBU1NFUlQoIWpzQ0MubV9mcHJBcmdzLnNpemUoKSk7Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKLSAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigwKSwgSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJWE1FIFN0b3Ag
dXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1MzIxCi0KLSAgICB7Ci0gICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7
Ci0gICAgICAgIGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpID09IEk2NDsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudCAmJiAh
aGFzQmFkSTY0VXNlOyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2ln
bmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsK
LSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAg
ICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotCi0gICAgICAgICAgICBjYXNlIEk2NDogewotICAgICAgICAgICAgICAgIGhhc0Jh
ZEk2NFVzZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7Ci0gICAgICAgICAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0p
OwotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIENhbGxlZS4KLSAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86
OmFyZ3VtZW50R1BSMik7Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1l
bnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQot
ICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGppdC5qdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICAgICAgICAgIHZvaWQgKCp0aHJvd0JhZEk2
NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikgPSBbXSAoRXhlY1N0YXRlKiBl
eGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0KSAtPiB2b2lkIHsKLSAgICAg
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgq
dm0pOwotICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
d2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICBhdXRvKiBl
cnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+dHlw
ZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVNDSUlMaXRlcmFsKCJpNjQg
bm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVu
Y3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBnZW5l
cmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZy
YW1lRm9yQ2F0Y2gpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwot
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpP
dXRPZk1lbW9yeSk7Ci0KLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0Jh
ZEk2NCk7Ci0gICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldl
YkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1w
b3J0SW5kZXgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEhlcmUgd2UgYXNzdW1lIHRo
YXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBsZWFzdCBhbGwgdGhlIHdhc20g
Y2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBzYXZlIGFuZCByZXN0b3Jl
IG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBhbHJlYWR5IHRvb2sgY2FyZSBv
ZiB0aGlzLgotICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVTYXZlcyA9IHdhc21DQy5tX2Nh
bGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgbWlzc2luZ0NhbGxlZVNhdmVzLmV4Y2x1ZGUoanNDQy5t
X2NhbGxlZVNhdmVSZWdpc3RlcnMpOwotICAgIEFTU0VSVChtaXNzaW5nQ2FsbGVlU2F2ZXMuaXNF
bXB0eSgpKTsKLQotICAgIGlmICghT3B0aW9uczo6dXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5VG9K
U0NhbGxzKCkpIHsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShhcmdDb3VudCAqIHNpemVvZih1aW50NjRfdCkpOwotICAgICAg
ICBjaGFyKiBidWZmZXIgPSBhcmdDb3VudCA/IHN0YXRpY19jYXN0PGNoYXIqPihzY3JhdGNoQnVm
ZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxl
ZEdQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0gICAgICAg
IHVuc2lnbmVkIGJ1ZmZlck9mZnNldCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0g
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwotICAgICAgICBjb25zdCBHUFJSZWcgc2NyYXRjaEdQUiA9IEdQUkluZm86
OnJlZ0NTMDsKLSAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNpemVvZihS
ZWdpc3RlcikpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAg
ICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpOwotCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAg
ICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAg
IHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
Y2FzZSBGdW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJ
NjQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsKLSAgICAg
ICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkK
LSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJzaGFsbGVk
R1BSc10uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMg
YXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSBH
UFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoSklU
OjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdwclJlZyk7
Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJS
ZWcsIGdwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBidWZmZXIg
KyBidWZmZXJPZmZzZXQpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEYzMjog
ewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1h
cnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOwotICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5
IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMg
c2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRG
UFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAg
ICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVnLCBmcHJSZWcp
OwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciArIGJ1ZmZl
ck9mZnNldCk7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7Ci0gICAg
ICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxl
ZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnBy
UmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxl
ZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNo
LgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgICAg
ICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQp
OwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1ZmZlck9m
ZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciksIHNjcmF0Y2hHUFIpOwotICAgICAgICBpZiAoYXJnQ291bnQpIHsKLSAgICAgICAgICAg
IC8vIFRoZSBHQyBzaG91bGQgbm90IGxvb2sgYXQgdGhpcyBidWZmZXIgYXQgYWxsLCB0aGVzZSBh
cmVuJ3QgSlNWYWx1ZXMuCi0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHVpbnQ2NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU2lnbmF0
dXJlSW5kZXgsIHVpbnQ2NF90KikgPQotICAgICAgICAgICAgW10gKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGNhbGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90
KiBidWZmZXIpIC0+IHVpbnQ2NF90IHsgCi0gICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSgqdm0pOwotICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJn
TnVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1
bWVudChhcmdOdW0pOwotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGFyZzsKLSAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Vm9pZDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJl
cihzdGF0aWNfY2FzdDxpbnQzMl90PihidWZmZXJbYXJnTnVtXSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRjMyOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGpzTnVt
YmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJ1ZmZlclthcmdOdW1dKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBhcmdzLmFwcGVuZChhcmcpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShjYWxsZWUsIGNhbGxEYXRh
KTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6
Tm9uZSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGNhbGxl
ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKLSAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOwotCi0gICAgICAgICAgICAg
ICAgdWludDY0X3QgcmVhbFJlc3VsdDsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVy
ZS5yZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlYWxSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHJlc3VsdC50b0ludDMyKGV4ZWMpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAgICAgICAg
ICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gYml0d2lz
ZV9jYXN0PHVpbnQ2NF90PihyZXN1bHQudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVhbFJlc3VsdDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIAotICAg
ICAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpJ
VDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgICAgICAKLSAg
ICAgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxv
dy4iKTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjph
cmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4KSwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOwotICAgICAgICBhdXRvIGNhbGwg
PSBqaXQuY2FsbCgpOwotICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRp
b25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0K
LSAgICAgICAgLy8gZXhjZXB0aW9uIGhlcmUuCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7Ci0gICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAg
ICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykg
LT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgZ2Vu
ZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOwotICAgICAgICB9OwotICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQu
Y2FsbCgpOwotICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwotCi0gICAg
ICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7Ci0gICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJl
dHVyblR5cGUoKSkgewotICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgaml0Lm1vdmU2
NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
Uik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEYzMjogewot
ICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRv
RmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwotICAgICAgICBqaXQucmV0KCk7Ci0KLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwotCi0g
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjYWxsRnVuYyk7Ci0gICAgICAgIGxpbmtCdWZm
ZXIubGluayhleGNlcHRpb25DYWxsLCBkb1Vud2luZGluZyk7Ci0KLSAgICAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRb
JWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgp
KSk7Ci0gICAgfQotCi0gICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGEgc3Rh
Y2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJUkdlbmVyYXRvcgotICAgIC8vIHdpbGwgZG8gdGhl
IHN0YWNrIGNoZWNrIGZvciB1cy4gV2hlbmV2ZXIgaXQgZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IG1h
a2UKLSAgICAvLyBhIGNhbGwgdG8gdGhpcyB0aHVuaywgaXQnbGwgbWFrZSBzdXJlIGl0cyBzdGFj
ayBjaGVjayBpbmNsdWRlcyBzcGFjZQotICAgIC8vIGZvciB1cyBoZXJlLgotCi0gICAgY29uc3Qg
dW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gYXJnQ291bnQgKyAxOyAvLyBUaGVyZSBpcyBh
ICJ0aGlzIiBhcmd1bWVudC4KLSAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxs
ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7
Ci0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NG
b3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAg
ICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKLSAgICBqaXQuc3Vi
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFt
ZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkp
OwotCi0gICAgLy8gRklYTUUgbWFrZSB0aGVzZSBsb29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0
dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVy
d2lzZSBiZSBodWdlIGZvciBodWdlIHNpZ25hdHVyZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU1NDcKLSAgICAKLSAgICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRo
ZSBpbnRlZ2VyIHBhcmFtZXRlcnMsIGZyZWVpbmcgdXAgdGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBh
ZnRlcndhcmRzLgotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwot
ICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNh
bGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0g
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8
IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0
dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAg
IGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAgICAgICAg
ICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNd
LmdwcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBX
ZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBh
dmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOwotICAg
ICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAgICAgICAg
ICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7IC8vIENsZWFyIG5vbi1p
bnQzMiBhbmQgbm9uLXRhZyBiaXRzLgotICAgICAgICAgICAgICAgIGppdC5ib3hJbnQzMihncHJS
ZWcsIEpTVmFsdWVSZWdzKGdwclJlZyksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAg
ICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxl
ZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6
ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2UgRjMyOgotICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAg
ICAgLy8gU2tpcHBlZDogaGFuZGxlZCBiZWxvdy4KLSAgICAgICAgICAgICAgICBpZiAobWFyc2hh
bGxlZEZQUnMgPj0gd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAg
IGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFs
bGVkRlBSczsKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVn
aXN0ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHsKLSAgICAgICAgLy8gSW50ZWdlciByZWdpc3RlcnMgaGF2ZSBh
bHJlYWR5IGJlZW4gc3BpbGxlZCwgdGhlc2UgYXJlIG5vdyBhdmFpbGFibGUuCi0gICAgICAgIEdQ
UlJlZyBkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Ci0g
ICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwotICAgICAgICBi
b29sIGhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCA9IGZhbHNlOwotICAgICAgICBh
dXRvIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0ID0gWyZoYXNNYXRlcmlhbGl6ZWREb3Vi
bGVFbmNvZGVPZmZzZXQsICZqaXRdIChHUFJSZWcgZGVzdCkgewotICAgICAgICAgICAgaWYgKCFo
YXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBzdGF0
aWNfYXNzZXJ0KERvdWJsZUVuY29kZU9mZnNldCA9PSAxbGwgPDwgNDgsICJjb2RlZ2VuIGFzc3Vt
ZXMgdGhpcyBiZWxvdyIpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZElt
bTMyKDEpLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBqaXQubHNoaWZ0NjQoSklUOjpUcnVzdGVk
SW1tMzIoNDgpLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBoYXNNYXRlcmlhbGl6ZWREb3VibGVF
bmNvZGVPZmZzZXQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAg
IHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxl
ZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFt
ZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
OwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAg
ICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAg
ICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAg
ICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAg
ICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyBIYW5kbGVkIGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAgICAgICAg
ICAgLy8gU2tpcHBlZDogaGFuZGxlZCBhYm92ZS4KLSAgICAgICAgICAgICAgICBpZiAobWFyc2hh
bGxlZEdQUnMgPj0gd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAg
IGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFs
bGVkR1BSczsKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVn
aXN0ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGMzI6IHsK
LSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJz
aGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAg
ICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBz
cGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNj
cmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBS
MDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsK
LSAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAgICAgICAg
aml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgbWF0
ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAg
ICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNo
KTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVP
ZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRG
UFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2FzZSBGNjQ6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAg
ICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5m
cHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Un
dmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZh
aWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86
OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKLSAgICAg
ICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKLSAgICAgICAg
ICAgICAgICBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVPZmZzZXRH
UFJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRHUFJS
ZWcsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBj
YWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsr
bWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBqaXQubG9hZFdhc21Db250ZXh0
KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKLQotICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpy
ZWdUMDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGggYmVsb3cu
Ci0gICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBvcnRKU0Nl
bGxHUFJSZWcpKTsKLQotICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5k
ZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0KLSAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxH
UFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIGppdC5zdG9yZTMyKEpJVDo6
VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVk
SW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNs
b3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
LQotICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBpcyB2b2lk
IGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1NDg4Ci0KLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IGNhbGxMaW5rSW5mb3MuYWRkKCk7Ci0gICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0gICAgSklU
OjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5p
dGlhbFJpZ2h0VmFsdWUoMCk7Ci0gICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0
cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywg
dGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOwotICAgIEpJVDo6Q2FsbCBmYXN0Q2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOwotICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLSAg
ICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdU
MCBoZXJlLgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxM
aW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJl
Z1QyLgotICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgIGRvbmUu
bGluaygmaml0KTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tz
OwotCi0gICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBWb2lk
OgotICAgICAgICAvLyBEaXNjYXJkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmM6Ci0g
ICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5n
LCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUg
YSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJNjQ6IHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KLSAg
ICB9Ci0gICAgY2FzZSBJMzI6IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25l
OwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAgICAgIHNs
b3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0
LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBE
b05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAg
IGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7
Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNl
cHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAg
ICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCi0gICAgICAgICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0kzMik7Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9u
ZTsKLSAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICBhdXRv
IGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBXZSdyZSBh
biBpbnQzMgotICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2
NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBS
KTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgaXNEb3VibGUu
bGluaygmaml0KTsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hZGQ2NChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAg
aml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBkb25lLmFw
cGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNlcHRpb25D
aGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGZs
b2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKLSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1iZXIoZXhl
YykpOwotICAgICAgICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVy
dFRvRjMyKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBkb25lOwotICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3RO
dW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0g
ICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAg
IC8vIFdlJ3JlIGFuIGludDMyCi0gICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBqaXQu
Y29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJl
dHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAg
ICAgaXNEb3VibGUubGluaygmaml0KTsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1t
NjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGpp
dC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKLSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkp
OwotCi0gICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKLSAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1
dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0
LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7Ci0KLSAgICAgICAgZG91YmxlICgqY29udmVydFRv
RjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dikgLT4gZG91YmxlIHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAg
ICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOwotICAgICAgICB9KTsKLQotICAgICAgICBk
b25lLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBpZiAoIWV4Y2Vw
dGlvbkNoZWNrcy5lbXB0eSgpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQp
OwotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigqdm0pOwotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
LSAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAgICB2b2lk
ICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9p
ZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgZ2VuZXJpY1Vu
d2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpOwotICAgICAgICB9OwotCi0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vu
d2luZGluZyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYg
KFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbChzbG93Q2FsbCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKLSAgICBDb2RlTG9jYXRpb25O
ZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFz
dENhbGwpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9j
YXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKLQotICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0g
JXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsK
LX0KLQogRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2Fz
bVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKIHsKICAgICBjb25zdCBQaW5uZWRSZWdpc3Rl
ckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNjMzLDI0
ICs1MSwyMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJl
PiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIEFTU0VSVChzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CiAgICAgR1BSUmVnIHNpemVSZWdBc1NjcmF0Y2gg
PSBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXI7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
c2FtZTxDb250ZXh0LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U+Ojp2YWx1ZSwgIlRoaXMgaXMgYXNz
dW1lZCBpbiB0aGUgY29kZSBiZWxvdy4iKTsKICAgICAvLyBCMydzIGNhbGwgY29kZWdlbiBlbnN1
cmVzIHRoYXQgdGhlIEpTQ2VsbCBpcyBhIFdlYkFzc2VtYmx5RnVuY3Rpb24uCi0gICAgaml0Lmxv
YWRXYXNtQ29udGV4dChzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgotICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24oaW1wb3J0SW5kZXgpKSwgc2NyYXRjaCk7Ci0K
LSAgICAvLyBHZXQgdGhlIGNhbGxlZSdzIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGFuZCBzZXQgaXQg
YXMgV2FzbUNvbnRleHQuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0
cyBvd24gSW5zdGFuY2UuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdl
YkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mSW5zdGFuY2UoKSksIGJhc2VNZW1vcnkpOyAvLyBJ
bnN0YW5jZSouCi0gICAgaml0LnN0b3JlV2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7CisgICAgaml0
LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQgSW5zdGFu
Y2UqCisgICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5jZSBhbmQgc2V0
IGl0IGFzIFdhc21Db250ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUg
b2YgcmVzdG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJn
ZXRJbnN0YW5jZShpbXBvcnRJbmRleCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseUlu
c3RhbmNlKi4KKyAgICAvLyBXaGlsZSB3ZSdyZSBhY2Nlc3NpbmcgdGhhdCBjYWNoZWxpbmUsIGFs
c28gZ2V0IHRoZSB3YXNtIGVudHJ5cG9pbnQgc28gd2UgY2FuIHRhaWwgY2FsbCB0byBpdCBiZWxv
dy4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21FbnRyeXBvaW50KGltcG9ydEluZGV4KSksIHNj
cmF0Y2gpOyAvLyBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbi4KKyAgICBqaXQuc3Rv
cmVXYXNtQ29udGV4dEluc3RhbmNlKGJhc2VNZW1vcnkpOwogCiAgICAgaml0LmxvYWRQdHIoSklU
OjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVnQXNTY3JhdGNoKTsKICAgICBqaXQuc3RvcmVQ
dHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKIAogICAgIC8vIEZJWE1F
IHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdlYkFzc2VtYmx5Lkluc3RhbmNl
IGhhdmUgdGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1l
bW9yeSByZWdpc3RlciBhcyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMuCi0gICAg
aml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBKU1dlYkFzc2VtYmx5TWVtb3J5
Ki4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpN
ZW1vcnkqLgogICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xs
b3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVl
bnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICBqaXQubG9hZFB0
cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtTWVtb3J5Ojp2b2lkKi4KKyAgICBqaXQubG9h
ZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUo
KSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgIGppdC5s
b2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJU
KHNpemVSZWdzW2ldLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAgQVNTRVJU
KHNpemVSZWdzW2ldLnNpemVSZWdpc3RlciAhPSBzY3JhdGNoKTsKQEAgLTY1OCw3ICs3NSw2IEBA
IEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dh
c20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgfQogCiAgICAgLy8gVGFpbCBjYWxsIGludG8g
dGhlIGNhbGxlZSBXZWJBc3NlbWJseSBmdW5jdGlvbi4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFk
ZHJlc3Moc2NyYXRjaCwgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2lu
dExvYWRMb2NhdGlvbigpKSwgc2NyYXRjaCk7CiAgICAgaml0LmxvYWRQdHIoc2NyYXRjaCwgc2Ny
YXRjaCk7CiAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5oCmluZGV4IDRlMjYyYmEuLmZlYzZiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3
dGYvRXhwZWN0ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00NCw3ICs0Miw2IEBAIGVudW0g
Y2xhc3MgQmluZGluZ0ZhaWx1cmUgewogfTsKIAogRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCk7Ci1F
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KcyhW
TSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwgdW5z
aWduZWQgaW1wb3J0SW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCmluZGV4IDcwZmVmYjAu
LmU1MTM2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2su
Y3BwCkBAIC0zMSwyMCArMzEsMzEgQEAKIAogI2luY2x1ZGUgIldhc21CQlFQbGFuSW5saW5lcy5o
IgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5j
bHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRp
b24mIG1vZHVsZUluZm9ybWF0aW9uKQorUmVmPENvZGVCbG9jaz4gQ29kZUJsb2NrOjpjcmVhdGUo
Q29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9k
dWxlSW5mb3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3Jh
cHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBzaXpl
X3QgaW1wb3J0RnVuY3Rpb25Db3VudCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9u
Q291bnQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYWxs
b2NhdGlvblNpemUoaW1wb3J0RnVuY3Rpb25Db3VudCkpKSBDb2RlQmxvY2soY29udGV4dCwgbW9k
ZSwgbW9kdWxlSW5mb3JtYXRpb24sIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhy
b3dXYXNtRXhjZXB0aW9uKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcG9ydEZ1bmN0
aW9uQ291bnQ7ICsraSkKKyAgICAgICAgcmVzdWx0LT5pbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIo
aSkgPSBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJlZigqcmVzdWx0KTsKK30KKworQ29kZUJs
b2NrOjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNy
ZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlv
bikKICAgICA6IG1fY2FsbGVlQ291bnQobW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxGdW5jdGlv
bkNvdW50KCkpCiAgICAgLCBtX21vZGUobW9kZSkKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBw
cm90ZWN0ZWRUaGlzID0gdGhpczsKLSAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4o
bnVsbHB0ciwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46OkZ1bGxDb21waWxl
LCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0qLCBQbGFuJikgeworCisgICAgbV9wbGFu
ID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRp
b24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFj
a1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBs
YW4mKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAg
aWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9w
bGFuLT5lcnJvck1lc3NhZ2UoKTsKLSAgICAgICAgICAgIG1fcGxhbiA9IG51bGxwdHI7CisgICAg
ICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApAQCAtNjYsMTAgKzc3LDEwIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKE1lbW9y
eU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQogICAgICAg
ICBtX3dhc21Ub1dhc21DYWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVz
KCk7CiAgICAgICAgIG1fdGllclVwQ291bnRzID0gbV9wbGFuLT50YWtlVGllclVwQ291bnRzKCk7
CiAKLSAgICAgICAgbV9wbGFuID0gbnVsbHB0cjsKLSAgICB9KSkpOwotCisgICAgICAgIHNldENv
bXBpbGF0aW9uRmluaXNoZWQoKTsKKyAgICB9KSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBw
ZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pKTsKICAgICBtX3BsYW4tPnNldE1vZGUobW9kZSk7CisK
ICAgICBhdXRvJiB3b3JrbGlzdCA9IFdhc206OmVuc3VyZVdvcmtsaXN0KCk7CiAgICAgLy8gTm90
ZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgZW5xdWV1ZSB0aGUgcGxhbiwgdGhlcmUgaXMgYSBjaGFu
Y2UgdGhlIGFib3ZlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLgogICAgIHdvcmtsaXN0LmVucXVl
dWUobWFrZVJlZigqbV9wbGFuLmdldCgpKSk7CkBAIC05Miw3ICsxMDMsNyBAQCB2b2lkIENvZGVC
bG9jazo6d2FpdFVudGlsRmluaXNoZWQoKQogICAgIC8vIGVsc2UsIGlmIHdlIGRvbid0IGhhdmUg
YSBwbGFuLCB3ZSdyZSBhbHJlYWR5IGNvbXBpbGVkLgogfQogCi12b2lkIENvZGVCbG9jazo6Y29t
cGlsZUFzeW5jKFZNJiB2bSwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKK3ZvaWQg
Q29kZUJsb2NrOjpjb21waWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgQXN5bmNDb21waWxhdGlv
bkNhbGxiYWNrJiYgdGFzaykKIHsKICAgICBSZWZQdHI8UGxhbj4gcGxhbjsKICAgICB7CkBAIC0x
MDQsMTIgKzExNSwxMSBAQCB2b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgQXN5
bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0
byBrZWVwIGEgUmVmUHRyIG9uIHRoZSBQbGFuIGJlY2F1c2UgdGhlIHdvcmtsaXN0IHdpbGwga2Vl
cAogICAgICAgICAvLyBhIFJlZlB0ciBvbiB0aGUgUGxhbiB1bnRpbCB0aGUgcGxhbiBmaW5pc2hl
cyBub3RpZnlpbmcgYWxsIG9mIGl0cyBjYWxsYmFja3MuCiAgICAgICAgIFJlZlB0cjxDb2RlQmxv
Y2s+IHByb3RlY3RlZFRoaXMgPSB0aGlzOwotICAgICAgICBwbGFuLT5hZGRDb21wbGV0aW9uVGFz
ayh2bSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCB0YXNrID0g
V1RGTW92ZSh0YXNrKSwgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChW
TSogdm0sIFBsYW4mKSB7Ci0gICAgICAgICAgICBBU1NFUlQodm0pOwotICAgICAgICAgICAgdGFz
ay0+cnVuKCp2bSwgbWFrZVJlZigqdGhpcykpOworICAgICAgICBwbGFuLT5hZGRDb21wbGV0aW9u
VGFzayhjb250ZXh0LCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMs
IHRhc2sgPSBXVEZNb3ZlKHRhc2spLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRU
aGlzKV0gKFBsYW4mKSB7CisgICAgICAgICAgICB0YXNrLT5ydW4obWFrZVJlZigqdGhpcykpOwog
ICAgICAgICB9KSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHRhc2stPnJ1bih2bSwgbWFrZVJlZigq
dGhpcykpOworICAgICAgICB0YXNrLT5ydW4obWFrZVJlZigqdGhpcykpOwogfQogCiBib29sIENv
ZGVCbG9jazo6aXNTYWZlVG9SdW4oTWVtb3J5TW9kZSBtZW1vcnlNb2RlKQpAQCAtMTMwLDYgKzE0
MCwxMyBAQCBib29sIENvZGVCbG9jazo6aXNTYWZlVG9SdW4oTWVtb3J5TW9kZSBtZW1vcnlNb2Rl
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorCit2b2lkIENvZGVCbG9jazo6c2V0Q29tcGlsYXRp
b25GaW5pc2hlZCgpCit7CisgICAgbV9wbGFuID0gbnVsbHB0cjsKKyAgICBtX2NvbXBpbGF0aW9u
RmluaXNoZWQuc3RvcmUodHJ1ZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29kZUJsb2NrLmgKaW5kZXggMmRiZjdlNC4uMDIwMTAyNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgor
I2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgog
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMzcsMTEg
KzM4LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdh
c20gewogCiBjbGFzcyBDYWxsZWU7CitzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIEJCUVBsYW47CiBj
bGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwpAQCAtNTEsMjAgKzUxLDQy
IEBAIGVudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3Q7CiAgICAgCiBjbGFzcyBDb2RlQmxv
Y2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiB7CiBwdWJsaWM6Ci0g
ICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSYsIFJlZjxDb2RlQmxvY2s+JiYpOworICAg
IHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoUmVmPENvZGVCbG9jaz4mJik7CiAgICAgdXNpbmcg
QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrID0gUmVmUHRyPFdURjo6U2hhcmVkVGFzazxDYWxsYmFj
a1R5cGU+PjsKLSAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlKE1lbW9yeU1vZGUgbW9k
ZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQorICAgIHN0YXRpYyBSZWY8
Q29kZUJsb2NrPiBjcmVhdGUoQ29udGV4dCosIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9u
JiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisKKyAgICBz
dGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0U3R1YnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihzaXplb2YoQ29kZUJsb2Nr
KSk7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNp
emVfdD4gZnVuY3Rpb25JbXBvcnRDb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiAob2Zmc2V0
T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGZ1bmN0aW9uSW1wb3J0Q291bnQpLnVu
c2FmZUdldCgpOworICAgIH0KKworICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIo
dW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDb2RlQmxvY2sobW9kZSwgbW9kdWxlSW5mb3JtYXRpb24pKTsKKyAgICAgICAgcmV0dXJuICpi
aXR3aXNlX2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJ
bXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKHVuc2lnbmVkIGlt
cG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0U3R1YnMoKSAr
IHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleDsKKyAgICB9CisKKyAgICBXYXNtOjpXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9KU0NhbGxTdHViRm9ySW1wb3J0KHVuc2lnbmVkIGlt
cG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOworICAgICAgICBy
ZXR1cm4gJmltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihpbXBvcnRJbmRleCk7CiAgICAgfQogCiAg
ICAgdm9pZCB3YWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHZvaWQgY29tcGlsZUFzeW5jKFZNJiwg
QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRl
eHQqLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CiAKICAgICBib29sIGNvbXBpbGF0aW9u
RmluaXNoZWQoKQogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwotICAgICAgICByZXR1cm4gIW1fcGxhbjsKKyAgICAgICAgcmV0dXJuIG1fY29tcGlsYXRpb25G
aW5pc2hlZC5sb2FkKCk7CiAgICAgfQogICAgIGJvb2wgcnVubmFibGUoKSB7IHJldHVybiBjb21w
aWxhdGlvbkZpbmlzaGVkKCkgJiYgIW1fZXJyb3JNZXNzYWdlOyB9CiAKQEAgLTc4LDkgKzEwMCwx
MiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCk7IH0KKyAgICAKKyAg
ICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25jZSB0aGUgY2Fs
bGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgogCiAgICAgQ2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAg
ICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVu
c2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRD
b3VudCgpOwogCkBAIC05MCw2ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIENhbGxlZSYg
d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291
bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNl
IC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAgICBpZiAobV9vcHRpbWl6ZWRDYWxsZWVz
W2NhbGxlZUluZGV4XSkKQEAgLTExNyw3ICsxNDMsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBPTUdQbGFuOwogCi0gICAgQ29kZUJsb2NrKE1lbW9yeU1vZGUsIE1vZHVs
ZUluZm9ybWF0aW9uJik7CisgICAgQ29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1
bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRp
b24pOworICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIHVuc2lnbmVkIG1f
Y2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxD
YWxsZWU+PiBtX2NhbGxlZXM7CkBAIC0xMjgsNiArMTU1LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7
CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0dWJz
OwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CisgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9j
b21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7
CiAgICAgTG9jayBtX2xvY2s7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
bnRleHQuY3BwCmluZGV4IGZlYTE2ZGUuLmUwNTlmYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ29udGV4dC5jcHAKQEAgLTI4LDMwICsyOCw0MSBAQAogCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKICNpbmNsdWRlIDxtdXRleD4KICNp
bmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYgdm0pCitib29sIENvbnRleHQ6OnVzZUZhc3RU
TFMoKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgcmV0dXJuIE9wdGlvbnM6OnVz
ZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNlKiBDb250ZXh0Ojpsb2FkKCkgY29uc3QKIHsK
ICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgp
KQotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENvbnRleHQqPihfcHRocmVhZF9nZXRzcGVj
aWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKKyAgICBpZiAodXNlRmFzdFRMUygp
KQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KF9w
dGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSkpOwogI2VuZGlm
Ci0gICAgcmV0dXJuIHZtLndhc21Db250ZXh0OworICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAot
dm9pZCBzdG9yZUNvbnRleHQoVk0mIHZtLCBDb250ZXh0KiBjb250ZXh0KQordm9pZCBDb250ZXh0
OjpzdG9yZShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGksIHZvaWQqIHNvZnRTdGFja0xpbWl0KQog
ewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKHVzZUZhc3RUTFNGb3JDb250ZXh0
KCkpCi0gICAgICAgIF9wdGhyZWFkX3NldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05URVhU
X0tFWSwgYml0d2lzZV9jYXN0PHZvaWQqPihjb250ZXh0KSk7CisgICAgaWYgKHVzZUZhc3RUTFMo
KSkKKyAgICAgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRf
S0VZLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGkpKTsKICNlbmRpZgotICAgIHZtLndhc21Db250ZXh0
ID0gY29udGV4dDsKLSAgICBpZiAoY29udGV4dCkKLSAgICAgICAgY29udGV4dC0+c2V0Q2FjaGVk
U3RhY2tMaW1pdCh2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKyAgICBpbnN0YW5jZSA9IGk7CisgICAg
aWYgKGluc3RhbmNlKQorICAgICAgICBpbnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChzb2Z0
U3RhY2tMaW1pdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAppbmRleCAzY2Y2NWZiLi5jMmI1MWRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKQEAgLTI3LDM3ICsyNywyMCBA
QAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgotCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xh
c3MgVk07CitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiAKIG5hbWVzcGFjZSBXYXNtIHsK
IAotLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdGhpcyB0byBiZSBzb21ldGhpbmcgZWxzZSBhdCBz
b21lIHBvaW50OgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MDI2MAotdXNpbmcgQ29udGV4dCA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKLQotaW5saW5lIGJv
b2wgdXNlRmFzdFRMUygpCi17Ci0jaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICByZXR1cm4g
T3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0VExTKCk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgotfQorc3RydWN0IENvbnRleHQgeworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdGFuY2UgeyBudWxscHRyIH07CiAKLWlubGluZSBib29sIHVzZUZhc3RUTFNGb3JDb250
ZXh0KCkKLXsKLSAgICBpZiAodXNlRmFzdFRMUygpKQotICAgICAgICByZXR1cm4gT3B0aW9uczo6
dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogbG9hZCgpIGNvbnN0OworICAgIHZvaWQgc3RvcmUoSlNXZWJB
c3NlbWJseUluc3RhbmNlKiwgdm9pZCogc29mdFN0YWNrTGltaXQpOwogCi1Db250ZXh0KiBsb2Fk
Q29udGV4dChWTSYpOwotdm9pZCBzdG9yZUNvbnRleHQoVk0mLCBDb250ZXh0Kik7CisgICAgc3Rh
dGljIGJvb2wgdXNlRmFzdFRMUygpOworfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg3OTRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUu
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsg
Ly8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5zdGFuY2UsIHNvIHNob3VsZCB1c2UgYmVs
b3cuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorCituYW1lc3BhY2UgV2FzbSB7CisKK3N0
cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CitzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbjsKK3N0cnVj
dCBNb2R1bGVJbmZvcm1hdGlvbjsKK2NsYXNzIFNpZ25hdHVyZTsKK3N0cnVjdCBVbmxpbmtlZFdh
c21Ub1dhc21DYWxsOworCisvLyBDcmVhdGUgd3JhcHBlciBjb2RlIHRvIGNhbGwgZnJvbSBlbWJl
ZGRlciAtPiBXZWJBc3NlbWJseS4KK3VzaW5nIENyZWF0ZUVtYmVkZGVyV3JhcHBlciA9IFdURjo6
RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+KENvbXBpbGF0aW9uQ29u
dGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPios
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QpPjsKKworLy8g
Q2FsbGVkIGFzIHNvb24gYXMgYW4gZXhjZXB0aW9uIGlzIGRldGVjdGVkLiBUaGUgcmV0dXJuIHZh
bHVlIGlzIHRoZSBQQyB0byBjb250aW51ZSBhdC4KK3VzaW5nIFRocm93V2FzbUV4Y2VwdGlvbiA9
IHZvaWQqICgqKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmIxZDgyOC4uY2MxZTdkMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5jcHAKQEAgLTMwLDExICszMCwxMSBAQAogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNs
dWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNs
dWRlICJXYXNtVGh1bmtzLmgiCiAKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8
d3RmL3RocmVhZHMvU2lnbmFscy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCmluZGV4IDM4MTI4MzYuLmU1ZTA3YTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmgKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBu
YW1lc3BhY2UgV2FzbSB7CiAKIHZvaWQgcmVnaXN0ZXJDb2RlKHZvaWQqIHN0YXJ0LCB2b2lkKiBl
bmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IGIyMjIyMTcu
LmU3YjNkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTQ0
LDE0ICs0NCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNGdW5jdGlvbjsKLQog
bmFtZXNwYWNlIEIzIHsKIGNsYXNzIENvbXBpbGF0aW9uOwogfQogCiBuYW1lc3BhY2UgV2FzbSB7
CiAKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247
CisKIGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5
cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5j
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YmUwZTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCkBAIC0wLDAgKzEs
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisKKyNpbmNsdWRlICJS
ZWdpc3Rlci5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitu
YW1lc3BhY2Ugeworc2l6ZV90IGdsb2JhbE1lbW9yeUJ5dGVTaXplKE1vZHVsZSYgbW9kdWxlKQor
eworICAgIHJldHVybiBtb2R1bGUubW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSAq
IHNpemVvZihSZWdpc3Rlcik7Cit9Cit9CisKK0luc3RhbmNlOjpJbnN0YW5jZShSZWY8TW9kdWxl
PiYmIG1vZHVsZSkKKyAgICA6IG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAsIG1fZ2xv
YmFscyhNYWxsb2NQdHI8dWludDY0X3Q+OjptYWxsb2MoZ2xvYmFsTWVtb3J5Qnl0ZVNpemUobV9t
b2R1bGUuZ2V0KCkpKSkKK3sKK30KKworSW5zdGFuY2U6On5JbnN0YW5jZSgpIHsgfQorCitzaXpl
X3QgSW5zdGFuY2U6OmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Z2xvYmFsTWVtb3J5Qnl0ZVNpemUobV9tb2R1bGUuZ2V0KCkpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42Mzc4YTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21N
ZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgi
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgSW5zdGFuY2UgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW5zdGFuY2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPEluc3RhbmNlPiBjcmVhdGUoUmVmPE1vZHVsZT4mJiBtb2R1bGUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnN0YW5jZShXVEZNb3ZlKG1vZHVsZSkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFJlZjxDb2RlQmxvY2s+JiYgY29k
ZUJsb2NrKQorICAgIHsKKyAgICAgICAgbV9jb2RlQmxvY2sgPSBXVEZNb3ZlKGNvZGVCbG9jayk7
CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkluc3RhbmNlKCk7CisKKyAgICBzaXpl
X3QgZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSBjb25zdDsKKworICAgIE1vZHVsZSYgbW9kdWxlKCkg
eyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsg
cmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CisgICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVy
biBtX21lbW9yeS5nZXQoKTsgfQorICAgIFRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUu
Z2V0KCk7IH0KKworICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KKyAgICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CisgICAgZmxv
YXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
ZmxvYXQ+KGxvYWRJMzJHbG9iYWwoaSkpOyB9CisgICAgZG91YmxlIGxvYWRGNjRHbG9iYWwodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2NEdsb2Jh
bChpKSk7IH0KKyAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJpdHMpIHsg
bV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2Us
IG1fY2FjaGVkU3RhY2tMaW1pdCk7IH0KKyAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29u
c3QgeyByZXR1cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9CisgICAgdm9pZCBzZXRDYWNoZWRTdGFj
a0xpbWl0KHZvaWQqIGxpbWl0KSB7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9CisKKyAg
ICBmcmllbmQgY2xhc3MgSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHJlbW92
ZSB0aGlzIG9uY2UgcmVmYWN0b3JlZCBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIuCisKK3By
aXZhdGU6CisgICAgSW5zdGFuY2UoUmVmPE1vZHVsZT4mJik7CisgICAgCisgICAgUmVmPE1vZHVs
ZT4gbV9tb2R1bGU7CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CisgICAgUmVm
UHRyPE1lbW9yeT4gbV9tZW1vcnk7CisgICAgUmVmUHRyPFRhYmxlPiBtX3RhYmxlOworICAgIE1h
bGxvY1B0cjx1aW50NjRfdD4gbV9nbG9iYWxzOworICAgIHZvaWQqIG1fY2FjaGVkU3RhY2tMaW1p
dCB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+Ojpt
YXgoKSkgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
Y3BwCmluZGV4IGM1ZjQ4ZTkuLjBkYzc3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuY3BwCkBAIC0yOCwxMyArMjgsMTkgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVkZSAiV2FzbVRodW5rcy5oIgorI2luY2x1
ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9H
aWdhY2FnZS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09TQWxsb2Nh
dG9yLmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXpl
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNs
dWRlIDxtdXRleD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTEs
MTkgKzU3LDE5IEBAIE5FVkVSX0lOTElORSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd2Vi
QXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpIHsgQ1JBCiBzdHJ1Y3QgTWVtb3J5UmVzdWx0
IHsKICAgICBlbnVtIEtpbmQgewogICAgICAgICBTdWNjZXNzLAotICAgICAgICBTdWNjZXNzQW5k
QXN5bmNHQywKLSAgICAgICAgU3luY0dDQW5kUmV0cnkKKyAgICAgICAgU3VjY2Vzc0FuZE5vdGlm
eU1lbW9yeVByZXNzdXJlLAorICAgICAgICBTeW5jVHJ5VG9SZWNsYWltTWVtb3J5CiAgICAgfTsK
LSAgICAKKwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0b1N0cmluZyhLaW5kIGtpbmQpCiAgICAg
ewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBTdWNjZXNzOgogICAgICAg
ICAgICAgcmV0dXJuICJTdWNjZXNzIjsKLSAgICAgICAgY2FzZSBTdWNjZXNzQW5kQXN5bmNHQzoK
LSAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0FuZEFzeW5jR0MiOwotICAgICAgICBjYXNlIFN5
bmNHQ0FuZFJldHJ5OgotICAgICAgICAgICAgcmV0dXJuICJTeW5jR0NBbmRSZXRyeSI7CisgICAg
ICAgIGNhc2UgU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAgICAgcmV0
dXJuICJTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUiOworICAgICAgICBjYXNlIFN5bmNU
cnlUb1JlY2xhaW1NZW1vcnk6CisgICAgICAgICAgICByZXR1cm4gIlN5bmNUcnlUb1JlY2xhaW1N
ZW1vcnkiOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTgsMTcgKzEwNCwxNyBAQCBwdWJsaWM6CiAg
ICAgICAgIE1lbW9yeVJlc3VsdCByZXN1bHQgPSBbJl0gewogICAgICAgICAgICAgYXV0byBob2xk
ZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICAgICAgaWYgKG1fbWVtb3JpZXMuc2l6ZSgp
ID49IG1fbWF4Q291bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxs
cHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVtb3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3luY1RyeVRvUmVjbGFpbU1l
bW9yeSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IEdpZ2FjYWdl
Ojp0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBNZW1vcnk6OmZh
c3RNYXBwZWRCeXRlcygpKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRS
ZXRyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1v
cnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX21lbW9yaWVzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICByZXR1cm4gTWVtb3J5UmVzdWx0KAogICAgICAgICAgICAgICAgIHJlc3VsdCwKLSAgICAgICAg
ICAgICAgICBtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50IC8gMiA/IE1lbW9yeVJlc3Vs
dDo6U3VjY2Vzc0FuZEFzeW5jR0MgOiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3MpOworICAgICAgICAg
ICAgICAgIG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQgLyAyID8gTWVtb3J5UmVzdWx0
OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUgOiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3Mp
OwogICAgICAgICB9KCk7CiAgICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bG9nV2ViQXNz
ZW1ibHlNZW1vcnkoKSkKQEAgLTE1MywxMiArMTU5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgTWVt
b3J5UmVzdWx0OjpLaW5kIHJlc3VsdCA9IFsmXSB7CiAgICAgICAgICAgICBhdXRvIGhvbGRlciA9
IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgICAgICBpZiAobV9waHlzaWNhbEJ5dGVzICsgYnl0
ZXMgPiBtZW1vcnlMaW1pdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6
OlN5bmNHQ0FuZFJldHJ5OworICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN5
bmNUcnlUb1JlY2xhaW1NZW1vcnk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fcGh5c2lj
YWxCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fcGh5c2lj
YWxCeXRlcyA+PSBtZW1vcnlMaW1pdCgpIC8gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVt
b3J5UmVzdWx0OjpTdWNjZXNzQW5kQXN5bmNHQzsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVt
b3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M7CiAgICAgICAgIH0oKTsK
QEAgLTIwNSw3ICsyMTEsNyBAQCBzdGF0aWMgTWVtb3J5TWFuYWdlciYgbWVtb3J5TWFuYWdlcigp
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1ib29sIHRyeUFuZEdDKFZNJiB2bSwgY29u
c3QgRnVuYyYgYWxsb2NhdGUpCitib29sIHRyeUFsbG9jYXRlKGNvbnN0IEZ1bmMmIGFsbG9jYXRl
LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpCiB7CiAgICAg
dW5zaWduZWQgbnVtVHJpZXMgPSAyOwogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAtMjE0LDE0
ICsyMjAsMTYgQEAgYm9vbCB0cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9jYXRlKQog
ICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2VzczoKICAgICAgICAgICAgIGRvbmUgPSB0
cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTdWNj
ZXNzQW5kQXN5bmNHQzoKLSAgICAgICAgICAgIHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxlY3Rp
b25TY29wZTo6RnVsbCk7CisgICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90
aWZ5TWVtb3J5UHJlc3N1cmU6CisgICAgICAgICAgICBpZiAobm90aWZ5TWVtb3J5UHJlc3N1cmUp
CisgICAgICAgICAgICAgICAgbm90aWZ5TWVtb3J5UHJlc3N1cmUoKTsKICAgICAgICAgICAgIGRv
bmUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0
OjpTeW5jR0NBbmRSZXRyeToKKyAgICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1Jl
Y2xhaW1NZW1vcnk6CiAgICAgICAgICAgICBpZiAoaSArIDEgPT0gbnVtVHJpZXMpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB2bS5oZWFwLmNvbGxlY3RTeW5jKENvbGxlY3Rp
b25TY29wZTo6RnVsbCk7CisgICAgICAgICAgICBpZiAoc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkK
KyAgICAgICAgICAgICAgICBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIzMCwzMiArMjM4LDMyIEBAIGJvb2wgdHJ5QW5k
R0MoVk0mIHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCiAKLWNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQorTWVtb3J5OjpN
ZW1vcnkoKQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOwotICAgIGNhc2UgTWVtb3J5TW9k
ZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwogfQogCi1NZW1vcnk6Ok1lbW9yeShQ
YWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCitNZW1vcnk6Ok1lbW9yeShQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIEZ1bmN0aW9uPHZvaWQoKT4mJiBub3Rp
ZnlNZW1vcnlQcmVzc3VyZSwgRnVuY3Rpb248dm9pZCgpPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1v
cnksIFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nl
c3NDYWxsYmFjaykKICAgICA6IG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1h
eGltdW0pCisgICAgLCBtX25vdGlmeU1lbW9yeVByZXNzdXJlKHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSkKKyAgICAsIG1fc3luY1RyeVRv
UmVjbGFpbU1lbW9yeShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5
VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhzdGQ6OmZvcndh
cmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNz
Q2FsbGJhY2spKQogewogICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygpKTsKICAgICBBU1NFUlQo
bV9tb2RlID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKTsKICAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CiAKLU1lbW9y
eTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKK01lbW9yeTo6TWVt
b3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBz
aXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUgbW9kZSwgRnVuY3Rpb248dm9pZCgpPiYm
IG5vdGlmeU1lbW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93
U3VjY2Vzc0NhbGxiYWNrKQogICAgIDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9zaXplKGlu
aXRpYWwuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVt
KG1heGltdW0pCiAgICAgLCBtX21hcHBlZENhcGFjaXR5KG1hcHBlZENhcGFjaXR5KQogICAgICwg
bV9tb2RlKG1vZGUpCisgICAgLCBtX25vdGlmeU1lbW9yeVByZXNzdXJlKHN0ZDo6Zm9yd2FyZDxX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSkKKyAgICAsIG1fc3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihz
eW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhzdGQ6
OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dT
dWNjZXNzQ2FsbGJhY2spKQogewogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Ok1l
bW9yeSBhbGxvY2F0aW5nICIsICp0aGlzKTsKIH0KQEAgLTI3NSw3ICsyODMsMTIgQEAgc3RhdGlj
IHZvaWQgY29tbWl0WmVyb1BhZ2VzKHZvaWQqIHN0YXJ0QWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5
dGVzKQogI2VuZGlmCiB9CiAKLVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQorUmVmUHRyPE1lbW9yeT4gTWVt
b3J5OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KCkpOworfQor
ICAgIAorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoUGFnZUNvdW50IGluaXRpYWwsIFBh
Z2VDb3VudCBtYXhpbXVtLCBGdW5jdGlvbjx2b2lkKCk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUs
IEZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9u
PHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCiB7CiAg
ICAgQVNTRVJUKGluaXRpYWwpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGlt
dW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxl
ci4KQEAgLTI4MywzMyArMjk2LDI3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZN
JiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgIGNvbnN0IHNp
emVfdCBpbml0aWFsQnl0ZXMgPSBpbml0aWFsLmJ5dGVzKCk7CiAgICAgY29uc3Qgc2l6ZV90IG1h
eGltdW1CeXRlcyA9IG1heGltdW0gPyBtYXhpbXVtLmJ5dGVzKCkgOiAwOwogCi0gICAgLy8gV2Ug
bmVlZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBzdHViIHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KLSAg
ICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBp
ZiAobWF4aW11bSAmJiAhbWF4aW11bUJ5dGVzKSB7CiAgICAgICAgIC8vIFVzZXIgc3BlY2lmaWVk
IGEgemVybyBtYXhpbXVtLCBpbml0aWFsIHNpemUgbXVzdCBhbHNvIGJlIHplcm8uCiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFpbml0aWFsQnl0ZXMpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0sIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248
dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0
aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBkb25lID0gdHJ5QW5kR0MoCi0gICAgICAgIHZtLAorICAg
IGJvb2wgZG9uZSA9IHRyeUFsbG9jYXRlKAogICAgICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0
OjpLaW5kIHsKICAgICAgICAgICAgIHJldHVybiBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQ
aHlzaWNhbEJ5dGVzKGluaXRpYWxCeXRlcyk7Ci0gICAgICAgIH0pOworICAgICAgICB9LCBub3Rp
ZnlNZW1vcnlQcmVzc3VyZSwgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgaWYgKCFkb25l
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgY2hhciogZmFzdE1lbW9y
eSA9IG51bGxwdHI7CiAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgp
KSB7Ci0gICAgICAgIHRyeUFuZEdDKAotICAgICAgICAgICAgdm0sCisgICAgICAgIHRyeUFsbG9j
YXRlKAogICAgICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAgICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVWaXJ0dWFs
UGFnZXMoKTsKICAgICAgICAgICAgICAgICBmYXN0TWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIq
PihyZXN1bHQuYmFzZVB0cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5raW5kOwot
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LCBub3RpZnlNZW1vcnlQcmVzc3VyZSwgc3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgfQogICAgIAogICAgIGlmIChmYXN0TWVtb3J5KSB7
CkBAIC0zMjAsMTUgKzMyNywxNSBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYg
dm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICAgICAgfQogCiAg
ICAgICAgIGNvbW1pdFplcm9QYWdlcyhmYXN0TWVtb3J5LCBpbml0aWFsQnl0ZXMpOwotICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoZmFzdE1lbW9yeSwgaW5pdGlh
bCwgbWF4aW11bSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgTWVtb3J5TW9kZTo6U2lnbmFs
aW5nKSk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoZmFzdE1lbW9yeSwg
aW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgTWVtb3J5TW9kZTo6
U2lnbmFsaW5nLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlNZW1v
cnlQcmVzc3VyZSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KHN5bmNUcnlU
b1JlY2xhaW1NZW1vcnkpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3Vu
dCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKSk7CiAgICAgfQogICAgIAogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgp
KSkKICAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpOwogCiAgICAgaWYg
KCFpbml0aWFsQnl0ZXMpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRp
YWwsIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlh
bCwgbWF4aW11bSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4obm90aWZ5TWVt
b3J5UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5
VG9SZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291
bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogICAgIAogICAgIHZvaWQq
IHNsb3dNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0
aXZlLCBXVEY6OnBhZ2VTaXplKCksIGluaXRpYWxCeXRlcyk7CiAgICAgaWYgKCFzbG93TWVtb3J5
KSB7CkBAIC0zMzYsNyArMzQzLDcgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0m
IHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICAgICBtZW1zZXQoc2xvd01lbW9yeSwgMCwgaW5pdGlhbEJ5dGVz
KTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShzbG93TWVtb3J5LCBpbml0aWFsLCBt
YXhpbXVtLCBpbml0aWFsQnl0ZXMsIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xvd01lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwg
aW5pdGlhbEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZywgc3RkOjpmb3J3YXJkPFdU
Rjo6RnVuY3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8
V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3
YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vz
c0NhbGxiYWNrKSkpOwogfQogCiBNZW1vcnk6On5NZW1vcnkoKQpAQCAtMzQ1LDcgKzM1MiwxMCBA
QCBNZW1vcnk6On5NZW1vcnkoKQogICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZVBoeXNpY2Fs
Qnl0ZXMobV9zaXplKTsKICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKICAgICAgICAgY2FzZSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmc6Ci0gICAgICAgICAgICBtcHJvdGVjdChtX21lbW9yeSwgTWVt
b3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgICAgICAg
ICAgICBpZiAobXByb3RlY3QobV9tZW1vcnksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygibXByb3Rl
Y3QgZmFpbGVkOiAiLCBzdHJlcnJvcihlcnJubyksICJcbiIpOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBt
ZW1vcnlNYW5hZ2VyKCkuZnJlZVZpcnR1YWxQYWdlcyhtX21lbW9yeSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKQEAgLTM3MSwz
NCArMzgxLDUwIEBAIGJvb2wgTWVtb3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkodm9p
ZCogYWRkcmVzcykKICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLmNvbnRhaW5zQWRkcmVzcyhh
ZGRyZXNzKTsKIH0KIAotYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291bnQgbmV3U2l6
ZSkKK0V4cGVjdGVkPFBhZ2VDb3VudCwgTWVtb3J5OjpHcm93RmFpbFJlYXNvbj4gTWVtb3J5Ojpn
cm93KFBhZ2VDb3VudCBkZWx0YSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXplID4gUGFn
ZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisgICAgY29uc3QgV2FzbTo6UGFnZUNvdW50IG9s
ZFBhZ2VDb3VudCA9IHNpemVJblBhZ2VzKCk7CiAKLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
TWVtb3J5Ojpncm93IHRvICIsIG5ld1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgaWYgKCFk
ZWx0YS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJl
YXNvbjo6SW52YWxpZERlbHRhKTsKKyAgICAKKyAgICBjb25zdCBXYXNtOjpQYWdlQ291bnQgbmV3
UGFnZUNvdW50ID0gb2xkUGFnZUNvdW50ICsgZGVsdGE7CisgICAgaWYgKCFuZXdQYWdlQ291bnQp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6SW52YWxpZEdy
b3dTaXplKTsKIAotICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+IG1heGltdW0oKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gc3VjY2VzcyA9IFsmXSAoKSB7CisgICAgICAg
IG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhvbGRQYWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7CisgICAg
ICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CisgICAgfTsKIAotICAgIHNpemVfdCBkZXNpcmVkU2l6
ZSA9IG5ld1NpemUuYnl0ZXMoKTsKKyAgICBpZiAoZGVsdGEucGFnZUNvdW50KCkgPT0gMCkKKyAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1v
cnk6Omdyb3coIiwgZGVsdGEsICIpIHRvICIsIG5ld1BhZ2VDb3VudCwgIiBmcm9tICIsICp0aGlz
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdQYWdlQ291bnQgPiBQYWdlQ291bnQ6OmZyb21CeXRl
cyhtX3NpemUpKTsKKworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3UGFnZUNvdW50ID4gbWF4aW11
bSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OldvdWxk
RXhjZWVkTWF4aW11bSk7CisKKyAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdQYWdlQ291bnQu
Ynl0ZXMoKTsKICAgICBSRUxFQVNFX0FTU0VSVChkZXNpcmVkU2l6ZSA+IG1fc2l6ZSk7CiAgICAg
c2l6ZV90IGV4dHJhQnl0ZXMgPSBkZXNpcmVkU2l6ZSAtIG1fc2l6ZTsKICAgICBSRUxFQVNFX0FT
U0VSVChleHRyYUJ5dGVzKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnlBbmRHQygKLSAgICAgICAg
dm0sCisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VzcyA9IHRyeUFsbG9jYXRlKAogICAgICAgICBb
Jl0gKCkgLT4gTWVtb3J5UmVzdWx0OjpLaW5kIHsKICAgICAgICAgICAgIHJldHVybiBtZW1vcnlN
YW5hZ2VyKCkudHJ5QWxsb2NhdGVQaHlzaWNhbEJ5dGVzKGV4dHJhQnl0ZXMpOwotICAgICAgICB9
KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisg
ICAgICAgIH0sIG1fbm90aWZ5TWVtb3J5UHJlc3N1cmUsIG1fc3luY1RyeVRvUmVjbGFpbU1lbW9y
eSk7CisgICAgaWYgKCFhbGxvY2F0aW9uU3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeSk7CisKICAgICBzd2l0Y2ggKG1vZGUo
KSkgewogICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0gMCk7Ci0gICAgICAgIAorCiAgICAgICAg
IHZvaWQqIG5ld01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKEdpZ2FjYWdlOjpQ
cmltaXRpdmUsIFdURjo6cGFnZVNpemUoKSwgZGVzaXJlZFNpemUpOwogICAgICAgICBpZiAoIW5l
d01lbW9yeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkpOworCiAgICAgICAgIG1l
bWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOwogICAgICAgICBtZW1zZXQoc3RhdGlj
X2Nhc3Q8Y2hhcio+KG5ld01lbW9yeSkgKyBtX3NpemUsIDAsIGRlc2lyZWRTaXplIC0gbV9zaXpl
KTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQpAQCAtNDA2LDcgKzQzMiw3IEBAIGJvb2wgTWVtb3J5
Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCiAgICAgICAgIG1fbWVtb3J5ID0gbmV3
TWVtb3J5OwogICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAgICAgICAg
IG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MoKTsKICAgICB9CiAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkpOwpAQCAtNDE1LDE2ICs0NDEsMTcgQEAg
Ym9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291bnQgbmV3U2l6ZSkKICAgICAgICAgCiAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5nIFdlYkFzc2VtYmx5IG1lbW9yeSdz
ICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiIGFzIHJlYWQrd3JpdGUgaW4gcmFuZ2UgWyIsIFJh
d1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9pbnRlcihzdGFydEFkZHJlc3MgKyBl
eHRyYUJ5dGVzKSwgIikiKTsKICAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXJ0QWRkcmVzcywgZXh0
cmFCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgZmFpbGVkICIsICp0aGlzKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRhdGFMb2coIm1wcm90ZWN0IGZh
aWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAiXG4iKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgY29tbWl0WmVyb1BhZ2VzKHN0
YXJ0QWRkcmVzcywgZXh0cmFCeXRlcyk7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKKyAgICAgICAgcmV0dXJuIHN1Y2Nl
c3MoKTsKKyAgICB9CisgICAgfQorCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKIH0KIAogdm9pZCBN
ZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnkuaAppbmRleCA2MGE5YmI3Li4zZjE4YzE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC0yNyw4ICsyNywxMSBAQAogCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKICNpbmNsdWRlICJX
YXNtUGFnZUNvdW50LmgiCiAKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIApAQCAtMzgsMTggKzQxLDggQEAgY2xhc3MgUHJpbnRTdHJlYW07CiAKIG5h
bWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCi0vLyBGSVhN
RTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotZW51bSBjbGFzcyBNZW1vcnlNb2RlIDogdWlu
dDhfdCB7Ci0gICAgQm91bmRzQ2hlY2tpbmcsCi0gICAgU2lnbmFsaW5nCi19Owotc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7Ci1KU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOwotCiBjbGFzcyBNZW1vcnkgOiBw
dWJsaWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZW1v
cnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTcsOCArNTAsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9Ci0gICAgCi0g
ICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSk7CisKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKCk7
CisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNz
dXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6
OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJh
Y2spOwogCiAgICAgfk1lbW9yeSgpOwogCkBAIC03NSwyMiArNjksMzQgQEAgcHVibGljOgogCiAg
ICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKLSAgICAvLyBn
cm93KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIEpTV2ViQXNzZW1ibHlNZW1vcnkg
b2JqZWN0IHNpbmNlIHRoYXQgb2JqZWN0IG5lZWRzIHRvIHVwZGF0ZSBpbnRlcm5hbAotICAgIC8v
IHBvaW50ZXJzIHdpdGggdGhlIGN1cnJlbnQgYmFzZSBhbmQgc2l6ZS4KLSAgICBib29sIGdyb3co
Vk0mLCBQYWdlQ291bnQpOworICAgIGVudW0gY2xhc3MgR3Jvd0ZhaWxSZWFzb24geworICAgICAg
ICBJbnZhbGlkRGVsdGEsCisgICAgICAgIEludmFsaWRHcm93U2l6ZSwKKyAgICAgICAgV291bGRF
eGNlZWRNYXhpbXVtLAorICAgICAgICBPdXRPZk1lbW9yeSwKKyAgICB9OworICAgIEV4cGVjdGVk
PFBhZ2VDb3VudCwgR3Jvd0ZhaWxSZWFzb24+IGdyb3coUGFnZUNvdW50KTsKIAogICAgIHZvaWQg
Y2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KKworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5
LCBtX21lbW9yeSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0KKwogcHJpdmF0ZToKLSAgICBN
ZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSk7Ci0gICAgTWVtb3J5KFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisgICAgTWVtb3J5KCk7CisgICAgTWVtb3J5
KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXpl
X3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5v
dGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNs
YWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdy
b3dTdWNjZXNzQ2FsbGJhY2spOworICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNv
dW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJl
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1
bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2sp
OwogCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoZXNlIHRvIHRoZSBpbnN0YW5jZSB0
byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNlIGNhbGxzLgorICAgIC8vIEZJWE1F
OiB3ZSBjYWNoZSB0aGVzZSBvbiB0aGUgaW5zdGFuY2VzIHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0
YW5jZS0+aW5zdGFuY2UgY2FsbHMuIFRoaXMgd2lsbCByZXF1aXJlIHVwZGF0aW5nIGFsbCB0aGUg
aW5zdGFuY2VzIHdoZW4gZ3JvdyBpcyBjYWxsZWQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzczMDUKICAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKICAg
ICBzaXplX3QgbV9zaXplIHsgMCB9OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7CiAgICAgUGFn
ZUNvdW50IG1fbWF4aW11bTsKICAgICBzaXplX3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKICAg
ICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fbm90aWZ5TWVtb3J5UHJlc3N1cmU7CisgICAgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeTsKKyAgICBXVEY6OkZ1bmN0
aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiBtX2dyb3dTdWNjZXNzQ2FsbGJhY2s7CiB9
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKaW5kZXggYmY1NjVmMC4uYjVj
MzRiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
SW5mb3JtYXRpb24uY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5m
byYgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1Bp
bm5lZFJlZ2lzdGVySW5mb0ZsYWcsIFtdICgpIHsKICAgICAgICAgVmVjdG9yPFBpbm5lZFNpemVS
ZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CiAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9p
bnRlciA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50ZXIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50
ZXIgPSBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9y
dCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyLCBhbmQgd2Ugc2hvdWxkIGFsbG93
IGRpZmZlcmVudAogICAgICAgICAvLyAgICAgICAgV2ViQXNzZW1ibHkuSW5zdGFuY2UgdG8gaGF2
ZSBkaWZmZXJlbnQgcGlucy4gUmlnaHQgbm93IHdlIHRha2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9u
ZSBlbnRyeS4KQEAgLTY1LDI3ICs2NSwyNyBAQCBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBp
bm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAgICAgICAgLy8gICAgICAgIHNlZTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgICAgICBWZWN0b3I8dW5z
aWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGlu
bmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6ZXMuc2l6ZSgpICsgMTsKLSAgICAgICAgaWYgKCF1c2VG
YXN0VExTRm9yQ29udGV4dCgpKQorICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkK
ICAgICAgICAgICAgICsrbnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnM7CiAgICAgICAgIFZlY3RvcjxH
UFJSZWc+IHBpbm5lZFJlZ3MgPSBnZXRQaW5uZWRSZWdpc3RlcnMobnVtYmVyT2ZQaW5uZWRSZWdp
c3RlcnMpOwogCiAgICAgICAgIGJhc2VNZW1vcnlQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFz
dCgpOwotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgICAgICB3
YXNtQ29udGV4dFBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CisgICAgICAgIGlmICgh
Q29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgd2FzbUNvbnRleHRJbnN0YW5jZVBv
aW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CiAKICAgICAgICAgQVNTRVJUKHBpbm5lZFNp
emVzLnNpemUoKSA9PSBwaW5uZWRSZWdzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwaW5uZWRTaXplcy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIHNpemVSZWdp
c3RlcnMuYXBwZW5kKHsgcGlubmVkUmVnc1tpXSwgcGlubmVkU2l6ZXNbaV0gfSk7Ci0gICAgICAg
IHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RGTW92ZShzaXplUmVnaXN0ZXJz
KSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0UG9pbnRlcik7CisgICAgICAgIHN0YXRp
Y1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSwgYmFz
ZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKICAgICB9KTsKIAog
ICAgIHJldHVybiBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uZ2V0KCk7CiB9CiAKLVBpbm5lZFJl
Z2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJ
bmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BSUmVnIHdh
c21Db250ZXh0UG9pbnRlcikKK1Bpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZv
KFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBi
YXNlTWVtb3J5UG9pbnRlciwgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKQogICAg
IDogc2l6ZVJlZ2lzdGVycyhXVEZNb3ZlKHNpemVSZWdpc3RlcnMpKQogICAgICwgYmFzZU1lbW9y
eVBvaW50ZXIoYmFzZU1lbW9yeVBvaW50ZXIpCi0gICAgLCB3YXNtQ29udGV4dFBvaW50ZXIod2Fz
bUNvbnRleHRQb2ludGVyKQorICAgICwgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIod2FzbUNv
bnRleHRJbnN0YW5jZVBvaW50ZXIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKaW5kZXggNDIzN2JhYy4uMjMzMjllYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7CiBzdHJ1
Y3QgUGlubmVkUmVnaXN0ZXJJbmZvIHsKICAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5m
bz4gc2l6ZVJlZ2lzdGVyczsKICAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgR1BS
UmVnIHdhc21Db250ZXh0UG9pbnRlcjsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBv
aW50ZXI7CiAgICAgc3RhdGljIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgZ2V0KCk7CiAgICAg
UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmLCBHUFJS
ZWcsIEdQUlJlZyk7CiAKQEAgLTUyLDggKzUyLDggQEAgc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5m
byB7CiAgICAgewogICAgICAgICBSZWdpc3RlclNldCByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5z
ZXQoYmFzZU1lbW9yeVBvaW50ZXIpOwotICAgICAgICBpZiAod2FzbUNvbnRleHRQb2ludGVyICE9
IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICByZXN1bHQuc2V0KHdhc21Db250ZXh0UG9pbnRl
cik7CisgICAgICAgIGlmICh3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgcmVzdWx0LnNldCh3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7
CiAgICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewogICAgICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogc2l6ZVJlZ2lzdGVycykKICAgICAgICAgICAgICAg
ICByZXN1bHQuc2V0KGluZm8uc2l6ZVJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iMWJjOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeU1vZGUuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXYXNtTWVtb3J5TW9kZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKKworY29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlNb2RlIG1vZGUpCit7CisgICAg
c3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogcmV0
dXJuICJCb3VuZHNDaGVja2luZyI7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHJl
dHVybiAiU2lnbmFsaW5nIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gIiI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeU1vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGZj
ODk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeU1vZGUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJKU0V4cG9ydE1hY3Jvcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFt
ZXNwYWNlIFdhc20geworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMu
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworZW51
bSBjbGFzcyBNZW1vcnlNb2RlIDogdWludDhfdCB7CisgICAgQm91bmRzQ2hlY2tpbmcsCisgICAg
U2lnbmFsaW5nCit9OworCitzdGF0aWMgY29uc3RleHByIHNpemVfdCBOdW1iZXJPZk1lbW9yeU1v
ZGVzID0gMjsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5
TW9kZSk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1MWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKaW5k
ZXggOGUzNjZmNC4uOTkyZTNkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZS5jcHAKQEAgLTU2LDI3ICs1NiwyNiBAQCBzdGF0aWMgTW9kdWxlOjpWYWxpZGF0aW9uUmVz
dWx0IG1ha2VWYWxpZGF0aW9uUmVzdWx0KEJCUVBsYW4mIHBsYW4pCiAKIHN0YXRpYyBQbGFuOjpD
b21wbGV0aW9uVGFzayBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKE1vZHVsZTo6QXN5bmNWYWxpZGF0
aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxQ
bGFuOjpDYWxsYmFja1R5cGU+KFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoVk0qIHZt
LCBQbGFuJiBwbGFuKSB7CisgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJh
Y2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFBsYW4mIHBsYW4pIHsKICAg
ICAgICAgQVNTRVJUKCFwbGFuLmhhc1dvcmsoKSk7Ci0gICAgICAgIEFTU0VSVCh2bSk7Ci0gICAg
ICAgIGNhbGxiYWNrLT5ydW4oKnZtLCBtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxC
QlFQbGFuJj4ocGxhbikpKTsKKyAgICAgICAgY2FsbGJhY2stPnJ1bihtYWtlVmFsaWRhdGlvblJl
c3VsdChzdGF0aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKICAgICB9KTsKIH0KIAotTW9kdWxl
OjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKFZNJiB2bSwgVmVjdG9yPHVp
bnQ4X3Q+JiYgc291cmNlKQorTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRh
dGVTeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKIHsKLSAg
ICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbigmdm0sIFdURk1vdmUo
c291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAg
ICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBXVEZN
b3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpLCBu
dWxscHRyLCBudWxscHRyKSk7CiAgICAgcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwog
ICAgIHJldHVybiBtYWtlVmFsaWRhdGlvblJlc3VsdChwbGFuLmdldCgpKTsKIH0KIAotdm9pZCBN
b2R1bGU6OnZhbGlkYXRlQXN5bmMoVk0mIHZtLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1v
ZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgTW9kdWxlOjp2
YWxpZGF0ZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwg
TW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIFJlZjxQ
bGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKCZ2bSwgV1RGTW92ZShzb3VyY2UpLCBC
QlFQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKFdURk1vdmUoY2FsbGJh
Y2spKSkpOworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRl
eHQsIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25D
YWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSksIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAKLVJlZjxDb2Rl
QmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlKQorUmVm
PENvZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0
LCBNZW1vcnlNb2RlIG1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVy
V3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBS
ZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOwpAQCAtODcsMjMgKzg2LDIzIEBAIFJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JD
cmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlKQogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3
YW50IHRvIGJhY2sgb2ZmIHJldHJ5aW5nIGF0IHNvbWUgcG9pbnQ6CiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYwNwogICAgIGlmICghY29kZUJsb2Nr
IHx8IChjb2RlQmxvY2stPmNvbXBpbGF0aW9uRmluaXNoZWQoKSAmJiAhY29kZUJsb2NrLT5ydW5u
YWJsZSgpKSkgewotICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZShtb2RlLCBj
b25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24oKSkpOworICAg
ICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZShjb250ZXh0LCBtb2RlLCBjb25zdF9j
YXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24oKSksIFdURk1vdmUoY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICAgICAgbV9jb2Rl
QmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXSA9IGNvZGVCbG9jazsKICAgICB9CiAg
ICAgcmV0dXJuIGNvZGVCbG9jay5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1SZWY8Q29kZUJsb2Nr
PiBNb2R1bGU6OmNvbXBpbGVTeW5jKE1lbW9yeU1vZGUgbW9kZSkKK1JlZjxDb2RlQmxvY2s+IE1v
ZHVsZTo6Y29tcGlsZVN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVh
dGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2Vw
dGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2Nr
ID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2sobW9kZSk7CisgICAgUmVmPENvZGVCbG9jaz4gY29kZUJs
b2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgV1RGTW92ZShjcmVhdGVF
bWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIGNvZGVCbG9jay0+d2Fp
dFVudGlsRmluaXNoZWQoKTsKICAgICByZXR1cm4gY29kZUJsb2NrOwogfQogCi12b2lkIE1vZHVs
ZTo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgTWVtb3J5TW9kZSBtb2RlLCBDb2RlQmxvY2s6OkFzeW5j
Q29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCit2b2lkIE1vZHVsZTo6Y29tcGlsZUFzeW5jKENv
bnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0
aW9uQ2FsbGJhY2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRl
cldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAg
UmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2sobW9kZSk7Ci0g
ICAgY29kZUJsb2NrLT5jb21waWxlQXN5bmModm0sIFdURk1vdmUodGFzaykpOworICAgIFJlZjxD
b2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUs
IFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAg
ICBjb2RlQmxvY2stPmNvbXBpbGVBc3luYyhjb250ZXh0LCBXVEZNb3ZlKHRhc2spKTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGUuaAppbmRleCBhMWFmNzU4Li5hNmFlMjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCiAjaW5jbHVkZSAiV2FzbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5o
IgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNp
bmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtMzYsMTkgKzM3LDIwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKK3N0cnVjdCBDb250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9y
bWF0aW9uOwogY2xhc3MgUGxhbjsKIAogdXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1aW50MzJfdDsK
LSAgICAKKwogY2xhc3MgTW9kdWxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVs
ZT4gewogcHVibGljOgogICAgIHVzaW5nIFZhbGlkYXRpb25SZXN1bHQgPSBXVEY6OkV4cGVjdGVk
PFJlZlB0cjxNb2R1bGU+LCBTdHJpbmc+OwotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUo
Vk0mLCBWYWxpZGF0aW9uUmVzdWx0JiYpOworICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUo
VmFsaWRhdGlvblJlc3VsdCYmKTsKICAgICB1c2luZyBBc3luY1ZhbGlkYXRpb25DYWxsYmFjayA9
IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwogCi0gICAgc3RhdGljIFZhbGlkYXRp
b25SZXN1bHQgdmFsaWRhdGVTeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKTsKLSAg
ICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNl
LCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOworICAgIHN0YXRpYyBWYWxpZGF0
aW9uUmVzdWx0IHZhbGlkYXRlU3luYyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNl
KTsKKyAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKENvbnRleHQqLCBWZWN0b3I8dWludDhf
dD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJik7CiAKICAgICBz
dGF0aWMgUmVmPE1vZHVsZT4gY3JlYXRlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJiBtb2R1bGVJ
bmZvcm1hdGlvbikKICAgICB7CkBAIC01OCwxNCArNjAsMTQgQEAgcHVibGljOgogICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCk7IH0KIAotICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKE1lbW9y
eU1vZGUpOwotICAgIHZvaWQgY29tcGlsZUFzeW5jKFZNJiwgTWVtb3J5TW9kZSwgQ29kZUJsb2Nr
OjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CisgICAgUmVmPENvZGVCbG9jaz4gY29tcGls
ZVN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJv
d1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBNZW1vcnlN
b2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmLCBDcmVhdGVFbWJlZGRl
cldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5Nb2R1bGUoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yKE1lbW9yeU1vZGUgbW9k
ZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXS5nZXQo
KTsgfQogcHJpdmF0ZToKLSAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVCbG9jayhN
ZW1vcnlNb2RlKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250
ZXh0KiwgTWVtb3J5TW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2Vw
dGlvbik7CiAKICAgICBNb2R1bGUoUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmKTsKICAgICBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDZjOTQ4YjUuLjZkNDRh
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVk
ZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIK
ICNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtTmFtZVNl
Y3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCkBAIC0yNjUsNyArMjY0LDcgQEAg
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFy
dGlhbFJlc3VsdAogICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1p
dHMoaW5pdGlhbCwgbWF4aW11bSk7CiAgICAgaWYgKFVOTElLRUxZKCFsaW1pdHMpKQogICAgICAg
ICByZXR1cm4gbGltaXRzLmdldFVuZXhwZWN0ZWQoKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRTaXplKGluaXRpYWwpLCAiVGFibGUncyBpbml0
aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4VGFibGVFbnRyaWVzLCAiVGFibGUncyBpbml0aWFs
IHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyB0b28gYmlnLCBtYXhpbXVtICIsIG1heFRh
YmxlRW50cmllcyk7CiAKICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlh
bCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA3
NGNmNjUzLi5jY2RmNzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uY3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNp
bmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4
dC5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUgIldhc21NZW1v
cnkuaCIKQEAgLTUxLDEwICs1MiwxMCBAQCBuYW1lc3BhY2UgV2FzbU9NR1BsYW5JbnRlcm5hbCB7
CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLU9NR1BsYW46Ok9NR1Bs
YW4oUmVmPE1vZHVsZT4gbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2Rl
IG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2UobnVsbHB0ciwgbWFrZVJl
Zihjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlv
bigpKSksIFdURk1vdmUodGFzaykpCi0gICAgLCBtX21vZHVsZShtb2R1bGUuY29weVJlZigpKQot
ICAgICwgbV9jb2RlQmxvY2soKm1vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQorT01HUGxhbjo6
T01HUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisg
ICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+
KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQorICAgICwgbV9t
b2R1bGUoV1RGTW92ZShtb2R1bGUpKQorICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2Rl
QmxvY2tGb3IobW9kZSkpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsK
ICAgICBzZXRNb2RlKG1vZGUpOwpAQCAtMTYyLDEzICsxNjMsMTMgQEAgdm9pZCBPTUdQbGFuOjp3
b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwog
fQogCi12b2lkIHJ1bk9NR1BsYW5Gb3JJbmRleChDb250ZXh0KiBjb250ZXh0LCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4KQordm9pZCBPTUdQbGFuOjpydW5Gb3JJbmRleChKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogewotICAgIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvbnRleHQtPmNvZGVCbG9jaygpOwotICAgIEFT
U0VSVChjb250ZXh0LT5tZW1vcnlNb2RlKCkgPT0gY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+bW9k
ZSgpKTsKKyAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jayA9IGluc3RhbmNlLT53YXNtQ29k
ZUJsb2NrKCk7CisgICAgQVNTRVJUKGluc3RhbmNlLT53YXNtTWVtb3J5KCktPm1vZGUoKSA9PSBj
b2RlQmxvY2subW9kZSgpKTsKIAotICAgIGlmIChjb2RlQmxvY2stPm1fY29kZUJsb2NrLT50aWVy
VXBDb3VudChmdW5jdGlvbkluZGV4KS5zaG91bGRTdGFydFRpZXJVcCgpKSB7Ci0gICAgICAgIFJl
ZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKGNvbnRleHQtPm1vZHVsZSgpLT5t
b2R1bGUoKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+bW9kZSgpLCBQ
bGFuOjpkb250RmluYWxpemUoKSkpOworICAgIGlmIChjb2RlQmxvY2sudGllclVwQ291bnQoZnVu
Y3Rpb25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAoKSkgeworICAgICAgICBSZWY8UGxhbj4gcGxh
biA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6
TW9kdWxlPihpbnN0YW5jZS0+d2FzbU1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2Nr
Lm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAgZW5zdXJlV29ya2xpc3Qo
KS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25z
Ojp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRp
b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFu
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCmluZGV4IDcxNjRh
OWUuLmI4MDgyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
TUdQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaApA
QCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAi
Vk0uaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIK
ICNpbmNsdWRlICJXYXNtUGxhbi5oIgpAQCAtNDEsMTcgKzQwLDIwIEBAIG5hbWVzcGFjZSBXYXNt
IHsKIGNsYXNzIE9NR1BsYW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CiBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IFBsYW47Ci0gICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBo
b2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVm
ZXJlbmNlIGN5Y2xlLgotICAgIE9NR1BsYW4oUmVmPE1vZHVsZT4sIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgYm9vbCBoYXNXb3Jr
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fY29tcGxldGVkOyB9CiAgICAgdm9pZCB3b3Jr
KENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgc3RhdGljIHZvaWQgcnVuRm9y
SW5kZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisK
IHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRl
bmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KICAgICB1c2luZyBCYXNlOjptX2xvY2s7CiAKKyAgICAv
LyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhl
IFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgT01H
UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVt
b3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CisKICAgICBib29sIGlzQ29tcGxldGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2NvbXBsZXRlZDsgfQogICAgIHZvaWQgY29tcGxldGUoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikgb3ZlcnJpZGUKICAgICB7CkBAIC02NSw4ICs2Nyw2
IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwogfTsKIAotdm9pZCBy
dW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCosIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwotCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCmluZGV4IGU0Mzg0
N2MuLmVmMDVmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHBhZ2VDb3Vu
dCA8PSBtYXhQYWdlQ291bnQ7CiAgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaXNWYWxpZChtX3BhZ2VDb3VudCk7CisgICAgfQogCiAg
ICAgc3RhdGljIFBhZ2VDb3VudCBmcm9tQnl0ZXModWludDY0X3QgYnl0ZXMpCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGJhMjdjZjkuLmQwNjNjYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOCArMjksNiBAQAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNs
dWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtNTEsMjAgKzQ5LDI3IEBAIG5hbWVzcGFjZSBXYXNtUGxh
bkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotUGxh
bjo6UGxhbihWTSogdm0sIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQ29tcGxldGlvblRh
c2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3Jt
YXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVy
JiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQogICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKGluZm8pKQorICAgICwg
bV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpKQor
ICAgICwgbV90aHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9z
b3VyY2UobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkKICAgICAsIG1fc291cmNl
TGVuZ3RoKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkpCiB7Ci0gICAgbV9jb21w
bGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHZtLCBXVEZNb3ZlKHRhc2spKSk7Cisg
ICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1v
dmUodGFzaykpKTsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxh
bihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4oY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92
ZSh0YXNrKSwgbnVsbHB0ciwgbnVsbHB0cikKK3sKK30KKworUGxhbjo6UGxhbihDb250ZXh0KiBj
b250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBs
ZXRpb25UYXNrJiYgdGFzaykKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5l
dyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQogICAgICwgbV9zb3VyY2Uo
c291cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQogewotICAgIG1fY29t
cGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih2bSwgV1RGTW92ZSh0YXNrKSkpOwor
ICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0LCBXVEZN
b3ZlKHRhc2spKSk7CiB9CiAKIHZvaWQgUGxhbjo6cnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikKQEAgLTcyLDE4ICs3NywxOCBAQCB2b2lkIFBsYW46OnJ1bkNvbXBsZXRp
b25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgQVNTRVJUKGlzQ29tcGxldGUoKSAm
JiAhaGFzV29yaygpKTsKIAogICAgIGZvciAoYXV0byYgdGFzayA6IG1fY29tcGxldGlvblRhc2tz
KQotICAgICAgICB0YXNrLnNlY29uZC0+cnVuKHRhc2suZmlyc3QsICp0aGlzKTsKKyAgICAgICAg
dGFzay5zZWNvbmQtPnJ1bigqdGhpcyk7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuY2xlYXIoKTsK
ICAgICBtX2NvbXBsZXRlZC5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBQbGFuOjphZGRDb21wbGV0
aW9uVGFzayhWTSYgdm0sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK3ZvaWQgUGxhbjo6YWRkQ29t
cGxldGlvblRhc2soQ29udGV4dCogY29udGV4dCwgQ29tcGxldGlvblRhc2smJiB0YXNrKQogewog
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgaWYgKCFpc0NvbXBsZXRlKCkpCi0g
ICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdm0sIFdURk1v
dmUodGFzaykpKTsKKyAgICAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKICAgICBlbHNlCi0gICAgICAgIHRhc2stPnJ1
bigmdm0sICp0aGlzKTsKKyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsKIH0KIAogdm9pZCBQbGFu
Ojp3YWl0Rm9yQ29tcGxldGlvbigpCkBAIC05NCwxOSArOTksMTkgQEAgdm9pZCBQbGFuOjp3YWl0
Rm9yQ29tcGxldGlvbigpCiAgICAgfQogfQogCi1ib29sIFBsYW46OnRyeVJlbW92ZVZNQW5kQ2Fu
Y2VsSWZMYXN0KFZNJiB2bSkKK2Jvb2wgUGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElm
TGFzdChDb250ZXh0JiBjb250ZXh0KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7
CiAKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBXZSBhbGxvdyB0aGUg
Zmlyc3QgY29tcGxldGlvbiB0YXNrIHRvIG5vdCBoYXZlIGEgdm0uCisgICAgICAgIC8vIFdlIGFs
bG93IHRoZSBmaXJzdCBjb21wbGV0aW9uIHRhc2sgdG8gbm90IGhhdmUgYSBDb250ZXh0LgogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9jb21wbGV0aW9uVGFza3Muc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICBBU1NFUlQobV9jb21wbGV0aW9uVGFza3NbaV0uZmlyc3QpOwogICAg
IH0KIAogICAgIGJvb2wgcmVtb3ZlZEFueVRhc2tzID0gZmFsc2U7Ci0gICAgbV9jb21wbGV0aW9u
VGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBzdGQ6OnBhaXI8Vk0qLCBDb21wbGV0
aW9uVGFzaz4mIHBhaXIpIHsKLSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmUgPSBwYWlyLmZpcnN0
ID09ICZ2bTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNv
bnN0IHN0ZDo6cGFpcjxDb250ZXh0KiwgQ29tcGxldGlvblRhc2s+JiBwYWlyKSB7CisgICAgICAg
IGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFpci5maXJzdCA9PSAmY29udGV4dDsKICAgICAgICAgcmVt
b3ZlZEFueVRhc2tzIHw9IHNob3VsZFJlbW92ZTsKICAgICAgICAgcmV0dXJuIHNob3VsZFJlbW92
ZTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IDEwZjhh
MWIuLjdhMDdiZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApAQCAtMjgs
OCArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0
aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZv
cm1hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFz
ay5oPgpAQCAtMzksMjUgKzM5LDI3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbExp
bmtJbmZvOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsK
IAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKKwogY2xhc3MgUGxhbiA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2
b2lkIENhbGxiYWNrVHlwZShWTSosIFBsYW4mKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tU
eXBlKFBsYW4mKTsKICAgICB1c2luZyBDb21wbGV0aW9uVGFzayA9IFJlZlB0cjxTaGFyZWRUYXNr
PENhbGxiYWNrVHlwZT4+OwotICAgIHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250RmluYWxpemUo
KSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oVk0qLCBQbGFuJikg
eyB9KTsgfQotICAgIFBsYW4oVk0qLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9u
VGFzayYmKTsKKworICAgIHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJl
dHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oUGxhbiYpIHsgfSk7IH0KKyAg
ICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYm
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBQbGFu
KENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKIAog
ICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3Ug
YXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlkYXRpb24vZnVuY3Rp
b24gdGVzdHMKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgY29uc3QgdWludDhfdCos
IHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihD
b250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7CiAgICAg
dmlydHVhbCBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwogCiAgICAgLy8gSWYgeW91IGd1YXJh
bnRlZSB0aGUgb3JkZXJpbmcgaGVyZSwgeW91IGNhbiByZWx5IG9uIEZJRk8gb2YgdGhlCiAgICAg
Ly8gY29tcGxldGlvbiB0YXNrcyBiZWluZyBjYWxsZWQuCi0gICAgdm9pZCBhZGRDb21wbGV0aW9u
VGFzayhWTSYsIENvbXBsZXRpb25UYXNrJiYpOworICAgIHZvaWQgYWRkQ29tcGxldGlvblRhc2so
Q29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgdm9pZCBzZXRNb2RlKE1lbW9yeU1v
ZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlOyB9CkBAIC03Miw3ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY2FuY2VsbGVk
IHRoZSBwbGFuLgotICAgIGJvb2wgdHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3QoVk0mKTsKKyAg
ICBib29sIHRyeVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBydW5Db21wbGV0aW9uVGFza3MoY29uc3QgQWJzdHJhY3RMb2NrZXIm
KTsKQEAgLTgzLDcgKzg1LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8Vk0qLCBD
b21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRhc2tzOworICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiwgMT4gbV9jb21wbGV0aW9uVGFza3M7CisKKyAg
ICBDcmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CisgICAgVGhy
b3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogCiAgICAg
Y29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3Ro
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAppbmRleCA4
YjYwMGVkLi42YTQyZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2lnbmF0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2ln
bmF0dXJlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCwxMCArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAot
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0
dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKaW5kZXgg
ZTQxM2IyNS4uYWFjZWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNpZ25hdHVyZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWdu
YXR1cmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Myw4ICs0Myw2IEBAIGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgU2lnbmF0dXJlQXJn
Q291bnQgPSB1aW50MzJfdDsKQEAgLTE1Niw3ICsxNTQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFzaD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8SgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi0vLyBTaWduYXR1cmUg
aW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5IFZNcyB0byBhbGxvdyBh
bGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNh
bGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJl
IHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4KKy8vIFNpZ25hdHVyZSBpbmZvcm1hdGlvbiBp
cyBoZWxkIGdsb2JhbGx5IGFuZCBzaGFyZWQgYnkgdGhlIGVudGlyZSBwcm9jZXNzIHRvIGFsbG93
IGFsbCBzaWduYXR1cmVzIHRvIGJlIHVuaXF1ZS4gVGhpcyBpcyByZXF1aXJlZCB3aGVuIHdhc20g
Y2FsbHMgYW5vdGhlciB3YXNtIGluc3RhbmNlLCBhbmQgbXVzdCB3b3JrIHdoZW4gbW9kdWxlcyBh
cmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgVk1zLgogLy8gTm90ZTogc2lnbmF0dXJlcyBhcmUg
bmV2ZXIgcmVtb3ZlZCBiZWNhdXNlIHRoYXQgd291bGQgcmVxdWlyZSBhY2NvdW50aW5nIGZvciBh
bGwgV2ViQXNzZW1ibHkuTW9kdWxlIGFuZCB3aGljaCBzaWduYXR1cmVzIHRoZXkgdXNlLiBUaGUg
bWF4aW11bSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBpcyBib3VuZGVkLCBhbmQgaXNuJ3Qgd29ydGgg
dGhlIGNvdW50aW5nIG92ZXJoZWFkLiBXZSBjb3VsZCBjbGVhciBldmVyeXRoaW5nIHdoZW4gd2Ug
cmVhY2ggemVybyBvdXRzdGFuZGluZyBXZWJBc3NlbWJseS5Nb2R1bGUuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMzcKIGNsYXNzIFNpZ25hdHVyZUluZm9ybWF0
aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaWduYXR1cmVJbmZvcm1hdGlvbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42ZGVmYWVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXYXNtVGFibGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworUmVmUHRyPFRhYmxl
PiBUYWJsZTo6Y3JlYXRlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IG1heGltdW0pCit7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgZmFzdE1hbGxv
YyhzaXplb2YoVGFibGUpKSkgVGFibGUoaW5pdGlhbCwgbWF4aW11bSkpOworfQorCitUYWJsZTo6
flRhYmxlKCkKK3sKK30KKworVGFibGU6OlRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgbV9zaXplID0gaW5pdGlhbDsKKyAgICBt
X21heGltdW0gPSBtYXhpbXVtOworICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3NpemUpKTsKKyAg
ICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7CisKKyAgICAvLyBG
SVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhl
cmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCisgICAgLy8gQnV0IGZvciBub3csIHdl
J3JlIG5vdCBkb2luZyB0aGF0LgorICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNh
bGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICog
c3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICBtX2luc3RhbmNlcyA9IE1hbGxvY1B0
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPjo6bWFsbG9jKHNpemVvZihKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdl
dCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChtX2Z1bmN0
aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJ
bmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBtX2lu
c3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKK3sKKyAgICBpZiAoZGVsdGEgPT0g
MCkKKyAgICAgICAgcmV0dXJuIHNpemUoKTsKKworICAgIHVzaW5nIENoZWNrZWQgPSBDaGVja2Vk
PHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz47CisgICAgQ2hlY2tlZCBuZXdTaXplQ2hlY2tlZCA9
IHNpemUoKTsKKyAgICBuZXdTaXplQ2hlY2tlZCArPSBkZWx0YTsKKyAgICB1aW50MzJfdCBuZXdT
aXplOworICAgIGlmIChuZXdTaXplQ2hlY2tlZC5zYWZlR2V0KG5ld1NpemUpID09IENoZWNrZWRT
dGF0ZTo6RGlkT3ZlcmZsb3cpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBp
ZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICB7CisgICAgICAgIENoZWNrZWQgcmVhbGxvY0Z1bmN0aW9u
c1NpemVDaGVja2VkID0gbmV3U2l6ZUNoZWNrZWQ7CisgICAgICAgIHJlYWxsb2NGdW5jdGlvbnNT
aXplQ2hlY2tlZCAqPSBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbik7CisgICAgICAgIHVpbnQzMl90
IHJlYWxsb2NGdW5jdGlvbnNTaXplOworICAgICAgICBpZiAocmVhbGxvY0Z1bmN0aW9uc1NpemVD
aGVja2VkLnNhZmVHZXQocmVhbGxvY0Z1bmN0aW9uc1NpemUpID09IENoZWNrZWRTdGF0ZTo6RGlk
T3ZlcmZsb3cpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBtX2Z1
bmN0aW9ucy5yZWFsbG9jKHJlYWxsb2NGdW5jdGlvbnNTaXplKTsKKyAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gbV9zaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgbmV3ICgmbV9m
dW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICB9CisgICAg
CisgICAgeworICAgICAgICBDaGVja2VkIHJlYWxsb2NJbnN0YW5jZXNTaXplQ2hlY2tlZCA9IG5l
d1NpemVDaGVja2VkOworICAgICAgICByZWFsbG9jSW5zdGFuY2VzU2l6ZUNoZWNrZWQgKj0gc2l6
ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworICAgICAgICB1aW50MzJfdCByZWFsbG9jSW5z
dGFuY2VzU2l6ZTsKKyAgICAgICAgaWYgKHJlYWxsb2NJbnN0YW5jZXNTaXplQ2hlY2tlZC5zYWZl
R2V0KHJlYWxsb2NJbnN0YW5jZXNTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgbV9pbnN0YW5jZXMucmVh
bGxvYyhyZWFsbG9jSW5zdGFuY2VzU2l6ZSk7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG1f
c2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgIG1faW5zdGFuY2VzLmdldCgpW2ld
ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX3NpemUgPSBuZXdTaXplOworCisgICAgcmV0dXJu
IG5ld1NpemU7Cit9CisKK3ZvaWQgVGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIG1fZnVuY3Rpb25z
LmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICBBU1NFUlQobV9m
dW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6
aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCisgICAg
bV9pbnN0YW5jZXMuZ2V0KClbaW5kZXhdID0gbnVsbHB0cjsKK30KKwordm9pZCBUYWJsZTo6c2V0
RnVuY3Rpb24odWludDMyX3QgaW5kZXgsIENhbGxhYmxlRnVuY3Rpb24gZnVuY3Rpb24sIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXgg
PCBzaXplKCkpOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9uOworICAg
IG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IGluc3RhbmNlOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6VGFibGUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjkwOGVjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UYWJsZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTGltaXRzLmgi
CisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsgLy8g
RklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5zdGFuY2UgaHR0cHM6Ly93ZWJraXQub3JnL2Iv
MTc3NDcyCisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgVGFibGUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8VGFibGU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENyZWF0ZUZh
aWwgeworICAgICAgICBJbnZhbGlkU2l6ZSwKKyAgICB9OworICAgIHN0YXRpYyBSZWZQdHI8VGFi
bGU+IGNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhp
bXVtKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UYWJsZSgpOworCisgICAgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQorICAg
IHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIHNldEZ1bmN0aW9uKHVp
bnQzMl90LCBDYWxsYWJsZUZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsgLy8gRklY
TUUgbWFrZSB0aGlzIFdhc206Okluc3RhbmNlLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIK
KworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFRhYmxlLCBtX3NpemUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1
bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9mdW5jdGlvbnMpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlcygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihUYWJsZSwgbV9pbnN0YW5jZXMpOyB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1Zh
bGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBzaXplIDwgbWF4VGFibGVFbnRyaWVzOyB9
CisKK3ByaXZhdGU6CisgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtX21heGlt
dW07CisgICAgdWludDMyX3QgbV9zaXplOworICAgIE1hbGxvY1B0cjxDYWxsYWJsZUZ1bmN0aW9u
PiBtX2Z1bmN0aW9uczsKKyAgICAvLyBjYWxsX2luZGlyZWN0IG5lZWRzIHRvIGRvIGFuIEluc3Rh
bmNlIGNoZWNrIHRvIHBvdGVudGlhbGx5IGNvbnRleHQgc3dpdGNoIHdoZW4gY2FsbGluZyBhIGZ1
bmN0aW9uIHRvIGFub3RoZXIgaW5zdGFuY2UuIFdlIGNhbiBob2xkIHJhdyBwb2ludGVycyB0byBJ
bnN0YW5jZSBoZXJlIGJlY2F1c2UgdGhlIGVtYmVkZGVyIGVuc3VyZXMgdGhhdCBUYWJsZSBrZWVw
cyBhbGwgdGhlIGluc3RhbmNlcyBhbGl2ZS4gV2UgY291bGRuJ3QgaG9sZCBhIFJlZiBoZXJlIGJl
Y2F1c2UgaXQgd291bGQgY2F1c2UgY3ljbGVzLgorICAgIE1hbGxvY1B0cjxKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqPiBtX2luc3RhbmNlczsgLy8gRklYTUUgbWFrZSB0aGlzIGEgV2FzbTo6SW5zdGFu
Y2UuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKaW5kZXggOTc3YjAxYi4uYzIzNTk4MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTI5LDExICsyOSw5IEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0j
aW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiSGVhcENlbGxJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJM
aW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiV2FzbUNvbnRleHQuaCIKQEAgLTQ4LDQ2ICs0NiwxOCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0
TG9ja2VyJgogCiAgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVyZSBtdXN0IG1vdmUgRXhj
ZXB0aW9uVHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYmVmb3JlIGp1bXBpbmcgaGVyZS4KICAg
ICAvLyBXZSdyZSBhbGxvd2VkIHRvIHVzZSB0ZW1wIHJlZ2lzdGVycyBoZXJlLiBXZSBhcmUgbm90
IGFsbG93ZWQgdG8gdXNlIGNhbGxlZSBzYXZlcy4KLSAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQ29udGV4dDo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5m
bzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVk0o
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBq
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CiAgICAgaml0Lmp1
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGppdC5icmVha3BvaW50KCk7IC8vIFdl
IHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAotICAgIHZvaWQqICgqdGhyb3dXYXNtRXhjZXB0aW9u
KShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBXYXNtOjpDb250ZXh0KikgPSBbXSAo
RXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIFdhc206OkNvbnRleHQq
IHdhc21Db250ZXh0KSAtPiB2b2lkKiB7Ci0gICAgICAgIFZNKiB2bSA9IHdhc21Db250ZXh0LT52
bSgpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQot
ICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKCp2bSk7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gd2Fz
bUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotCi0gICAgICAgICAgICBKU09iamVjdCogZXJyb3I7
IAotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3RhY2tPdmVyZmxvdykK
LSAgICAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBn
bG9iYWxPYmplY3QpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVycm9yID0g
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGV4ZWMsICp2bSwgZ2xvYmFsT2JqZWN0
LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1lc3NhZ2VG
b3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdlbmVyaWNVbndpbmQo
dm0sIGV4ZWMpOwotICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAg
ICAgICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwotICAgICAgICAvLyBG
SVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKLSAgICAgICAgLy8gVGhpcyBpcyBhIHRv
dGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRsZVVuY2F1Z2h0
RXhjZXB0aW9uKQotICAgICAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxk
IHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCi0gICAg
ICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50
ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KLSAgICAgICAgLy8gZm9y
IGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUg
cmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKLSAgICAgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5k
bGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0
MAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtDYWxsRnJhbWVTbG90Ojpj
YWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih3YXNtQ29udGV4dC0+d2ViQXNzZW1ibHlU
b0pTQ2FsbGVlKCkpOwotICAgICAgICByZXR1cm4gdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
OwotICAgIH07Ci0KKyAgICBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uID0g
VGh1bmtzOjpzaW5nbGV0b24oKS50aHJvd1dhc21FeGNlcHRpb24oKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93V2FzbUV4
Y2VwdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKHRocm93V2Fz
bUV4Y2VwdGlvbikpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiVGhy
b3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpKTsKIH0KIApAQCAtMTE5LDggKzg5LDEwIEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJz
dHJhY3RMb2NrZXImKQogI2VuZGlmCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNl
ZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVz
ZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgZXh0cmFQ
YWRkaW5nQnl0ZXMpOwogCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJ1bk9NR1BsYW5Gb3JJbmRleCkpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIHR5cGVkZWYgdm9pZCAoKlJ1bikoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwg
dWludDMyX3QpOworICAgIFJ1biBydW4gPSBPTUdQbGFuOjpydW5Gb3JJbmRleDsKKyAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PihydW4pKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuY2FsbChHUFJJbmZvOjph
cmd1bWVudEdQUjIpOwogCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVn
aXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJlZ2lzdGVyU2V0
KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwgZXh0cmFQ
YWRkaW5nQnl0ZXMpOwpAQCAtMTQyLDYgKzExNCwxOSBAQCBUaHVua3MmIFRodW5rczo6c2luZ2xl
dG9uKCkKICAgICByZXR1cm4gKnRodW5rczsKIH0KIAordm9pZCBUaHVua3M6OnNldFRocm93V2Fz
bUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQoreworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAvLyBUaGUgdGh1bmtzIGFyZSB1
bmlxdWUgZm9yIHRoZSBlbnRpcmUgcHJvY2VzcywgdGhlcmVmb3JlIGNoYW5naW5nIHRoZSB0aHJv
d2luZyBmdW5jdGlvbiBjaGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBvZiBXZWJBc3NlbWJseS4KKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV90aHJvd1dhc21FeGNlcHRpb24gfHwgbV90aHJvd1dhc21FeGNl
cHRpb24gPT0gdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBtX3Rocm93V2FzbUV4Y2VwdGlvbiA9
IHRocm93V2FzbUV4Y2VwdGlvbjsKK30KKworVGhyb3dXYXNtRXhjZXB0aW9uIFRodW5rczo6dGhy
b3dXYXNtRXhjZXB0aW9uKCkKK3sKKyAgICByZXR1cm4gbV90aHJvd1dhc21FeGNlcHRpb247Cit9
CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6OnN0dWIoVGh1bmtHZW5lcmF0b3IgZ2Vu
ZXJhdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBkZjE0Y2EyLi41Mjk3NjRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKQEAgLTQyLDYgKzQzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemUoKTsKICAgICBzdGF0aWMgVGh1bmtzJiBzaW5nbGV0b24oKTsKIAorICAgIHZvaWQg
c2V0VGhyb3dXYXNtRXhjZXB0aW9uKFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgVGhyb3dXYXNt
RXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbigpOworCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHN0dWIoVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHVi
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IpOwpAQCAtNTAsNiArNTQsNyBA
QCBwcml2YXRlOgogICAgIFRodW5rcygpID0gZGVmYXVsdDsKIAogICAgIEhhc2hNYXA8VGh1bmtH
ZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9zdHViczsKKyAgICBUaHJvd1dhc21F
eGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRyIH07CiAgICAgTG9jayBtX2xv
Y2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29y
a2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcApp
bmRleCA5YzViNjg0Li4yZmUxMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Xb3JrbGlzdC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmts
aXN0LmgiCiAKQEAgLTE3MiwxMyArMTczLDEzIEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlUGxh
blN5bmNocm9ub3VzbHkoUGxhbiYgcGxhbikKICAgICBwbGFuLndhaXRGb3JDb21wbGV0aW9uKCk7
CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKK3ZvaWQgV29y
a2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRleHQoQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBM
b2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBWZWN0b3I8UXVldWVFbGVtZW50PiBlbGVt
ZW50czsKICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIFF1ZXVlRWxl
bWVudCBlbGVtZW50ID0gbV9xdWV1ZS5kZXF1ZXVlKCk7Ci0gICAgICAgIGJvb2wgZGlkQ2FuY2Vs
ID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7CisgICAgICAg
IGJvb2wgZGlkQ2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250ZXh0QW5kQ2FuY2Vs
SWZMYXN0KGNvbnRleHQpOwogICAgICAgICBpZiAoIWRpZENhbmNlbCkKICAgICAgICAgICAgIGVs
ZW1lbnRzLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICB9CkBAIC0xODgsNyArMTg5LDcg
QEAgdm9pZCBXb3JrbGlzdDo6c3RvcEFsbFBsYW5zRm9yVk0oVk0mIHZtKQogCiAgICAgZm9yIChh
dXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKICAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5w
bGFuKSB7Ci0gICAgICAgICAgICBib29sIGRpZENhbmNlbCA9IHRocmVhZC0+ZWxlbWVudC5wbGFu
LT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7CisgICAgICAgICAgICBib29sIGRpZENh
bmNlbCA9IHRocmVhZC0+ZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250ZXh0QW5kQ2FuY2VsSWZM
YXN0KGNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGRpZENhbmNlbCkgewogICAgICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNl
IHRoZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjaGVja2luZyBmb3IgYSBuZXcgcGxhbiBh
bmQgbXVzdCBob2xkIHRoZSBsb2NrIHRvIGRvIHNvLgogICAgICAgICAgICAgICAgIHRocmVhZC0+
c3luY2hyb25pemUud2FpdCgqbV9sb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVdvcmtsaXN0LmgKaW5kZXggNmI2OTM1Mi4uNzQ4YTllYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTI3LDggKzI3LDYgQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0KICNpbmNsdWRlIDxxdWV1ZT4KIAogI2lu
Y2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KQEAgLTM3LDEwICszNSw5IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKLQogbmFtZXNwYWNlIFdhc20g
ewogCitzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIFBsYW47CiAKIGNsYXNzIFdvcmtsaXN0IHsKQEAg
LTUwLDEzICs0NywxMCBAQCBwdWJsaWM6CiAgICAgfldvcmtsaXN0KCk7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGVucXVldWUoUmVmPFBsYW4+KTsKLSAgICB2b2lkIHN0b3BBbGxQbGFu
c0ZvclZNKFZNJik7CisgICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JDb250ZXh0KENvbnRleHQmKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFuU3luY2hyb25vdXNseShQ
bGFuJik7CiAKLSAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4q
KTsKLSAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4qKTsKLQog
ICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgewogICAgICAgICBTaHV0ZG93biwKICAgICAgICAgU3lu
Y2hyb25vdXMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNzEwOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtMCwwICsx
LDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRl
eHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0
LmpzRW50cnlwb2ludEpJVDsKKworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJ
bnRlcm5hbEZ1bmN0aW9uPigpOworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworCisg
ICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKKyAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBj
YWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsK
KyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxs
ZWVNb3ZlTG9jYXRpb247CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOworCisgICAgY29uc3QgUGlubmVkUmVn
aXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICBS
ZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2RlKTsKKworI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCB0b1NhdmVTaXplID0gdG9TYXZlLm51bWJlck9mU2V0
R1BScygpOworICAgIC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUgc2F2ZXMuCisgICAgdG9T
YXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBBU1NF
UlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUpOworI2VuZGlmCisKKyAg
ICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJB
dE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCk7CisgICAgcmVz
dWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwor
CisgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAq
IHNpemVvZih2b2lkKik7CisgICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxpbmdDb252ZW50
aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOworICAgIHRvdGFsRnJhbWVTaXplIC09IHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKTsKKyAgICB1bnNpZ25lZCBudW1HUFJzID0gMDsKKyAgICB1bnNpZ25l
ZCBudW1GUFJzID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50
KGkpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBjYXNlIFdhc206OkkzMjoK
KyAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3By
QXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZv
aWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICBp
ZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAg
ICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKKyAgICBqaXQuc3ViUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2Ugc2F2ZSBhbGwgdGhlc2UgcmVnaXN0ZXJz
IHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KKyAgICAvLyBUaGUgcmVhc29u
IGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2guIFRoYXQgc2FpZCwKKyAg
ICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVtb3J5LCBzbyBpdCdzIG5v
dCByZWFsbHkKKyAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHRoZXkg
ZG9uJ3QuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJl
Z2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygp
LmdwcigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7
CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQorCisgICAgR1BSUmVnIHdhc21D
b250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
OworCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAg
ICAgICAgbnVtR1BScyA9IDA7CisgICAgICAgIG51bUZQUnMgPSAwOworICAgICAgICAvLyBXZSdy
ZSBnb2luZyB0byBzZXQgdGhlIHBpbm5lZCByZWdpc3RlcnMgYWZ0ZXIgdGhpcy4gU28KKyAgICAg
ICAgLy8gd2UgY2FuIHVzZSB0aGlzIGFzIGEgc2NyYXRjaCBmb3Igbm93IHNpbmNlIHdlIHNhdmVk
IGl0IGFib3ZlLgorICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7CisKKyAgICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0ID0gQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKworICAgICAgICAvLyB2
bUVudHJ5VG9XYXNtIHBhc3NlcyBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlIGFzIHRoZSBmaXJz
dCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCisgICAgICAgIC8vIG5vdCB1c2luZyBmYXN0IFRMUyB0
byBob2xkIHRoZSBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlLgorICAgICAgICBpZiAoIUNvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21Db250
ZXh0SW5zdGFuY2VHUFIpOworICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICAg
ICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAg
ICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Mu
c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkg
PT0gV2FzbTo6STMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBz
Y3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hS
ZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2Ny
YXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVn
LCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVy
ZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3By
KCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10u
Z3ByKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUdQUnM7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAg
ICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
d2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYz
MikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5n
Q29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoISFp
bmZvLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFz
ZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNvbnRleHRJ
bnN0YW5jZUdQUiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSks
IGJhc2VNZW1vcnkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGppdC5sb2FkV2FzbUNv
bnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8m
IHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgQVNTRVJU
KHNpemVSZWdzLnNpemUoKSA+PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0u
c2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAs
IGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4K
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5
LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNp
emVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRP
Zk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVuY3Rpb25D
b3VudCgpOworICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSk7CisgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsKKyAgICB9KTsK
KworCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lz
dGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdw
cigpOworICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIG9mZnNldCksIHJlZyk7CisgICAgfQorCisgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJu
VHlwZSgpKSB7CisgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGppdC5tb3ZlRmxvYXRUbzMy
KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICBqaXQubW92ZURvdWJsZVRv
NjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Yjk4ZDEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
SW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCisjaW5j
bHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJX
YXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgSlND
IHsKKworbmFtZXNwYWNlIFdhc20geworCitzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25h
dHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCnNpbWlsYXJpdHkg
aW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5LmNwcApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2Vi
QXNzZW1ibHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHku
aApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9KU1dlYkFzc2VtYmx5LmgKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHkuaAppbmRleCAwZmFmOTc3Li5jNTc4ZGYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCkBAIC0yOCwzMSArMjgsMzEgQEAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1
ZGUgImpzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgi
Ci0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIgotI2luY2x1ZGUgImpzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
LmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVRhYmxlLmgiCi0jaW5jbHVkZSAianMvV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIgot
I2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJq
cy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNz
ZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUu
aCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVk
ZSAianMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmgi
Ci0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2lu
Y2x1ZGUgImpzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VG9KU0NhbGxlZS5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKKyNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5z
dGFuY2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCIKKyNpbmNs
dWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlNZW1vcnlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIKKyNpbmNsdWRl
ICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAi
V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJs
ZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VG9KU0NhbGxlZS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmOTFlNmM3Li4wODI1MTVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcApAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC00NCw3ICs0NCw3IEBAIGNvbnN0IENsYXNz
SW5mbyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNvZGVC
bG9jayIsIG51bGxwCiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpjcmVhdGUoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxvY2ssIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqIG1vZHVsZSkKIHsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1h
dGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0
aW9uKCk7Ci0gICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNX
ZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5mb3Jt
YXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0s
IFdURk1vdmUoY29kZUJsb2NrKSwgbW9kdWxlSW5mb3JtYXRpb24pOworICAgIGF1dG8qIHJlc3Vs
dCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZt
LmhlYXApKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVCbG9jayksIG1v
ZHVsZUluZm9ybWF0aW9uKTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBtb2R1bGUp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01OCw3ICs1OCw3IEBAIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJs
b2NrPiYmIGNvCiAgICAgbV93YXNtVG9KU0V4aXRTdHVicy5yZXNlcnZlQ2FwYWNpdHkobV9jb2Rl
QmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJ
bmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQo
KTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
cy5hdChpbXBvcnRJbmRleCk7Ci0gICAgICAgIGF1dG8gYmluZGluZyA9IFdhc206Ondhc21Ub0pz
KCZ2bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0SW5kZXgpOworICAg
ICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9KUygmdm0sIG1fY2FsbExpbmtJbmZvcywg
c2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFiaW5k
aW5nKSkgewogICAgICAgICAgICAgc3dpdGNoIChiaW5kaW5nLmVycm9yKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgV2FzbTo6QmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5OgpAQCAtNjgsNyArNjgs
NyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2
bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBtX3dhc21Ub0pTRXhpdFN0dWJzLnVu
Y2hlY2tlZEFwcGVuZChiaW5kaW5nLnZhbHVlKCkpOwotICAgICAgICBpbXBvcnRXYXNtVG9KU1N0
dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRJbmRleF0uY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5pbXBvcnRXYXNtVG9F
bWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRJbmRl
eF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogfQogCkBAIC04MywxMSArODMs
NiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQog
ICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKS0+SlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soKTsKIH0KIAotYm9vbCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjppc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1v
cnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1NhZmVUb1J1bihtZW1vcnkt
Pm1lbW9yeSgpLm1vZGUoKSk7Ci19Ci0KIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2xl
YXJKU0NhbGxJQ3MoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0lu
Zm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCmluZGV4IDUyNzAzZjguLmFi
YjhjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTY0LDM5ICs2NCwxMiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAmdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZTsKICAgICB9CiAKLSAgICB1bnNp
Z25lZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmZ1
bmN0aW9uSW1wb3J0Q291bnQoKTsgfQotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgV2FzbTo6Q29kZUJsb2NrJiBj
b2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogCi0gICAgYm9vbCBpc1Nh
ZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CisgICAgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KIAogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKik7CiAKLSAgICAvLyBU
aGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25jZSB0aGUgY2FsbGVlcyBo
YXZlIGJlZW4gcG9wdWxhdGVkLgotCi0gICAgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSk7Ci0gICAgfQotICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdh
c21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBm
dW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7Ci0g
ICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQotCi0gICAgV2Fz
bTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCh1
bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsK
LSAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpOwotICAgIH0K
LQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIodW5zaWdu
ZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRTdHVi
cygpICsgc2l6ZW9mKHZvaWQqKSAqIGltcG9ydEluZGV4OwotICAgIH0KLQotICAgIFdhc206OkNv
ZGVCbG9jayYgY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KLQogICAg
IHZvaWQgY2xlYXJKU0NhbGxJQ3MoVk0mKTsKIAogICAgIGJvb2wgcnVubmFibGUoKSBjb25zdCB7
IHJldHVybiAhbV9lcnJvck1lc3NhZ2U7IH0KQEAgLTExNCwyMSArODcsNiBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZkltcG9ydFN0dWJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90
PiBmdW5jdGlvbkltcG9ydENvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIChvZmZzZXRPZklt
cG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogZnVuY3Rpb25JbXBvcnRDb3VudCkudW5zYWZl
R2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZComIGltcG9ydFdhc21Ub0pTU3R1Yih1bnNpZ25lZCBp
bXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZvaWQqKj4o
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKGlt
cG9ydEluZGV4KSk7Ci0gICAgfQotCiAgICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplciA6
IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewogICAgICAgICB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4
IGM3N2ZhMDUuLmM1MmVlYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtNDksMTIgKzQ5LDE3IEBAIFN0
cnVjdHVyZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1JbXBvcnRG
dW5jdGlvbnMpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMs
IFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSkKKyAgICAsIG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiAgICAgLCBtX3ZtKCZ2bSkK
KyAgICAsIG1fd2FzbU1vZHVsZShtX2luc3RhbmNlLT5tb2R1bGUoKSkKKyAgICAsIG1fd2FzbVRh
YmxlKG1faW5zdGFuY2UtPm1fdGFibGUuZ2V0KCkpCisgICAgLCBtX2dsb2JhbHMobV9pbnN0YW5j
ZS0+bV9nbG9iYWxzLmdldCgpKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMobnVtSW1wb3J0
RnVuY3Rpb25zKQogewotICAgIG1lbXNldChpbXBvcnRGdW5jdGlvbnMoKSwgMCwgbV9udW1JbXBv
cnRGdW5jdGlvbnMgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUltcG9ydEZ1bmN0aW9uczsgKytpKQorICAgICAgICBu
ZXcgKGltcG9ydEZ1bmN0aW9uSW5mbyhpKSkgSW1wb3J0RnVuY3Rpb25JbmZvKCk7CiB9CiAKIHZv
aWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVz
cGFjZU9iamVjdCkKQEAgLTYzLDEyICs2OCwxMCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAg
ICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIG1fbW9kdWxlLnNldCh2bSwg
dGhpcywgbW9kdWxlKTsKLSAgICBjb25zdCBzaXplX3QgZXh0cmFNZW1vcnlTaXplID0gZ2xvYmFs
TWVtb3J5Qnl0ZVNpemUoKTsKLSAgICBtX2dsb2JhbHMgPSBNYWxsb2NQdHI8dWludDY0X3Q+Ojpt
YWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7Ci0KICAgICBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5z
ZXQodm0sIHRoaXMsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgbV9jYWxsZWUuc2V0KHZt
LCB0aGlzLCBtb2R1bGUtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBoZWFwKCktPnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKG1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwogfQog
CiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC04
OCw0MCArOTEsNDQgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90
YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWxsZWUpOwotICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmdsb2JhbE1lbW9yeUJ5
dGVTaXplKCkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmpl
Y3QtPm1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0aW9uczsgKytpKQotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbnMoKVtpXSk7Cisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uSW5mbyhpKS0+
aW1wb3J0RnVuY3Rpb24pOyAvLyBUaGlzIGFsc28ga2VlcHMgdGhlIGZ1bmN0aW9ucycgSlNXZWJB
c3NlbWJseUluc3RhbmNlIGFsaXZlLgogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgUmVmPFdhc206OkNvZGVC
bG9jaz4mJiB3YXNtQ29kZUJsb2NrKQogeworICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRp
b24od2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOworICAgIG1fd2FzbUNvZGVCbG9jayA9IHdhc21D
b2RlQmxvY2sucHRyKCk7CisKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBpZiAoIXdhc21Db2RlQmxvY2stPnJ1bm5hYmxlKCkpIHsKICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNyZWF0ZShl
eGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJlKCks
IHdhc21Db2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBSRUxFQVNFX0FTU0VSVCh3YXNtQ29kZUJsb2NrLT5pc1NhZmVUb1J1bihtZW1vcnlN
b2RlKCkpKTsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtb2R1bGUo
KS0+Y29kZUJsb2NrKG1lbW9yeU1vZGUoKSk7Ci0gICAgaWYgKGNvZGVCbG9jaykgeworICAgIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIGpzQ29kZUJsb2NrID0gbV9tb2R1bGUtPmNvZGVCbG9jayht
ZW1vcnlNb2RlKCkpOworICAgIGlmIChqc0NvZGVCbG9jaykgewogICAgICAgICAvLyBBIENvZGVC
bG9jayBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxlZC4gSWYgc28sIGl0IG1lYW5zCiAg
ICAgICAgIC8vIHRoYXQgdGhlIENvZGVCbG9jayB3ZSBhcmUgdHJ5aW5nIHRvIGNvbXBpbGUgbXVz
dCBiZSB0aGUgc2FtZQogICAgICAgICAvLyBiZWNhdXNlIHdlIHdpbGwgbmV2ZXIgY29tcGlsZSBh
IENvZGVCbG9jayBhZ2FpbiBvbmNlIGl0J3MKICAgICAgICAgLy8gcnVubmFibGUuCi0gICAgICAg
IEFTU0VSVCgmY29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29kZUJsb2NrLnB0cigpKTsK
LSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOworICAgICAgICBB
U1NFUlQoJmpzQ29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29kZUJsb2NrLnB0cigpKTsK
KyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBqc0NvZGVCbG9jayk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRl
KHZtLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSwgbV9tb2R1bGUuZ2V0KCkpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoZXhl
Yywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCBj
b2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIGpzQ29kZUJsb2NrID0gSlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHdhc21Db2RlQmxvY2spLCBtX21v
ZHVsZS5nZXQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghanNDb2RlQmxvY2stPnJ1bm5hYmxl
KCkpKSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3Nl
bWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwganNDb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZt
LCB0aGlzLCBjb2RlQmxvY2spOwotICAgICAgICBtb2R1bGUoKS0+c2V0Q29kZUJsb2NrKHZtLCBt
ZW1vcnlNb2RlKCksIGNvZGVCbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhp
cywganNDb2RlQmxvY2spOworICAgICAgICBtX21vZHVsZS0+c2V0Q29kZUJsb2NrKHZtLCBtZW1v
cnlNb2RlKCksIGpzQ29kZUJsb2NrKTsKICAgICB9CiAKICAgICBhdXRvKiBtb2R1bGVSZWNvcmQg
PSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21vZHVsZU5hbWVzcGFjZU9iamVj
dC0+bW9kdWxlUmVjb3JkKCkpOwotICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBtb2R1bGUo
KSwgdGhpcyk7CisgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIG1fbW9kdWxlLmdldCgpLCB0
aGlzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgSlNW
YWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoZXhlYyk7CkBAIC0xMjks
NyArMTM2LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24o
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjoKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBp
bnN0YW5jZVN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqIGluc3RhbmNl
U3RydWN0dXJlLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYgaW5zdGFuY2UpCiB7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTU4LDggKzE2NSw4IEBAIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZt
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9k
dWxlTmFtZXNwYWNlID0gbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZXhlYyk7CiAg
ICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5IGJpZyB3ZSBzaG91bGQg
dHJ5IHRvIHRocm93IE9PTSBoZXJlLgotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5oZWFwLCBhbGxvY2F0aW9u
U2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpKSkgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRpb24uaW1w
b3J0RnVuY3Rpb25Db3VudCgpKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGpz
TW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOworICAgIGF1dG8qIGpzSW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFsbG9j
YXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkpKSBKU1dl
YkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlv
bi5pbXBvcnRGdW5jdGlvbkNvdW50KCksIFdURk1vdmUoaW5zdGFuY2UpKTsKKyAgICBqc0luc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1vZHVsZU5hbWVzcGFjZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKIAogICAgIC8vIExldCBm
dW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1wdHkgbGlzdHMgb2YgY2Fs
bGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1vcnkgb2JqZWN0cyBhbmQg
V2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgpAQCAtMTkwLDE1ICsxOTcs
MjEgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0
ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNG
dW5jdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1w
b3J0IGZ1bmN0aW9uIiwgIm11c3QgYmUgY2FsbGFibGUiKSkpOwogCisgICAgICAgICAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50ID0gbnVsbHB0
cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZh
bHVlKTsKKwogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24g
RXhvdGljIE9iamVjdDoKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5j
dGlvbjsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBl
ckZ1bmN0aW9uOwogICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0s
IGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CiAgICAgICAg
ICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90IG1hdGNoIHRoZSBz
aWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCiAgICAgICAgICAg
ICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRleDsKLSAgICAg
ICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIGlmICh3YXNtRnVu
Y3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdh
c21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVl
SW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAgICAgICAgICAgICAgICAg
IHdhc21FbnRyeXBvaW50ID0gd2FzbUZ1bmN0aW9uLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlv
bigpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24t
PnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJl
IGJlIHYuW1tDbG9zdXJlXV0uCkBAIC0yMTUsNyArMjI4LDEwIEBAIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTCiAgICAgICAgICAgICAvLyBOb3RlOiBhZGRpbmcgdGhlIEpTQ2VsbCB0byB0aGUgaW5z
dGFuY2UgbGlzdCBmdWxmaWxscyBjbG9zdXJlIHJlcXVpcmVtZW50cyBiLiBhYm92ZSAodGhlIFdl
YkFzc2VtYmx5Lkluc3RhbmNlIHdpbCBiZSBrZXB0IGFsaXZlKSBhbmQgdi4gYmVsb3cgKHRoZSBK
U0Z1bmN0aW9uKS4KIAogICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEZ1bmN0aW9ucyA9PSBp
bXBvcnQua2luZEluZGV4KTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbnMo
KVtudW1JbXBvcnRGdW5jdGlvbnMrK10uc2V0KHZtLCBpbnN0YW5jZSwgZnVuY3Rpb24pOworICAg
ICAgICAgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbmZvID0ganNJbnN0YW5jZS0+aW1wb3J0RnVu
Y3Rpb25JbmZvKG51bUltcG9ydEZ1bmN0aW9ucysrKTsKKyAgICAgICAgICAgIGluZm8tPnRhcmdl
dEluc3RhbmNlID0gY2FsbGVlSW5zdGFuY2U7CisgICAgICAgICAgICBpbmZvLT53YXNtRW50cnlw
b2ludCA9IHdhc21FbnRyeXBvaW50OworICAgICAgICAgICAgaW5mby0+aW1wb3J0RnVuY3Rpb24u
c2V0KHZtLCBqc0luc3RhbmNlLCBmdW5jdGlvbik7CiAgICAgICAgICAgICAvLyB2LiBBcHBlbmQg
Y2xvc3VyZSB0byBpbXBvcnRzLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI0
Myw3ICsyNTksOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgICAgICAvLyBp
aS4gQXBwZW5kIHYgdG8gdGFibGVzLgogICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQgdi5bW1Rh
YmxlXV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwg
aW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPm1fdGFibGUuc2V0KHZt
LCBqc0luc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5tX3dhc21UYWJs
ZSA9IHRhYmxlLT50YWJsZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
MjczLDggKzI5MCw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICAgICAgICAgIC8v
IGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYu
W1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgQVNTRVJUKCFpbnN0YW5jZS0+bV9t
ZW1vcnkpOwotICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2Us
IG1lbW9yeSk7CisgICAgICAgICAgICBBU1NFUlQoIWpzSW5zdGFuY2UtPm1fbWVtb3J5KTsKKyAg
ICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgbWVtb3J5KTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMjkxLDEzICszMDgsMTMgQEAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YywgSlMKICAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxzID09IGltcG9ydC5raW5k
SW5kZXgpOwogICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2lt
cG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAg
ICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCB2YWx1
ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0YW5jZSgp
LnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIHZhbHVlLnRvSW50MzIoZXhlYykpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAg
ICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChleGVjKSkpOworICAgICAgICAgICAgICAgIGpz
SW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lz
ZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgICAgICBpbnN0
YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQ2NF90
Pih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFu
Y2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KHZhbHVlLmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTMxNSwxNCArMzMyLDIxIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYmICFoYXNNZW1vcnlJbXBv
cnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1v
cnkuaXNJbXBvcnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBtZW1vcnkgd2hlbiBp
dCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5
PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0
KCkpOworCisgICAgICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6
OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1l
bW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0
aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCksCisgICAgICAgICAgICAg
ICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
OyB9LAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xs
ZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsmdm0sIGpzTWVtb3J5XSAo
V2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3Vu
dCkgeyBqc01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNvdW50LCBuZXdQ
YWdlQ291bnQpOyB9KTsKICAgICAgICAgICAgIGlmICghbWVtb3J5KQogICAgICAgICAgICAgICAg
IHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAKLSAgICAg
ICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLAotICAgICAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBtZW1vcnkucmVsZWFz
ZU5vbk51bGwoKSkpOworICAgICAgICAgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwganNNZW1v
cnkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRy
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTMzNiwxOSArMzYwLDI0IEBAIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTCiAgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9k
dWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKTsKICAgICAgICAgICAg
IC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRlZmluaXRpb24uCi0gICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRhYmxlOjpj
cmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlU
YWJsZVN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxl
SW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9u
Lm1heGltdW0oKSk7CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6VGFibGU+IHdhc21UYWJsZSA9
IFdhc206OlRhYmxlOjpjcmVhdGUobW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5p
bml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKTsK
KyAgICAgICAgICAgIGlmICghd2FzbVRhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgImNvdWxkbid0IGNy
ZWF0ZSBUYWJsZSIpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBK
U1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5yZWxlYXNlTm9u
TnVsbCgpKTsKICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhbGxv
Y2F0ZSBhIEpTV2ViQXNzZW1ibHlUYWJsZSB3ZSd2ZSBkZWZpbmVkLgogICAgICAgICAgICAgLy8g
SWYgaXQncyBkZWZpbmVkIHRvIGJlIHRvbyBsYXJnZSwgd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGEg
dmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+
bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3RhbmNl
LT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0
YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFibGUoKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgeworICAgIGlmICghanNJbnN0YW5jZS0+
bWVtb3J5KCkpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBtZW1vcnks
IHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxscHRy
IE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KLSAgICAgICAgaW5z
dGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNy
ZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1l
bW9yeVN0cnVjdHVyZSgpLCBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgMCwgMCkucmVsZWFzZU5v
bk51bGwoKSkpOworICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6
OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAganNNZW1vcnktPmFkb3B0KFdhc206Ok1lbW9y
eTo6Y3JlYXRlKCkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGpzSW5zdGFuY2UtPnNldE1l
bW9yeSh2bSwganNNZW1vcnkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIG51bGxwdHIpOwogICAgIH0KICAgICAKQEAgLTM2MCwyMCArMzg5LDEzIEBAIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxpemF0aW9u
VHlwZSAhPSBXYXNtOjpHbG9iYWw6OklzSW1wb3J0KTsKICAgICAgICAgICAgIGlmIChnbG9iYWwu
aW5pdGlhbGl6YXRpb25UeXBlID09IFdhc206Okdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydCkgewog
ICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8
IG51bUltcG9ydEdsb2JhbHMpOwotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwo
Z2xvYmFsSW5kZXgsIGluc3RhbmNlLT5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09y
SW1wb3J0TnVtYmVyKSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5z
ZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEk2NEdsb2Jh
bChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOwogICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFs
LmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2Ut
Pmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2JhbEluZGV4LCBnbG9iYWwuaW5pdGlhbEJpdHNPcklt
cG9ydE51bWJlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQoIWluc3RhbmNlLT5j
b2RlQmxvY2soKSk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLXNpemVfdCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2Yo
UmVnaXN0ZXIpOworICAgIHJldHVybiBqc0luc3RhbmNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgKaW5kZXggM2NmZTU0OS4uZDUyNTUwYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTMyLDYg
KzMyLDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgor
I2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0zOSw3NSArNDEsOTQgQEAgY2xhc3MgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgV2ViQXNzZW1ibHlU
b0pTQ2FsbGVlOwogCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBU
YWJsZTsgLy8gRklYTUUgcmVtb3ZlIHRoaXMgYWZ0ZXIgcmVmYWN0b3JpbmcuIGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE3NzQ3MgorfQorCiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgOiBwdWJs
aWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVj
dGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNy
ZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU09iamVjdCogaW1w
b3J0T2JqZWN0LCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9
CiAgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFZNJiwgRXhlY1N0YXRlKiwgUmVmPFdhc206OkNv
ZGVCbG9jaz4mJik7Ci0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7
IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotCi0gICAgSlNPYmplY3QqIGltcG9ydEZ1bmN0aW9u
KHVuc2lnbmVkIGlkeCkgeyBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9u
cyk7IHJldHVybiBpbXBvcnRGdW5jdGlvbnMoKVtpZHhdLmdldCgpOyB9Ci0KKyAgICAKKyAgICBX
YXNtOjpJbnN0YW5jZSYgaW5zdGFuY2UoKSB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9Cisg
ICAgV2FzbTo6Q29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX3ZtLT53YXNtQ29u
dGV4dDsgfQogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmpl
Y3QoKSB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5nZXQoKTsgfQorICAgIEpTV2Vi
QXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisgICAgV2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlKiB3ZWJBc3NlbWJseVRvSlNDYWxsZWUoKSB7IHJldHVybiBtX2Nh
bGxlZS5nZXQoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1
cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNz
ZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBtX21lbW9yeS5zZXQodm0s
IHRoaXMsIHZhbHVlKTsgfQorICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNXZWJBc3NlbWJs
eU1lbW9yeSogdmFsdWUpIHsgQVNTRVJUKCFtZW1vcnkoKSk7IG1fbWVtb3J5LnNldCh2bSwgdGhp
cywgdmFsdWUpOyBtX3dhc21NZW1vcnkgPSAmbWVtb3J5KCktPm1lbW9yeSgpOyB9CiAgICAgV2Fz
bTo6TWVtb3J5TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5KCktPm1lbW9yeSgpLm1v
ZGUoKTsgfQogCi0gICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFi
bGUuZ2V0KCk7IH0KLQotICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KLSAgICBpbnQ2NF90IGxvYWRJNjRHbG9i
YWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9Ci0gICAg
ZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nh
c3Q8ZmxvYXQ+KGxvYWRJMzJHbG9iYWwoaSkpOyB9Ci0gICAgZG91YmxlIGxvYWRGNjRHbG9iYWwo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2NEds
b2JhbChpKSk7IH0KLSAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJpdHMp
IHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5z
dGFuY2UsIG1fbWVtb3J5KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdGFibGUp
OyB9CisgICAgLy8gVGFpbCBhY2Nlc3NvcnMuCisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlRh
aWwoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2NF90KT4o
c2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9CisgICAgc3RydWN0IEltcG9ydEZ1bmN0
aW9uSW5mbyB7CisgICAgICAgIC8vIFRhcmdldCBpbnN0YW5jZSBhbmQgZW50cnlwb2ludCBhcmUg
b25seSBzZXQgZm9yIHdhc20tPndhc20gY2FsbHMsIGFuZCBhcmUgb3RoZXJ3aXNlIG51bGxwdHIu
IFRoZSBlbWJlZGRlci1zcGVjaWZpYyBsb2dpYyBvY2N1cnMgdGhyb3VnaCBpbXBvcnQgZnVuY3Rp
b24uCisgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogdGFyZ2V0SW5zdGFuY2UgeyBudWxs
cHRyIH07CisgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRy
eXBvaW50IHsgbnVsbHB0ciB9OworICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IGltcG9y
dEZ1bmN0aW9uIHsgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpIH07CisgICAgfTsKKyAgICBJbXBv
cnRGdW5jdGlvbkluZm8qIGltcG9ydEZ1bmN0aW9uSW5mbyhzaXplX3QgaW1wb3J0RnVuY3Rpb25O
dW0pIHsgcmV0dXJuICZiaXR3aXNlX2Nhc3Q8SW1wb3J0RnVuY3Rpb25JbmZvKj4oYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mVGFpbCgpKVtpbXBvcnRGdW5jdGlvbk51bV07IH0K
KyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mVGFyZ2V0SW5zdGFuY2Uoc2l6ZV90IGltcG9ydEZ1
bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICog
c2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rp
b25JbmZvLCB0YXJnZXRJbnN0YW5jZSk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mV2Fz
bUVudHJ5cG9pbnQoc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRh
aWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBP
QkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNtRW50cnlwb2ludCk7IH0KKyAg
ICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6ZV90IGltcG9ydEZ1bmN0
aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6
ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25J
bmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBKU09iamVjdCogaW1wb3J0RnVuY3Rpb24odW5z
aWduZWQgaW1wb3J0RnVuY3Rpb25OdW0pIHsgUkVMRUFTRV9BU1NFUlQoaW1wb3J0RnVuY3Rpb25O
dW0gPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVybiBpbXBvcnRGdW5jdGlvbkluZm8oaW1w
b3J0RnVuY3Rpb25OdW0pLT5pbXBvcnRGdW5jdGlvbi5nZXQoKTsgfQorICAgIAorICAgIC8vIEZJ
WE1FIHJlbW92ZSB0aGVzZSBhZnRlciByZWZhY3RvcmluZyB0aGVtIG91dC4gaHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTc3NDcyCisgICAgV2FzbTo6TWVtb3J5JiBpbnRlcm5hbE1lbW9yeSgpIHsgcmV0
dXJuIG1lbW9yeSgpLT5tZW1vcnkoKTsgfQorICAgIFdhc206OkNvZGVCbG9jayYgd2FzbUNvZGVC
bG9jaygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RhbmNlLT5jb2RlQmxvY2soKTsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21UYWJsZSk7IH0KICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSwgbV9jYWxsZWUpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNl
LCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZNKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV92bSk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSwgbV9jb2RlQmxvY2spOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZldhc21Db2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eUluc3RhbmNlLCBtX3dhc21Db2RlQmxvY2spOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3Nl
bWJseUluc3RhbmNlLCBtX2NhY2hlZFN0YWNrTGltaXQpOyB9Ci0gICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pPihzaXplb2YoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKSk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6ZV90
IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsg
aW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2Yoc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSk7
IH0KLQotICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogd2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkg
eyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KLQotICAgIHZvaWQqIGNhY2hlZFN0YWNrTGltaXQo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7IH0KLSAgICB2b2lkIHNldENhY2hl
ZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9jYWNoZWRTdGFja0xpbWl0ID0gbGltaXQ7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbU1lbW9yeSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fd2FzbU1lbW9yeSk7IH0KKyAgICB2
b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVChtX2luc3RhbmNl
LT5jYWNoZWRTdGFja0xpbWl0KCkgPT0gbV9jYWNoZWRTdGFja0xpbWl0KTsgcmV0dXJuIG1fY2Fj
aGVkU3RhY2tMaW1pdDsgfQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBsaW1p
dCkgeyBtX2luc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGxpbWl0KTsgbV9jYWNoZWRTdGFj
a0xpbWl0ID0gbGltaXQ7IH0KKyAgICBXYXNtOjpNZW1vcnkqIHdhc21NZW1vcnkoKSB7IHJldHVy
biBtX3dhc21NZW1vcnk7IH0KKyAgICBXYXNtOjpNb2R1bGUmIHdhc21Nb2R1bGUoKSB7IHJldHVy
biBtX3dhc21Nb2R1bGU7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyk7CisgICAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbnVtSW1wb3J0RnVu
Y3Rpb25zLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IG51bUltcG9ydEZ1bmN0aW9ucykKICAgICB7Ci0gICAg
ICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIHNpemVvZihXcml0ZUJhcnJp
ZXI8SlNDZWxsPikgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdldCgpOworICAgICAgICBy
ZXR1cm4gKG9mZnNldE9mVGFpbCgpICsgc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKiBudW1J
bXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdldCgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWTSog
bV92bTsKLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlvbnMoKSB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+KGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsgfQotICAgIHNpemVfdCBn
bG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0OworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1v
ZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisKKyAgICBSZWY8V2FzbTo6
SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAKKyAgICBWTSogbV92bTsKICAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU01vZHVsZU5h
bWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiAgICAgV3JpdGVCYXJyaWVy
PEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFz
c2VtYmx5VGFibGU+IG1fdGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5VG9KU0Nh
bGxlZT4gbV9jYWxsZWU7Ci0gICAgTWFsbG9jUHRyPHVpbnQ2NF90PiBtX2dsb2JhbHM7CisgICAg
CisgICAgLy8gRklYTUUgcmVtb3ZlIHRoZXNlIGFmdGVyIHJlZmFjdG9yaW5nIHRoZW0gb3V0LiBo
dHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKICAgICB2b2lkKiBtX2NhY2hlZFN0YWNrTGltaXQg
eyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4
KCkpIH07CisgICAgV2FzbTo6Q29kZUJsb2NrKiBtX3dhc21Db2RlQmxvY2sgeyBudWxscHRyIH07
CisgICAgV2FzbTo6TW9kdWxlJiBtX3dhc21Nb2R1bGU7CisgICAgV2FzbTo6TWVtb3J5KiBtX3dh
c21NZW1vcnkgeyBudWxscHRyIH07CisgICAgV2FzbTo6VGFibGUqIG1fd2FzbVRhYmxlIHsgbnVs
bHB0ciB9OworICAgIHVpbnQ2NF90KiBtX2dsb2JhbHMgeyBudWxscHRyIH07CisKICAgICB1bnNp
Z25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKaW5kZXggMjIzYzU4Yi4u
ZDY0MGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7ICJXZWJBc3Nl
bWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnkq
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQorSlNXZWJBc3Nl
bWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC01MCwxMCArNTAsMTYgQEAgSlNXZWJBc3NlbWJseU1l
bW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZt
LCBTdHJ1Y3QKICAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2JhbE9iamVj
dC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CiAKLSAgICBhdXRvKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZt
LmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUobWVtb3J5
KSk7Ci0gICAgaW5zdGFuY2UtPm1fbWVtb3J5LT5jaGVjaygpOwotICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOworICAgIGF1dG8qIG1lbW9yeSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXAp
KSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAgIG1lbW9yeS0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHJldHVybiBtZW1vcnk7Cit9CisgICAgCit2b2lkIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQoreworICAgIG1f
bWVtb3J5LnN3YXAobWVtb3J5KTsKKyAgICBBU1NFUlQobV9tZW1vcnktPnJlZkNvdW50KCkgPT0g
MSk7CisgICAgbV9tZW1vcnktPmNoZWNrKCk7CiB9CiAKIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJs
eU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC02MSwxMyArNjcsMTAgQEAgU3RydWN0dXJlKiBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1vcnkpCitKU1dl
YkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX21lbW9yeShXVEZN
b3ZlKG1lbW9yeSkpCisgICAgLCBtX21lbW9yeShXYXNtOjpNZW1vcnk6OmNyZWF0ZSgpLnJlbGVh
c2VOb25OdWxsKCkpCiB7Ci0gICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgpID09IDEpOwot
ICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVtb3J5LT5tZW1vcnkoKTsKLSAgICBtX21lbW9yeVNpemUg
PSBtX21lbW9yeS0+c2l6ZSgpOwogfQogCiBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVt
b3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtODUs
NTIgKzg4LDQ1IEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmZlcihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJuIG1fYnVmZmVy
V3JhcHBlci5nZXQoKTsKIH0KIAotV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6
Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhLCBib29sIHNob3Vs
ZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKK1dhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5
TWVtb3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSkKIHsK
LSAgICAvLyBOb3RlOiBXZSBjYW4gb25seSB1c2UgZXhlYyBpZiBzaG91bGRUaHJvd0V4Y2VwdGlv
bnNPbkZhaWx1cmUgaXMgdHJ1ZS4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBtZW1vcnko
KS5zaXplSW5QYWdlcygpOwotCi0gICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQoZGVs
dGEpKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAg
YXV0byBncm93biA9IG1lbW9yeSgpLmdyb3coV2FzbTo6UGFnZUNvdW50KGRlbHRhKSk7CisgICAg
aWYgKCFncm93bikgeworICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAgICAgICAg
Y2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CiAgICAgICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUgZGVs
dGEgdG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50IikpKTsKLSAgICAgICAgcmV0dXJuIFdhc206OlBh
Z2VDb3VudCgpOwotICAgIH0KLQotICAgIFdhc206OlBhZ2VDb3VudCBuZXdTaXplID0gb2xkUGFn
ZUNvdW50ICsgV2FzbTo6UGFnZUNvdW50KGRlbHRhKTsKLSAgICBpZiAoIW5ld1NpemUpIHsKLSAg
ICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRH
cm93U2l6ZToKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkuZ3Jv
dyBleHBlY3RzIHRoZSBncm93biBzaXplIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCIpKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVh
c29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNz
ZW1ibHkuTWVtb3J5Lmdyb3cgd291bGQgZXhjZWVkIHRoZSBtZW1vcnkncyBkZWNsYXJlZCBtYXhp
bXVtIHNpemUiKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6TWVt
b3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291
bnQoKTsKICAgICB9CiAKLSAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0g
bWVtb3J5KCkuZ3Jvdyh2bSwgbmV3U2l6ZSk7Ci0gICAgICAgIGlmICghc3VjY2VzcykgewotICAg
ICAgICAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZSA9PSBtZW1vcnkoKS5tZW1vcnkoKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplID09IG1lbW9yeSgpLnNpemUoKSk7Ci0gICAgICAg
ICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQotICAgICAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
ZXhlYykpOwotICAgICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwotICAgICAgICB9
Ci0gICAgICAgIG1fbWVtb3J5QmFzZSA9IG1lbW9yeSgpLm1lbW9yeSgpOwotICAgICAgICBtX21l
bW9yeVNpemUgPSBtZW1vcnkoKS5zaXplKCk7Ci0gICAgfQorICAgIHJldHVybiBncm93bi52YWx1
ZSgpOworfQogCi0gICAgLy8gV2UgbmVlZCB0byBjbGVhciBvdXQgdGhlIG9sZCBhcnJheSBidWZm
ZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUgcG9pbnRpbmcKLSAgICAvLyB0byBzdGFsZSBtZW1v
cnkuCit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3dTdWNjZXNzQ2FsbGJhY2soVk0mIHZt
LCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdlQ291bnQgbmV3UGFnZUNv
dW50KQoreworICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgYXJyYXkgYnVmZmVy
IGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nIHRvIHN0YWxlIG1lbW9yeS4KICAgICAv
LyBOZXV0ZXIgdGhlIG9sZCBhcnJheS4KICAgICBpZiAobV9idWZmZXIpIHsKICAgICAgICAgbV9i
dWZmZXItPm5ldXRlcih2bSk7CiAgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAg
bV9idWZmZXJXcmFwcGVyLmNsZWFyKCk7CiAgICAgfQotCisgICAgCiAgICAgbWVtb3J5KCkuY2hl
Y2soKTsKLQotICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoV2FzbTo6UGFn
ZUNvdW50KGRlbHRhKS5ieXRlcygpKTsKLSAgICByZXR1cm4gb2xkUGFnZUNvdW50OworICAgIAor
ICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3UGFnZUNvdW50LmJ5dGVz
KCkgLSBvbGRQYWdlQ291bnQuYnl0ZXMoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9y
eTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCmluZGV4IDFkMDZjNGMuLjRiYmJjY2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmgKQEAgLTQ4LDI2ICs0OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmdm0uZWFn
ZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSosIFJl
ZjxXYXNtOjpNZW1vcnk+JiYpOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBjcmVh
dGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAorICAgIHZvaWQgYWRvcHQoUmVmPFdhc206Ok1lbW9yeT4mJik7
CiAgICAgV2FzbTo6TWVtb3J5JiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQog
ICAgIEpTQXJyYXlCdWZmZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
V2FzbTo6UGFnZUNvdW50IGdyb3coVk0mLCBFeGVjU3RhdGUqLCB1aW50MzJfdCBkZWx0YSwgYm9v
bCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwotCi0gICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5
TWVtb3J5LCBtX21lbW9yeUJhc2UpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNp
emUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1v
cnlTaXplKTsgfQorICAgIFdhc206OlBhZ2VDb3VudCBncm93KFZNJiwgRXhlY1N0YXRlKiwgdWlu
dDMyX3QgZGVsdGEpOworICAgIHZvaWQgZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhWTSYsIFdhc206OlBh
Z2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQpOwogCiBw
cml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2Fz
bTo6TWVtb3J5PiYmKTsKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCi0gICAgdm9pZCogbV9tZW1vcnlCYXNlOwotICAgIHNpemVfdCBtX21lbW9yeVNp
emU7CiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpT
QXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1f
YnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmNwcAppbmRleCBiYWIxMTgxLi40MGMxMDA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcApAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtRm9y
bWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIK
ICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5VG9KU0NhbGxlZS5o
IgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTYxLDYgKzYyLDcgQEAgU3RydWN0
dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CiB9CiAKKwogSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVs
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6TW9kdWxlPiYmIG1vZHVs
ZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fbW9kdWxlKFdURk1vdmUobW9k
dWxlKSkKQEAgLTkxLDYgKzkzLDM2IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCiAgICAgV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OnRyeUNsZWFu
dXAoKTsKIH0KIAorY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIEpTV2ViQXNzZW1ibHlN
b2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tb2R1bGUt
Pm1vZHVsZUluZm9ybWF0aW9uKCk7Cit9CisKK1N5bWJvbFRhYmxlKiBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXhwb3J0U3lt
Ym9sVGFibGUuZ2V0KCk7Cit9CisKK1dhc206OlNpZ25hdHVyZUluZGV4IEpTV2ViQXNzZW1ibHlN
b2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5j
dGlvbkluZGV4U3BhY2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5zaWduYXR1cmVJ
bmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKK30KKworV2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjYWxsZWUoKSBjb25zdAor
eworICAgIHJldHVybiBtX2NhbGxlZS5nZXQoKTsKK30KKworSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSkK
K3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLmdl
dCgpOworfQorCitXYXNtOjpNb2R1bGUmIEpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZSgpCit7
CisgICAgcmV0dXJuIG1fbW9kdWxlLmdldCgpOworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OnNldENvZGVCbG9jayhWTSYgdm0sIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggM2Rj
NjdhMy4uMDFiNWQwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMzAsMTUgKzMwLDE5IEBACiAjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKLSNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisjaW5jbHVk
ZSAiV2FzbU1lbW9yeU1vZGUuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIGNs
YXNzIE1vZHVsZTsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIGNsYXNzIFBsYW47Cit1c2lu
ZyBTaWduYXR1cmVJbmRleCA9IHVpbnQzMl90OwogfQogCiBjbGFzcyBTeW1ib2xUYWJsZTsKQEAg
LTUyLDIzICs1NiwyMCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZVN0
dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25S
ZXN1bHQmJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIGNyZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBXVEY6OkV4cGVjdGVk
PFJlZlB0cjxXYXNtOjpNb2R1bGU+LCBTdHJpbmc+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKLSAgICBj
b25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsgfQotICAgIFN5bWJvbFRhYmxl
KiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUu
Z2V0KCk7IH0KLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICB9Ci0gICAgV2ViQXNzZW1ibHlUb0pTQ2Fs
bGVlKiBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZS5nZXQoKTsgfQorICAgIGNvbnN0
IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0OworICAg
IFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0OworICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBm
dW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OworICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogY2Fs
bGVlKCkgY29uc3Q7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soV2Fz
bTo6TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6
ZV90Pihtb2RlKV0uZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxv
Y2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKTsKKyAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIFdh
c206Ok1lbW9yeU1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsKIAogICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgc291cmNlKCkgY29uc3Q7CiAKLSAgICBXYXNtOjpNb2R1bGUmIG1vZHVs
ZSgpIHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRDb2RlQmxvY2soVk0m
LCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKTsKIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9jazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCmluZGV4IGZmNDZkNGQuLmFk
YWE3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhYmxlLmNwcApAQCAtMjksMzAgKzI5LDIyIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
LSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5VGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2Vt
Ymx5LlRhYmxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1dlYkFzc2VtYmx5VGFibGUpIH07CiAKLUpTV2ViQXNzZW1ibHlUYWJsZSogSlNX
ZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
YXhpbXVtKQorSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpU
YWJsZT4mJiB0YWJsZSkKIHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAKLSAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7Ci0g
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICBpZiAo
IWdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFibGVkKCkpIHsKKyAgICAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2JhbE9iamVj
dC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH07Ci0KLSAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7Ci0KLSAgICBp
ZiAoIWlzVmFsaWRTaXplKGluaXRpYWwpKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgIH0KIAotICAgIGF1dG8qIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRhYmxlPih2bS5oZWFwKSkg
SlNXZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUsIGluaXRpYWwsIG1heGltdW0pOworICAg
IGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJs
eVRhYmxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUsIFdURk1v
dmUodGFibGUpKTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVy
biBpbnN0YW5jZTsKIH0KQEAgLTYyLDIzICs1NCwxNSBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1i
bHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
agogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAot
SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4
aW11bSkKK0pTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpUYWJsZT4mJiB0YWJsZSkKICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFibGUoV1RGTW92ZSh0YWJsZSkpCiB7Ci0gICAgbV9z
aXplID0gaW5pdGlhbDsKLSAgICBBU1NFUlQoaXNWYWxpZFNpemUobV9zaXplKSk7Ci0gICAgbV9t
YXhpbXVtID0gbWF4aW11bTsKLSAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49
IG1fc2l6ZSk7Ci0KICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHBy
ZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCiAg
ICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgotICAgIG1fZnVuY3Rpb25z
ID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206
OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpKTsKLSAgICBt
X2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+OjptYWxsb2Mo
c2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3Np
emUpKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpIHsKLSAgICAg
ICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsK
LSAgICAgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4ID09IFdh
c206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBp
bGVkIGNvZGUuCisgICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19j
YXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemUo
KTsgKytpKQogICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+KCk7Ci0gICAgfQogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtOTksNyArODMsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlU
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3NpemU7ICsraSkKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c2l6ZSgpOyArK2kpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pOwogfQogCkBA
IC0xMDcsNDcgKzkxLDQ0IEBAIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90
IGRlbHRhKQogewogICAgIGlmIChkZWx0YSA9PSAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gbmV3U2l6ZUNoZWNrZWQgPSBtX3Np
emU7Ci0gICAgbmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7Ci0gICAgdWludDMyX3QgbmV3U2l6ZTsK
LSAgICBpZiAobmV3U2l6ZUNoZWNrZWQuc2FmZUdldChuZXdTaXplKSA9PSBDaGVja2VkU3RhdGU6
OkRpZE92ZXJmbG93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1heGltdW0oKSAm
JiBuZXdTaXplID4gKm1heGltdW0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
aXNWYWxpZFNpemUobmV3U2l6ZSkpCisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHNpemUoKTsKKwor
ICAgIGF1dG8gZ3JldyA9IG1fdGFibGUtPmdyb3coZGVsdGEpOworICAgIGlmICghZ3JldykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV2Fz
bTo6Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG5ld1NpemUpKTsKLSAg
ICBtX2pzRnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICog
c3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBncmV3
LnZhbHVlKCk7CisgICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+KSAqIG5ld1NpemUpOwogCi0gICAgZm9yICh1aW50MzJfdCBpID0gbV9zaXplOyBp
IDwgbmV3U2l6ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBX
YXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkg
PCBuZXdTaXplOyArK2kpCiAgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdy
aXRlQmFycmllcjxKU09iamVjdD4oKTsKLSAgICB9Ci0gICAgbV9zaXplID0gbmV3U2l6ZTsKKwog
ICAgIHJldHVybiB0cnVlOwogfQogCitKU09iamVjdCogSlNXZWJBc3NlbWJseVRhYmxlOjpnZXRG
dW5jdGlvbih1aW50MzJfdCBpbmRleCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IHNp
emUoKSk7CisgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOworfQor
CiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xlYXJGdW5jdGlvbih1aW50MzJfdCBpbmRleCkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+Y2xl
YXJGdW5jdGlvbihpbmRleCk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV2Fz
bTo6Q2FsbGFibGVGdW5jdGlvbigpOwotICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpbmRl
eF0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBX
ZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5
VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIGZ1bmN0aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsK
KyAgICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rp
b24oKSwgZnVuY3Rpb24tPmluc3RhbmNlKCkpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5k
ZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4
XSA9IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiogZnVuY3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBt
X3NpemUpOworICAgIG1fdGFibGUtPnNldEZ1bmN0aW9uKGluZGV4LCBmdW5jdGlvbi0+Y2FsbGFi
bGVGdW5jdGlvbigpLCBmdW5jdGlvbi0+aW5zdGFuY2UoKSk7CiAgICAgbV9qc0Z1bmN0aW9ucy5n
ZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0
KClbaW5kZXhdID0gZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5oCmluZGV4IGRmODNlOTcuLjQ0ODc1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDU3ICsyOSw0MiBA
QAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgorI2luY2x1ZGUgIldhc21MaW1pdHMuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUuaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5RnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1zdHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbjsKLX0KLQog
Y2xhc3MgSlNXZWJBc3NlbWJseVRhYmxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBz
dGF0aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1
cmUqLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsK
KyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBT
dHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNM
QVJFX0lORk87CiAKLSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0gICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNpemUpIHsg
cmV0dXJuIFdhc206OlRhYmxlOjppc1ZhbGlkU2l6ZShzaXplKTsgfQorICAgIHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5tYXhpbXVtKCk7
IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+c2l6ZSgpOyB9
CiAgICAgYm9vbCBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAg
SlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQotICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgICAgICByZXR1cm4gbV9qc0Z1bmN0aW9u
cy5nZXQoKVtpbmRleF0uZ2V0KCk7Ci0gICAgfQotICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50
MzJfdCBpbmRleCk7Ci0gICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90IGluZGV4LCBX
ZWJBc3NlbWJseUZ1bmN0aW9uKik7Ci0gICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90
IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiopOwotCi0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eVRhYmxlLCBtX3NpemUpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1bmN0aW9u
cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fZnVuY3Rp
b25zKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKU0Z1bmN0aW9ucygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fanNGdW5jdGlvbnMpOyB9
CisgICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIGNsZWFyRnVu
Y3Rpb24odWludDMyX3QpOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCwgV2Vi
QXNzZW1ibHlGdW5jdGlvbiopOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCwg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsKIAotICAgIHN0YXRpYyBib29sIGlzVmFsaWRT
aXplKHVpbnQzMl90IHNpemUpCi0gICAgewotICAgICAgICAvLyBUaGlzIHRvcHMgb3V0IGF0IH4z
ODQgTUIgd29ydGggb2YgZGF0YSBpbiB0aGlzIGNsYXNzLgotICAgICAgICByZXR1cm4gc2l6ZSA8
ICgxIDw8IDI0KTsKLSAgICB9CisgICAgV2FzbTo6VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90
YWJsZS5wdHIoKTsgfQogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0
cnVjdHVyZSosIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW0pOworICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpU
YWJsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCi0gICAgTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+
IG1fZnVuY3Rpb25zOworICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKICAgICBNYWxsb2NQ
dHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj4gbV9qc0Z1bmN0aW9uczsKLSAgICBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBtX21heGltdW07Ci0gICAgdWludDMyX3QgbV9zaXplOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyMDQ4OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAt
MCwwICsxLDY1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNs
dWRlICJGcmFtZVRyYWNlcnMuaCIKKyNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCisjaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlRodW5r
R2VuZXJhdG9ycy5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1
ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwordXNpbmcgSklUID0gQ0NhbGxIZWxwZXJz
OworCitzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWdu
ZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgLy8gV2UncmUgY2FsbGluZyBv
dXQgb2YgdGhlIGN1cnJlbnQgV2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFuY2UgaGFz
IGEgbGlzdCBvZiBhbGwgaXRzIGltcG9ydCBmdW5jdGlvbnMuCisgICAgaml0LmxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlKHJlc3VsdCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHJlc3Vs
dCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydElu
ZGV4KSksIHJlc3VsdCk7Cit9CisKK0V4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmlu
ZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5r
SW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRl
eCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5IGFic3Ry
YWN0IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KKyAgICAvLyBJdCdkIGJlIHN1cGVyIGVh
c3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0
MDEKKyAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpOworICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc0NDID0ganNj
Q2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIHVuc2lnbmVkIGFy
Z0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBKSVQgaml0OworCisgICAg
Ly8gTm90ZTogV2FzbUIzSVJHZW5lcmF0b3IgYXNzdW1lcyB0aGF0IHRoaXMgc3R1YiB0cmVhdHMg
U1AgYXMgYSBjYWxsZWUgc2F2ZS4KKyAgICAvLyBJZiB3ZSBldmVyIGNoYW5nZSB0aGlzLCB3ZSB3
aWxsIGFsc28gbmVlZCB0byBjaGFuZ2UgV2FzbUIzSVJHZW5lcmF0b3IuCisKKyAgICAvLyBCZWxv
dywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBpcyBhbHdheXMgb24g
dGhlIHN0YWNrLgorICAgIEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6ZSgpKTsKKyAgICBBU1NF
UlQoIWpzQ0MubV9mcHJBcmdzLnNpemUoKSk7CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoKTsKKyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigwKSwgSklUOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJWE1FIFN0b3AgdXNpbmcg
MCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1MzIxCisKKyAgICB7CisgICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7CisgICAg
ICAgIGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpID09IEk2NDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudCAmJiAhaGFzQmFk
STY0VXNlOyArK2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJl
LmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNh
c2UgQW55ZnVuYzoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworCisgICAgICAgICAgICBjYXNlIEk2NDogeworICAgICAgICAgICAgICAgIGhhc0JhZEk2NFVz
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7CisgICAgICAgICAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoJnZtLT50b3BFbnRy
eUZyYW1lKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisKKyAgICAgICAgICAgIC8vIFN0b3Jl
IENhbGxlZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxs
ZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKKworICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAg
ICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CisKKyAgICAgICAgICAgIHZv
aWQgKCp0aHJvd0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikgPSBb
XSAoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKSAtPiB2
b2lkIHsKKyAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgICAgICAg
ICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9i
amVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVNDSUlMaXRl
cmFsKCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1w
b3J0ZWQgZnVuY3Rpb24iKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoISF2
bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdG
YWlsdXJlOjpPdXRPZk1lbW9yeSk7CisKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxs
LCB0aHJvd0JhZEk2NCk7CisgICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRb
JWldIiwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEhlcmUgd2Ug
YXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBsZWFzdCBhbGwg
dGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBzYXZlIGFu
ZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBhbHJlYWR5IHRv
b2sgY2FyZSBvZiB0aGlzLgorICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVTYXZlcyA9IHdh
c21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgbWlzc2luZ0NhbGxlZVNhdmVzLmV4Y2x1
ZGUoanNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIEFTU0VSVChtaXNzaW5nQ2FsbGVl
U2F2ZXMuaXNFbXB0eSgpKTsKKworICAgIGlmICghT3B0aW9uczo6dXNlQ2FsbElDc0ZvcldlYkFz
c2VtYmx5VG9KU0NhbGxzKCkpIHsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhcmdDb3VudCAqIHNpemVvZih1aW50NjRfdCkp
OworICAgICAgICBjaGFyKiBidWZmZXIgPSBhcmdDb3VudCA/IHN0YXRpY19jYXN0PGNoYXIqPihz
Y3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKKyAgICAgICAgdW5zaWduZWQg
bWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7
CisgICAgICAgIHVuc2lnbmVkIGJ1ZmZlck9mZnNldCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGZy
T2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBjb25zdCBHUFJSZWcgc2NyYXRjaEdQUiA9
IEdQUkluZm86OnJlZ0NTMDsKKyAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCks
IHNpemVvZihSZWdpc3RlcikpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpOworCisgICAgICAgIGZv
ciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Cisg
ICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAg
ICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lkOgorICAg
ICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAg
ICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwclJl
ZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdz
LnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1tt
YXJzaGFsbGVkR1BSc10uZ3ByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSBy
ZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBn
cHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5s
b2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCks
IGdwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJU
b1B0cihncHJSZWcsIGdwclJlZyk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVn
LCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQ
UnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIEYzMjogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAgICAg
ICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAg
ICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZw
cigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2
ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFp
bGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6
YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAg
ICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVn
LCBmcHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZl
ciArIGJ1ZmZlck9mZnNldCk7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjY0
OiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAo
bWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBh
cyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVu
dEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAgICAg
ICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZm
ZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGJ1ZmZlck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIGpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoYXJnQ291bnQpIHsKKyAg
ICAgICAgICAgIC8vIFRoZSBHQyBzaG91bGQgbm90IGxvb2sgYXQgdGhpcyBidWZmZXIgYXQgYWxs
LCB0aGVzZSBhcmVuJ3QgSlNWYWx1ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHVpbnQ2NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgU2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KikgPQorICAgICAgICAgICAgW10gKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGNhbGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgs
IHVpbnQ2NF90KiBidWZmZXIpIC0+IHVpbnQ2NF90IHsgCisgICAgICAgICAgICAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAg
ICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25h
dHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGFyZzsK
KyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSTY0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJMzI6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihidWZmZXJbYXJnTnVtXSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRjMyOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFy
ZyA9IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJ1ZmZlclthcmdOdW1dKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICAgICAgICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShjYWxsZWUs
IGNhbGxEYXRhKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBD
YWxsVHlwZTo6Tm9uZSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4
ZWMsIGNhbGxlZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOworCisgICAg
ICAgICAgICAgICAgdWludDY0X3QgcmVhbFJlc3VsdDsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZ1bmM6Cisg
ICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgICAgIGNhc2UgSTY0Ogor
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAg
ICAgICAgICAgICAgIHJlYWxSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHJlc3VsdC50b0ludDMyKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEY2NDoKKyAg
ICAgICAgICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0
ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihyZXN1bHQudG9OdW1iZXIoZXhlYykpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVhbFJlc3VsdDsKKyAgICAgICAgICAgIH07CisgICAg
ICAgIAorICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7CisgICAgICAgIAorICAgICAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQsIGltcG9y
dEluZGV4LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQ
UkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgPj0gNCwgIldlIHJlbHkgb24gdGhpcyB3
aXRoIHRoZSBjYWxsIGJlbG93LiIpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
c2lnbmF0dXJlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYnVmZmVyKSk7Cisg
ICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGF1dG8gbm9FeGNlcHRpb24g
PSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpJbnZlcnRlZEV4
Y2VwdGlvbkNoZWNrKTsKKworICAgICAgICAvLyBleGNlcHRpb24gaGVyZS4KKyAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCZ2bS0+dG9wRW50
cnlGcmFtZSk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNT
dGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAgICAgICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAg
ICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICB9OworICAg
ICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQuanVtcFRv
RXhjZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7
CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgICAgICBjYXNl
IEY2NDogeworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91
YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICBqaXQucmV0KCk7CisK
KyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5k
aW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxs
LCBjYWxsRnVuYyk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25DYWxsLCBkb1Vu
d2luZGluZyk7CisKKyAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJX
ZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25h
dHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7CisgICAgfQorCisgICAgLy8gTm90ZTog
V2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJ
UkdlbmVyYXRvcgorICAgIC8vIHdpbGwgZG8gdGhlIHN0YWNrIGNoZWNrIGZvciB1cy4gV2hlbmV2
ZXIgaXQgZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IG1ha2UKKyAgICAvLyBhIGNhbGwgdG8gdGhpcyB0
aHVuaywgaXQnbGwgbWFrZSBzdXJlIGl0cyBzdGFjayBjaGVjayBpbmNsdWRlcyBzcGFjZQorICAg
IC8vIGZvciB1cyBoZXJlLgorCisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJz
ID0gYXJnQ291bnQgKyAxOyAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KKyAgICBjb25z
dCB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVy
T2ZCeXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNl
dCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJl
ck9mQnl0ZXNGb3JDYWxsKTsKKyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgLy8gRklYTUUgbWFrZSB0aGVz
ZSBsb29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFyZ3Vt
ZW50cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdlIHNpZ25h
dHVyZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1NDcKKyAg
ICAKKyAgICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRoZSBpbnRlZ2VyIHBhcmFtZXRlcnMsIGZyZWVp
bmcgdXAgdGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBhZnRlcndhcmRzLgorICAgIHsKKyAgICAgICAg
dW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVk
RlBScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1l
U2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7
CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgeworICAg
ICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAg
ICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAg
ICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAg
IGNhc2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAgICAgICAg
ICAgIEdQUlJlZyBncHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwg
d2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdh
c21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFy
Z3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAg
ICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCAr
PSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAr
K21hcnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihn
cHJSZWcsIGdwclJlZyk7IC8vIENsZWFyIG5vbi1pbnQzMiBhbmQgbm9uLXRhZyBiaXRzLgorICAg
ICAgICAgICAgICAgIGppdC5ib3hJbnQzMihncHJSZWcsIEpTVmFsdWVSZWdzKGdwclJlZyksIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVn
LCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjMyOgorICAgICAg
ICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBiZWxv
dy4KKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPj0gd2FzbUNDLm1fZnByQXJn
cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBj
YWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHsKKyAgICAg
ICAgLy8gSW50ZWdlciByZWdpc3RlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc3BpbGxlZCwgdGhlc2Ug
YXJlIG5vdyBhdmFpbGFibGUuCisgICAgICAgIEdQUlJlZyBkb3VibGVFbmNvZGVPZmZzZXRHUFJS
ZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIxOworICAgICAgICBib29sIGhhc01hdGVyaWFsaXplZERvdWJsZUVu
Y29kZU9mZnNldCA9IGZhbHNlOworICAgICAgICBhdXRvIG1hdGVyaWFsaXplRG91YmxlRW5jb2Rl
T2Zmc2V0ID0gWyZoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQsICZqaXRdIChHUFJS
ZWcgZGVzdCkgeworICAgICAgICAgICAgaWYgKCFoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVP
ZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KERvdWJsZUVuY29kZU9mZnNl
dCA9PSAxbGwgPDwgNDgsICJjb2RlZ2VuIGFzc3VtZXMgdGhpcyBiZWxvdyIpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKDEpLCBkZXN0KTsKKyAgICAgICAgICAg
ICAgICBqaXQubHNoaWZ0NjQoSklUOjpUcnVzdGVkSW1tMzIoNDgpLCBkZXN0KTsKKyAgICAgICAg
ICAgICAgICBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0g
MDsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25l
ZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNl
dCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdO
dW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNp
Z25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7
CisgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAg
ICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgICAg
ICAgICAgY2FzZSBJMzI6CisgICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBhYm92
ZS4KKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPj0gd2FzbUNDLm1fZ3ByQXJn
cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKKyAgICAgICAgICAgICAgICBj
YWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnBy
UmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFy
Z3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdz
W21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNl
IHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAg
IGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zm
c2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRG
bG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQucHVyaWZ5
TmFOKGZwclJlZyk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywg
c2NyYXRjaCk7CisgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQo
ZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91
YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBqaXQuc3Rv
cmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgICAgICAg
ICBGUFJSZWcgZnByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdh
c21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNt
Q0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1
bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAg
ICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWREb3VibGUoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0
ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGppdC5wdXJpZnlOYU4oZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRv
NjQoZnByUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZURvdWJsZUVu
Y29kZU9mZnNldChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcpOworICAgICAgICAgICAgICAgIGpp
dC5hZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcsIHNjcmF0Y2gpOworICAgICAgICAgICAg
ICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJh
bWVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2Yo
UmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworCisgICAg
R1BSUmVnIGltcG9ydEpTQ2VsbEdQUlJlZyA9IEdQUkluZm86OnJlZ1QwOyAvLyBDYWxsZWUgbmVl
ZHMgdG8gYmUgaW4gcmVnVDAgZm9yIHNsb3cgcGF0aCBiZWxvdy4KKyAgICBBU1NFUlQoIXdhc21D
Qy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMuZ2V0KGltcG9ydEpTQ2VsbEdQUlJlZykpOworCisgICAg
bWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgaW1wb3J0SlNDZWxsR1BS
UmVnKTsKKworICAgIGppdC5zdG9yZTY0KGltcG9ydEpTQ2VsbEdQUlJlZywgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpKSk7CisgICAgaml0LnN0b3JlMzIoSklUOjpUcnVzdGVkSW1tMzIobnVtYmVy
T2ZQYXJhbWV0ZXJzKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRP
ZmZzZXQpKTsKKyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW02NChWYWx1ZVVuZGVmaW5l
ZCksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworCisgICAgLy8gRklYTUUgVGFp
bCBjYWxsIGlmIHRoZSB3YXNtIHJldHVybiB0eXBlIGlzIHZvaWQgYW5kIG5vIHJlZ2lzdGVycyB3
ZXJlIHNwaWxsZWQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0
ODgKKworICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvcy5hZGQo
KTsKKyAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIENvZGVP
cmlnaW4oKSwgaW1wb3J0SlNDZWxsR1BSUmVnKTsKKyAgICBKSVQ6OkRhdGFMYWJlbFB0ciB0YXJn
ZXRUb0NoZWNrOworICAgIEpJVDo6VHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSgwKTsK
KyAgICBKSVQ6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgaW1wb3J0SlNDZWxsR1BSUmVnLCB0YXJnZXRUb0NoZWNrLCBpbml0
aWFsUmlnaHRWYWx1ZSk7CisgICAgSklUOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7
CisgICAgSklUOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworICAgIHNsb3dQYXRoLmxpbmsoJmpp
dCk7CisgICAgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGhlcmUuCisgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6
cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gcmVnVDIuCisgICAgSklUOjpDYWxs
IHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgZG9uZS5saW5rKCZqaXQpOworCisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7CisKKyAgICBzd2l0Y2ggKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIC8vIERpc2Nh
cmQuCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuYzoKKyAgICBjYXNlIEFueWZ1bmM6Cisg
ICAgICAgIC8vIEZvciB0aGUgSmF2YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMgd2l0aCB0aGVz
ZSB0eXBlcyBpbiB0aGVpciBzaWduYXR1cmUgcmV0dXJuIGFyZSBhIFdlYkFzc2VtYmx5Lk1vZHVs
ZSB2YWxpZGF0aW9uIGVycm9yLgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEk2NDogeworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgIH0KKyAgICBjYXNlIEkzMjog
eworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5i
cmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVn
aXN0ZXJzKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVy
cykpOworICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CisKKyAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQo
aml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgaW50MzJfdCAoKmNvbnZl
cnRUb0kzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHYpIC0+IGludDMyX3QgeyAKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
ICAgICAgICByZXR1cm4gdi50b0ludDMyKGV4ZWMpOworICAgICAgICB9OworICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvSTMyKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGMzI6
IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5v
dEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJh
bmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90
SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGpp
dC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFw
cGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOworICAgICAg
ICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAg
ICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwor
CisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8g
Y2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVt
aXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgZmxvYXQgKCpjb252ZXJ0VG9GMzIp
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAt
PiBmbG9hdCB7IAorICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odi50b051bWJlcihleGVjKSk7CisgICAgICAgIH07Cisg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GMzIpOworICAgICAgICB9
KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEY2NDogeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAg
ICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBpc0RvdWJs
ZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgLy8gV2UncmUgYW4gaW50MzIK
KyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJs
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAg
ICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5rKCZq
aXQpOworICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQubW92
ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVl
RlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90QU51
bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwo
KTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlv
bigqdm0pKTsKKworICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSosIEpT
VmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUgeyAKKyAg
ICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gdi50b051bWJl
cihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNv
bnZlcnRUb0Y2NCk7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIGlmICghZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkp
IHsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigmdm0tPnRvcEVudHJ5RnJh
bWUpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAg
ICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAgICB2b2lkICgqZG9V
bndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7Cisg
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2
bSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwor
ICAgICAgICB9OworCisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vud2luZGlu
Zyk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKFVOTElL
RUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bChzbG93Q2FsbCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKKyAgICBDb2RlTG9jYXRpb25OZWFyQ2Fs
bCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwp
OworICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24s
IGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBp
bXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKK30KKwor
dm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25U
eXBlIHR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgVk0qIHZt
ID0gaW5zdGFuY2UtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisKKyAgICB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3Rh
bmNlLT5nbG9iYWxPYmplY3QoKTsKKworICAgICAgICBKU09iamVjdCogZXJyb3I7CisgICAgICAg
IGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCisgICAgICAgICAgICBl
cnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6
OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JT
dHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7Cisg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICB9CisK
KyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOworICAgIEFTU0VSVCghIXZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7Cisg
ICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBh
IHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRsZVVuY2F1
Z2h0RXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQg
dG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAv
LyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikg
V2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlv
bnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIg
YmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRp
ZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICBiaXR3aXNlX2Nh
c3Q8dWludDY0X3QqPihleGVjKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0
PHVpbnQ2NF90PihpbnN0YW5jZS0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkpOworICAgIHJldHVy
biB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2FzbVRvSlMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mYzI0YWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2FzbVRvSlMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtQmlu
ZGluZy5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENh
bGxMaW5rSW5mbzsKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiwgQmFnPENh
bGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBv
cnRJbmRleCk7CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSosIFdhc206OkV4
Y2VwdGlvblR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAppbmRl
eCAwZDI3NzY1Li5jNTg1ZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAogICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5nIHRvIHJ1biB3aXRo
IG1hdGNoZXMgdGhlIG9uZSB3ZSBleHBlY3QuCi0gICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5z
dGFuY2UoKS0+Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5zdGFuY2Uo
KS0+bWVtb3J5KCkpKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0
YW5jZSgpLmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkt
Pm1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCkpKTsKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlm
IHdlIGhhdmUgYSBkaXNhbGxvd2VkIEk2NCB1c2UuCiAKQEAgLTgyLDExICs4MiwxMSBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5RXhl
Y3V0ZVN0YXJ0LCBXZWJBc3NlbWJseUV4ZWN1dGVFbmQpOwogCiAgICAgVmVjdG9yPEpTVmFsdWU+
IGJveGVkQXJnczsKLSAgICBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCA9IHdhc21GdW5jdGlv
bi0+aW5zdGFuY2UoKTsKLSAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0byBzdG9y
ZSB0aGUgY29udGV4dCwgdGhlIGpzCi0gICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3RzIHRoZSBX
YXNtQ29udGV4dCogYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgotICAgIGlmICghV2FzbTo6dXNlRmFz
dFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgYm94ZWRBcmdzLmFwcGVuZCh3YXNtQ29udGV4dCk7
CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IHdhc21GdW5jdGlvbi0+aW5z
dGFuY2UoKTsKKyAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0byBzdG9yZSB0aGUg
Y29udGV4dCwgdGhlIEpTCisgICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3RzIHRoZSBpbnN0YW5j
ZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgaWYgKCFXYXNtOjpDb250ZXh0Ojp1c2VGYXN0
VExTKCkpCisgICAgICAgIGJveGVkQXJncy5hcHBlbmQoaW5zdGFuY2UpOwogCiAgICAgZm9yICh1
bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KTsgKythcmdJbmRleCkgewogICAgICAgICBKU1ZhbHVlIGFyZyA9IGV4ZWMtPmFyZ3VtZW50KGFy
Z0luZGV4KTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcHJv
dG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rpb24sIGZpcnN0QXJndW1lbnQsIGFy
Z0NvdW50LCByZW1haW5pbmdBcmdzKTsKIAogICAgIC8vIEZJWE1FIERvIGF3YXkgd2l0aCB0aGlz
IGVudGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50IGdlbmVyYXRlZCBi
eSBCMy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ4NgotICAg
IFdhc206OkNvbnRleHQqIHByZXZXYXNtQ29udGV4dCA9IFdhc206OmxvYWRDb250ZXh0KHZtKTsK
KyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHByZXZJbnN0YW5jZSA9IHZtLndhc21Db250ZXh0
LmxvYWQoKTsKICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBzdGFjayBjaGVjayBoZXJlIGZv
ciB0aGUgd3JhcHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0CiAgICAgICAgIC8vIHdhbnQg
dG8gZW1pdCBhIHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFwcGVyIGZ1bmN0aW9uLgpAQCAt
MTM3LDIyICsxMzcsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBpZiAoVU5MSUtF
TFkoKHNwIDwgc3RhY2tTcGFjZVVzZWQpIHx8ICgoc3AgLSBzdGFja1NwYWNlVXNlZCkgPCBiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHZtLnNvZnRTdGFja0xpbWl0KCkpKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVT
dGFja092ZXJmbG93RXJyb3IoZXhlYykpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVDb250ZXh0
KHZtLCB3YXNtQ29udGV4dCk7CisgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUoaW5zdGFuY2UsIHZt
LnNvZnRTdGFja0xpbWl0KCkpOwogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkp
OwotICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkgPT0gV2FzbTo6bG9hZENvbnRl
eHQodm0pKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpID09IHZtLndhc21D
b250ZXh0LmxvYWQoKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRv
V2FzbSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludCgpLCAmdm0sICZwcm90b0NhbGxGcmFtZSk7
CiAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBpbiBhIHJlZ2lzdGVyIG9yIG9u
IHRoZSBzdGFjayBzaW5jZSBpdCdzIHN0b3JlZCBpbiBWZWN0b3I8SlNWYWx1ZT4uCiAgICAgLy8g
VGhpcyBwcm9iYWJseSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIHNpbmNlIHRoZSBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBzaG91bGQga2VlcCB0aGUgaW5zdGFuY2UKICAgICAvLyBhbGl2ZS4gQnV0
IGl0J3MgZ29vZCBoeWdpZW5lLgotICAgIHdhc21Db250ZXh0LT51c2UoKTsKLSAgICBpZiAocHJl
dldhc21Db250ZXh0ICE9IHdhc21Db250ZXh0KSB7CisgICAgaW5zdGFuY2UtPnVzZSgpOworICAg
IGlmIChwcmV2SW5zdGFuY2UgIT0gaW5zdGFuY2UpIHsKICAgICAgICAgLy8gVGhpcyBpcyBqdXN0
IGZvciBzb21lIGV4dHJhIHNhZmV0eSBpbnN0ZWFkIG9mIGxlYXZpbmcgYSBjYWNoZWQKICAgICAg
ICAgLy8gdmFsdWUgaW4gdGhlcmUuIElmIHdlIGV2ZXIgZm9yZ2V0IHRvIHNldCB0aGUgdmFsdWUg
dG8gYmUgYSByZWFsCiAgICAgICAgIC8vIGJvdW5kcywgdGhpcyB3aWxsIGZvcmNlIGV2ZXJ5IHN0
YWNrIG92ZXJmbG93IGNoZWNrIHRvIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vIGZpcmUuCi0gICAg
ICAgIHdhc21Db250ZXh0LT5zZXRDYWNoZWRTdGFja0xpbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4o
c3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkpOworICAgICAgICBpbnN0YW5j
ZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludHB0cl90Pjo6bWF4KCkpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVDb250ZXh0
KHZtLCBwcmV2V2FzbUNvbnRleHQpOworICAgIHZtLndhc21Db250ZXh0LnN0b3JlKHByZXZJbnN0
YW5jZSwgdm0uc29mdFN0YWNrTGltaXQoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAogICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYTlkOGYwZC4uMmZkZDVhNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0zMiwxMiArMzIsMTQgQEAKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUg
IkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgog
I2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNsdWRlICJX
YXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgpAQCAtNzUsMTAgKzc3LDEwIEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5l
d1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFu
Y2VTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAot
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0
dXJlKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5j
ZVN0cnVjdHVyZSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2FzbTo6TW9kdWxlPihtb2R1
bGUtPm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
LSAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYywgbW9kdWxlLT5tb2R1bGUo
KS5jb21waWxlU3luYyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSk7CisgICAgaW5zdGFuY2UtPmZp
bmFsaXplQ3JlYXRpb24odm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoJnZt
Lndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCAmV2FzbTo6Y3JlYXRlSlNUb1dh
c21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaW5zdGFuY2Up
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAppbmRleCA2NDk4OWI1Li44NmY4MTdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcApAQCAtOTYsMTMgKzk2LDE4IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnko
RXhlY1N0YXRlKiBleGVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8V2FzbTo6TWVt
b3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbFBhZ2VDb3VudCwg
bWF4aW11bVBhZ2VDb3VudCk7CisgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVt
b3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9y
eSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291
bnQsCisgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0QXN5bmMoQ29sbGVjdGlvblNj
b3BlOjpGdWxsKTsgfSwKKyAgICAgICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RTeW5jKENv
bGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgIFsmdm0sIGpzTWVtb3J5XSAoV2FzbTo6
UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkgeyBq
c01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNvdW50LCBuZXdQYWdlQ291
bnQpOyB9KTsKICAgICBpZiAoIW1lbW9yeSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpKSk7CiAKLSAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNy
ZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1l
bW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqbWVtb3J5LmxlYWtSZWYoKSkpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0KKyAgICBqc01l
bW9yeS0+YWRvcHQobWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOworICAgIAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNNZW1vcnkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAKaW5k
ZXggZTk5NGRjOC4uNGZjYThjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcApAQCAtNzcsOCAr
NzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJv
dG9GdW5jR3JvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgdWludDMyX3QgZGVsdGEgPSB0b05vbldy
YXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKLSAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9u
c09uRmFpbHVyZSA9IHRydWU7Ci0gICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+
Z3Jvdyh2bSwgZXhlYywgZGVsdGEsIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7Cisg
ICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3Jvdyh2bSwgZXhlYywgZGVsdGEp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0LnBhZ2VDb3VudCgpKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDk2MTAyNGQuLjE2NjEwNmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3IuY3BwCkBAIC0xNjEsMTEgKzE2MSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5TW9kdWxlRXhwb3J0cyhFeGVjU3RhdGUqIGV4ZWMpCiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9k
dWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHN0cnVj
dHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4
ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
TW9kdWxlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1
bGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIHN0cnVjdHVyZSkpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAKKyAgICBWZWN0b3I8dWludDhfdD4gc291
cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9k
dWxlKGV4ZWMsIFdURk1vdmUoc291cmNlKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCkBA
IC0xNzUsMTYgKzE3NiwxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIikpOwogfQogCi1KU1ZhbHVlIFdl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYnVmZmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlNb2R1
bGUqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUq
IGV4ZWMsIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFZl
Y3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4
ZWMsIGJ1ZmZlcik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBh
dXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVy
ZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5X
ZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNXZWJB
c3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXYXNtOjpNb2R1
bGU6OnZhbGlkYXRlU3luYyh2bSwgV1RGTW92ZShzb3VyY2UpKSk7CisgICAgcmV0dXJuIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV2FzbTo6TW9k
dWxlOjp2YWxpZGF0ZVN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKGJ1ZmZlcikpKTsKIH0K
IAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TW9k
dWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCmluZGV4
IDYwMjVjOTguLjEzYWNhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKQEAgLTMwLDggKzMw
LDExIEBACiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCitjbGFz
cyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGU7
CiAKIGNsYXNzIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxG
dW5jdGlvbiB7CkBAIC00NCw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsK
IAotICAgIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGJ1
ZmZlciwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0
ZU1vZHVsZShFeGVjU3RhdGUqLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpOwogCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90
eXBlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggY2IxZmVjMS4uMGE4NjZlZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAg
IFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJs
b2NrID0gaW5zdGFuY2UtPmNvZGVCbG9jaygpOworICAgIFdhc206OkNvZGVCbG9jayogY29kZUJs
b2NrID0gaW5zdGFuY2UtPmluc3RhbmNlKCkuY29kZUJsb2NrKCk7CiAgICAgY29uc3QgV2FzbTo6
TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZv
cm1hdGlvbigpOwogCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gbW9kdWxl
LT5leHBvcnRTeW1ib2xUYWJsZSgpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUsCiAgICAgICAgICAgICAvLyBSZXR1cm4gVG9KU1ZhbHVlKHYpLgogICAgICAgICAg
ICAgc3dpdGNoIChnbG9iYWwudHlwZSkgewogICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6Ci0g
ICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxvYWRJMzJH
bG9iYWwoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBK
U1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoK
QEAgLTE2MCwxMSArMTYwLDExIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxpbmso
RXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgICAg
ICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEYzMkdsb2JhbChleHAu
a2luZEluZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5z
dGFuY2UtPmluc3RhbmNlKCkubG9hZEYzMkdsb2JhbChleHAua2luZEluZGV4KSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAg
ICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkRjY0R2xvYmFsKGV4
cC5raW5kSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShp
bnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkRjY0R2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTIxNywxMiArMjE3
LDEyIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9
IG1faW5zdGFuY2UtPm1vZHVsZSgpOwotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG1faW5zdGFuY2UtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24o
KTsKKyAgICBXYXNtOjpNb2R1bGUmIG1vZHVsZSA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkubW9k
dWxlKCk7CisgICAgV2FzbTo6Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5pbnN0
YW5jZSgpLmNvZGVCbG9jaygpOworICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBt
b2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS5tb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIEpTV2Vi
QXNzZW1ibHlUYWJsZSogdGFibGUgPSBtX2luc3RhbmNlLT50YWJsZSgpOwogCi0gICAgY29uc3Qg
VmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4mIGRhdGEgPSBtX2luc3RhbmNlLT5tb2R1bGUoKS0+
bW9kdWxlSW5mb3JtYXRpb24oKS5kYXRhOworICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50
OjpQdHI+JiBkYXRhID0gbW9kdWxlSW5mb3JtYXRpb24uZGF0YTsKICAgICBKU1dlYkFzc2VtYmx5
TWVtb3J5KiBqc01lbW9yeSA9IG1faW5zdGFuY2UtPm1lbW9yeSgpOwogCiAgICAgc3RkOjpvcHRp
b25hbDxKU1ZhbHVlPiBleGNlcHRpb247CkBAIC0yMzksNyArMjM5LDcgQEAgSlNWYWx1ZSBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4ID0gZWxl
bWVudC5vZmZzZXQuaXNHbG9iYWxJbXBvcnQoKQotICAgICAgICAgICAgICAgID8gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmxvYWRJMzJHbG9iYWwoZWxlbWVudC5vZmZzZXQuZ2xv
YmFsSW1wb3J0SW5kZXgoKSkpCisgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1aW50MzJf
dD4obV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xvYmFsKGVsZW1lbnQub2Zmc2V0Lmds
b2JhbEltcG9ydEluZGV4KCkpKQogICAgICAgICAgICAgICAgIDogZWxlbWVudC5vZmZzZXQuY29u
c3RWYWx1ZSgpOwogCiAgICAgICAgICAgICBmbihlbGVtZW50LCB0YWJsZUluZGV4KTsKQEAgLTI1
NSw3ICsyNTUsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShF
eGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpTZWdtZW50OjpQdHIm
IHNlZ21lbnQgOiBkYXRhKSB7CiAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQgPSBzZWdtZW50
LT5vZmZzZXQuaXNHbG9iYWxJbXBvcnQoKQotICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KG1faW5zdGFuY2UtPmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0Lmdsb2Jh
bEltcG9ydEluZGV4KCkpKQorICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KG1faW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChzZWdtZW50LT5vZmZzZXQuZ2xv
YmFsSW1wb3J0SW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgOiBzZWdtZW50LT5vZmZzZXQuY29u
c3RWYWx1ZSgpOwogCiAgICAgICAgICAgICBmbihtZW1vcnksIHNpemVJbkJ5dGVzLCBzZWdtZW50
LCBvZmZzZXQpOwpAQCAtMjkzLDcgKzI5Myw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIC8vIGZvciB0aGUg
aW1wb3J0LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NTUxMAogICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGVsZW1l
bnQuZnVuY3Rpb25JbmRpY2VzW2ldOwotICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gbW9kdWxlLnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgY29kZUJs
b2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKICAgICAgICAgICAgICAgICBKU09iamVjdCog
ZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5j
dGlvbihmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlI
b3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCmluZGV4IGU5YTYz
NGEuLjFmYjk0M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJG
dW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U1Byb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCkBAIC00MCw2ICs0MSw3IEBACiAjaW5j
bHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiV2FzbUJCUVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgogI2luY2x1
ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCIKQEAgLTk0
LDcgKzk2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1i
bHlDb21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKICAgICBl
bHNlIHsKLSAgICAgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKHZtLCBXVEZNb3ZlKHNv
dXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtwcm9t
aXNlLCBnbG9iYWxPYmplY3RdIChWTSYgdm0sIFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3Vs
dCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3lu
Yygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNt
OjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGdsb2JhbE9iamVjdCwgJnZtXSAoV2Fz
bTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtw
cm9taXNlLCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXSAoKSBt
dXRhYmxlIHsKICAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CiAgICAgICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CkBAIC0xMzUsNyArMTM3LDcgQEAgc3RhdGljIHZvaWQgaW5zdGFudGlhdGUo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1cK
IHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgLy8gSW4g
b3JkZXIgdG8gYXZvaWQgcG90ZW50aWFsbHkgcmVjb21waWxpbmcgYSBtb2R1bGUuIFdlIGZpcnN0
IGdhdGhlciBhbGwgdGhlIGltcG9ydC9tZW1vcnkgaW5mb3JtYXRpb24gcHJpb3IgdG8gY29tcGls
aW5nIGNvZGUuCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkp
OworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpLCBXYXNtOjpJ
bnN0YW5jZTo6Y3JlYXRlKFJlZjxXYXNtOjpNb2R1bGU+KG1vZHVsZS0+bW9kdWxlKCkpKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNl
KSk7CiAKICAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKQEAgLTE0Mywx
MyArMTQ1LDEzIEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiAgICAgZGVwZW5kZW5jaWVzLmFw
cGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW5zdGFuY2UpKTsKICAgICB2bS5wcm9taXNlRGVmZXJy
ZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMp
KTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbXBsZXRpb24gdGFzayBtYXkgb3IgbWF5IG5vdCBnZXQg
Y2FsbGVkIGltbWVkaWF0ZWx5LgotICAgIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZUFzeW5jKHZt
LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206OkNvZGVCbG9j
azo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmRd
IChWTSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgcmVmQ29kZUJsb2NrKSBtdXRhYmxlIHsK
KyAgICBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVBc3luYygmdm0ud2FzbUNvbnRleHQsIGluc3Rh
bmNlLT5tZW1vcnlNb2RlKCksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q29kZUJsb2NrOjpDYWxs
YmFja1R5cGU+KFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZCwgJnZtXSAo
UmVmPFdhc206OkNvZGVCbG9jaz4mJiByZWZDb2RlQmxvY2spIG11dGFibGUgewogICAgICAgICBS
ZWZQdHI8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBXVEZNb3ZlKHJlZkNvZGVCbG9jayk7
CiAgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21p
c2UsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZCwgJnZtLCBjb2RlQmxv
Y2sgPSBXVEZNb3ZlKGNvZGVCbG9jayldICgpIG11dGFibGUgewogICAgICAgICAgICAgRXhlY1N0
YXRlKiBleGVjID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAg
ICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBjb2Rl
QmxvY2sucmVsZWFzZU5vbk51bGwoKSwgcmVzb2x2ZUtpbmQpOwogICAgICAgICB9KTsKLSAgICB9
KSk7CisgICAgfSksICZXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIsICZXYXNtOjp3YXNtVG9K
U0V4Y2VwdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVmFsdWUg
YnVmZmVyLCBKU09iamVjdCogaW1wb3J0T2JqZWN0KQpAQCAtMTY1LDcgKzE2Nyw3IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQ
cm9taXNlRGVmZXJyZWQqIHByCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNv
dXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpKTsKIAotICAgIFdhc206
Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyh2bSwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRU
YXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBn
bG9iYWxPYmplY3RdIChWTSYgdm0sIFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJl
c3VsdCkgbXV0YWJsZSB7CisgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNt
Q29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6
Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3QsICZ2bV0g
KFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAg
ICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtw
cm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1
bHQpLCAmdm1dICgpIG11dGFibGUgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yMTMsNyArMjE1LDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVj
KQogICAgIHNpemVfdCBieXRlU2l6ZTsKICAgICB1aW50OF90KiBiYXNlID0gZ2V0V2FzbUJ1ZmZl
ckZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgYnl0ZU9mZnNldCwgYnl0ZVNpemUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IEJCUVBsYW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgQkJRUGxhbjo6
VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOworICAgIEJCUVBsYW4gcGxhbigmdm0u
d2FzbUNvbnRleHQsIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgQkJRUGxhbjo6VmFsaWRh
dGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50
IHRvIHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhp
bmcgd2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjAxNQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFy
c2VBbmRWYWxpZGF0ZU1vZHVsZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAppbmRleCAx
MTg2NWY1Li4yYzViYzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTkwLDggKzkw
LDE1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2Vi
QXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBS
ZWZQdHI8V2FzbTo6VGFibGU+IHdhc21UYWJsZSA9IFdhc206OlRhYmxlOjpjcmVhdGUoaW5pdGlh
bCwgbWF4aW11bSk7CisgICAgaWYgKCF3YXNtVGFibGUpIHsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNvdWxkbid0IGNyZWF0ZSBUYWJs
ZSIpKSkpOworICAgIH0KKwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCBpbml0
aWFsLCBtYXhpbXVtKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1i
bHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgd2FzbVRhYmxlLnJlbGVhc2VOb25OdWxsKCkpKTsK
IH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1i
bHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggMDIx
YzYxOC4uNjhlOTU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtNjMsNyArNjMsNyBA
QCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246
OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsTwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0
aW9uLT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmluZm8oKSksICJX
ZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwogICAgIFN0
cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdl
dEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50cmluc2lj
LCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCB7IHNpZ25hdHVyZUluZGV4LCBpbnN0YW5jZS0+Y29k
ZUJsb2NrKCktPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpIH0pOworICAg
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiB7IHNp
Z25hdHVyZUluZGV4LCBpbnN0YW5jZS0+d2FzbUNvZGVCbG9jaygpLndhc21Ub0pTQ2FsbFN0dWJG
b3JJbXBvcnQoaW1wb3J0SW5kZXgpIH0gKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20v
V2FzbU1vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd2FzbS9XYXNt
TW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwYjlkMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20vV2Fz
bU1vZHVsZS5oCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvV2FzbU1vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOTc1YzljOS4uNzg0MDNlNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCkBAIC03OSw2ICs3OSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaD4KKyNpbmNsdWRlIDx3YXNtL1dhc21Nb2R1bGUuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLS0gCjIuOS4zCgo=
</data>
<flag name="review"
          id="341793"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321995</attachid>
            <date>2017-09-27 12:23:54 -0700</date>
            <delta_ts>2017-09-27 13:35:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>430572</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAwNjVlZjk0MjM3NWY2M2UxOWNiYTM1ZDZhNmUyMDM2NTYyZGJmOTJjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NDcgKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgICAgICAgICB8ICAyMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaCAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaCAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCAgICAgICAgICAgfCAxMjIgKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAgICAgICAgfCAgNzYgKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCAgICAgICAgICB8ICA1OSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oICAgICAgICAgICAgfCAg
IDUgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCAgICAgICAg
fCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oICAgICAg
ICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAg
ICAgICAgICB8IDIyNyArKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oICAgICAgICAgICB8ICA0OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgfCAgIDAKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4g
anN9L0pTV2ViQXNzZW1ibHkuaCAgIHwgIDUwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAgICAgICAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTE4ICsrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDg1ICsrLQogLi4uL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgfCAgNzYgKystCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggICB8ICAxMyAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAg
MzIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAg
fCAgMjUgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAgIHwgIDc1ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmggfCAgNDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCAgICAgICAgIHwgNjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8
ICAxOSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAg
ICAgfCAgIDUgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAg
ICAgICAgIHwgIDIyICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgICB8ICAxNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVj
dG9yLmNwcCAgICAgICAgfCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAgICAgICAgIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93YXNtL1dhc21Nb2R1bGUuaCB8ICAgMiArCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8ICAgMSArCiAxMTEgZmlsZXMgY2hhbmdlZCwgMzA3
NyBpbnNlcnRpb25zKCspLCAxNzQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeU1vZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAwJSkKIHJlbmFtZSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggKDYyJSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd2Fz
bS9XYXNtTW9kdWxlLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDVhN2IwMmQuLjQzNjVmZWIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDkt
MjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRXhjZWVkaW5nIG1h
eCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyCisgICAg
ICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdlOiBpdCB1c2Vk
IHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIHRl
c3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qczoKKyAgICAgICAgKGFz
c2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAgKGFzc2Vy
dC50aHJvd3MpOgorCiAyMDE3LTA5LTI1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIFtERkddIFN1cHBvcnQgQXJyYXlQdXNoIHdpdGggbXVsdGlwbGUg
YXJncwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uN2ZlNmIxMyAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0
IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIq
NjQqMTAyNCk7CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5j
ZSBpdCBmYWlscy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVy
cm9yLCAiT3V0IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdy
b3coMTAwMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNl
ZWQgdGhlIG1lbW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOyAKICAgICBhc3NlcnRFcShi
dWZmZXIuYnl0ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnkuYnVmZmVy
LCBidWZmZXIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0ZCAxMDA2
NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFi
bGVJbXBvcnQodGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0
cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVy
IHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxp
bWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVh
dGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tp
bml0aWFsOiAyKiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBw
YWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUn
cyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJd
LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQg
LyAyNzogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmln
LCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBj
b3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCiAgICAgXTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDI4MjMzOGUuLjQ3NzVhNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1MCBAQAorMjAxNy0wOS0yNSAgSkYgQmFzdGllbiAgPGpm
YmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVy
c2lvbiBvZiBldmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZW50YWlscyBjbGVhbmluZyB1cCBh
bmQgc3BsaXR0aW5nIGEgYnVuY2ggb2YgY29kZSB3aGljaCB3ZSBoYWQKKyAgICAgICAgaW50ZXJ0
d2luZWQgYmV0d2VlbiBDKysgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgSlMgb2JqZWN0cywgYW5k
IHB1cmUgQysrCisgICAgICAgIGltcGxlbWVudGF0aW9uIG9iamVjdHMuIFRoaXMgc3BlY2lmaWMg
Y2hhbmdlIGdvZXMgbW9zdCBvZiB0aGUgd2F5IHRvd2FyZHMKKyAgICAgICAgYWxsb3dpbmcgSlND
J3MgV2ViQXNzZW1ibHkgdG8gd29yayB3aXRob3V0IFZNIC8gSlMsIHVwIHRvIGJ1dCBleGNsdWRp
bmcKKyAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlICh0aGVyZSdzIFdhc206Okluc3RhbmNl
LCBidXQgaXQncyBub3QgKnRoZSogdGhpbmcKKyAgICAgICAgeWV0KS4gQmVjYXVzZSBvZiB0aGlz
IHdlIHN0aWxsIGhhdmUgYSBmZXcgRklYTUUgaWRlbnRpZnlpbmcgcGxhY2VzIHRoYXQgbmVlZCB0
bworICAgICAgICBjaGFuZ2UuIEEgZm9sbG93LXVwIGNoYW5nZSB3aWxsIGdvIHRoZSByZXN0IG9m
IHRoZSB3YXkuCisKKyAgICAgICAgSSB3ZW50IGFib3V0IHRoaXMgY2hhbmdlIGluIHRoZSBzaW1w
bGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3dhc20g
ZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNsdWRlIHRoZSAv
anMvCisgICAgICAgIHN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCisKKyAgICAgICAgTm9uZSBvZiB0aGlzIGNoYW5nZSBy
ZW1vdmVzIHRoZSBuZWVkIGZvciBhIEpJVCBlbnRpdGxlbWVudCB0byBiZSBhYmxlIHRvIHVzZQor
ICAgICAgICBXZWJBc3NlbWJseS4gV2UgZG9uJ3QgaGF2ZSBhbiBpbnRlcnByZXRlciwgdGhlIHBy
b2Nlc3MgdGhlcmVmb3JlIHN0aWxsIG5lZWRzIHRvCisgICAgICAgIGJlIGFsbG93ZWQgdG8gSklU
IHRvIHVzZSB0aGVzZSBwdXJlLUMrKyBBUElzLgorCisgICAgICAgIEludGVyZXN0aW5nIHRoaW5n
cyB0byBub3RlOgorCisgICAgICAgICAgLSBSZW1vdmUgVk0gZnJvbSBQbGFuIGFuZCBhc3NvY2lh
dGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KKyAgICAgICAgICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCisgICAgICAgICAgLSBXYXNtOjpN
ZW1vcnkgc2hvdWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhl
IEdDIHRvCisgICAgICAgICAgICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1i
ZGFzIGF0IGNvbnN0cnVjdGlvbiB0aW1lIGZvciB0aGlzCisgICAgICAgICAgICBwdXJwb3NlOiBv
bmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9y
CisgICAgICAgICAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgYWxsb3dz
IHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCisgICAgICAgICAgICBkaWN0YXRlIGhvdyB0
byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1iZWRkaW5nIHRoYXQn
cyB0bworICAgICAgICAgICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3RpdmVs
eSkuCisgICAgICAgICAgLSBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5
IHRvIFdhc206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCisgICAgICAgICAgICB0aGVyZSwg
d2l0aCBhbiBlbnVtIGNsYXNzIGZvciBmYWlsdXJlIHR5cGVzLgorICAgICAgICAgIC0gRXhjZWVk
aW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVy
IHNwZWMuIFRoaXMKKyAgICAgICAgICAgIGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5n
ZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVwZGF0ZSB0aGUKKyAgICAgICAgICAgIGNv
cnJlc3BvbmRpbmcgdGVzdC4KKyAgICAgICAgICAtIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3Jvd19t
ZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCisgICAgICAgICAg
ICByZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgorICAgICAgICAg
IC0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWls
dXJlLCBiZWNhdXNlIGl0J3Mgb25seQorICAgICAgICAgICAgZXZlciBjYWxsZWQgZnJvbSBKUyAo
bm90IGZyb20gZ3Jvd19tZW1vcnkgYXMgYmVmb3JlKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9y
eSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dz
IEpTCisgICAgICAgICAgICB3cmFwcGVycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdoZW4gZ3Jv
d3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CisgICAgICAgICAgICBrbm93bmluZyBh
bnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxpc3Qgb2YgY2Fs
bGJhY2tzCisgICAgICAgICAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAorICAgICAgICAgICAgdW5kZXIgYSBs
b2NrKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUg
c291cmNlIG9mIHRydXRoIGFib3V0IGFkZHJlc3MgLyBzaXplLAorICAgICAgICAgICAgdXNlZCBk
aXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBpbnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnku
CisgICAgICAgICAgLSBNb3ZlIHdhc21Ub0pTIGZyb20gdGhlIGdlbmVyYWwgV2FzbUJpbmRpbmcg
aGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCisgICAgICAgICAgICB3YXNtL2pzLiBJdCdz
IG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwLCBhbmQgdXNl
cyBWTSwKKyAgICAgICAgICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3NlbWJs
eS4KKyAgICAgICAgICAtIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBh
IHN0cnVjdCBob2xkaW5nIGEKKyAgICAgICAgICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBu
b3cpIGluc3RlYWQgb2YgYW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcworICAgICAgICAg
ICAgZG9lc24ndCBhZGQgYW55dGhpbmcgdG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdl
IHdoYXQgYWN0dWFsbHkgZ2V0cworICAgICAgICAgICAgcGFzc2VkIGFyb3VuZCBpbiBKSVQgY29k
ZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAg
ICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVudGlyZSBwdXJwb3NlIG9m
IHRoaXMgY2hhbmdlIGlzIHRvCisgICAgICAgICAgICBhbGxvdyBwYXNzaW5nIFdhc206OkNvbnRl
eHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZNCisgICAg
ICAgICAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZl
Y3RpdmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKKyAgICAgICAgICAgIHRoaXMgc2V0dXAgYSBub24t
SlMgZW1iZWRkaW5nIGlzIG11Y2ggYmV0dGVyIG9mZi4KKyAgICAgICAgICAtIE1vdmUgSlNXZWJB
c3NlbWJseSBpbnRvIHRoZSBKUyBmb2xkZXIuCisgICAgICAgICAgLSBPTUdQbGFuOiB1c2UgV2Fz
bTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4K
KyAgICAgICAgICAtIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24gV2FzbTo6Q29kZUJsb2NrJ3Mg
dGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKKyAgICAgICAgICAgIGJlaW5nIG9uIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5FbWJlZGRlcgor
ICAgICAgICAgICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCisgICAgICAgICAgICBjYWxsZWQgd2FzbS0+
SlMgc3R1Yi4gVGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNy
ZWF0aW5nCisgICAgICAgICAgICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhl
IHN0dWJzIHRvIGNhbGwgYmFjayBpbnRvIHRoZQorICAgICAgICAgICAgZW1iZWRkZXIuIFRoaXMg
aXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVz
ZQorICAgICAgICAgICAgdGhlIEIzIElSIGdlbmVyYXRvciBub3cgcmVhY2hlcyBmb3IgV2FzbTo6
Q29kZUJsb2NrIGluc3RlYWQgb2YKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
CisgICAgICAgICAgLSBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24gY29t
cGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KKyAgICAgICAgICAgIGF0b21pYzxib29s
PiBmbGFnIGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBs
b2NrLCBhbmQKKyAgICAgICAgICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJh
Y2UuanMgYmVjYXVzZSBiZWZvcmUgbXkgY2hhbmdlcworICAgICAgICAgICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayBkaWQgaXRzIG93biBjb21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJv
bQorICAgICAgICAgICAgV2FzbTo6Q29kZUJsb2NrLCB3aXRob3V0IGdldHRpbmcgdGhlIGxvY2su
IE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxv
Y2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2VyLCB0aGUgbG9jayB3YXMg
YmVpbmcKKyAgICAgICAgICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2VydGlvbi4K
KyAgICAgICAgICAtIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQg
dGhyb3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKKyAgICAgICAgICAgIGluIGF0IGNvbXBp
bGF0aW9uIHRpbWUsIGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20g
d3JhcHBlci4KKyAgICAgICAgICAtIFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJv
dXQgZmF1bHQgaGFuZGxpbmcgdGh1bmtzLiBPbmx5IHRoZSBJUgorICAgICAgICAgICAgZ2VuZXJh
dG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24g
dGhyb3dpbmcKKyAgICAgICAgICAgIHRodW5rIGlzIGdlbmVyYXRlZCBpZiBhbnkgbWVtb3J5IGlz
IHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5vdAorICAgICAgICAgICAgYWxs
IG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KKyAgICAgICAgICAtIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCisgICAgICAgICAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFy
IEMrKyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKKyAgICAgICAgICAgIGNvZGUgd2hl
biBhIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJl
ZGRlciB0byBnZXQKKyAgICAgICAgICAgIGNhbGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBw
cm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5nbGUgb2YgdGhlc2UKKyAgICAgICAgICAgIGZ1bmN0
aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJvY2VzcykgYmVjYXVzZSB0aGUgdHJh
cCBoYW5kbGVyIGlzIGEKKyAgICAgICAgICAgIHNpbmdsZXRvbi4gVGhhdCBjYW4gYmUgZml4ZWQg
aW4gaW4gIzE3NzQ3NS4KKyAgICAgICAgICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVyZSBh
bGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgorICAgICAgICAgIC0gU3BsaXQgdXAgSlNX
ZWJBc3NlbWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKKyAgICAgICAgICAgIHJl
ZmNvdW50ZWQuIEpTV2ViQXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVu
Y3Rpb25zIGluIHRoZQorICAgICAgICAgICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0
J3MgdXNlZCBieSB0aGUgSklUIGNvZGUgdG8gbG9va3VwIHdoZXJlIHRvCisgICAgICAgICAgICBj
YWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZvciBjb250ZXh0IHN3aXRjaCkuIE5vdGUg
dGhhdCB0aGlzIGNyZWF0ZXMKKyAgICAgICAgICAgIGFuIGV4dHJhIGFsbG9jYXRpb24gZm9yIGFs
bCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhjaGFuZ2UKKyAgICAgICAg
ICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUgaW5zdGFu
Y2UgdXNlZCB0byBiZSBvYnRhaW5lZAorICAgICAgICAgICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlv
bi4gQWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKKyAgICAg
ICAgICAgIGluc3RhbmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1
bWIgcG9pbnRlciB0byB0aGUKKyAgICAgICAgICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBv
dGhlcndpc2Ugd291bGQgY2F1c2UgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICAgICAgICAtIEFkZCBX
YXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVjaCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCisg
ICAgICAgICAgLSBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBkb2Vzbid0IGp1c3QgY29udGFp
biB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCisgICAgICAgICAgICBKU09iamVjdHMsIGl0IGFs
c28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3YXNtCisgICAg
ICAgICAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAorICAgICAgICAgICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91
bGRuJ3QgYmUgdGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAorICAg
ICAgICAgICAgY3JlYXRlcyBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVh
c2llciB0byBkaXNhc3NvY2lhdGUKKyAgICAgICAgICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5n
cyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhpbmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKKyAgICAg
ICAgICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBnZW5lcmF0b3Igb25seSBuZWVkcyBv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgorICAgICAgICAgICAgdGhlIGNhbGwgb3Bjb2RlICh3
aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdoZXRoZXIgdGhlCisg
ICAgICAgICAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhpcyBp
c24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKKyAgICAgICAgICAgIGJlY2F1c2UgaXQncyBkZXBl
bmRlbnQgb24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBp
ZgorICAgICAgICAgICAgdGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFy
Z2V0IGluc3RhbmNlIChvbmx5IHdhc20tPndhc20KKyAgICAgICAgICAgIGRvZXMpOyB0aGUgb3Ro
ZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcgd2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9u
IHRvCisgICAgICAgICAgICBmaWd1cmUgb3V0IHRoZSB3YXNtLT53YXNtIHRhcmdldCBpbnN0YW5j
ZSwgYW5kIHRoZW4gZ2V0cworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0
T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwKKyAgICAgICAgICAgIGNh
bGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5zdGFuY2Ug
Y2FuIGJlCisgICAgICAgICAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRo
ZSBDb250ZXh0IGlzLCBhbmQKKyAgICAgICAgICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
IGlzIGFscmVhZHkgZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKKyAgICAg
ICAgICAgIGNhbiBtb3ZlIHRoaXMgdGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUlu
c3RhbmNlIHRvIFdhc206Okluc3RhbmNlLAorICAgICAgICAgICAgYW5kIGxlYXZlIGltcG9ydEZ1
bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVyIHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmlj
LAorICAgICAgICAgICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdyaXRlQmFycmllcjxKU09iamVj
dD4uCisgICAgICAgICAgLSBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJhbWUsIGFuZCBp
biBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAorICAgICAgICAgICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAorICAgICAgICAgICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBp
bnN0ZWFkIHN0b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYworICAgICAgICAgICAgbG9jYXRp
b24uIFRoYXQgY2hhbmdlIHdvbid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29k
ZSBjaHVybiwgYnV0CisgICAgICAgICAgICB3aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBz
b21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMgbWFubmVyIHdpdGhvdXQKKyAgICAgICAgICAgIGhh
dmluZyBhIFZNLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6dW53aW5kRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dy
YW0pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogZGZn
L0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0
Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4
aXQpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9z
ckVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21w
aWxlU3R1Yik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6
dW5zYWZlQ2FsbGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6RXhlY1N0YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkV4ZWNTdGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUgY29uc3QpOgorICAg
ICAgICAqIGludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAgICAoSlNDOjpOYXRpdmVD
YWxsRnJhbWVUcmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6CisgICAgICAgIChKU0M6Ok5h
dGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRo
UmVzdG9yZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3Jl
Ojp+TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAgICAqIGludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0
b3IoKSBjb25zdCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IpOgorICAgICAgICAo
SlNDOjpTdGFja1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zp
c2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6
OkZyYW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
aDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVySXNFbnRyeUZyYW1l
IGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmg6CisgICAgICAg
IChKU0M6OlZNRW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6
Vk1FbnRyeVJlY29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAoSlNDOjpF
bnRyeUZyYW1lOjp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNo
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
SW1wbCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0
Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKToKKyAgICAg
ICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAg
ICAgICAoSlNDOjp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0
aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OkZyYW1lV2Fs
a2VyKToKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VUb1BhcmVudEZyYW1lKToK
KyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1Ry
YWNlcyk6CisgICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6
VGhyb3dTY29wZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAg
ICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KToKKyAg
ICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjppc1NhbmVGcmFtZSk6
CisgICAgICAgIChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAg
ICAgICAoSlNDOjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2spOgorICAgICAg
ICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29t
cGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdh
c20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFu
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20v
V2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVC
bG9jazo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpzZXRD
b21waWxhdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFN0dWJzKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6
Oldhc206OkNvZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yik6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCk6
CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRpb25GaW5pc2hlZCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21D
b250ZXh0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpDb250ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAg
ICAgICAqIHdhc20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9XYXNtSW5zdGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbik6
CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpJbnN0YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6
Om1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0YWJsZSk6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpJbnN0YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
Okluc3RhbmNlOjpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5z
dGFuY2U6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRP
ZkNhY2hlZFN0YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVk
U3RhY2tMaW1pdCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRDYWNo
ZWRTdGFja0xpbWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRS
ZWdpc3RlckluZm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9TYXZlIGNvbnN0KToKKyAg
ICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlVmFs
aWRhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5
bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZTo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQ
YXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFuKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6T01HUGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4u
aDoKKyAgICAgICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGFnZUNvdW50Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OnJ1bkNvbXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmFkZENv
bXBsZXRpb25UYXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlQ29udGV4
dEFuZENhbmNlbElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25h
dHVyZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgICogd2Fz
bS9XYXNtVGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Z3Jvdyk6Cisg
ICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRh
YmxlOjpvZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZG
dW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAqIHdh
c20vV2FzbVRodW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJv
bVdhc21UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVy
VXBUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c2V0VGhyb3dX
YXNtRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtzOjp0aHJvd1dhc21FeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdhc20vV2Fz
bVdvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFu
c0ZvckNvbnRleHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0Lmg6CisgICAgICAgICog
d2FzbS9qcy9KU1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVK
U1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaC4KKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2Vt
Ymx5LmguCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbnN0YW5jZSk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29udGV4dCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0NhbGxlZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludCk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVybmFsTWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29kZUJsb2NrIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21UYWJsZSk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscyk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNhY2hlZFN0YWNrTGltaXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldENhY2hlZFN0
YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21NZW1v
cnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21Nb2R1bGUpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFsbG9jYXRpb25TaXplKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUgY29uc3QpOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1v
cnk6OmFkb3B0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3Nl
bWJseU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKToK
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlU
YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFz
c2VtYmx5VGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6
ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRv
SlMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGlu
Zy5jcHAuCisgICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9K
U0V4Y2VwdGlvbik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJs
eUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFz
c2VtYmx5TWVtb3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3Nl
bWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6
OmNyZWF0ZU1vZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6
CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlD
b21waWxlRnVuYyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6
Y29tcGlsZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0
ZUZ1bmMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTctMDktMjUgIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0RGR10gU3VwcG9y
dCBBcnJheVB1c2ggd2l0aCBtdWx0aXBsZSBhcmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGZlYjc0MDEuLmI5MDUyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMDgwLDcgKzEwODAsNyBAQAogCQk3OUM0QjE1RTFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2
ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyog
TExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUQ1Q0Q1QjFDMTEw
NkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBs
aW5nUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk3OURBRTI3QTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUw
M0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovOyB9OworCQk3OURBRTI3QTFF
MDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZBQSAvKiBX
YXNtRXhjZXB0aW9uVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc5REZDQkRCMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNh
Y2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURG
Q0JEQTFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RUUwQzAwMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFi
bGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vi
c3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTQ1OCw3ICsxNDU4LDYgQEAKIAkJQUQyRkNDMjAxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzE0MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJs
eVRhYmxlQ29uc3RydWN0b3IubHV0LmggKi87IH07CiAJCUFEMkZDQzIxMURCNTlDQjIwMEIzRTcz
NiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMTUxREI1OUM1OTAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggKi87IH07CiAJCUFEMkZDQzJEMURCODM4RkQw
MEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2IC8qIFdlYkFz
c2VtYmx5UHJvdG90eXBlLmggKi87IH07Ci0JCUFEMkZDQzMxMURCODNENDkwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovOyB9Owog
CQlBRDQxMkIzNDFFN0IyRTlFMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDEyQjMyMUU3QjJFOEEwMDhBRjE1
NyAvKiBXYXNtQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUFENDI1MjUxMUU1RDBFMTQwMDlEMkE5NyAvKiBGdWxsQ29kZU9yaWdpbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0MjUyNTAx
RTVEMERFQjAwOUQyQTk3IC8qIEZ1bGxDb2RlT3JpZ2luLmggKi87IH07CiAJCUFENDkzN0M0MURE
QkU2MTQwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3QzIxRERCRTYwQTAwNzdDODA3IC8q
IEFic3RyYWN0TW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTE0NjYsNiArMTQ2NSwxMyBAQAogCQlBRDQ5MzdENDFEREQyN0RF
MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLzsgfTsKIAkJQUQ0QjFERkExREYyNDRFMjAwNzFBRTMyIC8qIFdh
c21CaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDRCMURGODFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCAqLzsgfTsKIAkJQUQ1
QjQxNkYxRUJBRkI3NzAwOEVGQTQzIC8qIFdhc21OYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVCNDE2RTFFQkFGQjY1MDA4RUZBNDMgLyogV2Fz
bU5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlBRDVDMzZERDFGNjg4QjY1MDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZEQzFGNjg4QjVGMDAwQkNB
QUYgLyogV2FzbUVtYmVkZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RTIxRjY5OUVDMDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2REYx
RjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBX
YXNtVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFQTFGNzVBRDZBMDAwQkNB
QUYgLyogSlNUb1dhc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFEOERENkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkVCMUY3NUFENzMw
MDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBREQwOUFGMzFGNjI0ODJFMDAxMzEzQzIgLyogSlNXZWJBc3NlbWJs
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFE
NUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdh
c21Ub0pTLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQUQ1QzM2RUYxRjdBMjYzQTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZFRTFGN0EyNjI5MDAw
QkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBRDc0MzhDMDFFMDQ1N0E0MDBGRDBDMkEgLyogV2FzbVNpZ25h
dHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ3
NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3
N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
RDhGRjM5ODFFQjVCREIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDhGRjM5NTFFQjVCRDg1MDA4N0ZG
ODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTQxNTUsOSArNDE2MSwyNSBAQAogCQlBRDJGQ0MxNTFEQjU5QzU5
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMjYxREI4MzhDNDAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5UHJvdG90
eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMjcxREI4MzhDNDAw
QjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVBy
b3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDJGQ0MyRTFEQjgzOUY3
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1dlYkFzc2VtYmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRm9ybWF0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNDcxRjRCQTc4NjAwNjY5OTEyIC8qIFdB
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUQzRjFFNEExRjRERTY4QzAwNjY5OTEyIC8qIFdBSW5zdGFuY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0FJbnN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0
QjFGNERFNjhDMDA2Njk5MTIgLyogV0FUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVRhYmxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTRDMUY0REU2OEMwMDY2OTkxMiAv
KiBXQU1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBRDNGMUU1MjFGNEY0QUU1MDA2Njk5MTIgLyogV0FNZW1vcnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0FNZW1vcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDNGMUU1MzFGNEY0QUU1MDA2Njk5MTIgLyogV0FNb2R1bGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0FNb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNG
MUU1NDFGNEY0QUU1MDA2Njk5MTIgLyogV0FJbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXQUluc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTUx
RjRGNEFFNTAwNjY5OTEyIC8qIFdBVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FUYWJs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY0MUY1MEU1N0YwMDY2
OTkxMiAvKiBXQUV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUV4Y2VwdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2NTFGNTBFNTdGMDA2Njk5MTIgLyogV0FF
eGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FFeGNlcHRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1v
cnlEZXNjcmlwdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTWVtb3J5RGVzY3JpcHRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY5MUY1NDdDQjYwMDY2OTkx
MiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FNZW1vcnlEZXNjcmlw
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZBMUY1NDdDQjYwMDY2
OTkxMiAvKiBXQUltcG9ydE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUltcG9ydE9iamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2QjFGNTQ3Q0I4MDA2Njk5MTIg
LyogV0FUYWJsZURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FUYWJsZURlc2NyaXB0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkMxRjU0N0NCODAwNjY5OTEy
IC8qIFdBSW1wb3J0T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBSW1wb3J0T2JqZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkQxRjU0N0NCODAwNjY5
OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBVGFibGVE
ZXNjcmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNzAxRjU0
QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FGdW5jdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU3MTFGNTRDM0FBMDA2Njk5MTIg
LyogV0FGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUZ1bmN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0MTJCMzExRTdCMkU4QTAwOEFGMTU3IC8qIFdh
c21Db250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21D
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0MTJCMzIxRTdCMkU4
QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENDEyQjM1
MUU3QjU3QzAwMDhBRjE1NyAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2VJZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDE3MiwxNSArNDE5NCwy
OCBAQAogCQlBRDRCMURGNzFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUJpbmRpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBRDRCMURGODFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJp
bmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUJpbmRpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1QjQxNkUxRUJBRkI2NTAwOEVGQTQzIC8q
IFdhc21OYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRDMUY2ODhCNUYwMDBCQ0FBRiAv
KiBXYXNtRW1iZWRkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUVtYmVkZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5z
dGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUluc3RhbmNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0
YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQUQ1QzM2RTMxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21UYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZFRTFG
N0EyNjI5MDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1l
bW9yeU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2RjAxRjdBMjZC
RjAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21N
ZW1vcnlNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3NDM4QkUxRTA0
NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbVNpZ25hdHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TaWduYXR1cmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0dDTWFwSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDhERDZDRjFGNjcwODlGMDAwNEVC
NTIgLyogSlNUb1dhc20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNUb1dhc20uaDsgcGF0aCA9IGpzL0pT
VG9XYXNtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOERENkQwMUY2NzA4QTMw
MDA0RUI1MiAvKiBKU1RvV2FzbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1RvV2FzbS5jcHA7
IHBhdGggPSBqcy9KU1RvV2FzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
OEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUluZGV4T3JOYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUluZGV4T3JOYW1l
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ5RTg1MkUxRThBMEM2RTAwOERF
MzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREI2RjY3QzFFMTVE
NzUwMDA4MkYzODQgLyogV2FzbVBhZ2VDb3VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXYXNtUGFnZUNvdW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVRvSlND
YWxsZWUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3Nl
bWJseVRvSlNDYWxsZWUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5VG9KU0NhbGxlZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2Fz
bVRvSlMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2FzbVRvSlMuaDsgcGF0aCA9IGpzL1dhc21Ub0pTLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUVGMUY1RjYyM0YwMDEzMTNDMiAv
KiBXYXNtVG9KUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXYXNtVG9KUy5jcHA7IHBhdGggPSBq
cy9XYXNtVG9KUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUYyMUY2
MjQ4MjkwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpT
V2ViQXNzZW1ibHkuY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2Vt
Ymx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHkuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDMxRUIzMDc3MTAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUREOEZBNDQxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTmFtZVNlY3Rp
b25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERCMUY2MjE4RDc3
REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MTkwLDYgKzQyMjUsOCBAQAogCQlBREU4MDI5NjFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNz
ZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBREU4MDI5NzFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJy
b3JQcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjlEMUUwOEYyMjYwMDU4REU3OCAv
KiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwOyBw
YXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY3MUY0N0E3QjgwMDY0NTFEMyAvKiBXZWJBc3NlbWJs
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBREZDMzBGOTFGNDdBOEMwMDA2NDUxRDMgLyogV0FNb2R1bGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0FNb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU5Rjg5Mzcx
ODkxQUQzMzAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlGODkzODE4OTFBREI1MDBENUNDREMgLyogVW5s
aW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRvb2xFeGVjdXRhYmxlLnhj
Y29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTY0Miw2ICs1Njc5LDI2IEBA
CiAJCQkJODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8s
CiAJCQkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLywK
IAkJCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLywKKwkJ
CQlBRDNGMUU0NzFGNEJBNzg2MDA2Njk5MTIgLyogV0FCYXNlLmggKi8sCisJCQkJQUQzRjFFNjUx
RjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmNwcCAqLywKKwkJCQlBRDNGMUU2NDFGNTBF
NTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uaCAqLywKKwkJCQlBRDNGMUU3MTFGNTRDM0FBMDA2
Njk5MTIgLyogV0FGdW5jdGlvbi5jcHAgKi8sCisJCQkJQUQzRjFFNzAxRjU0QzNBQTAwNjY5OTEy
IC8qIFdBRnVuY3Rpb24uaCAqLywKKwkJCQlBRDNGMUU2QzFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FJ
bXBvcnRPYmplY3QuY3BwICovLAorCQkJCUFEM0YxRTZBMUY1NDdDQjYwMDY2OTkxMiAvKiBXQUlt
cG9ydE9iamVjdC5oICovLAorCQkJCUFEM0YxRTU0MUY0RjRBRTUwMDY2OTkxMiAvKiBXQUluc3Rh
bmNlLmNwcCAqLywKKwkJCQlBRDNGMUU0QTFGNERFNjhDMDA2Njk5MTIgLyogV0FJbnN0YW5jZS5o
ICovLAorCQkJCUFEM0YxRTUyMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1lbW9yeS5jcHAgKi8sCisJ
CQkJQUQzRjFFNEMxRjRERTY4QzAwNjY5OTEyIC8qIFdBTWVtb3J5LmggKi8sCisJCQkJQUQzRjFF
NjgxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5jcHAgKi8sCisJCQkJQUQz
RjFFNjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5oICovLAorCQkJCUFE
M0YxRTUzMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1vZHVsZS5jcHAgKi8sCisJCQkJQURGQzMwRjkx
RjQ3QThDMDAwNjQ1MUQzIC8qIFdBTW9kdWxlLmggKi8sCisJCQkJQUQzRjFFNTUxRjRGNEFFNTAw
NjY5OTEyIC8qIFdBVGFibGUuY3BwICovLAorCQkJCUFEM0YxRTRCMUY0REU2OEMwMDY2OTkxMiAv
KiBXQVRhYmxlLmggKi8sCisJCQkJQUQzRjFFNkQxRjU0N0NCODAwNjY5OTEyIC8qIFdBVGFibGVE
ZXNjcmlwdG9yLmNwcCAqLywKKwkJCQlBRDNGMUU2QjFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJs
ZURlc2NyaXB0b3IuaCAqLywKKwkJCQlBREZDMzBGNzFGNDdBN0I4MDA2NDUxRDMgLyogV2ViQXNz
ZW1ibHkuaCAqLywKIAkJCQk1REUzRDBGNDBERDhEREZCMDA0Njg3MTQgLyogV2ViS2l0QXZhaWxh
YmlsaXR5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IEFQSTsKQEAgLTYwMDEsOCArNjA1OCw2IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUFEMkZDQjhBMURCNTg0
MDAwMEIzRTczNiAvKiBqcyAqLywKLQkJCQlBRDJGQ0MyRTFEQjgzOUY3MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseS5jcHAgKi8sCi0JCQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2Vi
QXNzZW1ibHkuaCAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJ
UkdlbmVyYXRvci5oICovLAogCQkJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJR
UGxhbi5jcHAgKi8sCkBAIC02MDE4LDYgKzYwNzMsNyBAQAogCQkJCTUyNkFDNEI1MUU5NzdDNUQw
MDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8sCiAJCQkJQUQ0MTJCMzExRTdCMkU4QTAwOEFG
MTU3IC8qIFdhc21Db250ZXh0LmNwcCAqLywKIAkJCQlBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcg
LyogV2FzbUNvbnRleHQuaCAqLywKKwkJCQlBRDVDMzZEQzFGNjg4QjVGMDAwQkNBQUYgLyogV2Fz
bUVtYmVkZGVyLmggKi8sCiAJCQkJNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNl
cHRpb25UeXBlLmggKi8sCiAJCQkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVs
dFNpZ25hbEhhbmRsZXIuY3BwICovLAogCQkJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBX
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmggKi8sCkBAIC02MDI2LDYgKzYwODIsOCBAQAogCQkJCTUz
RjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQlB
RDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAqLywKIAkJCQlB
RDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8sCisJCQkJQUQ1
QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCisJCQkJQUQ1QzM2
REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovLAogCQkJCUFEMDA2NTlEMUVD
QUM3RkUwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggKi8sCiAJCQkJNTNFOUUwQTkxRUFFODNERTAw
RkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5jcHAgKi8sCiAJCQkJNTNFOUUwQUExRUFFODNE
RTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovLApAQCAtNjAzMyw2ICs2MDkxLDgg
QEAKIAkJCQk1MzU1NTcxMzFEOUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5oICovLAogCQkJ
CTc5Qjc1OTcxMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICov
LAogCQkJCTc5Qjc1OTcyMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24u
aCAqLywKKwkJCQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuY3Bw
ICovLAorCQkJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICov
LAogCQkJCTc5MDA4MTM2MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxlLmNwcCAqLywKIAkJ
CQk3OTAwODEzNzFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVsZS5oICovLAogCQkJCTUzRTc3
N0UxMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwICovLApAQCAt
NjA1NCw2ICs2MTE0LDggQEAKIAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNl
Y3Rpb25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1
cmUuY3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJl
LmggKi8sCisJCQkJQUQ1QzM2RTMxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5jcHAgKi8s
CisJCQkJQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5oICovLAogCQkJCTUy
NTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLywKIAkJCQk1MjUwRDJE
MDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovLAogCQkJCTUzRTlFMEFFMUVBRUM0
NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLywKQEAgLTc2NTYsNiArNzcxOCwxMCBA
QAogCQlBRDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFEOERENkQwMUY2NzA4QTMwMDA0RUI1MiAvKiBK
U1RvV2FzbS5jcHAgKi8sCisJCQkJQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9XYXNt
LmggKi8sCisJCQkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuY3Bw
ICovLAorCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi8s
CiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwICovLAogCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmggKi8sCiAJCQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8sCkBAIC03Njc1LDYgKzc3NDEsOCBAQAogCQkJCUFE
MkZDQkFEMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmggKi8s
CiAJCQkJQUQyRkNCQUUxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5jcHAg
Ki8sCiAJCQkJQUQyRkNCQUYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5o
ICovLAorCQkJCUFERDA5QUVGMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5jcHAgKi8sCisJ
CQkJQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmggKi8sCiAJCQkJQUQyRkNC
QjAxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3Iu
Y3BwICovLAogCQkJCUFEMkZDQkIxMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJQUQyRkNCQjIxREI1OERBNDAwQjNFNzM2IC8q
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcCAqLywKQEAgLTc5NTAsNiArODAx
OCw3IEBACiAJCQkJMEZFQzg1QkIxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIz
S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVBRjczIC8qIEIz
TGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFQzFGNzVB
RDdDMDAwQkNBQUYgLyogV2FzbVRvSlMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTFFMUJG
Mjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzE5
REEwNDFDMUJFNDBEMDAxRDI2MEIgLyogQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJU
b0Fpci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQwLDYgKzgxMDksNyBAQAogCQkJCUUzMjhEQUVC
MUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRlY29kZVJld3JpdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVk
UmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAv
KiBDYWdlZEJhcnJpZXJQdHIuaCBpbiBIZWFkZXJzICovLApAQCAtODI0NCw2ICs4MzE0LDcgQEAK
IAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdOdWxsQWJzdHJhY3RTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkRE
MUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUxIC8qIERG
R09wSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzU0LDggKzg0MjUsMTAgQEAKIAkJCQkwRjNB
Qzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBp
biBIZWFkZXJzICovLAorCQkJCUFENUMzNkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNTcxRjMzQTQ1MzAwRjU5QjZDIC8qIEZhc3RNYWxs
b2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzODE3
QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVD
MzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI0RTU0MzE3RUE5RjU5MDBBQkIyMTcgLyogRlBSSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTM0RURCRjcxREI1RkZDOTAwREM4N0E1IC8qIEZyYW1lVHJhY2Vycy5oIGluIEhl
YWRlcnMgKi8sCkBAIC04NzU3LDcgKzg4MzAsNiBAQAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNC
MDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQUQyRkNDMzExREI4M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEg
LyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04OTUwLDYgKzkwMjIsNyBAQAogCQkJCUJDRDIwMkQ2MEUxNzA3MDgw
MDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
N0MzOUZCMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTcxMkI0MTExQzdCMjM1MDA3QTUzMTUgLyogUmVnRXhwS2V5LmggaW4gSGVhZGVycyAq
LywKKwkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ1QjBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjdDMzlGRDFDOEY2NTk1MDA0ODAxNTEgLyogUmVnRXhwT2JqZWN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzQwRTE3MDZBNzAwMkM3RTgyIC8q
IFJlZ0V4cFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTE5LDYgKzkxOTIsNyBAQAog
CQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVv
dXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkVGMUY3QTI2M0EwMDBCQ0FBRiAvKiBXYXNt
TWVtb3J5TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJE
IC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAw
QjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1
RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKaW5kZXggNDE0NTVkYi4uYjRhNGI0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dApAQCAtOTM1LDcgKzkzNSw2IEBAIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCiB0b29s
cy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNwZWN0b3IuY3BwCiAKLXdhc20v
SlNXZWJBc3NlbWJseS5jcHAKIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCiB3YXNtL1dhc21C
QlFQbGFuLmNwcAogd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTk0MywxMiArOTQyLDE2IEBAIHdh
c20vV2FzbUNhbGxlZS5jcHAKIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAogd2FzbS9X
YXNtQ29kZUJsb2NrLmNwcAogd2FzbS9XYXNtQ29udGV4dC5jcHAKK3dhc20vV2FzbUVtYmVkZGVy
LmgKIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKIHdhc20vV2FzbUZvcm1hdC5jcHAK
IHdhc20vV2FzbUluZGV4T3JOYW1lLmNwcAord2FzbS9XYXNtSW5zdGFuY2UuY3BwCit3YXNtL1dh
c21JbnN0YW5jZS5oCiB3YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKIHdhc20vV2FzbU1lbW9y
eS5jcHAKIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAord2FzbS9XYXNtTWVtb3J5TW9k
ZS5jcHAKIHdhc20vV2FzbU1vZHVsZS5jcHAKIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNw
cAogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtOTU4LDEwICs5NjEsMTUgQEAgd2FzbS9X
YXNtT3Bjb2RlT3JpZ2luLmNwcAogd2FzbS9XYXNtUGFnZUNvdW50LmNwcAogd2FzbS9XYXNtUGxh
bi5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAKK3dhc20vV2FzbVRhYmxlLmNwcAord2FzbS9X
YXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcAogd2FzbS9XYXNtVmFsaWRhdGUuY3BwCiB3
YXNtL1dhc21Xb3JrbGlzdC5jcHAKIAord2FzbS9qcy9KU1RvV2FzbS5jcHAKK3dhc20vanMvSlNU
b1dhc20uaAord2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3Bw
CiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCkBAIC05NzEsNiArOTc5LDgg
QEAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcAogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmNwcAord2FzbS9qcy9X
YXNtVG9KUy5oCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
CiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAogd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggNDIyODBjNS4uZjhhMzk3NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgQ2FsbFNpdGVJbmRleCBBY2Nlc3NHZW5lcmF0aW9u
U3RhdGU6Om9yaWdpbmFsQ2FsbFNpdGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIHN0dWIKIHZvaWQg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCkKIHsK
ICAgICByZXN0b3JlU2NyYXRjaCgpOwotICAgIGppdC0+Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihtX3ZtKTsKKyAgICBqaXQtPmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0udG9wRW50cnlGcmFtZSk7CiAgICAgaWYg
KG5lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oKSkgewogICAgICAgICAvLyBUbyB0
aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiBoYW5kbGluZwogICAg
ICAgICAvLyBjYWxsIHNpdGUsIHRoZXkgd2lsbCBleHBlY3QgdGhlIE9TUiBleGl0IHRvIGJlIGFy
cml2ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4
IDM0OGM2OGMuLjc3MTZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqCkBAIC02
NTIsOCArNjUyLDggQEAgdm9pZCBEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24oKQogICAgIGlm
ICghbV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BW
TUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBtX3BhdXNlT25DYWxsRnJh
bWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1l
KHRvcFZNRW50cnlGcmFtZSkgOiBudWxscHRyOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJh
bWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJy
ZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZy
YW1lKSA6IG51bGxwdHI7CiAgICAgbV9wYXVzZU9uU3RlcE91dCA9IHRydWU7CiAgICAgc2V0U3Rl
cHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG5vdGlmeURvbmVQcm9jZXNzaW5n
RGVidWdnZXJFdmVudHMoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2b2lkIERlYnVnZ2VyOjpyZXR1
cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUg
PSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9j
dXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5
RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlG
cmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIGNhbGwsIHRoZXJlIHdhcyBhdCBsZWFz
dCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdlIGFyZSByZXR1cm5pbmcgdG8uCiAg
ICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQgPSB0cnVlOwpAQCAtODU2LDggKzg1
Niw4IEBAIHZvaWQgRGVidWdnZXI6OnVud2luZEV2ZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWTUVu
dHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRv
cFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IG1fdm0udG9w
RW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIFRyZWF0IHN0ZXBwaW5n
IG92ZXIgYW4gZXhjZXB0aW9uIGxvY2F0aW9uIGxpa2UgYSBzdGVwLW91dC4KICAgICBpZiAobV9j
dXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkKQEAgLTg4Niw4ICs4ODYsOCBA
QCB2b2lkIERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
ICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1F
bnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0
b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRv
cEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJv
bSBhIHByb2dyYW0sIGNvdWxkIGJlIGV2YWwoKSwgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBleHBy
ZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVybmluZyB0by4KICAgICBtX3Bhc3RG
aXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGQxOWRkYjcuLjVmYTQ4ZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0xNDAsNyArMTQw
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICBp
ZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsKICAg
ICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlzKTsK
IAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9u
SGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFu
ZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
dm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBK
SVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0
aW9uQ2hlY2tzLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3MubGluayh0aGlz
KTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0
aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAo
dGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCmluZGV4IDU4M2JmOTguLjAyMWVhYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQqIHByZXBhcmVP
U1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBi
eXRlY29kZUluCiAgICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNl
dChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7
CiAKICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5z
aXplKCk7Ci0gICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS0+dG9w
Vk1FbnRyeUZyYW1lKTsKKyAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVjb3Jk
KHZtLT50b3BFbnRyeUZyYW1lKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0
ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgY3VycmVudEVudHJ5ID0g
cmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKTsKICAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0
ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAKaW5kZXggMzQzMzA4Yy4uYWI3YWM1NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBp
ZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkgewogICAgICAgICAgICAgLy8gV2UgYXJl
IGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9t
IGdlbmVyaWNVbndpbmQoKS4KICAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3Vy
IGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICBqaXQucmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAg
ICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubG9hZFB0cih2bS0+YWRkcmVz
c09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAg
ICAgICB9CiAgICAgICAgIGppdC5hZGRQdHIoCkBAIC01MzcsNyArNTM3LDcgQEAgdm9pZCBPU1JF
eGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0
JiBleGl0LCBjb25zdAogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OwogCiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICAgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVu
dHJ5RnJhbWUpOwogCiAgICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBz
dG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwCmluZGV4IGI3MzI3ZjMuLmQwYzRmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgaml0LmFib3J0V2l0
aFJlYXNvbihERkdVbnJlYXNvbmFibGVPU1JFbnRyeUp1bXBEZXN0aW5hdGlvbik7CiAKICAgICBv
ay5saW5rKCZqaXQpOwotICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgaml0LmVt
aXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBqaXQuanVtcChHUFJJbmZv
OjpyZWdUMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAppbmRleCBm
ZjJjZTU2Li5mZjI0Njc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9p
bnQ6OlJlc3VsdCYgc2FmZXBvaW50UmVzdWx0KQogCiAgICAgLy8gRW1pdCB0aGUgZXhjZXB0aW9u
IGhhbmRsZXIuCiAgICAgKnN0YXRlLmV4Y2VwdGlvbkhhbmRsZXIgPSBqaXQubGFiZWwoKTsKLSAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7
CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
LnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAKaW5kZXggN2MwMTgxZC4uMmExZWI3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQog
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwo
KTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKLSAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICAgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZy
YW1lKTsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigm
dm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVy
RnJhbWUgPSBqaXQuY2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCmluZGV4IGM3OTM0ZTMuLmE5OWI1YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yNjQsNyArMjY0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkp
LAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2
bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihqaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDhl
MDgxZDcuLjFjN2U2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xODYsNyArMTg2LDcgQEAgc3RhdGljIHZvaWQgY29tcGls
ZVN0dWIoCiAgICAgLy8gVGhlIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgcmVzdGFibGlz
aCBvdXIgZnJhbWUgaW4gdGhlIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgogICAgIGlmIChleGl0Lmlz
R2VuZXJpY1Vud2luZEhhbmRsZXIoKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2Fs
bEZyYW1lRm9yQ2F0Y2gpOyAvLyBUaGUgZmlyc3QgdGltZSB3ZSBoaXQgdGhpcyBleGl0LCBsaWtl
IGF0IGFsbCBvdGhlciB0aW1lcywgdGhpcyBmaWVsZCBzaG91bGQgYmUgbm9uLW51bGwuCi0gICAg
ICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKnZtKTsKKyAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgICAgICBqaXQubG9hZFB0cih2
bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9p
bnRlclJlZ2lzdGVyKTsKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtNDEyLDggKzQxMiw4IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNh
dmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICBSZWdpc3Rl
clNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7
CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgaml0LmxvYWRQ
dHIoJnZtLT50b3BWTUVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxlZVNhdmVS
ZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoJnZtLT50b3BFbnRyeUZyYW1lLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJl
Z2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAgIH0KIAogICAgIGZv
ciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcu
bmV4dCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwCmluZGV4IDlmYTI5ZDAuLmJlNjFhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxMy0yMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0
LmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CkBAIC0yMTcsNyArMjE4LDcg
QEAgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVj
dChWTSYgdm0pCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIGlmICghY2FsbGVlKCkuaXNX
YXNtKCkpCiAgICAgICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJu
IFdhc206OmxvYWRDb250ZXh0KHZtKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIHZtLndh
c21Db250ZXh0LmxvYWQoKS0+Z2xvYmFsT2JqZWN0KCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TSh2bSk7CiAgICAgcmV0dXJuIGxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTIzNywyNCArMjM4
LDI0IEBAIGJvb2wgQ2FsbEZyYW1lOjppc0FueVdhc21DYWxsZWUoKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKFZNRW50cnlGcmFtZSom
IGN1cnJWTUVudHJ5RnJhbWUpCitDYWxsRnJhbWUqIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWUoRW50
cnlGcmFtZSomIGN1cnJFbnRyeUZyYW1lKQogewotICAgIGlmIChjYWxsZXJGcmFtZU9yVk1FbnRy
eUZyYW1lKCkgPT0gY3VyclZNRW50cnlGcmFtZSkgewotICAgICAgICBWTUVudHJ5UmVjb3JkKiBj
dXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyclZNRW50cnlGcmFtZSk7Ci0gICAg
ICAgIGN1cnJWTUVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcFZNRW50cnlG
cmFtZSgpOworICAgIGlmIChjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpID09IGN1cnJFbnRyeUZy
YW1lKSB7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRy
eVJlY29yZChjdXJyRW50cnlGcmFtZSk7CisgICAgICAgIGN1cnJFbnRyeUZyYW1lID0gY3VyclZN
RW50cnlSZWNvcmQtPnByZXZUb3BFbnRyeUZyYW1lKCk7CiAgICAgICAgIHJldHVybiBjdXJyVk1F
bnRyeVJlY29yZC0+cHJldlRvcENhbGxGcmFtZSgpOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSk7CiB9
CiAKLVNVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2FmZUNhbGxlckZyYW1l
KFZNRW50cnlGcmFtZSomIGN1cnJWTUVudHJ5RnJhbWUpCitTVVBQUkVTU19BU0FOIENhbGxGcmFt
ZSogQ2FsbEZyYW1lOjp1bnNhZmVDYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYgY3VyckVudHJ5RnJh
bWUpCiB7Ci0gICAgaWYgKHVuc2FmZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJy
Vk1FbnRyeUZyYW1lKSB7Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3Jk
ID0gdm1FbnRyeVJlY29yZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAgY3VyclZNRW50cnlG
cmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wVk1FbnRyeUZyYW1lKCk7Cisg
ICAgaWYgKHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gY3VyckVudHJ5RnJhbWUp
IHsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVj
b3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAgICAgICAgY3VyckVudHJ5RnJhbWUgPSBjdXJyVk1FbnRy
eVJlY29yZC0+dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUoKTsKICAgICAgICAgcmV0dXJuIGN1cnJW
TUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wQ2FsbEZyYW1lKCk7CiAgICAgfQotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPih1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1l
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPih1bnNhZmVDYWxsZXJGcmFt
ZU9yRW50cnlGcmFtZSgpKTsKIH0KIAogU291cmNlT3JpZ2luIENhbGxGcmFtZTo6Y2FsbGVyU291
cmNlT3JpZ2luKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAppbmRleCA2MjMwOWEwLi42ZDVkNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC0xNDEsMTIgKzE0MSwxMiBAQCBuYW1lc3BhY2Ug
SlNDICB7CiAKICAgICAgICAgQ2FsbEZyYW1lJiBvcGVyYXRvcj0oY29uc3QgUmVnaXN0ZXImIHIp
IHsgKnN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcykgPSByOyByZXR1cm4gKnRoaXM7IH0KIAot
ICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpKTsgfQotICAgICAgICB2
b2lkKiBjYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gY2FsbGVyRnJh
bWVBbmRQQygpLmNhbGxlckZyYW1lOyB9Ci0gICAgICAgIFNVUFBSRVNTX0FTQU4gdm9pZCogdW5z
YWZlQ2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHVuc2FmZUNhbGxl
ckZyYW1lQW5kUEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVP
ckVudHJ5RnJhbWUoKSk7IH0KKyAgICAgICAgdm9pZCogY2FsbGVyRnJhbWVPckVudHJ5RnJhbWUo
KSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KKyAgICAg
ICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpIGNv
bnN0IHsgcmV0dXJuIHVuc2FmZUNhbGxlckZyYW1lQW5kUEMoKS5jYWxsZXJGcmFtZTsgfQogCi0g
ICAgICAgIENhbGxGcmFtZSogdW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYpOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKFZNRW50cnlGcmFt
ZSomKTsKKyAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYp
OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKEVudHJ5
RnJhbWUqJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU291cmNlT3JpZ2luIGNhbGxl
clNvdXJjZU9yaWdpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvRnJhbWVUcmFjZXJzLmgKaW5kZXggYzViNmI4My4uNzZhY2Q2NCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgVk1FbnRyeUZyYW1lOworc3RydWN0IEVudHJ5
RnJhbWU7CiAKIGNsYXNzIFN1c3BlbmRFeGNlcHRpb25TY29wZSB7CiBwdWJsaWM6CkBAIC03NCwz
MyArNzQsMzMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKHZtKTsKICAgICAgICAg
QVNTRVJUKGNhbGxGcmFtZSk7Ci0gICAgICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0tPnRvcFZNRW50cnlGcmFt
ZSkpOworICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbEZyYW1lKSA8
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAgICAgICAgIHZt
LT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgfQogfTsKIAogY2xhc3MgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgewogcHVibGljOgotICAgIEFMV0FZU19JTkxJTkUgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUoVk0qIHZtLCBWTUVudHJ5RnJhbWUqIHZtRW50
cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAgQUxXQVlTX0lOTElORSBOYXRpdmVD
YWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZShWTSogdm0sIEVudHJ5RnJhbWUqIEVudHJ5RnJhbWUs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICA6IG1fdm0odm0pCiAgICAgewogICAgICAg
ICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAgICAgbV9zYXZl
ZFRvcFZNRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIG1fc2F2ZWRU
b3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1fc2F2ZWRUb3BDYWxs
RnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwotICAgICAgICB2bS0+dG9wVk1FbnRyeUZyYW1lID0g
dm1FbnRyeUZyYW1lOworICAgICAgICB2bS0+dG9wRW50cnlGcmFtZSA9IEVudHJ5RnJhbWU7CiAg
ICAgICAgIHZtLT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgfQogCiAgICAgQUxXQVlT
X0lOTElORSB+TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUoKQogICAgIHsKLSAgICAg
ICAgbV92bS0+dG9wVk1FbnRyeUZyYW1lID0gbV9zYXZlZFRvcFZNRW50cnlGcmFtZTsKKyAgICAg
ICAgbV92bS0+dG9wRW50cnlGcmFtZSA9IG1fc2F2ZWRUb3BFbnRyeUZyYW1lOwogICAgICAgICBt
X3ZtLT50b3BDYWxsRnJhbWUgPSBtX3NhdmVkVG9wQ2FsbEZyYW1lOwogICAgIH0KIAogcHJpdmF0
ZToKICAgICBWTSogbV92bTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fc2F2ZWRUb3BWTUVudHJ5RnJh
bWU7CisgICAgRW50cnlGcmFtZSogbV9zYXZlZFRvcEVudHJ5RnJhbWU7CiAgICAgQ2FsbEZyYW1l
KiBtX3NhdmVkVG9wQ2FsbEZyYW1lOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggMTM1M2UxMC4uYTUxM2U0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CkBAIC02NTMsOSArNjUzLDkgQEAgcHVibGljOgogCiAgICAgICAgIG5vdGlmeURlYnVnZ2VyT2ZV
bndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRvcik7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwogCi0gICAgICAg
IGJvb2wgc2hvdWxkU3RvcFVud2luZGluZyA9IHZpc2l0b3ItPmNhbGxlcklzVk1FbnRyeUZyYW1l
KCk7CisgICAgICAgIGJvb2wgc2hvdWxkU3RvcFVud2luZGluZyA9IHZpc2l0b3ItPmNhbGxlcklz
RW50cnlGcmFtZSgpOwogICAgICAgICBpZiAoc2hvdWxkU3RvcFVud2luZGluZykKICAgICAgICAg
ICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKQEAgLTY2Myw3ICs2NjMsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAg
dm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihTdGFja1Zp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0CiAgICAgewogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9P
Rl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY3VycmVudENhbGxlZVNhdmVzID0gdmlzaXRvci0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwpA
QCAtNjc2LDcgKzY3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIGludHB0cl90KiBmcmFtZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3QqPihtX2NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpOwogCiAg
ICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPnNpemUo
KTsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRv
cFZNRW50cnlGcmFtZSk7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlS
ZWNvcmQobV92bS50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewogICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBj
dXJyZW50RW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmF0KGkpOwogICAgICAgICAgICAgaWYg
KGRvbnRDb3B5UmVnaXN0ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpAQCAtNzAyLDcgKzcw
Miw3IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYg
dm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogCiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVud2luZEZyb21DYWxs
ZXJGcmFtZSkgewotICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9yVk1FbnRyeUZy
YW1lKCkgPT0gdm0udG9wVk1FbnRyeUZyYW1lKQorICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZU9yRW50cnlGcmFtZSgpID09IHZtLnRvcEVudHJ5RnJhbWUpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZy
YW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCmluZGV4IDg1ZDE0N2EuLmQwODJiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDQsMTggKzQ0LDE4IEBAIFN0YWNrVmlzaXRvcjo6U3RhY2tWaXNpdG9yKENhbGxGcmFtZSogc3Rh
cnRGcmFtZSwgVk0qIHZtKQogICAgIENhbGxGcmFtZSogdG9wRnJhbWU7CiAgICAgaWYgKHN0YXJ0
RnJhbWUpIHsKICAgICAgICAgQVNTRVJUKHZtKTsKLSAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlG
cmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1l
ID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgICAgIHRvcEZyYW1lID0gdm0tPnRvcENhbGxGcmFt
ZTsKICAgICAgICAgCi0gICAgICAgIGlmICh0b3BGcmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4o
bV9mcmFtZS5tX1ZNRW50cnlGcmFtZSkgPT0gc3RhdGljX2Nhc3Q8dm9pZCo+KHRvcEZyYW1lKSkg
ewotICAgICAgICAgICAgdG9wRnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUubV9WTUVudHJ5
RnJhbWUpLT5tX3ByZXZUb3BDYWxsRnJhbWU7Ci0gICAgICAgICAgICBtX2ZyYW1lLm1fVk1FbnRy
eUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKS0+bV9wcmV2VG9w
Vk1FbnRyeUZyYW1lOworICAgICAgICBpZiAodG9wRnJhbWUgJiYgc3RhdGljX2Nhc3Q8dm9pZCo+
KG1fZnJhbWUubV9lbnRyeUZyYW1lKSA9PSBzdGF0aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7
CisgICAgICAgICAgICB0b3BGcmFtZSA9IHZtRW50cnlSZWNvcmQobV9mcmFtZS5tX2VudHJ5RnJh
bWUpLT5tX3ByZXZUb3BDYWxsRnJhbWU7CisgICAgICAgICAgICBtX2ZyYW1lLm1fZW50cnlGcmFt
ZSA9IHZtRW50cnlSZWNvcmQobV9mcmFtZS5tX2VudHJ5RnJhbWUpLT5tX3ByZXZUb3BFbnRyeUZy
YW1lOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlG
cmFtZSA9IDA7CisgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gMDsKICAgICAgICAgdG9w
RnJhbWUgPSAwOwogICAgIH0KLSAgICBtX2ZyYW1lLm1fY2FsbGVySXNWTUVudHJ5RnJhbWUgPSBm
YWxzZTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVySXNFbnRyeUZyYW1lID0gZmFsc2U7CiAgICAgcmVh
ZEZyYW1lKHRvcEZyYW1lKTsKIAogICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBjYWxsZXIgd2Fu
dHMgdG8gc3RhcnQgdW53aW5kaW5nIGZyb20uCkBAIC03NSwxNCArNzUsMTQgQEAgdm9pZCBTdGFj
a1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUoKQogICAgICAgICAgICAgICAgIHJlYWRJbmxpbmVkRnJh
bWUobV9mcmFtZS5jYWxsRnJhbWUoKSwgJmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyKTsK
ICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX2ZyYW1lLmlubGluZUNhbGxGcmFt
ZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlGcmFtZSA9
IG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWU7CisgICAgICAgICAgICBtX2ZyYW1lLm1fZW50
cnlGcmFtZSA9IG1fZnJhbWUubV9jYWxsZXJFbnRyeUZyYW1lOwogICAgICAgICAgICAgcmVhZEZy
YW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCBjYWxsZXJDb2RlT3JpZ2luKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLSAgICBt
X2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZTsKKyAg
ICBtX2ZyYW1lLm1fZW50cnlGcmFtZSA9IG1fZnJhbWUubV9jYWxsZXJFbnRyeUZyYW1lOwogICAg
IHJlYWRGcmFtZShtX2ZyYW1lLmNhbGxlckZyYW1lKCkpOwogfQogCkBAIC0xNTIsOSArMTUyLDkg
QEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmkKIHsKICAgICBtX2ZyYW1lLm1fY2FsbEZyYW1lID0g
Y2FsbEZyYW1lOwogICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKLSAgICBtX2ZyYW1lLm1fQ2Fs
bGVyVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX1ZNRW50cnlGcmFtZTsKLSAgICBtX2ZyYW1lLm1f
Y2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKG1fZnJhbWUubV9DYWxsZXJWTUVu
dHJ5RnJhbWUpOwotICAgIG1fZnJhbWUubV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IG1fZnJhbWUu
bV9DYWxsZXJWTUVudHJ5RnJhbWUgIT0gbV9mcmFtZS5tX1ZNRW50cnlGcmFtZTsKKyAgICBtX2Zy
YW1lLm1fY2FsbGVyRW50cnlGcmFtZSA9IG1fZnJhbWUubV9lbnRyeUZyYW1lOworICAgIG1fZnJh
bWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUobV9mcmFtZS5tX2NhbGxl
ckVudHJ5RnJhbWUpOworICAgIG1fZnJhbWUubV9jYWxsZXJJc0VudHJ5RnJhbWUgPSBtX2ZyYW1l
Lm1fY2FsbGVyRW50cnlGcmFtZSAhPSBtX2ZyYW1lLm1fZW50cnlGcmFtZTsKICAgICBtX2ZyYW1l
Lm1faXNXYXNtRnJhbWUgPSBmYWxzZTsKIAogICAgIENhbGxlZUJpdHMgY2FsbGVlID0gY2FsbEZy
YW1lLT5jYWxsZWUoKTsKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJh
bWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBzdGQ6OmZ1bmN0aW9u
PAogCiAgICAgICAgICAgICBpbmRlbnQtLTsKICAgICAgICAgfQotICAgICAgICBvdXQucHJpbnQo
aW5kZW50LCAidm1FbnRyeUZyYW1lOiAiLCBSYXdQb2ludGVyKHZtRW50cnlGcmFtZSgpKSwgIlxu
Iik7CisgICAgICAgIG91dC5wcmludChpbmRlbnQsICJFbnRyeUZyYW1lOiAiLCBSYXdQb2ludGVy
KG1fZW50cnlGcmFtZSksICJcbiIpOwogICAgICAgICBpbmRlbnQtLTsKICAgICB9CiAgICAgb3V0
LnByaW50KGluZGVudCwgIn1cbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5oCmluZGV4IDhhZDA5NDAuLmUyYTEzNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IH0KLSAg
ICAgICAgYm9vbCBjYWxsZXJJc1ZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVy
SXNWTUVudHJ5RnJhbWU7IH0KKyAgICAgICAgYm9vbCBjYWxsZXJJc0VudHJ5RnJhbWUoKSBjb25z
dCB7IHJldHVybiBtX2NhbGxlcklzRW50cnlGcmFtZTsgfQogICAgICAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJGcmFtZTsgfQogICAgICAgICBDYWxs
ZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9CiAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KQEAgLTk3LDcg
Kzk3LDYgQEAgcHVibGljOgogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwogCiAgICAgICAgIENsb25lZEFyZ3VtZW50cyogY3JlYXRlQXJndW1lbnRz
KCk7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9WTUVudHJ5RnJhbWU7IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxGcmFtZTsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiwgSW5kZW50ZXIgPSBJbmRlbnRlcigpKSBjb25zdDsKQEAgLTExNCw4ICsxMTMsOCBA
QCBwdWJsaWM6CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogbV9pbmxpbmVDYWxsRnJhbWU7CiAj
ZW5kaWYKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKLSAgICAgICAgVk1FbnRyeUZy
YW1lKiBtX1ZNRW50cnlGcmFtZTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiBtX0NhbGxlclZNRW50
cnlGcmFtZTsKKyAgICAgICAgRW50cnlGcmFtZSogbV9lbnRyeUZyYW1lOworICAgICAgICBFbnRy
eUZyYW1lKiBtX2NhbGxlckVudHJ5RnJhbWU7CiAgICAgICAgIENhbGxGcmFtZSogbV9jYWxsZXJG
cmFtZTsKICAgICAgICAgQ2FsbGVlQml0cyBtX2NhbGxlZTsKICAgICAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKQEAgLTEyMyw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBt
X2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICB1bnNpZ25lZCBtX2J5dGVjb2Rl
T2Zmc2V0OwogICAgICAgICBXYXNtOjpJbmRleE9yTmFtZSBtX3dhc21GdW5jdGlvbkluZGV4T3JO
YW1lOwotICAgICAgICBib29sIG1fY2FsbGVySXNWTUVudHJ5RnJhbWUgOiAxOworICAgICAgICBi
b29sIG1fY2FsbGVySXNFbnRyeUZyYW1lIDogMTsKICAgICAgICAgYm9vbCBtX2lzV2FzbUZyYW1l
IDogMTsKIAogICAgICAgICBmcmllbmQgY2xhc3MgU3RhY2tWaXNpdG9yOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNRW50cnlSZWNvcmQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKaW5kZXggZjM2YzJi
ZS4uMDEwM2E3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1ZNRW50cnlSZWNvcmQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXN0cnVjdCBWTUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIFZNOwogCkBAIC00MCw3ICs0MCw3IEBAIHN0cnVjdCBWTUVudHJ5UmVjb3JkIHsK
ICAgICAgKi8KICAgICBWTSogbV92bTsKICAgICBFeGVjU3RhdGUqIG1fcHJldlRvcENhbGxGcmFt
ZTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fcHJldlRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZy
YW1lKiBtX3ByZXZUb3BFbnRyeUZyYW1lOwogCiAjaWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaW50cHRyX3QgY2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlcltOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSU107CkBAIC00OSwyMCAr
NDksMjAgQEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgIEV4ZWNTdGF0ZSogcHJldlRvcENh
bGxGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcENhbGxGcmFtZTsgfQogICAgIFNVUFBSRVNTX0FT
QU4gRXhlY1N0YXRlKiB1bnNhZmVQcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9w
Q2FsbEZyYW1lOyB9CiAKLSAgICBWTUVudHJ5RnJhbWUqIHByZXZUb3BWTUVudHJ5RnJhbWUoKSB7
IHJldHVybiBtX3ByZXZUb3BWTUVudHJ5RnJhbWU7IH0KLSAgICBTVVBQUkVTU19BU0FOIFZNRW50
cnlGcmFtZSogdW5zYWZlUHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcFZN
RW50cnlGcmFtZTsgfQorICAgIEVudHJ5RnJhbWUqIHByZXZUb3BFbnRyeUZyYW1lKCkgeyByZXR1
cm4gbV9wcmV2VG9wRW50cnlGcmFtZTsgfQorICAgIFNVUFBSRVNTX0FTQU4gRW50cnlGcmFtZSog
dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BFbnRyeUZyYW1lOyB9
CiB9OwogCi1leHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoVk1FbnRyeUZy
YW1lKik7CitleHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoRW50cnlGcmFt
ZSopOwogCi1zdHJ1Y3QgVk1FbnRyeUZyYW1lIHsKK3N0cnVjdCBFbnRyeUZyYW1lIHsKICNpZiBF
TkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBz
dGF0aWMgcHRyZGlmZl90IHZtRW50cnlSZWNvcmRPZmZzZXQoKQogICAgIHsKLSAgICAgICAgVk1F
bnRyeUZyYW1lKiBmYWtlVk1FbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxWTUVudHJ5RnJh
bWUqPigweDEwMDApOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVj
b3JkKGZha2VWTUVudHJ5RnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiBmYWtlRW50cnlGcmFt
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RW50cnlGcmFtZSo+KDB4MTAwMCk7CisgICAgICAgIFZNRW50
cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZUVudHJ5RnJhbWUpOwogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYWtlVk1FbnRy
eUZyYW1lKSk7CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWNvcmQpIC0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFrZUVudHJ5RnJhbWUpKTsKICAgICB9CiAKICAgICBz
dGF0aWMgcHRyZGlmZl90IGNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IDhkMzFmN2Eu
LmE0YTRjMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRv
bVRodW5rKFZNJiB2bSwgR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsCiB9CiAjZW5k
aWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0pCit2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1l
KiYgdG9wRW50cnlGcmFtZSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0
QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwpAQCAtNjA1LDggKzYwNSw4IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoVk0mIHZtCiAgICAgfQogICAgIEFTU0VSVChzY3JhdGNoICE9IEludmFsaWRH
UFJSZWcpOwogCi0gICAgbG9hZFB0cigmdm0udG9wVk1FbnRyeUZyYW1lLCBzY3JhdGNoKTsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1
ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2Ny
YXRjaCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVn
aXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNh
bGxlZSBzYXZlcyBleGNlcHQgZm9yIHRoZSBzY3JhdGNoLgogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKQEAgLTYyNyw3ICs2MjcsNyBAQCB2b2lkIEFz
c2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKFZNJiB2bQogICAgIEFTU0VSVChzY3JhdGNoID09IGVudHJ5LnJlZygpLmdwcigp
KTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNo
KTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odG9wRW50
cnlGcmFtZSk7CiAjZW5kaWYKIH0KIApAQCAtNzc4LDQxICs3NzgsNDEgQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oVk0mIHZtLCBKU1ZhbHVlUmVncyB2
YWx1ZSwgR1BSUmUKIH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLXZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjpsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRzdCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJz
Ojpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJSZWcgZHN0KQogewogI2lmIEVOQUJMRShGQVNU
X1RMU19KSVQpCi0gICAgaWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKKyAgICBp
ZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgIGxvYWRGcm9tVExTUHRy
KGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RGX1dBU01fQ09OVEVYVF9LRVkpLCBkc3QpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShXYXNtOjpQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpLndhc21Db250ZXh0UG9pbnRlciwgZHN0KTsKKyAgICBtb3ZlKFdhc206OlBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIGRzdCk7CiB9
CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0KEdQUlJlZyBzcmMpCit2
b2lkIEFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBzcmMp
CiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6dXNlRmFzdFRMU0Zv
ckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAg
ICAgICAgc3RvcmVUb1RMU1B0cihzcmMsIGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RGX1dBU01fQ09O
VEVYVF9LRVkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIG1vdmUoc3Jj
LCBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLndhc21Db250ZXh0UG9pbnRlcik7Cisg
ICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRJ
bnN0YW5jZVBvaW50ZXIpOwogfQogCi1ib29sIEFzc2VtYmx5SGVscGVyczo6bG9hZFdhc21Db250
ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCitib29sIEFzc2VtYmx5SGVscGVyczo6bG9h
ZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkKIHsKICNpZiBF
TkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgp
KQorICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgIHJldHVybiBs
b2FkRnJvbVRMU1B0ck5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRO
ZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdh
c21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkKIHsKICNpZiBFTkFC
TEUoRkFTVF9UTFNfSklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKQor
ICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgIHJldHVybiBzdG9y
ZVRvVExTUHRyTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtODc1LDEwICs4NzUsMTAgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmRlYnVn
Q2FsbChWTSYgdm0sIFZfRGVidWdPcGVyYXRpb25fRVBQIGZ1bmN0aW9uLCB2b2lkKiBhcmcKICAg
ICB9CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIpCit2b2lk
IEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKIHsKICNpZiBOVU1CRVJfT0ZfQ0FM
TEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlG
cmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgY2FsbGVlU2F2ZXNCdWZm
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlck9mZnNldCgpKSwgY2FsbGVlU2F2ZXNCdWZmZXIpOwogCiAgICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rl
ck9mZnNldHMoKTsKICAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0OjpzdGFja1JlZ2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKaW5kZXggYTY4YzM2OS4uY2UwYWJkZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0zNjAsMjggKzM2MCwyOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KEdQUlJlZyB2bUdQUikKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyh2bUdQUiwgVk06OnRvcFZNRW50cnlGcmFt
ZU9mZnNldCgpKSwgdm1HUFIpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh2bUdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyh2
bUdQUiwgVk06OnRvcEVudHJ5RnJhbWVPZmZzZXQoKSksIHZtR1BSKTsKKyAgICAgICAgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZtR1BSKTsKICNlbHNl
CiAgICAgICAgIFVOVVNFRF9QQVJBTSh2bUdQUik7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lk
IGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtLCBj
b25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIGNvbnN0
IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZy
ZWVHUFIoMCk7Ci0gICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwgdGVtcDEpOwot
ICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1w
bCh0ZW1wMSk7CisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAg
ICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAx
KTsKICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgICAgIFVOVVNFRF9QQVJB
TSh0b3BFbnRyeUZyYW1lKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHVzZWRSZWdpc3RlcnMpOwog
I2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomKTsKIAotICAgIHZvaWQg
Y29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoVk0mIHZtLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQorICAgIHZvaWQgY29w
eUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9
KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAg
ICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwpAQCAtMzkyLDgg
KzM5Miw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKIAogICAgICAg
ICAvLyBDb3B5IHNhdmVkIGNhbGxlZVNhdmVzIG9uIHN0YWNrIG9yIHVuc2F2ZWQgY2FsbGVlU2F2
ZXMgaW4gcmVnaXN0ZXIgdG8gdm0gY2FsbGVlU2F2ZSBidWZmZXIKLSAgICAgICAgbG9hZFB0cigm
dm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
Vk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7
CisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0
KCkpLCB0ZW1wMSk7CiAKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNh
dmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9IGNvZGVCbG9jaygpLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC00MDEsMTIgKzQwMSwxMiBAQCBwdWJsaWM6CiAgICAgICAg
IHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwogCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgdm1FbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsK
LSAgICAgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQodm1FbnRyeS5yZWcoKSkpCisg
ICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkp
OworICAgICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiBj
dXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+ZmluZCh2bUVudHJ5LnJlZygp
KTsKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGN1cnJlbnRGcmFtZUVudHJ5ID0gY3Vy
cmVudENhbGxlZVNhdmVzLT5maW5kKGVudHJ5LnJlZygpKTsKIAotICAgICAgICAgICAgaWYgKHZt
RW50cnkucmVnKCkuaXNHUFIoKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BS
KCkpIHsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVnVG9TdG9yZTsKICAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBj
YWxsZWVTYXZlIGZyb20gc3RhY2sgaW50byB0ZW1wIHJlZ2lzdGVyCkBAIC00MTQsOSArNDE0LDkg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2lu
dGVyUmVnaXN0ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIHJlZ1RvU3RvcmUpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHN0b3Jl
IGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIHJlZ1RvU3RvcmUgPSB2
bUVudHJ5LnJlZygpLmdwcigpOworICAgICAgICAgICAgICAgICAgICByZWdUb1N0b3JlID0gZW50
cnkucmVnKCkuZ3ByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihyZWdUb1N0b3JlLCBB
ZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgc3RvcmVQ
dHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgZW50cnkub2Zmc2V0KCkpKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwUmVnVG9TdG9yZTsKICAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKQEAgLTQyNSwxMyArNDI1LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbG9hZERvdWJsZShBZGRyZXNzKGZyYW1lUG9p
bnRlclJlZ2lzdGVyLCBjdXJyZW50RnJhbWVFbnRyeS0+b2Zmc2V0KCkpLCBmcFJlZ1RvU3RvcmUp
OwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHN0
b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIGZwUmVnVG9TdG9y
ZSA9IHZtRW50cnkucmVnKCkuZnByKCk7CisgICAgICAgICAgICAgICAgICAgIGZwUmVnVG9TdG9y
ZSA9IGVudHJ5LnJlZygpLmZwcigpOwogCi0gICAgICAgICAgICAgICAgc3RvcmVEb3VibGUoZnBS
ZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgICAg
ICAgICAgc3RvcmVEb3VibGUoZnBSZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCBlbnRyeS5vZmZz
ZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQotICAgICAgICBVTlVTRURf
UEFSQU0odm0pOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CiAgICAgICAg
IFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKICNlbmRpZgogICAgIH0KQEAgLTE2NDQsMTQg
KzE2NDQsMTQgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0g
ICAgdm9pZCBsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRzdCk7Ci0gICAgdm9pZCBzdG9yZVdhc21D
b250ZXh0KEdQUlJlZyBzcmMpOwotICAgIHN0YXRpYyBib29sIGxvYWRXYXNtQ29udGV4dE5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdG9yZVdhc21Db250ZXh0
TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOworICAgIHZvaWQgbG9hZFdhc21Db250ZXh0SW5z
dGFuY2UoR1BSUmVnIGRzdCk7CisgICAgdm9pZCBzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BS
UmVnIHNyYyk7CisgICAgc3RhdGljIGJvb2wgbG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01h
Y3JvU2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dElu
c3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAKIHByb3RlY3RlZDoK
LSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJ
bXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVy
KTsKIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2Vs
aW5lQ29kZUJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDVlY2YzYTYuLmM4
MTJmOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2
b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIHNraXBPcHRpbWl6ZS5h
cHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9u
Q291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
PmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2Rl
T2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9t
RnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50
cnlGcmFtZSk7CiAKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVj
b2RlT2Zmc2V0KTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmV0dXJuVmFsdWVHUFIpKTsKQEAgLTg4NSw3ICs4ODUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrc1dpdGhD
YWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0
aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUp
OwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMg
cGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUq
KS4KIApAQCAtOTA1LDcgKzkwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICAgICAgbV9leGNlcHRpb25IYW5kbGVyID0gbGFiZWwoKTsKICAgICAg
ICAgbV9leGNlcHRpb25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFt
ZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFy
Z3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRleCBjYTJkYjhjLi5mMjAx
OGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01Niw4ICs1Niw4IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0
ZSogY2FsbEZyYW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKICAgICAKICAgICBFeGVjU3Rh
dGUqIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZTsKICAgICBpZiAodW53aW5kU3Rh
cnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdG9w
Vk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICAgICAgc2hhZG93Q2hpY2tl
blRvcEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAg
ICAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAg
ICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50
cnlGcmFtZSk7CiAgICAgfQogICAgIHZtLT5zaGFkb3dDaGlja2VuKCkubG9nKCp2bSwgc2hhZG93
Q2hpY2tlblRvcEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93UGFja2V0KCkpOwog
ICAgIApAQCAtODQsNyArODQsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3Rh
dGUqIGNhbGxGcmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgfSBlbHNlCiAgICAg
ICAgIGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRyKGhhbmRsZVVuY2F1Z2h0RXhjZXB0
aW9uKTsKICAgICAKLSAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1l
KSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BWTUVudHJ5RnJhbWUpKTsKKyAgICBB
U1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAKICAgICB2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2ggPSBjYWxsRnJhbWU7CiAgICAgdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93ID0gY2F0Y2hS
b3V0aW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggOWI0
MTY2YS4uOGI0YmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigq
dm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS0+dG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSgpKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19z
dHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICByZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAg
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+
dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsK
ICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
LCBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGkKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRp
bWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgICAgIEp1bXAgbm9PcHRpbWl6ZWRFbnRyeSA9
IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGExMjI4ZDMuLmZjNzAzOGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sg
R2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc2NSw3
ICs3NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwot
ICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkp
OworICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkt
PnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIHJlZ1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxl
cigqdm0oKSk7CkBAIC04MjYsNyArODI2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX3N0
cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKnZtKCkpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoJnZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fdm0pLCByZWdUMyk7CiAgICAgLy8gb3BlcmF0aW9uVGhyb3cgcmV0dXJucyB0aGUgY2FsbEZy
YW1lIGZvciB0aGUgaGFuZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IGMwNGNkYzQuLmU2Mzk5M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMTAzLDE0ICsxMDMsMTQgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhl
YywgQ29kZUJsb2NrKgogICAgIFZNKiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVu
dHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gZXhlYy0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgaWYgKCFjYWxsZXJGcmFtZSkg
ewogICAgICAgICBjYWxsZXJGcmFtZSA9IGV4ZWM7Ci0gICAgICAgIHZtRW50cnlGcmFtZSA9IHZt
LT50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFt
ZTsKICAgICB9CiAKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIo
dm0sIHZtRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlIHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgIHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxlckZyYW1lLCBzY29wZSk7CiB9CiAKQEAgLTEyMCwx
MCArMTIwLDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd0RpdmlkZUVycm9y
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVu
dHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gZXhlYy0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIHZtRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgZW50cnlGcmFt
ZSwgY2FsbGVyRnJhbWUpOwogICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKCp2bSk7
CiAgICAgdGhyb3dFeGNlcHRpb24oY2FsbGVyRnJhbWUsIHNjb3BlLCBjcmVhdGVFcnJvcihjYWxs
ZXJGcmFtZSwgQVNDSUlMaXRlcmFsKCJEaXZpc2lvbiBieSB6ZXJvIG9yIGRpdmlzaW9uIG92ZXJm
bG93LiIpKSk7CiB9CkBAIC0xMzMsMTAgKzEzMywxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVGhyb3dPdXRPZkJvdW5kc0FjY2Vzc0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSgqdm0pOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRy
eUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2
bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlG
cmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoZW50
cnlGcmFtZSk7CiAKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIo
dm0sIHZtRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlIHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgIEVy
cm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKCp2bSk7CiAgICAgdGhyb3dFeGNlcHRpb24oY2Fs
bGVyRnJhbWUsIHNjb3BlLCBjcmVhdGVFcnJvcihjYWxsZXJGcmFtZSwgQVNDSUlMaXRlcmFsKCJP
dXQtb2YtYm91bmRzIGFjY2Vzcy4iKSkpOwogfQpAQCAtMTQ5LDkgKzE0OSw5IEBAIGludDMyX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiAK
ICAgICBpbnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVj
a0ZvcihleGVjLCAqdm0sIENvZGVGb3JDYWxsKTsKICAgICBpZiAobWlzc2luZ0FyZ0NvdW50IDwg
MCkgewotICAgICAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5
RnJhbWU7Ci0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFt
ZSh2bUVudHJ5RnJhbWUpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9y
ZSB0cmFjZXIodm0sIHZtRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOworICAgICAgICBFbnRyeUZy
YW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKKyAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxs
ZXJGcmFtZSk7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxlckZyYW1lLCBz
Y29wZSk7CiAgICAgfQogCkBAIC0xNjUsOSArMTY1LDkgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2soRXhlY1N0YXRlKiBleGVjKQogCiAgICAgaW50
MzJfdCBtaXNzaW5nQXJnQ291bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhl
YywgKnZtLCBDb2RlRm9yQ29uc3RydWN0KTsKICAgICBpZiAobWlzc2luZ0FyZ0NvdW50IDwgMCkg
ewotICAgICAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJh
bWU7Ci0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2
bUVudHJ5RnJhbWUpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0
cmFjZXIodm0sIHZtRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOworICAgICAgICBFbnRyeUZyYW1l
KiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgICAgIENhbGxGcmFtZSogY2Fs
bGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKKyAgICAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJG
cmFtZSk7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxlckZyYW1lLCBzY29w
ZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKaW5kZXggOTJlNDJiMS4uOTAzYTA1Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0p
CiAgICAgLy8gZXZlbiB0aG91Z2ggd2Ugd29uJ3QgdXNlIGl0LgogICAgIGppdC5wcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsK
IAotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KCp2bSk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKIAogICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKQEAgLTM2
Miw3ICszNjIsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlbmVy
YXRvcihWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQgawogICAgIC8vIEhhbmRsZSBhbiBl
eGNlcHRpb24KICAgICBleGNlcHRpb25IYW5kbGVyLmxpbmsoJmppdCk7CiAKLSAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOworICAgIGpp
dC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50
cnlGcmFtZSk7CiAgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdp
c3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUz
Ml82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZTlhMGQyYS4uMzUwMzVkYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKQEAgLTE4NzIsOCArMTg3Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25QcmludFN0ZEVycihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHByaW50
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBWTUVudHJ5RnJh
bWUqIHRvcFZNRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBFeGVjU3RhdGUq
IGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBF
bnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKKyAgICBFeGVjU3Rh
dGUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAg
aWYgKGNhbGxlckZyYW1lKQogICAgICAgICB2bS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFtZShj
YWxsZXJGcmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4
IDczNWU3MWIuLjM2NjRlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcApAQCAtNDgxLDEzICs0ODEsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc3RhY2tfY2hlY2spCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1F
bnRyeUZyYW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRv
cEVudHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZy
YW1lKSB7CiAgICAgICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1l
ID0gdm0udG9wVk1FbnRyeUZyYW1lOworICAgICAgICB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50
cnlGcmFtZTsKICAgICB9Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJh
Y2VyKCZ2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKCZ2bSwgdG9wRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUp
OwogCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCAzNmY2NDg2Li41Mjk2N2UzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYs
NyArMTE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvTmF0aXZlKHZvaWQqIGV4ZWN1dGFi
bGVBZGRyZXNzLCBWTSogdm0sIFByb3RvQ2FsbEZyYW1lKgogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAotZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVj
b3JkKFZNRW50cnlGcmFtZSogZW50cnlGcmFtZSkKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29yZCog
dm1FbnRyeVJlY29yZChFbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQogewogICAgIC8vIFRoZSBDIExv
b3AgZG9lc24ndCBoYXZlIGFueSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMsIHNvIHRoZSBWTUVudHJ5
UmVjb3JkIGlzIGFsbG9jYXRlZCBhdCB0aGUgYmFzZSBvZiB0aGUgZnJhbWUuCiAgICAgaW50cHRy
X3Qgc3RhY2tBbGlnbm1lbnQgPSBzdGFja0FsaWdubWVudEJ5dGVzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggNWRk
ZTY2NC4uN2JmMWVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtNjU5LDcgKzY1OSw3IEBAIGVuZAogCiBtYWNybyBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLCB0ZW1wKQog
ICAgIGlmIEFSTTY0IG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCi0gICAgICAgIGxvYWRwIFZNOjp0
b3BWTUVudHJ5RnJhbWVbdm1dLCB0ZW1wCisgICAgICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1l
W3ZtXSwgdGVtcAogICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAsIHRlbXApCiAgICAgICAgIGxl
YXAgVk1FbnRyeVJlY29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlclt0ZW1wXSwgdGVtcAog
ICAgICAgICBpZiBBUk02NApAQCAtNzAxLDcgKzcwMSw3IEBAIGVuZAogCiBtYWNybyByZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAg
ICAgaWYgQVJNNjQgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRv
cFZNRW50cnlGcmFtZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVb
dm1dLCB0ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVh
cCBWTUVudHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAg
ICAgICAgIGlmIEFSTTY0CkBAIC0xMTQ0LDcgKzExNDQsNyBAQCBpZiBub3QgQ19MT09QCiAgICAg
ICAgIHN0b3JlcCBhZGRyZXNzLCBWTTo6bV9sYXN0U3RhY2tUb3Bbdm1dCiAgICAgICAgIHJldAog
ICAgIAotICAgICMgVk1FbnRyeVJlY29yZCogdm1FbnRyeVJlY29yZChjb25zdCBWTUVudHJ5RnJh
bWUqIGVudHJ5RnJhbWUpCisgICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0
IEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUpCiAgICAgZ2xvYmFsIF92bUVudHJ5UmVjb3JkCiAgICAg
X3ZtRW50cnlSZWNvcmQ6CiAgICAgICAgIGlmIFg4NiBvciBYODZfV0lOCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CmluZGV4IDExNGE5NzguLjMzMDkwZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMjUsOCArMTI1
LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJl
Y29yZDo6bV92bVtzcF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBz
dG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2Fk
cCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNv
cmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFt
ZVt2bV0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZy
YW1lW3NwXQogCiAgICAgIyBBbGlnbiBzdGFjayBwb2ludGVyCiAgICAgaWYgWDg2X1dJTiBvciBN
SVBTCkBAIC0xODksOCArMTg5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxv
YWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6
Om1fcHJldlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9wQ2FsbEZy
YW1lW3Q1XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtz
cF0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAgIGxvYWRw
IFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0b3JlcCB0
NCwgVk06OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNm
ciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTI0MSw3ICsyNDEsNyBAQCBtYWNybyBk
b1ZNRW50cnkobWFrZUNhbGwpCiAKIC5jb3B5QXJnc0RvbmU6CiAgICAgc3RvcmVwIHNwLCBWTTo6
dG9wQ2FsbEZyYW1lW3ZtXQotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1d
CisgICAgc3RvcmVwIGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBtYWtlQ2FsbChl
bnRyeSwgdDMsIHQ0KQogCkBAIC0yNTUsOCArMjU1LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VD
YWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBW
TTo6dG9wQ2FsbEZyYW1lW3Q1XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZN
RW50cnlGcmFtZVtzcF0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1
XQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAor
ICAgIHN0b3JlcCB0NCwgVk06OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAg
ICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTMyNCw4ICszMjQs
OCBAQCBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6
bV92bVtzcF0sIHQzCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1l
W3NwXSwgdDUKICAgICBzdG9yZXAgdDUsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAg
Vk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDUKLSAgICBzdG9yZXAg
dDUsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ1CisgICAgc3RvcmVwIHQ1LCBWTTo6dG9wRW50cnlGcmFt
ZVt0M10KIAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNh
dmVTaXplLCB0MwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCA1ZDYyOTg3Li43NjlmNjI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpA
QCAtMTI5LDggKzEyOSw4IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBzdG9yZXAg
dm0sIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdCiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2
bV0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVb
c3BdCi0gICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHQ0Ci0gICAgc3RvcmVwIHQ0
LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdCisgICAgbG9hZHAgVk06
OnRvcEVudHJ5RnJhbWVbdm1dLCB0NAorICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wRW50cnlGcmFtZVtzcF0KIAogICAgIGxvYWRpIFByb3RvQ2FsbEZyYW1lOjpwYWRkZWRB
cmdDb3VudFtwcm90b0NhbGxGcmFtZV0sIHQ0CiAgICAgYWRkcCBDYWxsRnJhbWVIZWFkZXJTbG90
cywgdDQsIHQ0CkBAIC0xNzEsOCArMTcxLDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQog
ICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bdDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlS
ZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0NF0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBl
eHRyYVRlbXBSZWcsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29y
ZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4
dHJhVGVtcFJlZywgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAgICBsb2FkcCBWTUVudHJ5UmVj
b3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4
dHJhVGVtcFJlZywgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBzdWJwIGNmciwgQ2FsbGVl
UmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjIwLDcgKzIyMCw3IEBAIG1hY3JvIGRvVk1FbnRy
eShtYWtlQ2FsbCkKICAgICBlbHNlCiAgICAgICAgIHN0b3JlcCBzcCwgVk06OnRvcENhbGxGcmFt
ZVt2bV0KICAgICBlbmQKLSAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQor
ICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXQogCiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoZXh0cmFUZW1wUmVnLCAweGJhZDBkYzAyKQogCkBAIC0yMzYsOCArMjM2
LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6
Om1fdm1bdDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFt
ZVt0NF0sIHQyCiAgICAgc3RvcmVwIHQyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQotICAgIGxvYWRw
IFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0NF0sIHQyCi0gICAgc3RvcmVw
IHQyLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1f
cHJldlRvcEVudHJ5RnJhbWVbdDRdLCB0MgorICAgIHN0b3JlcCB0MiwgVk06OnRvcEVudHJ5RnJh
bWVbdm1dCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAt
Mjc2LDcgKzI3Niw2IEBAIG1hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1wKQog
ICAgIGVuZAogZW5kCiAKLQogX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIENh
bGxlZVtjZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwpAQCAtMjkxLDggKzI5
MCw4IEBAIF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3Jk
OjptX3ZtW3QyXSwgdDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJh
bWVbdDJdLCBleHRyYVRlbXBSZWcKICAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wQ2Fs
bEZyYW1lW3QzXQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFt
ZVt0Ml0sIGV4dHJhVGVtcFJlZwotICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BWTUVu
dHJ5RnJhbWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFt
ZVt0Ml0sIGV4dHJhVGVtcFJlZworICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BFbnRy
eUZyYW1lW3QzXQogCiAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHNwCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYTVhNTNjNi4u
MmEyYmJkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAg
LTQwNiw3ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkK
ICAgICAgICAgT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSA9IGZhbHNlOwogCiAgICAgaWYgKCFP
cHRpb25zOjp1c2VXZWJBc3NlbWJseSgpKQotICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eUZhc3RUTFMoKSA9IGZhbHNlOworICAgICAgICBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNv
bnRleHQoKSA9IGZhbHNlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDNjZWM1NTIuLjg0NzVjMjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ2Nyw4ICs0NjcsNyBAQCB0eXBl
ZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJs
eUZhc3RNZW1vcnlSZWR6b25lUGFnZXMsIDEyOCwgTm9ybWFsLCAiV2ViQXNzZW1ibHkgZmFzdCBt
ZW1vcmllcyB1c2UgNEdpQiB2aXJ0dWFsIGFsbG9jYXRpb25zLCBwbHVzIGEgcmVkem9uZSAoY291
bnRlZCBhcyBtdWx0aXBsZSBvZiA2NEtpQiBXZWJBc3NlbWJseSBwYWdlcykgYXQgdGhlIGVuZCB0
byBjYXRjaCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZCAzMi1iaXQsIGFueXRoaW5nIGJl
eW9uZCB0aGUgcmVkem9uZSBpcyBleHBsaWNpdGx5IGJvdW5kcy1jaGVja2VkIikgXAogICAgIHYo
Ym9vbCwgY3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJ
ZiB0cnVlLCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9yeSBmb3Ig
d2FzbS4iKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4TnVtV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMs
IDQsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExT
LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQt
bG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikgXAot
ICAgIHYoYm9vbCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0
cnVlIChhbmQgZmFzdCBUTFMgaXMgZW5hYmxlZCksIHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBm
YXN0IFRMUy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAorICAg
IHYoYm9vbCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIHN0b3JlIGNvbnRleHQgaW4gZmFzdCBUTFMuIElmIGZhbHNlLCB3ZSB3aWxsIHBp
biBpdCB0byBhIHJlZ2lzdGVyLiIpIFwKICAgICB2KGJvb2wsIHVzZUNhbGxJQ3NGb3JXZWJBc3Nl
bWJseVRvSlNDYWxscywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgQ2FsbExp
bmtJbmZvIHRvIGlubGluZSBjYWNoZSBXYXNtIHRvIEpTIGNhbGxzLiIpIFwKICAgICB2KGJvb2ws
IHVzZU9iamVjdFJlc3RTcHJlYWQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZW5h
YmxlIE9iamVjdCBSZXN0L1NwcmVhZCBmZWF0dXJlLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5
QWxsb2NhdGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ug
b3VyIG5vcm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxv
Y2F0aW9uIHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmlu
ZGV4IGE0YmU5NWIuLjNiY2Y2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAg
ICBGcmFtZVdhbGtlcihWTSYgdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBjb25zdCBBYnN0cmFj
dExvY2tlciYgY29kZUJsb2NrU2V0TG9ja2VyLCBjb25zdCBBYnN0cmFjdExvY2tlciYgbWFjaGlu
ZVRocmVhZHNMb2NrZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX2NhbGxGcmFt
ZShjYWxsRnJhbWUpCi0gICAgICAgICwgbV92bUVudHJ5RnJhbWUodm0udG9wVk1FbnRyeUZyYW1l
KQorICAgICAgICAsIG1fZW50cnlGcmFtZSh2bS50b3BFbnRyeUZyYW1lKQogICAgICAgICAsIG1f
Y29kZUJsb2NrU2V0TG9ja2VyKGNvZGVCbG9ja1NldExvY2tlcikKICAgICAgICAgLCBtX21hY2hp
bmVUaHJlYWRzTG9ja2VyKG1hY2hpbmVUaHJlYWRzTG9ja2VyKQogICAgIHsKQEAgLTEzMCw3ICsx
MzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgU1VQUFJFU1NfQVNBTgogICAgIHZvaWQgYWR2YW5jZVRv
UGFyZW50RnJhbWUoKQogICAgIHsKLSAgICAgICAgbV9jYWxsRnJhbWUgPSBtX2NhbGxGcmFtZS0+
dW5zYWZlQ2FsbGVyRnJhbWUobV92bUVudHJ5RnJhbWUpOworICAgICAgICBtX2NhbGxGcmFtZSA9
IG1fY2FsbEZyYW1lLT51bnNhZmVDYWxsZXJGcmFtZShtX2VudHJ5RnJhbWUpOwogICAgIH0KIAog
ICAgIGJvb2wgaXNBdFRvcCgpIGNvbnN0CkBAIC0xODgsNyArMTg4LDcgQEAgcHJvdGVjdGVkOgog
CiAgICAgVk0mIG1fdm07CiAgICAgRXhlY1N0YXRlKiBtX2NhbGxGcmFtZTsKLSAgICBWTUVudHJ5
RnJhbWUqIG1fdm1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fZW50cnlGcmFtZTsKICAg
ICBjb25zdCBBYnN0cmFjdExvY2tlciYgbV9jb2RlQmxvY2tTZXRMb2NrZXI7CiAgICAgY29uc3Qg
QWJzdHJhY3RMb2NrZXImIG1fbWFjaGluZVRocmVhZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxp
bmdPdXQgeyBmYWxzZSB9OwpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxl
cjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgLy8gV2Ug
cmV1c2UgTExJbnQgQ29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0
byBjaGVjayBmb3IgYm90aCBqaXQgdHlwZXMuCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdo
dCBhbHNvIGJlIGZhbHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwg
ZXZlbiB0aG91Z2gKICAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUg
cmVhc29uIHRoYXQgdGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZH
IGZyYW1lLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2lu
ZCBwYXN0IGEgVk1FbnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAg
ICAgICAgICAvLyBhbmQgd2UgZW5kIHVwIGhhdmluZyB0byB1bndpbmQgcGFzdCBhbiBFbnRyeUZy
YW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUg
dGhlIExMSW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBh
Z2FpbnN0IHRoaXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKaW5kZXggMDZlOTMwMy4uNGM2NWQ2MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDEz
IEBAIFRocm93U2NvcGU6On5UaHJvd1Njb3BlKCkKIAogICAgIGJvb2wgd2lsbEJlSGFuZGxlQnlM
TEludE9ySklUID0gZmFsc2U7CiAgICAgdm9pZCogcHJldmlvdXNTY29wZSA9IG1fcHJldmlvdXNT
Y29wZTsKLSAgICB2b2lkKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsK
KyAgICB2b2lkKiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOwogCi0gICAgLy8g
SWYgdGhlIHRvcFZNRW50cnlGcmFtZSB3YXMgcHVzaGVkIG9uIHRoZSBzdGFjayBhZnRlciB0aGUg
cHJldmlvdXNTY29wZSB3YXMgaW5zdGFudGlhdGVkLAorICAgIC8vIElmIHRoZSB0b3BFbnRyeUZy
YW1lIHdhcyBwdXNoZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBp
bnN0YW50aWF0ZWQsCiAgICAgLy8gdGhlbiB0aGlzIHRocm93U2NvcGUgd2lsbCBiZSByZXR1cm5p
bmcgdG8gTExJTlQgb3IgSklUIGNvZGUgdGhhdCBhbHdheXMgZG8gYW4gZXhjZXB0aW9uCiAgICAg
Ly8gY2hlY2suIEluIHRoYXQgY2FzZSwgc2tpcCB0aGUgc2ltdWxhdGVkIHRocm93IGJlY2F1c2Ug
dGhlIExMSW50IGFuZCBKSVQgd2lsbCBiZQogICAgIC8vIGNoZWNraW5nIGZvciB0aGUgZXhjZXB0
aW9uIHRoZWlyIG93biB3YXkgaW5zdGVhZCBvZiBjYWxsaW5nIFRocm93U2NvcGU6OmV4Y2VwdGlv
bigpLgotICAgIGlmICh0b3BWTUVudHJ5RnJhbWUgJiYgcHJldmlvdXNTY29wZSA+IHRvcFZNRW50
cnlGcmFtZSkKKyAgICBpZiAodG9wRW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wRW50
cnlGcmFtZSkKICAgICAgICAgd2lsbEJlSGFuZGxlQnlMTEludE9ySklUID0gdHJ1ZTsKICAgICAK
ICAgICBpZiAoIXdpbGxCZUhhbmRsZUJ5TExJbnRPckpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAppbmRleCAxODFlM2I3Li4zZWU1MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhl
YXBUeXBlIGhlYXBUeXBlKQogI2VuZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xp
ZW50RGF0YSgwKQotICAgICwgdG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCisgICAgLCB0b3BFbnRy
eUZyYW1lKG51bGxwdHIpCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigp
KQogICAgICwgcHJvbWlzZURlZmVycmVkVGltZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVm
ZXJyZWRUaW1lcj4oKnRoaXMpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0g
RGVmYXVsdCA/IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkgOiBuZXcgQXRv
bWljU3RyaW5nVGFibGUpCkBAIC0zNjgsNyArMzY4LDcgQEAgVk06On5WTSgpCiAgICAgcHJvbWlz
ZURlZmVycmVkVGltZXItPnN0b3BSdW5uaW5nVGFza3MoKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgaWYgKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSkKLSAgICAgICAgV2Fz
bTo6ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JWTSgqdGhpcyk7CisgICAgICAgIFdh
c206OmVuc3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yQ29udGV4dCh3YXNtQ29udGV4dCk7
CiAjZW5kaWYKICAgICBpZiAoVU5MSUtFTFkobV93YXRjaGRvZykpCiAgICAgICAgIG1fd2F0Y2hk
b2ctPndpbGxEZXN0cm95Vk0odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRl
eCA5NTU4NTk0Li5kMjBlMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU1
LDYgKzU1LDcgQEAKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNs
dWRlICJWTUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIldh
c21Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1w
UG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgpA
QCAtMzI5LDE0ICszMzAsMTUgQEAgcHVibGljOgogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBD
bGllbnREYXRhKiBjbGllbnREYXRhOwotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1l
OworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWU7CiAgICAgLy8gTk9URTogV2hlbiB0aHJv
d2luZyBhbiBleGNlcHRpb24gd2hpbGUgcm9sbGluZyBiYWNrIHRoZSBjYWxsIGZyYW1lLCB0aGlz
IG1heSBiZSBlcXVhbCB0bwotICAgIC8vIHRvcFZNRW50cnlGcmFtZS4KKyAgICAvLyB0b3BFbnRy
eUZyYW1lLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHZvaWQqLCBiZWNhdXNlIGl0
IG1pZ2h0IG5vdCBwb2ludCB0byBhIENhbGxGcmFtZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNDQxCiAgICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJh
bWUgeyBudWxscHRyIH07Ci0gICAgLy8gRklYTUU6IFNhdmUgdGhpcyBzdGF0ZSBlbHNld2hlcmUg
dG8gYWxsb3cgUElDLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5
NzczCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCB7IG51bGxwdHIgfTsK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgV2FzbTo6Q29udGV4dCB3YXNtQ29udGV4dDsK
KyNlbmRpZgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICBT
dHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8
U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CkBAIC01MDEsOSAr
NTAzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0YXJn
ZXRNYWNoaW5lUENGb3JUaHJvdyk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCB0b3BW
TUVudHJ5RnJhbWVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdG9wRW50cnlGcmFtZU9m
ZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0b3BWTUVu
dHJ5RnJhbWUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0b3BFbnRyeUZy
YW1lKTsKICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNlcHRp
b24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCBkZWFhNDQ5Li44NzNkMzU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtODksNyArODksNyBA
QCBpbmxpbmUgQ2FsbEZyYW1lKiBzYW5pdGl6ZWRUb3BDYWxsRnJhbWUoQ2FsbEZyYW1lKiB0b3BD
YWxsRnJhbWUpCiAgICAgcmV0dXJuIHRvcENhbGxGcmFtZTsKIH0KIAotc3RhdGljIGJvb2wgaXNT
YW5lRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgVk1FbnRy
eUZyYW1lKiBlbnRyeUZyYW1lLCBTdGFja0JvdW5kcyBzdGFja0JvdW5kcykKK3N0YXRpYyBib29s
IGlzU2FuZUZyYW1lKENhbGxGcmFtZSogZnJhbWUsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEVu
dHJ5RnJhbWUqIGVudHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzKQogewogICAgIGlm
IChyZWludGVycHJldF9jYXN0PHZvaWQqPihmcmFtZSkgPj0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZW50cnlGcmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMSwxOCArMTIxLDE4
IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhTaWduYWxDb250ZXh0
JiBjb250ZXh0LCBTdGFja0JvdW5kcyBzdGFjCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBmb3Vu
ZENvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2
bS50b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLnRvcEVu
dHJ5RnJhbWU7CiAKICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY2FsbGVlIHRvIHN0YXJ0IHdpdGgu
IFNvLCB1c2UgdGhlIGVuZCBvZiB0aGUgc3RhY2sgdG8ga2VlcCB0aGUKICAgICAvLyBpc1NhbmVG
cmFtZSgpIGNoZWNrZXIgYmVsb3cgaGFwcHkgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb24uIEl0IHdp
bGwgc3RpbGwgY2hlY2sKICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgYWRkcmVzcyBpcyBpbiB0
aGUgc3RhY2tCb3VuZHMuCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Q2FsbEZyYW1lKj4oc3RhY2tCb3VuZHMuZW5kKCkpOwogCi0gICAgaWYgKCF2bUVudHJ5
RnJhbWUgfHwgIWNhbGxGcmFtZSkKKyAgICBpZiAoIWVudHJ5RnJhbWUgfHwgIWNhbGxGcmFtZSkK
ICAgICAgICAgcmV0dXJuOyAvLyBOb3QgcnVubmluZyBKUyBjb2RlLiBMZXQgdGhlIFNpZ25hbFNl
bmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICBkbyB7Ci0gICAgICAgIGlmICghaXNTYW5lRnJh
bWUoY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgdm1FbnRyeUZyYW1lLCBzdGFja0JvdW5kcykpCisg
ICAgICAgIGlmICghaXNTYW5lRnJhbWUoY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZW50cnlGcmFt
ZSwgc3RhY2tCb3VuZHMpKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNl
bmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICAgICAgQ29kZUJsb2NrKiBjYW5kaWRhdGVDb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTQyLDkgKzE0Miw5IEBAIHZvaWQg
Vk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhTaWduYWxDb250ZXh0JiBjb250ZXh0
LCBTdGFja0JvdW5kcyBzdGFjCiAgICAgICAgIH0KIAogICAgICAgICBjYWxsZWVGcmFtZSA9IGNh
bGxGcmFtZTsKLSAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh2bUVu
dHJ5RnJhbWUpOworICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVu
dHJ5RnJhbWUpOwogCi0gICAgfSB3aGlsZSAoY2FsbEZyYW1lICYmIHZtRW50cnlGcmFtZSk7Cisg
ICAgfSB3aGlsZSAoY2FsbEZyYW1lICYmIGVudHJ5RnJhbWUpOwogCiAgICAgaWYgKCFmb3VuZENv
ZGVCbG9jaykgewogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBqdXN0IGVudGVyZWQgdGhlIGZyYW1l
IGFuZCB0aGUgY29kZUJsb2NrIHBvaW50ZXIgaXMgbm90CkBAIC0xODEsMTcgKzE4MSwxNyBAQCB2
b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjayhMb2NrZXI8TG9jaz4mLCBF
eGVjU3RhdGUqIHRvcENhbGxGcmFtZQogCiAgICAgbV9uZWVkVG9JbnZhbGlkYXRlZENvZGVCbG9j
a3MgPSBmYWxzZTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0oKS50b3BW
TUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtKCkudG9wRW50cnlG
cmFtZTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHRvcENhbGxGcmFtZTsKIAotICAgIGlm
ICghdm1FbnRyeUZyYW1lKQorICAgIGlmICghZW50cnlGcmFtZSkKICAgICAgICAgcmV0dXJuOyAv
LyBOb3QgcnVubmluZyBKUyBjb2RlLiBOb3RoaW5nIHRvIGludmFsaWRhdGUuCiAKICAgICB3aGls
ZSAoY2FsbEZyYW1lKSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5q
ZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwotICAgICAgICBjYWxsRnJh
bWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgICAgIGNhbGxG
cmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5k
ZXggYWQ3ZDYyMS4uYWY2Y2ZlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNDksOCArNDksNiBAQAogI2luY2x1ZGUgIkIzV2Fz
bUJvdW5kc0NoZWNrVmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5o
IgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNp
bmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKQEAgLTE3OCw3ICsxNzYsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwK
ICAgICB9IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50Kik7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWdu
YXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChU
eXBlLCB1aW50MzJfdCk7CkBAIC0yNDcsNyArMjQ1LDcgQEAgcHJpdmF0ZToKIAogICAgIGludDMy
X3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5
cGUmLCB1aW50MzJfdCk7CiAKLSAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUm
LCBCYXNpY0Jsb2NrKiwgVmFsdWUqKTsKKyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3Rh
bmNlKFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdl
YkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5z
dGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKIAogICAgIE9yaWdpbiBvcmlnaW4oKTsK
QEAgLTI2Nyw3ICsyNjUsNyBAQCBwcml2YXRlOgogICAgIEluc2VydGlvblNldCBtX2NvbnN0YW50
SW5zZXJ0aW9uVmFsdWVzOwogICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BS
UmVnIH07CiAgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKLSAg
ICBHUFJSZWcgbV93YXNtQ29udGV4dEdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcg
bV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIGJvb2wgbV9t
YWtlc0NhbGxzIHsgZmFsc2UgfTsKIAogICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWUgeyBudWxs
cHRyIH07IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93IHRvIGVuc3VyZSB0aGUgaW5z
dGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4KQEAgLTI5MSwzNyArMjg5LDM3
IEBAIGludDMyX3QgQjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNz
aW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZzCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9p
ZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNp
Y0Jsb2NrKiBibG9jaywgVmFsdWUqIGFyZykKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdh
c21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVmFs
dWUqIGFyZykKIHsKLSAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChD
b250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBP
cmlnaW4oKSk7Ci0gICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHROZWVk
c01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCisgICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3Jl
V2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVy
cygpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdh
c21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBq
aXQuc3RvcmVXYXNtQ29udGV4dChwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVs
cGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rlcigp
KTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1sw
XS5ncHIoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dCBy
ZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGlu
IHRoZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwg
Y2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9y
ZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAvLyBU
aGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5
KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBCMzo6Vm9pZCwg
T3JpZ2luKCkpOwogICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICBl
ZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFw
UmFuZ2U6OnRvcCgpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOwotICAgIHBh
dGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRHUFIpKTsKKyAg
ICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFIpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKLSAgICBHUFJSZWcgd2FzbUNvbnRleHRHUFIgPSBtX3dhc21Db250
ZXh0R1BSOworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gbV93YXNtQ29udGV4
dEluc3RhbmNlR1BSOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7Ci0gICAg
ICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEdQUik7CisgICAgICAgIGpp
dC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAgICB9KTsK
IH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0
aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCitCM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUm
IHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbikKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2Nv
bXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCkBAIC0zMzksOSArMzM3LDkgQEAgQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUKICAgICBtX21lbW9yeUJhc2VHUFIgPSBwaW5uZWRSZWdzLmJhc2VN
ZW1vcnlQb2ludGVyOwogICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOwog
Ci0gICAgbV93YXNtQ29udGV4dEdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRQb2ludGVyOwot
ICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgbV9wcm9jLnBpblJlZ2lz
dGVyKG1fd2FzbUNvbnRleHRHUFIpOworICAgIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBp
bm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CisgICAgaWYgKCFDb250ZXh0Ojp1
c2VGYXN0VExTKCkpCisgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX3dhc21Db250ZXh0SW5z
dGFuY2VHUFIpOwogCiAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CiAg
ICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOwpA
QCAtMzUwLDYgKzM0OCw5IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICBt
X3Byb2MucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIpOwogICAgIH0KIAorICAgIGlm
ICh0aHJvd1dhc21FeGNlcHRpb24pCisgICAgICAgIFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhy
b3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CisKICAgICBpZiAoaW5mby5tZW1v
cnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7CiAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBAIC0zNjMsNiArMzY0
LDE2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5k
c01lbW9yeUFjY2Vzcyk7CiAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7
CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgIC8vIE1v
c3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0
IGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNlIHRoZXkgY2FuIHJlbHkgb24gZmF1bHQgaGFuZGxpbmcg
dG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIEZhdWx0U2lnbmFsSGFuZGxlciBub25l
dGhlbGVzcyBuZWVkcyB0aGUgdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0
aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigp
LnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUoJmNvbXBpbGF0
aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJsb2Nr
KTsKQEAgLTM3MywxMiArMzg0LDEyIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAg
IG1faW5zdGFuY2VWYWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVjazsKICAgICAgICAgc3RhY2tPdmVy
Zmxvd0NoZWNrLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKTsKICAgICAgICAgc3Rh
Y2tPdmVyZmxvd0NoZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7Ci0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgewotICAgICAgICAg
ICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0
IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQg
aW4gdGhlIGNhbGxlciBzaWRlLgorICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkg
eworICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJz
IHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdl
IG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCiAgICAgICAgICAgICAvLyBU
aGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5
KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgogICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0No
ZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOwogICAgICAgICAgICAgc3RhY2tPdmVy
Zmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YWNr
T3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29u
dGV4dEdQUik7CisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnJlc3VsdENvbnN0cmFp
bnQgPSBWYWx1ZVJlcDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAgICAgICAgIH0K
ICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOwog
ICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKQEAg
LTQwMSw3ICs0MTIsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgYm9v
bCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+
IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKICAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVy
Zmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVu
dENoZWNrU2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CiAKLSAgICAgICAgICAgIEdQUlJlZyBj
b250ZXh0ID0gdXNlRmFzdFRMU0ZvckNvbnRleHQoKSA/IHBhcmFtc1swXS5ncHIoKSA6IG1fd2Fz
bUNvbnRleHRHUFI7CisgICAgICAgICAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4
dDo6dXNlRmFzdFRMUygpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEluc3RhbmNl
R1BSOwogCiAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3Qg
ZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCiAgICAgICAgICAg
ICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5
IGRvbmUgdGhlIGNoZWNrLgpAQCAtNDExLDEwICs0MjIsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9j
ZWR1cmUKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBwYXJhbXMuZ3BTY3JhdGNo
KDApOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHBhcmFtcy5ncFNjcmF0Y2go
MSk7CiAKLSAgICAgICAgICAgICAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKIAotICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0LCBDb250ZXh0Ojpv
ZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOwog
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNo
ZWNrU2l6ZSksIGZwLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG92ZXJmbG93OwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5k
ZXJmbG93Q2hlY2spKQpAQCAtNDIzLDEwICs0MzQsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3Zl
cmZsb3csIENvZGVMb2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0
YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiB1
c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0lu
c3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBz
dGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdh
c21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBq
aXQubG9hZFdhc21Db250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9h
ZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAg
ICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0
dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBiZWNhdXNlIGl0IGlzbid0
IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZl
Y3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5n
IHJlbW92ZWQuCiAgICAgICAgICAgICB9CkBAIC00MzgsNyArNDQ5LDcgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUKIAogdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9i
YWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBWYWx1ZSogaW5zdGFuY2Us
IFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7Ci0gICAgcmVzdG9yZVdhc21D
b250ZXh0KHByb2MsIGJsb2NrLCBpbnN0YW5jZSk7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5z
dGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKIAogICAgIGlmICghIW1lbW9yeSkgewogICAg
ICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKQEAgLTQ1OCwxMiArNDY5LDEyIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6
cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1l
bW9yCiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVt
b3J5UG9pbnRlcjsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhwYXJhbXNbMF0uZ3ByKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnko
KSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldh
c21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJl
Z3MgPSBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHNpemVS
ZWdzLnNpemUoKSA+PSAxKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9m
ZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBj
YWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rl
cik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1v
cnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQog
ICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6
ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3Nb
aV0uc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfSk7CkBAIC01NDEsMjQgKzU1MiwyMiBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAogCiBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBpbnQzMl90ICgqZ3Jv
d01lbW9yeSkgKENvbnRleHQqLCBpbnQzMl90KSA9IFtdIChDb250ZXh0KiB3YXNtQ29udGV4dCwg
aW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7Ci0gICAgICAgIFZNJiB2bSA9ICp3YXNtQ29udGV4
dC0+dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHdhc21NZW1vcnkgPSB3YXNtQ29udGV4dC0+
bWVtb3J5KCk7Ci0KKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiwgaW50MzJfdCkgPSBbXSAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgaW50
MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7CiAgICAgICAgIGlmIChkZWx0YSA8IDApCiAgICAgICAg
ICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZh
aWx1cmUgPSBmYWxzZTsKLSAgICAgICAgLy8gZ3JvdygpIGRvZXMgbm90IHJlcXVpcmUgRXhlY1N0
YXRlKiBpZiBpdCBkb2Vzbid0IHRocm93IGV4Y2VwdGlvbnMuCi0gICAgICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IG51bGxwdHI7Ci0gICAgICAgIFBhZ2VDb3VudCByZXN1bHQgPSB3YXNtTWVtb3J5LT5n
cm93KHZtLCBleGVjLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGVsdGEpLCBzaG91bGRUaHJvd0V4
Y2VwdGlvbnNPbkZhaWx1cmUpOwotICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+aW50ZXJuYWxNZW1vcnkoKS5ncm93KFBhZ2VDb3Vu
dChkZWx0YSkpOworICAgICAgICBpZiAoIWdyb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdy
b3duLmVycm9yKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6
SW52YWxpZERlbHRhOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJ
bnZhbGlkR3Jvd1NpemU6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246
OldvdWxkRXhjZWVkTWF4aW11bToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJl
YXNvbjo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5wYWdlQ291bnQoKTsKKyAg
ICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7CiAgICAgfTsKIAogICAgIHJl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQz
Miwgb3JpZ2luKCksCkBAIC01NzIsMTMgKzU4MSwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSk7CisgICAgVmFsdWUqIG1lbW9y
eU9iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSkpOwog
Ci0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8SlNXZWJBc3Nl
bWJseUluc3RhbmNlKj4obnVsbHB0ciktPm1lbW9yeSgpLT5tZW1vcnkoKS5zaXplKCkpKSA9PSBz
aXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7Ci0gICAgVmFs
dWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihK
U1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOworICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKGRlY2x0eXBlKHN0YXRpY19jYXN0PFdhc206Ok1lbW9yeSo+KG51bGxwdHIpLT5zaXpl
KCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7
CisgICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxp
bnQzMl90PihXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7CiAgICAgCiAgICAgY29uc3Rl
eHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKLSAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3Vu
dDo6cGFnZVNpemUgPT0gMSA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBj
b2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6
OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUg
Y29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOwogICAgIFZhbHVlKiBudW1QYWdlcyA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCksCiAgICAg
ICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKQEAgLTEwNjksMTQgKzEwNzgsMTMgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6
bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5z
aXplKCkpKTsKIAogICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNhbiBiZSBsaW5rZWQgaGVyZSwg
aW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwgYmVjYXVzZSBhbGwgaW1wb3J0IHN0
dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0aW9uIHN0YXJ0cy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgotICAgICAgICBWYWx1ZSogZnVu
Y3Rpb25JbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVD
YXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlv
bihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSoganNUeXBlT2ZJbXBvcnQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2lu
KCksIGZ1bmN0aW9uSW1wb3J0LCBzYWZlQ2FzdDxpbnQzMl90PihKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSk7Ci0gICAgICAgIFZhbHVlKiBpc1dhc21DYWxsID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIGpzVHlwZU9mSW1wb3J0
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKyAgICAgICAgVmFsdWUqIHRhcmdldEluc3Rh
bmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQz
Ml90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVuY3Rp
b25JbmRleCkpKTsKKyAgICAgICAgVmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgdGFyZ2V0SW5zdGFu
Y2UsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCAwKSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sgPSBtX3Byb2MuYWRk
QmxvY2soKTsKLSAgICAgICAgQmFzaWNCbG9jayogaXNKU0Jsb2NrID0gbV9wcm9jLmFkZEJsb2Nr
KCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJCbG9jayA9IG1fcHJvYy5hZGRCbG9j
aygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2so
KTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2Ms
IEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNt
QmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNKU0Jsb2NrKSk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwg
aXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRlZEJsb2Nr
KGlzRW1iZWRkZXJCbG9jaykpOwogCiAgICAgICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBvcmln
aW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTA5NywxNSArMTEwNSwxNSBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIFVwc2lsb25WYWx1ZSogd2FzbUNhbGxSZXN1bHRVcHNp
bG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzV2FzbUJsb2NrLT5hcHBlbmRO
ZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNtQ2FsbFJlc3VsdCk7CiAgICAg
ICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmln
aW4oKSwgY29udGludWF0aW9uKTsKIAotICAgICAgICAvLyBGSVhNRTogTGV0cyByZW1vdmUgdGhp
cyBpbmRpcmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmllbmRseSBJQworICAgICAgICAvLyBG
SVhNRTogTGV0J3MgcmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24gYnkgY3JlYXRpbmcgYSBQSUMgZnJp
ZW5kbHkgSUMKICAgICAgICAgLy8gZm9yIGNhbGxzIG91dCB0byBKUy4gVGhpcyBzaG91bGRuJ3Qg
YmUgdGhhdCBoYXJkIHRvIGRvLiBXZSBjb3VsZCBwcm9iYWJseQogICAgICAgICAvLyBpbXBsZW1l
bnQgdGhlIElDIHRvIGJlIG92ZXIgV2FzbTo6Q29udGV4dCouCiAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzNzUKLSAgICAgICAgVmFsdWUqIGNv
ZGVCbG9jayA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCi0gICAg
ICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBz
YWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ29kZUJsb2Nr
KCkpKTsKLSAgICAgICAgVmFsdWUqIGp1bXBEZXN0aW5hdGlvbiA9IGlzSlNCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgp
LCBvcmlnaW4oKSwgY29kZUJsb2NrLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihmdW5jdGlvbkluZGV4KSkpOwotICAg
ICAgICBWYWx1ZSoganNDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBD
YWxsKG1fcHJvYywgaXNKU0Jsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlw
ZSksCisgICAgICAgIFZhbHVlKiBjb2RlQmxvY2sgPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZldhc21Db2RlQmxvY2soKSkpOworICAgICAgICBWYWx1ZSoganVt
cERlc3RpbmF0aW9uID0gaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywKKyAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxv
Y2ssIHNhZmVDYXN0PGludDMyX3Q+KENvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9FbWJl
ZGRlclN0dWIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFsdWUqIGVtYmVkZGVyQ2FsbFJl
c3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzRW1iZWRk
ZXJCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICAg
ICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CkBAIC0xMTE5LDggKzExMjcs
OCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgIGppdC5jYWxs
KHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCkpOwogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIFVwc2lsb25WYWx1ZSoganNDYWxsUmVz
dWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0pTQmxvY2stPmFw
cGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGpzQ2FsbFJlc3VsdCk7Ci0g
ICAgICAgIGlzSlNCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3Jp
Z2luKCksIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFVwc2lsb25WYWx1ZSogZW1iZWRkZXJDYWxs
UmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0VtYmVkZGVy
QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGVtYmVkZGVy
Q2FsbFJlc3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CiAKQEAgLTExMjksNyArMTEzNyw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBj
b250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNUeXBlKHJldHVy
blR5cGUpLCBvcmlnaW4oKSk7CiAgICAgICAgICAgICB3YXNtQ2FsbFJlc3VsdFVwc2lsb24tPnNl
dFBoaShyZXN1bHQpOwotICAgICAgICAgICAganNDYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJl
c3VsdCk7CisgICAgICAgICAgICBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVz
dWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0
byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlm
aWVkIG91ciBNZW1vcnkuCkBAIC0xMTY1LDE3ICsxMTczLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvCiAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpT
Q2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKICAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOwotICAgIEV4cHJlc3Npb25U
eXBlIGpzRnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVy
OwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplOwogICAgIHsK
ICAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAg
ICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSkpOworICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgp
LCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbVRh
YmxlKCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJs
eVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7Ci0gICAgICAgIGpzRnVuY3Rpb25CdWZmZXIg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMy
X3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1bmN0aW9ucygpKSk7CisgICAgICAg
ICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbTo6VGFibGU6Om9mZnNldE9mRnVuY3Rp
b25zKCkpKTsKKyAgICAgICAgaW5zdGFuY2VzQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwK
KyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zmc2V0
T2ZJbnN0YW5jZXMoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIs
IG9yaWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNz
ZW1ibHlUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2Fz
dDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKICAgICB9CiAKICAgICAv
LyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHZhbGlkLgpAQCAtMTE5NSw2
ICsxMjAzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICBFeHByZXNzaW9uVHlwZSBj
YWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBvZmZzZXQpOwogCiAgICAg
Ly8gQ2hlY2sgdGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJh
cCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdz
IG5vdCBpbml0aWFsaXplZC4KKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxl
cnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZh
bGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzIxMAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKENhbGxhYmxlRnVuY3Rpb246OnNpZ25hdHVy
ZUluZGV4KSA9PSBzaXplb2YodWludDMyX3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTMyIik7
CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwg
Y2FsbGFibGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oT0JKRUNUX09GRlNFVE9GKENhbGxh
YmxlRnVuY3Rpb24sIHNpZ25hdHVyZUluZGV4KSkpOwogICAgIHsKQEAgLTEyMjMsMTkgKzEyMzIs
MTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICB7CiAgICAgICAgIFZhbHVlKiBvZmZz
ZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2lu
KCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KSwKLSAgICAgICAgICAgIGNvbnN0YW50KHBv
aW50ZXJUeXBlKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSkpOwotICAgICAgICBW
YWx1ZSoganNPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBqc0Z1bmN0
aW9uQnVmZmVyLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCks
IHNpemVvZihXYXNtOjpJbnN0YW5jZSopKSk7CisgICAgICAgIFZhbHVlKiBuZXdDb250ZXh0SW5z
dGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIs
IG9mZnNldCkpOwogCiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5h
ZGRCbG9jaygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBtX3Byb2Mu
YWRkQmxvY2soKTsKIAotICAgICAgICBWYWx1ZSogbmV3Q29udGV4dCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksCi0gICAgICAgICAgICBqc09iamVjdCwgc2FmZUNhc3Q8aW50MzJfdD4oV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mSW5zdGFuY2UoKSkpOwotICAgICAgICBWYWx1ZSogaXNT
YW1lQ29udGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1
YWwsIG9yaWdpbigpLAotICAgICAgICAgICAgbmV3Q29udGV4dCwgaW5zdGFuY2VWYWx1ZSgpKTsK
KyAgICAgICAgVmFsdWUqIGlzU2FtZUNvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAorICAgICAgICAgICAgbmV3
Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOwogICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksCi0g
ICAgICAgICAgICBpc1NhbWVDb250ZXh0LCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSwg
RnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOworICAgICAgICAgICAgaXNTYW1lQ29u
dGV4dEluc3RhbmNlLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJs
b2NrKGRvQ29udGV4dFN3aXRjaCkpOwogCiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9j
LCBCMzo6Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRl
c1Bpbm5lZCA9IHRydWU7CkBAIC0xMjQzLDI2ICsxMjUwLDI2IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdp
c3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5h
cHBlbmQobmV3Q29udGV4dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChuZXdDb250ZXh0SW5zdGFuY2UsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHQgPSBwYXJhbXNbMF0uZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dCA9IHBhcmFtc1sxXS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdwcigpOwog
ICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0g
cGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkg
PSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgQVNTRVJUKG5ld0Nv
bnRleHQgIT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Mob2xkQ29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0
KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZDYWNoZWRT
dGFja0xpbWl0KCkpKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KG5ld0NvbnRl
eHQpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0Nv
bnRleHQsIENvbnRleHQ6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJB
c3NlbWJseU1lbW9yeSouCisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3RhbmNlICE9
IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRy
KGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0
SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICAgICAgICAgIEFTU0VSVChzaXplUmVn
cy5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lz
dGVyICE9IGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVS
ZWdpc3RlciAhPSBuZXdDb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKICAgICAgICAgICAgIEFTU0VSVCgh
c2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZT
aXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc21N
ZW1vcnk6OnZvaWQqLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9m
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICAgICAg
fSk7CiAgICAgICAgIGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKQEAgLTEzMzksMTk0ICsxMzQ2LDYg
QEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBj
b250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3MKICAgICBkYXRhTG9nTG4oKTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxh
dGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXgpCi17Ci0gICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRp
b25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKLQotICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtl
X3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwotICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1
ZSgpOwotCi0gICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKLSAgICBqaXQuc3RvcmU2NChD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVz
dWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOwotICAgIH0pOwotCi0gICAgY29uc3Qg
UGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KTsKLSAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2RlKTsKLQot
I2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCB0b1NhdmVTaXplID0gdG9TYXZlLm51
bWJlck9mU2V0R1BScygpOwotICAgIC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUgc2F2ZXMu
Ci0gICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
LSAgICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUpOwotI2Vu
ZGlmCi0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRvU2F2ZSwg
UmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCk7
Ci0gICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNU
b1NwaWxsOwotCi0gICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxs
LnNpemUoKSAqIHNpemVvZih2b2lkKik7Ci0gICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxp
bmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwotICAgIHRvdGFsRnJhbWVTaXplIC09
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICB1bnNpZ25lZCBudW1HUFJzID0gMDsKLSAg
ICB1bnNpZ25lZCBudW1GUFJzID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgIHN3aXRjaCAoc2lnbmF0dXJl
LmFyZ3VtZW50KGkpKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICBjYXNlIFdh
c206OkkzMjoKLSAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlv
bigpLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0g
c2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVtR1BSczsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAg
ICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Mu
c2l6ZSgpKQotICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7
Ci0gICAgICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKLSAgICBqaXQuc3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8gV2Ugc2F2ZSBhbGwgdGhlc2Ug
cmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KLSAgICAvLyBU
aGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2guIFRoYXQg
c2FpZCwKLSAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVtb3J5LCBz
byBpdCdzIG5vdCByZWFsbHkKLSAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0
aGF0IHRoZXkgZG9uJ3QuCi0gICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9m
ZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zm
c2V0LnJlZygpLmdwcigpOwotICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQu
b2Zmc2V0KCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgR1BS
UmVnIHdhc21Db250ZXh0R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dFBvaW50ZXI7Ci0KLSAg
ICB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVs
cGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotICAgICAgICBu
dW1HUFJzID0gMDsKLSAgICAgICAgbnVtRlBScyA9IDA7Ci0gICAgICAgIC8vIFdlJ3JlIGdvaW5n
IHRvIHNldCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0aGlzLiBTbwotICAgICAgICAvLyB3
ZSBjYW4gdXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cgc2luY2Ugd2Ugc2F2ZWQgaXQgYWJv
dmUuCi0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9p
bnRlcjsKLQotICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0gICAgICAgIC8vIHZtRW50cnlU
b1dhc20gcGFzc2VzIFdhc206OkNvbnRleHQqIGFzIHRoZSBmaXJzdCBKUyBhcmd1bWVudCB3aGVu
IHdlJ3JlCi0gICAgICAgIC8vIG5vdCB1c2luZyBmYXN0IFRMUyB0byBob2xkIHRoZSBXYXNtOjpD
b250ZXh0Ki4KLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNvbnRleHRHUFIpOwotICAgICAgICAgICAganNPZmZz
ZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB0cmRp
ZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXpl
b2Yodm9pZCopOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1
bWVudChpKSkgewotICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAgICAgICAgICBjYXNl
IFdhc206Okk2NDoKLSAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
aWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNl
dCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0
ICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICArK251bUdQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFdhc206OkYzMjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAg
ICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXpl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBX
YXNtOjpGMzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0
Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywg
Y2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNo
UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFy
Z3VtZW50KGkpID09IFdhc206OkYzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
RmxvYXQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBq
c09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBS
c10uZnByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK251bUZQUnM7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoISFpbmZvLm1lbW9yeSkgewotICAgICAgICBHUFJSZWcgYmFzZU1l
bW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0KLSAgICAgICAgaWYgKCF1c2VG
YXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHdhc21Db250ZXh0R1BSLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBqaXQu
bG9hZFdhc21Db250ZXh0KGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1v
ZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBz
aXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKLSAgICAgICAgICAgIEFTU0VSVChz
aXplUmVncy5zaXplKCkgPj0gMSk7Ci0gICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNp
emVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBh
bmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0g
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rl
ciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVt
b3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgfQotCi0gICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0g
ICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1w
b3J0RnVuY3Rpb25Db3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZv
LmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFjZSB9
KTsKLSAgICB9KTsKLQotCi0gICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9m
ZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zm
c2V0LnJlZygpLmdwcigpOwotICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgp
OwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7Ci0gICAgfQotCi0gICAgc3dpdGNoIChzaWdu
YXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgIGppdC5t
b3ZlRmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICBqaXQu
bW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogYXV0byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAt
PiBPcmlnaW4KIHsKICAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bj
b2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CkBAIC0xNTM0
LDcgKzEzNTMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENv
bXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5j
dGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21w
aWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVy
VXBDb3VudCogdGllclVwKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0
aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9u
TGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9k
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNt
RXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6
bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMTU1OCwxMSArMTM3NywxMSBA
QCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5
QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01H
T3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQoaW5mbywg
cHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBj
b21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7Ci0gICAgRnVuY3Rpb25QYXJz
ZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9u
TGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOworICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3Io
aW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBt
b2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhj
ZXB0aW9uKTsKKyAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5l
cmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwog
ICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCi0gICAgY29u
dGV4dC5pbnNlcnRDb25zdGFudHMoKTsKKyAgICBpckdlbmVyYXRvci5pbnNlcnRDb25zdGFudHMo
KTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIGlmICghQVNTRVJU
X0RJU0FCTEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmgKaW5kZXggZTJjNmFkYi4uNjliZTQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
QjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNs
dWRlICJXYXNtVGllclVwQ291bnQuaCIKQEAgLTU0LDkgKzU1LDcgQEAgc3RydWN0IENvbXBpbGF0
aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiB3
YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29u
dGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5
TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3Vu
dCogPSBudWxscHRyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0
ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxh
dGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGll
clVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmNwcAppbmRleCAyMmVkZDE2Li5kMGVhZmExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIldhc21C
M0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNpbmNsdWRlICJXYXNt
Q2FsbGVlLmgiCkBAIC01MywyMSArNTEsMjEgQEAgbmFtZXNwYWNlIFdhc21CQlFQbGFuSW50ZXJu
YWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1CQlFQbGFuOjpC
QlFQbGFuKFZNKiB2bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29y
aywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQmFzZSh2bSwgV1RGTW92ZShpbmZvKSwg
V1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1v
ZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0
YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBCYXNlKGNvbnRleHQsIFdU
Rk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVy
KSwgdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKQog
ICAgICwgbV9hc3luY1dvcmsod29yaykKIHsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihWTSogdm0s
IFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNr
JiYgdGFzaykKLSAgICA6IEJCUVBsYW4odm0sIGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRp
b24oV1RGTW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFzaykpCitCQlFQbGFuOjpCQlFQ
bGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3Jr
IHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9u
KQorICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigqbmV3IE1vZHVsZUluZm9ybWF0aW9u
KFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVt
YmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBtX3N0YXRlID0gU3Rh
dGU6OkluaXRpYWw7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9u
VGFzayYmIHRhc2spCi0gICAgOiBCYXNlKHZtLCBzb3VyY2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92
ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3QgdWludDhf
dCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlv
blRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBzb3VyY2UsIHNvdXJjZUxlbmd0aCwg
V1RGTW92ZSh0YXNrKSkKICAgICAsIG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCiAgICAgLCBtX2Fz
eW5jV29yayh3b3JrKQogewpAQCAtMjY5LDcgKzI2Nyw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGls
ZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAKICAgICAgICAgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJR
VGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRy
OwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZSht
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0
aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25J
bmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2Rl
OjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOworICAgICAgICBhdXRvIHBhcnNlQW5k
Q29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVu
Y3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFko
IXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKQEAgLTI4NSw3ICsyODMsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVG
dW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogCiAgICAgICAgIGlmIChtX2V4cG9y
dGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgY3JlYXRl
SlNUb1dhc21XcmFwcGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgc2ln
bmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KSk7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVu
Y3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9jb21waWxhdGlvbkNvbnRleHRz
W2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1
bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9u
SW5kZXgpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdF
bnRyeSk7CiAgICAgICAgIH0KIApAQCAtMzE0LDE0ICszMTIsMTQgQEAgdm9pZCBCQlFQbGFuOjpj
b21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAg
ICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmIChhdXRvIGpzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IG1f
anNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IG1fZW1iZWRkZXJU
b1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxs
cHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAg
IEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkg
aW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlv
bkluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAganNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50
LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAg
ICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jb21w
aWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgICAg
ICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkphdmFTY3JpcHQtPldlYkFzc2Vt
Ymx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAogICAg
ICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cykp
OwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgK
aW5kZXggMzU5ZjEzYi4uYzZlYTQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5oCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
ICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24u
aCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgog
I2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRl
IDx3dGYvU2hhcmVkVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQxLDggKzQxLDYgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBDYWxsTGlua0luZm87Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNz
IEpTUHJvbWlzZURlZmVycmVkOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTUwLDEyICs0OCwx
MyBAQCBjbGFzcyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgogICAgIHVz
aW5nIEJhc2UgPSBQbGFuOwogICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxDb21w
aWxlLCBWYWxpZGF0aW9uIH07CisKICAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQg
bm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUg
YSByZWZlcmVuY2UgY3ljbGUuCi0gICAgQkJRUGxhbihWTSosIFJlZjxNb2R1bGVJbmZvcm1hdGlv
bj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
QkJRUGxhbihWTSosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNr
JiYpOworICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5j
V29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2Fz
bUV4Y2VwdGlvbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgVmVj
dG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgLy8gTm90ZTogVGhpcyBjb25z
dHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxk
aW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwogICAgIC8vIEZJWE1F
OiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBBc3lu
Y1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBs
YW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNr
JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAKICAgICBib29sIHBh
cnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIApAQCAtMTQxLDcgKzE0MCw3IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5cGVuYW1lIERlZmF1bHRIYXNo
PHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50
MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwg
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1
aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMy
X3Q+PiBtX2pzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwg
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1
aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMy
X3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9yPENvbXBp
bGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwogICAgIFZlY3RvcjxUaWVyVXBD
b3VudD4gbV90aWVyVXBDb3VudHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW5JbmxpbmVzLmgKaW5kZXggMWI4YjU2Zi4uNDQ0NzkwYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKQEAgLTM5LDEwICsz
OSwxMCBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNh
bGxiYWNrKQogICAgIEFTU0VSVCghZmFpbGVkKCkpOwogICAgIGZvciAodW5zaWduZWQgaW50ZXJu
YWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewogCi0gICAgICAg
IFJlZlB0cjxXYXNtOjpDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1
dG8ganNUb1dhc21GdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50
ZXJuYWxGdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAganNFbnRyeXBvaW50Q2FsbGVlID0g
V2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShqc1RvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50
KSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoanNUb1dhc21G
dW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGpzRW50cnlw
b2ludENhbGxlZS5nZXQoKSkpOworICAgICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWU7CisgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rp
b24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rp
b25JbmRleCkpIHsKKyAgICAgICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206
OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2lu
dCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVy
VG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIElu
dGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJu
YWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBCQlFQbGFuOjpp
bml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykKICAgICAgICAgUmVmPFdh
c206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0ZShX
VEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxv
Y2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7
CiAKLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGpzRW50
cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKKyAgICAgICAg
Y2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAppbmRleCA2N2NjZjVlLi40
OTEwYzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGlu
Zy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCkBA
IC0yOSw1OTYgKzI5LDE0IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCi0jaW5jbHVkZSAiSklU
RXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgotI2lu
Y2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgotI2luY2x1ZGUgIldhc21Db250ZXh0Lmgi
Ci0jaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAogdXNpbmcgSklUID0gQ0NhbGxIZWxwZXJzOwogCi1zdGF0aWMgdm9pZCBt
YXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQ
UlJlZyByZXN1bHQpCi17Ci0gICAgLy8gV2UncmUgY2FsbGluZyBvdXQgb2YgdGhlIGN1cnJlbnQg
V2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFuY2UgaGFzIGEgbGlzdCBvZiBhbGwgaXRz
IGltcG9ydCBmdW5jdGlvbnMuCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChyZXN1bHQpOwotICAg
IGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOwotfQotCi1FeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KcyhWTSog
dm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMg
ZnVuY3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZl
bnRpb24uCi0gICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCi0gICAgY29uc3QgV2FzbUNhbGxpbmdD
b252ZW50aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBjb25zdCBK
U0NDYWxsaW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7Ci0gICAg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKLSAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCk7Ci0gICAgSklUIGppdDsKLQotICAgIC8vIE5vdGU6IFdhc21CM0lSR2VuZXJhdG9y
IGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVlIHNhdmUuCi0gICAg
Ly8gSWYgd2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gY2hhbmdlIFdh
c21CM0lSR2VuZXJhdG9yLgotCi0gICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBj
YWxsaW5nIGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KLSAgICBBU1NFUlQoIWpz
Q0MubV9ncHJBcmdzLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFqc0NDLm1fZnByQXJncy5zaXplKCkp
OwotCi0gICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgaml0LnN0b3JlNjQoSklU
OjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQotCi0gICAgewotICAgICAgICBi
b29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOwotICAgICAgICBoYXNCYWRJNjRVc2UgfD0gc2lnbmF0
dXJlLnJldHVyblR5cGUoKSA9PSBJNjQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0g
MDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdOdW0pIHsKLSAgICAg
ICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAg
ICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAg
ICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgY2FzZSBJNjQ6
IHsKLSAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhh
c0JhZEk2NFVzZSkgewotICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICAgICAg
aml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotCi0gICAgICAgICAg
ICAvLyBTdG9yZSBDYWxsZWUuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgICAgICAgICAgaml0
LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxs
KCk7Ci0gICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwotCi0gICAg
ICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNt
Q29udGV4dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAgICAgICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmplY3QoKTsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhl
YywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0
dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFy
Z3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVm
ZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwotCi0gICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOwotICAgICAgICAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZhbGlkIGk2
NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gc2F2
ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4gV2UgdGhlcmVmb3JlIGRvbid0
IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB0aGUgd2FzbSBj
YWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KLSAgICBSZWdpc3RlclNldCBtaXNzaW5n
Q2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgIG1pc3NpbmdD
YWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKLSAgICBBU1NF
UlQobWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAoIU9wdGlvbnM6OnVz
ZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7Ci0gICAgICAgIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYXJnQ291bnQgKiBz
aXplb2YodWludDY0X3QpKTsKLSAgICAgICAgY2hhciogYnVmZmVyID0gYXJnQ291bnQgPyBzdGF0
aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IG51bGxwdHI7Ci0g
ICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFy
c2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBidWZmZXJPZmZzZXQgPSAwOwotICAg
ICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgY29uc3QgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7Ci0gICAgICAgIGppdC5zdWJQdHIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50
OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3Vt
ZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAg
IGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55
ZnVuYzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAg
ICAgIEdQUlJlZyBncHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwg
d2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdh
c21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOwotICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFy
Z3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAg
ICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCAr
PSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBq
aXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOwotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAgICAg
ICArK21hcnNoYWxsZWRHUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVn
OwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Mu
c2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21h
cnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJl
Z2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZw
clJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0Lmxv
YWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0
KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lz
dGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9h
dFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJs
ZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChz
Y3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAgICAgICAgICAgICAgICsrbWFy
c2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxl
ZEZQUnNdLmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJz
IGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0g
RlBSSW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJs
ZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnBy
UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZw
clJlZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQ
UiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRG
UFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgfQotICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaWYg
KGFyZ0NvdW50KSB7Ci0gICAgICAgICAgICAvLyBUaGUgR0Mgc2hvdWxkIG5vdCBsb29rIGF0IHRo
aXMgYnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFsdWVzLgotICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NP
ZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50NjRfdCAoKmNhbGxGdW5jKShFeGVj
U3RhdGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCopID0KLSAgICAgICAg
ICAgIFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjYWxsZWUsIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAtPiB1aW50NjRfdCB7IAotICAgICAg
ICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAgICAgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAgICAgICAgICBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgewotICAgICAgICAgICAgICAgICAgICBUeXBl
IGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBhcmc7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewot
ICAgICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
RnVuYzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSTMyOgotICAgICAgICAgICAg
ICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYnVmZmVyW2Fy
Z051bV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEYzMjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihidWZmZXJb
YXJnTnVtXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICAgICAg
ICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+bWV0aG9kVGFibGUoKnZtKS0+Z2V0
Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmlu
ZWQoKSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCAwKTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlYWxSZXN1bHQ7Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAg
ICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBWb2lkOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IEkzMjogewotICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQudG9JbnQzMihleGVjKSkpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocmVzdWx0LnRvTnVtYmVy
KGV4ZWMpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxSZXN1bHQ7Ci0gICAg
ICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
Q2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKLSAgICAgICAgCi0gICAgICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGpp
dCwgaW1wb3J0SW5kZXgsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyA+PSA0LCAiV2UgcmVseSBv
biB0aGlzIHdpdGggdGhlIGNhbGwgYmVsb3cuIik7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihzaWduYXR1cmVJbmRleCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihidWZm
ZXIpKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgYXV0byBub0V4
Y2VwdGlvbiA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6Oklu
dmVydGVkRXhjZXB0aW9uQ2hlY2spOwotCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBoZXJlLgotICAg
ICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigq
dm0pOwotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUq
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAg
ICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfTsKLSAgICAgICAg
YXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgaml0Lmp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwotICAg
ICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBGNjQ6
IHsKLSAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAgICAgaml0LnJldCgpOwotCi0gICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRv
QWxsb2NhdGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0Zh
aWx1cmU6Ok91dE9mTWVtb3J5KTsKLQotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY2Fs
bEZ1bmMpOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2FsbCwgZG9VbndpbmRp
bmcpOwotCi0gICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNz
ZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUu
dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOwotICAgIH0KLQotICAgIC8vIE5vdGU6IFdlIGRv
bid0IG5lZWQgdG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUgc2luY2UgV2FzbUIzSVJHZW5l
cmF0b3IKLSAgICAvLyB3aWxsIGRvIHRoZSBzdGFjayBjaGVjayBmb3IgdXMuIFdoZW5ldmVyIGl0
IGRldGVjdHMgdGhhdCBpdCBtaWdodCBtYWtlCi0gICAgLy8gYSBjYWxsIHRvIHRoaXMgdGh1bmss
IGl0J2xsIG1ha2Ugc3VyZSBpdHMgc3RhY2sgY2hlY2sgaW5jbHVkZXMgc3BhY2UKLSAgICAvLyBm
b3IgdXMgaGVyZS4KLQotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IGFy
Z0NvdW50ICsgMTsgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1lbnQuCi0gICAgY29uc3QgdW5z
aWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0
ZXJzICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0
ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgY29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5
dGVzRm9yQ2FsbCk7Ci0gICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHN0YWNrT2Zmc2V0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICBKSVQ6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLQotICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9v
cHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMg
b24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBzaWduYXR1cmVz
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3Ci0gICAgCi0g
ICAgLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUgaW50ZWdlciBwYXJhbWV0ZXJzLCBmcmVlaW5nIHVw
IHRoZWlyIHJlZ2lzdGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4KLSAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMg
PSAwOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6
OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAg
ICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAg
ICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAg
ICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAg
ICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICBjYXNl
IEk2NDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBI
YW5kbGVkIGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6IHsKLSAgICAgICAgICAgICAgICBH
UFJSZWcgZ3ByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkR1BScyA8IHdhc21D
Qy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSB3YXNtQ0Mu
bV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVu
dHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAg
ICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKLSAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGZyT2Zmc2V0KSwgZ3ByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6
ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKyttYXJz
aGFsbGVkR1BSczsKLSAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVn
LCBncHJSZWcpOyAvLyBDbGVhciBub24taW50MzIgYW5kIG5vbi10YWcgYml0cy4KLSAgICAgICAg
ICAgICAgICBqaXQuYm94SW50MzIoZ3ByUmVnLCBKU1ZhbHVlUmVncyhncHJSZWcpLCBEb05vdEhh
dmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgY2Fs
bGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgICAg
IGNhc2UgRjY0OgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYmVsb3cuCi0g
ICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzID49IHdhc21DQy5tX2ZwckFyZ3Muc2l6
ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwot
ICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgY2FsbGVl
RnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIC8v
IEludGVnZXIgcmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNwaWxsZWQsIHRoZXNlIGFyZSBu
b3cgYXZhaWxhYmxlLgotICAgICAgICBHUFJSZWcgZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgYm9vbCBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVP
ZmZzZXQgPSBmYWxzZTsKLSAgICAgICAgYXV0byBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNl
dCA9IFsmaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0LCAmaml0XSAoR1BSUmVnIGRl
c3QpIHsKLSAgICAgICAgICAgIGlmICghaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0
KSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChEb3VibGVFbmNvZGVPZmZzZXQgPT0g
MWxsIDw8IDQ4LCAiY29kZWdlbiBhc3N1bWVzIHRoaXMgYmVsb3ciKTsKLSAgICAgICAgICAgICAg
ICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW0zMigxKSwgZGVzdCk7Ci0gICAgICAgICAgICAgICAg
aml0LmxzaGlmdDY0KEpJVDo6VHJ1c3RlZEltbTMyKDQ4KSwgZGVzdCk7Ci0gICAgICAgICAgICAg
ICAgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfTsKLQotICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7Ci0g
ICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgY2Fs
bGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwg
YXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1
cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewotICAg
ICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAg
Y2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KLSAgICAgICAgICAg
IGNhc2UgSTMyOgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYWJvdmUuCi0g
ICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdhc21DQy5tX2dwckFyZ3Muc2l6
ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwot
ICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAgICAgICAgICAgICAgY2FsbGVl
RnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsK
LSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNp
emUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJz
aGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdp
c3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJS
ZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
RmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCks
IGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rl
cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRU
b0RvdWJsZShmcHJSZWcsIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LnB1cmlmeU5hTihm
cHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0
Y2gpOwotICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJs
ZUVuY29kZU9mZnNldEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJsZUVu
Y29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
c2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOwotICAg
ICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAg
ICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgICAgICAgICAgRlBS
UmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0Mu
bV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1f
ZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRz
LCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAg
ICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQu
cHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZw
clJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVP
ZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRk
NjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBq
aXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lz
dGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICBHUFJSZWcgaW1wb3J0
SlNDZWxsR1BSUmVnID0gR1BSSW5mbzo6cmVnVDA7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiBy
ZWdUMCBmb3Igc2xvdyBwYXRoIGJlbG93LgotICAgIEFTU0VSVCghd2FzbUNDLm1fY2FsbGVlU2F2
ZVJlZ2lzdGVycy5nZXQoaW1wb3J0SlNDZWxsR1BSUmVnKSk7Ci0KLSAgICBtYXRlcmlhbGl6ZUlt
cG9ydEpTQ2VsbChqaXQsIGltcG9ydEluZGV4LCBpbXBvcnRKU0NlbGxHUFJSZWcpOwotCi0gICAg
aml0LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKLSAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMp
LCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOwotICAg
IGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSwgY2FsbGVlRnJh
bWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhl
IHdhc20gcmV0dXJuIHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4OAotCi0gICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9zLmFkZCgpOwotICAgIGNhbGxM
aW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdpbigpLCBpbXBv
cnRKU0NlbGxHUFJSZWcpOwotICAgIEpJVDo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0g
ICAgSklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlKDApOwotICAgIEpJVDo6SnVt
cCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBpbXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ssIGluaXRpYWxSaWdodFZhbHVl
KTsKLSAgICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKLSAgICBKSVQ6Okp1
bXAgZG9uZSA9IGppdC5qdW1wKCk7Ci0gICAgc2xvd1BhdGgubGluaygmaml0KTsKLSAgICAvLyBD
YWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExp
bmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMi4KLSAgICBKSVQ6OkNhbGwgc2xvd0NhbGwgPSBq
aXQubmVhckNhbGwoKTsKLSAgICBkb25lLmxpbmsoJmppdCk7Ci0KLSAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKLQotICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVy
blR5cGUoKSkgewotICAgIGNhc2UgVm9pZDoKLSAgICAgICAgLy8gRGlzY2FyZC4KLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGdW5jOgotICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgLy8gRm9y
IHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5cGVzIGluIHRo
ZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZhbGlkYXRpb24g
ZXJyb3IuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSTY0OiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAgfQotICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93UGF0aDsKLQotICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVt
YmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7Ci0gICAgICAg
IGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAg
ICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0g
aml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJ
ZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBpbnQzMl90ICgqY29udmVydFRvSTMyKShFeGVj
U3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50
MzJfdCB7IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIHJldHVy
biB2LnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBjb252ZXJ0VG9JMzIpOwotICAgICAgICB9KTsKLQotICAgICAgICBkb25lLmxpbmso
JmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEYzMjogewotICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIGF1dG8gbm90QU51bWJlciA9IGpp
dC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFn
UmVnaXN0ZXJzKTsKLSAgICAgICAgYXV0byBpc0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMy
KEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0
ZXJzKTsKLSAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKLSAgICAgICAgaml0LnNpZ25FeHRlbmQz
MlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
Ci0gICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5tb3ZlKEpJ
VDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIp
OwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBqaXQuY29udmVy
dERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgbm90
QU51bWJlci5saW5rKCZqaXQpOwotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2Vw
dGlvbigqdm0pKTsKLQotICAgICAgICBmbG9hdCAoKmNvbnZlcnRUb0YzMikoRXhlY1N0YXRlKiwg
SlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGZsb2F0IHsgCi0g
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgfTsKLSAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRjY0OiB7
Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgYXV0byBub3RB
TnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBE
b05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5j
aElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhh
dmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgotICAgICAgICBqaXQu
c2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBw
ZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7Ci0gICAgICAg
IGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAg
ICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmpp
dCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBl
eGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0g
ICAgICAgIGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7IAotICAgICAgICAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIHJldHVybiB2LnRvTnVtYmVyKGV4ZWMpOwotICAg
ICAgICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjY0KTsK
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgaml0
LnJldCgpOwotCi0gICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1wdHkoKSkgewotICAgICAgICBl
eGNlcHRpb25DaGVja3MubGluaygmaml0KTsKLSAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgaml0Lm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAg
IGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5k
bGVyKCp2bSk7Ci0KLSAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtd
IChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgQVNT
RVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOwotICAgICAgICB9KTsKLSAgICB9Ci0K
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9B
bGxvY2F0ZSgpKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJl
OjpPdXRPZk1lbW9yeSk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlv
blB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlv
bihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0No
ZWNrKSk7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKLSAgICBjYWxsTGlua0luZm8tPnNldENh
bGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhl
cik7Ci0KLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJs
eS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Ci19Ci0KIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiB7
CiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKQEAgLTYzMywyNCArNTEsMjMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRl
eCkKICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IHNjcmF0Y2gpOwogICAg
IEdQUlJlZyBzaXplUmVnQXNTY3JhdGNoID0gc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyOwogCi0g
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8Q29udGV4dCwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlPjo6dmFsdWUsICJUaGlzIGlzIGFzc3VtZWQgaW4gdGhlIGNvZGUgYmVsb3cuIik7CiAgICAg
Ly8gQjMncyBjYWxsIGNvZGVnZW4gZW5zdXJlcyB0aGF0IHRoZSBKU0NlbGwgaXMgYSBXZWJBc3Nl
bWJseUZ1bmN0aW9uLgotICAgIGppdC5sb2FkV2FzbUNvbnRleHQoc2l6ZVJlZ0FzU2NyYXRjaCk7
IC8vIE9sZCBJbnN0YW5jZSoKLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0Fz
U2NyYXRjaCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGlt
cG9ydEluZGV4KSksIHNjcmF0Y2gpOwotCi0gICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXZWJBc3Nl
bWJseS5JbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0LiBUaGUgY2FsbGVyIHdpbGwg
dGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgotICAgIGppdC5sb2FkUHRy
KEpJVDo6QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZkluc3Rh
bmNlKCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAgIGppdC5zdG9yZVdhc21Db250
ZXh0KGJhc2VNZW1vcnkpOworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShzaXplUmVn
QXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgorICAgIC8vIEdldCB0aGUgY2FsbGVlJ3MgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UgYW5kIHNldCBpdCBhcyBXYXNtQ29udGV4dCdzIGluc3RhbmNlLiBU
aGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgor
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoaW1wb3J0SW5kZXgpKSwgYmFzZU1l
bW9yeSk7IC8vIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSouCisgICAgLy8gV2hpbGUgd2UncmUgYWNj
ZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IHNvIHdl
IGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50
cnlwb2ludChpbXBvcnRJbmRleCkpLCBzY3JhdGNoKTsgLy8gV2FzbTo6V2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24uCisgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5
KTsKIAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2l6ZVJlZ0Fz
U2NyYXRjaCk7CiAgICAgaml0LnN0b3JlUHRyKHNpemVSZWdBc1NjcmF0Y2gsIEpJVDo6QWRkcmVz
cyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tM
aW1pdCgpKSk7CiAKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0
IGFsbCBXZWJBc3NlbWJseS5JbnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBT
ZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVt
b3J5IHNpemUgcmVnaXN0ZXJzLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVt
b3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5
KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkp
LCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICBBU1NFUlQoIXNpemVSZWdzWzBd
LnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAw
LCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAu
Ci0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVt
b3J5IHNpemUuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbU1l
bW9yeTo6dm9pZCouCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdh
c206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAv
LyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1l
bW9yeTo6dm9pZCouCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIgIT0gYmFz
ZU1lbW9yeSk7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIgIT0gc2Ny
YXRjaCk7CkBAIC02NTgsNyArNzUsNiBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYs
IEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIH0K
IAogICAgIC8vIFRhaWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUgV2ViQXNzZW1ibHkgZnVuY3Rpb24u
Ci0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rp
b246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIHNjcmF0Y2gpOwogICAg
IGppdC5sb2FkUHRyKHNjcmF0Y2gsIHNjcmF0Y2gpOwogICAgIGppdC5qdW1wKHNjcmF0Y2gpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaAppbmRleCA0ZTI2MmJhLi5m
ZWM2YmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGlu
Zy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSAr
MjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRp
b24uaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKLSNpbmNsdWRl
IDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNDQsNyArNDIsNiBAQCBlbnVtIGNsYXNzIEJpbmRpbmdGYWlsdXJlIHsKIH07CiAKIEV4
cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20o
dW5zaWduZWQgaW1wb3J0SW5kZXgpOwotRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBC
aW5kaW5nRmFpbHVyZT4gd2FzbVRvSnMoVk0qLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJ
bmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29k
ZUJsb2NrLmNwcAppbmRleCA3MGZlZmIwLi5lNTEzNjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcApAQCAtMzEsMjAgKzMxLDMxIEBACiAKICNpbmNs
dWRlICJXYXNtQkJRUGxhbklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5j
bHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhNZW1vcnlN
b2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKK1JlZjxDb2Rl
QmxvY2s+IENvZGVCbG9jazo6Y3JlYXRlKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9k
ZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBDcmVhdGVFbWJlZGRlcldy
YXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dh
c21FeGNlcHRpb24pCit7CisgICAgc2l6ZV90IGltcG9ydEZ1bmN0aW9uQ291bnQgPSBtb2R1bGVJ
bmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgYXV0byogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBmYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplKGltcG9ydEZ1bmN0aW9uQ291bnQp
KSkgQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uLCBXVEZNb3ZlKGNy
ZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpbXBvcnRGdW5jdGlvbkNvdW50OyArK2kpCisgICAgICAgIHJlc3VsdC0+
aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGkpID0gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKnJlc3VsdCk7Cit9CisKK0NvZGVCbG9jazo6Q29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQs
IE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBD
cmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4
Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBtX2NhbGxlZUNvdW50KG1vZHVsZUlu
Zm9ybWF0aW9uLmludGVybmFsRnVuY3Rpb25Db3VudCgpKQogICAgICwgbV9tb2RlKG1vZGUpCiB7
CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7Ci0gICAgbV9wbGFu
ID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKG51bGxwdHIsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRp
b24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFj
a1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFZN
KiwgUGxhbiYpIHsKKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0
LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0
ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgpKSB7CiAgICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgICAg
ICBtX3BsYW4gPSBudWxscHRyOworICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY2LDEwICs3NywxMCBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBt
b2R1bGVJbmZvcm1hdGlvbikKICAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFu
LT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOwogICAgICAgICBtX3RpZXJVcENvdW50cyA9IG1f
cGxhbi0+dGFrZVRpZXJVcENvdW50cygpOwogCi0gICAgICAgIG1fcGxhbiA9IG51bGxwdHI7Ci0g
ICAgfSkpKTsKLQorICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAgfSksIFdU
Rk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7CiAgICAg
bV9wbGFuLT5zZXRNb2RlKG1vZGUpOworCiAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjplbnN1
cmVXb3JrbGlzdCgpOwogICAgIC8vIE5vdGUsIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGVucXVldWUg
dGhlIHBsYW4sIHRoZXJlIGlzIGEgY2hhbmNlIHRoZSBhYm92ZSBjYWxsYmFjayB3aWxsIGJlIGNh
bGxlZC4KICAgICB3b3JrbGlzdC5lbnF1ZXVlKG1ha2VSZWYoKm1fcGxhbi5nZXQoKSkpOwpAQCAt
OTIsNyArMTAzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OndhaXRVbnRpbEZpbmlzaGVkKCkKICAgICAv
LyBlbHNlLCBpZiB3ZSBkb24ndCBoYXZlIGEgcGxhbiwgd2UncmUgYWxyZWFkeSBjb21waWxlZC4K
IH0KIAotdm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRp
b25DYWxsYmFjayYmIHRhc2spCit2b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKENvbnRleHQq
IGNvbnRleHQsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiB7CiAgICAgUmVmUHRy
PFBsYW4+IHBsYW47CiAgICAgewpAQCAtMTA0LDEyICsxMTUsMTEgQEAgdm9pZCBDb2RlQmxvY2s6
OmNvbXBpbGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiAg
ICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8ga2VlcCBhIFJlZlB0ciBvbiB0aGUgUGxhbiBiZWNh
dXNlIHRoZSB3b3JrbGlzdCB3aWxsIGtlZXAKICAgICAgICAgLy8gYSBSZWZQdHIgb24gdGhlIFBs
YW4gdW50aWwgdGhlIHBsYW4gZmluaXNoZXMgbm90aWZ5aW5nIGFsbCBvZiBpdHMgY2FsbGJhY2tz
LgogICAgICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsKLSAgICAg
ICAgcGxhbi0+YWRkQ29tcGxldGlvblRhc2sodm0sIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2Fs
bGJhY2tUeXBlPihbdGhpcywgdGFzayA9IFdURk1vdmUodGFzayksIHByb3RlY3RlZFRoaXMgPSBX
VEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0qIHZtLCBQbGFuJikgewotICAgICAgICAgICAgQVNT
RVJUKHZtKTsKLSAgICAgICAgICAgIHRhc2stPnJ1bigqdm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAg
ICAgICAgcGxhbi0+YWRkQ29tcGxldGlvblRhc2soY29udGV4dCwgY3JlYXRlU2hhcmVkVGFzazxQ
bGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92ZSh0YXNrKSwgcHJvdGVjdGVk
VGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgeworICAgICAgICAgICAgdGFz
ay0+cnVuKG1ha2VSZWYoKnRoaXMpKTsKICAgICAgICAgfSkpOwogICAgIH0gZWxzZQotICAgICAg
ICB0YXNrLT5ydW4odm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAgICAgdGFzay0+cnVuKG1ha2VS
ZWYoKnRoaXMpKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1lbW9yeU1vZGUg
bWVtb3J5TW9kZSkKQEAgLTEzMCw2ICsxNDAsMTMgQEAgYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRv
UnVuKE1lbW9yeU1vZGUgbWVtb3J5TW9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKwordm9p
ZCBDb2RlQmxvY2s6OnNldENvbXBpbGF0aW9uRmluaXNoZWQoKQoreworICAgIG1fcGxhbiA9IG51
bGxwdHI7CisgICAgbV9jb21waWxhdGlvbkZpbmlzaGVkLnN0b3JlKHRydWUpOworfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IDJkYmY3ZTQu
LjAyMDEwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgK
QEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNs
dWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KQEAgLTM3LDExICszOCwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgQ2FsbGVlOworc3RydWN0IENv
bnRleHQ7CiBjbGFzcyBCQlFQbGFuOwogY2xhc3MgT01HUGxhbjsKIHN0cnVjdCBNb2R1bGVJbmZv
cm1hdGlvbjsKQEAgLTUxLDIwICs1MSw0MiBAQCBlbnVtIGNsYXNzIE1lbW9yeU1vZGUgOiB1aW50
OF90OwogICAgIAogY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PENvZGVCbG9jaz4gewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0m
LCBSZWY8Q29kZUJsb2NrPiYmKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFJlZjxD
b2RlQmxvY2s+JiYpOwogICAgIHVzaW5nIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayA9IFJlZlB0
cjxXVEY6OlNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBlPj47Ci0gICAgc3RhdGljIFJlZjxDb2RlQmxv
Y2s+IGNyZWF0ZShNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZv
cm1hdGlvbikKKyAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlKENvbnRleHQqLCBNZW1v
cnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJv
d1dhc21FeGNlcHRpb24pOworCisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydFN0dWJz
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KHZvaWQqKT4oc2l6ZW9mKENvZGVCbG9jaykpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3Qg
YWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IGZ1bmN0aW9uSW1wb3J0Q291bnQpCisgICAg
eworICAgICAgICByZXR1cm4gKG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikg
KiBmdW5jdGlvbkltcG9ydENvdW50KS51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICB2b2lkKiYg
aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29kZUJsb2NrKG1vZGUsIG1vZHVsZUluZm9ybWF0
aW9uKSk7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZvaWQqKj4oYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGltcG9ydElu
ZGV4KSk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFdhc21U
b0VtYmVkZGVyU3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVy
biBvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogaW1wb3J0SW5kZXg7Cisg
ICAgfQorCisgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbVRvSlNDYWxs
U3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChydW5uYWJsZSgpKTsKKyAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIo
aW1wb3J0SW5kZXgpOwogICAgIH0KIAogICAgIHZvaWQgd2FpdFVudGlsRmluaXNoZWQoKTsKLSAg
ICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsKKyAg
ICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0KiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYp
OwogCiAgICAgYm9vbCBjb21waWxhdGlvbkZpbmlzaGVkKCkKICAgICB7Ci0gICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuICFtX3BsYW47CisgICAg
ICAgIHJldHVybiBtX2NvbXBpbGF0aW9uRmluaXNoZWQubG9hZCgpOwogICAgIH0KICAgICBib29s
IHJ1bm5hYmxlKCkgeyByZXR1cm4gY29tcGlsYXRpb25GaW5pc2hlZCgpICYmICFtX2Vycm9yTWVz
c2FnZTsgfQogCkBAIC03OCw5ICsxMDAsMTIgQEAgcHVibGljOgogICAgIH0KIAogICAgIHVuc2ln
bmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3dhc21Ub1dhc21FeGl0
U3R1YnMuc2l6ZSgpOyB9CisgICAgCisgICAgLy8gVGhlc2UgdHdvIGNhbGxlZSBnZXR0ZXJzIGFy
ZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVsYXRlZC4KIAogICAg
IENhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbklt
cG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5k
ZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKIApAQCAtOTAsNiArMTE1LDcgQEAgcHVi
bGljOgogICAgIH0KICAgICBDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBB
U1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJ
bmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICAg
ICAgaWYgKG1fb3B0aW1pemVkQ2FsbGVlc1tjYWxsZWVJbmRleF0pCkBAIC0xMTcsNyArMTQzLDgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKIAotICAgIENv
ZGVCbG9jayhNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYpOworICAgIENvZGVCbG9jayhD
b250ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mLCBDcmVhdGVFbWJlZGRlcldy
YXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICB2b2lkIHNldENvbXBpbGF0aW9uRmlu
aXNoZWQoKTsKICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50OwogICAgIE1lbW9yeU1vZGUgbV9t
b2RlOwogICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9jYWxsZWVzOwpAQCAtMTI4LDYgKzE1
NSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
Pj4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBSZWZQdHI8QkJRUGxhbj4gbV9wbGFuOwor
ICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5pc2hlZCB7IGZhbHNlIH07CiAg
ICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIExvY2sgbV9sb2NrOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAppbmRleCBmZWExNmRlLi5lMDU5ZmMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwCkBAIC0yOCwz
MCArMjgsNDEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5o
IgorCiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotQ29udGV4dCogbG9hZENvbnRleHQoVk0mIHZt
KQorYm9vbCBDb250ZXh0Ojp1c2VGYXN0VExTKCkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklU
KQorICAgIHJldHVybiBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQoKTsKKyNlbHNl
CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSog
Q29udGV4dDo6bG9hZCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBp
ZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxD
b250ZXh0Kj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZ
KSk7CisgICAgaWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqPihfcHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dB
U01fQ09OVEVYVF9LRVkpKTsKICNlbmRpZgotICAgIHJldHVybiB2bS53YXNtQ29udGV4dDsKKyAg
ICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLXZvaWQgc3RvcmVDb250ZXh0KFZNJiB2bSwgQ29udGV4
dCogY29udGV4dCkKK3ZvaWQgQ29udGV4dDo6c3RvcmUoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
LCB2b2lkKiBzb2Z0U3RhY2tMaW1pdCkKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAg
IGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICBfcHRocmVhZF9zZXRzcGVjaWZp
Y19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVksIGJpdHdpc2VfY2FzdDx2b2lkKj4oY29udGV4
dCkpOworICAgIGlmICh1c2VGYXN0VExTKCkpCisgICAgICAgIF9wdGhyZWFkX3NldHNwZWNpZmlj
X2RpcmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9jYXN0PHZvaWQqPihpKSk7CiAj
ZW5kaWYKLSAgICB2bS53YXNtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIGNvbnRleHQtPnNldENhY2hlZFN0YWNrTGltaXQodm0uc29mdFN0YWNrTGltaXQoKSk7
CisgICAgaW5zdGFuY2UgPSBpOworICAgIGlmIChpbnN0YW5jZSkKKyAgICAgICAgaW5zdGFuY2Ut
PnNldENhY2hlZFN0YWNrTGltaXQoc29mdFN0YWNrTGltaXQpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKaW5k
ZXggM2NmNjVmYi4uYzJiNTFkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29u
dGV4dC5oCkBAIC0yNywzNyArMjcsMjAgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAot
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIK
LQogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOworY2xhc3MgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLS8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRoaXMg
dG8gYmUgc29tZXRoaW5nIGVsc2UgYXQgc29tZSBwb2ludDoKLS8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAyNjAKLXVzaW5nIENvbnRleHQgPSBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U7Ci0KLWlubGluZSBib29sIHVzZUZhc3RUTFMoKQotewotI2lmIEVOQUJMRShG
QVNUX1RMU19KSVQpCi0gICAgcmV0dXJuIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdFRMUygp
OwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KK3N0cnVjdCBDb250ZXh0IHsK
KyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlIHsgbnVsbHB0ciB9OwogCi1pbmxp
bmUgYm9vbCB1c2VGYXN0VExTRm9yQ29udGV4dCgpCi17Ci0gICAgaWYgKHVzZUZhc3RUTFMoKSkK
LSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGxvYWQoKSBjb25z
dDsKKyAgICB2b2lkIHN0b3JlKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHZvaWQqIHNvZnRTdGFj
a0xpbWl0KTsKIAotQ29udGV4dCogbG9hZENvbnRleHQoVk0mKTsKLXZvaWQgc3RvcmVDb250ZXh0
KFZNJiwgQ29udGV4dCopOworICAgIHN0YXRpYyBib29sIHVzZUZhc3RUTFMoKTsKK307CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21FbWJlZGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUVtYmVkZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4Nzk0Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRl
ci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisKKyNpbmNs
dWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7CitjbGFz
cyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hvdWxkIGJlIFdhc206Oklu
c3RhbmNlLCBzbyBzaG91bGQgdXNlIGJlbG93LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIK
KworbmFtZXNwYWNlIFdhc20geworCitzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Oworc3RydWN0
IEludGVybmFsRnVuY3Rpb247CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CitjbGFzcyBTaWdu
YXR1cmU7CitzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsKKworLy8gQ3JlYXRlIHdyYXBw
ZXIgY29kZSB0byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNzZW1ibHkuCit1c2luZyBDcmVh
dGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIHVpbnQzMl90KT47CisKKy8vIENhbGxlZCBhcyBzb29uIGFzIGFuIGV4Y2VwdGlvbiBp
cyBkZXRlY3RlZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMgdG8gY29udGludWUgYXQuCit1
c2luZyBUaHJvd1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhlY1N0YXRlKiwgV2FzbTo6RXhj
ZXB0aW9uVHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4
IDJiMWQ4MjguLmNjMWU3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKIAogI2lu
Y2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5o
IgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogCisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAppbmRl
eCAzODEyODM2Li5lNWUwN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCkBAIC0yNyw4ICsyNyw2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCiB2b2lkIHJlZ2lzdGVy
Q29kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuaAppbmRleCBiMjIyMjE3Li5lN2IzZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCkBAIC00NCwxNCArNDQsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIEpTRnVuY3Rpb247Ci0KIG5hbWVzcGFjZSBCMyB7CiBjbGFzcyBDb21waWxhdGlv
bjsKIH0KIAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Owor
c3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOworCiBpbmxpbmUgYm9vbCBpc1ZhbHVlVHlwZShUeXBl
IHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUluc3RhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
NGJlMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUluc3RhbmNlLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21J
bnN0YW5jZS5oIgorCisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxl
SW5mb3JtYXRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIHsKK3NpemVfdCBnbG9iYWxNZW1vcnlC
eXRlU2l6ZShNb2R1bGUmIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gbW9kdWxlLm1vZHVsZUluZm9y
bWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworfQorfQorCitJbnN0
YW5jZTo6SW5zdGFuY2UoUmVmPE1vZHVsZT4mJiBtb2R1bGUpCisgICAgOiBtX21vZHVsZShXVEZN
b3ZlKG1vZHVsZSkpCisgICAgLCBtX2dsb2JhbHMoTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9j
KGdsb2JhbE1lbW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdldCgpKSkpCit7Cit9CisKK0luc3RhbmNl
Ojp+SW5zdGFuY2UoKSB7IH0KKworc2l6ZV90IEluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsb2JhbE1lbW9yeUJ5dGVTaXplKG1fbW9kdWxlLmdl
dCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3OGE3NAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCkBAIC0wLDAg
KzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21G
b3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5o
IgorI2luY2x1ZGUgIldhc21UYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CisKK2NsYXNzIEluc3RhbmNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEluc3Rh
bmNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJbnN0YW5jZT4gY3JlYXRlKFJlZjxNb2R1
bGU+JiYgbW9kdWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zdGFu
Y2UoV1RGTW92ZShtb2R1bGUpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluYWxpemVDcmVh
dGlvbihSZWY8Q29kZUJsb2NrPiYmIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIG1fY29kZUJs
b2NrID0gV1RGTW92ZShjb2RlQmxvY2spOworICAgIH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5JbnN0YW5jZSgpOworCisgICAgc2l6ZV90IGV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3Q7
CisKKyAgICBNb2R1bGUmIG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQorICAg
IE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KKyAgICBUYWJsZSog
dGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisKKyAgICBpbnQzMl90IGxvYWRJMzJH
bG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9Cisg
ICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xv
YmFscy5nZXQoKVtpXTsgfQorICAgIGZsb2F0IGxvYWRGMzJHbG9iYWwodW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMyR2xvYmFsKGkpKTsgfQorICAg
IGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9CisgICAgdm9pZCBzZXRHbG9iYWwodW5z
aWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQoKVtpXSA9IGJpdHM7IH0KKwor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZFN0YWNrTGltaXQpOyB9CisgICAgdm9p
ZCogY2FjaGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsg
fQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBsaW1pdCkgeyBtX2NhY2hlZFN0
YWNrTGltaXQgPSBsaW1pdDsgfQorCisgICAgZnJpZW5kIGNsYXNzIEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOyAvLyBGSVhNRSByZW1vdmUgdGhpcyBvbmNlIHJlZmFjdG9yZWQgaHR0cHM6Ly93
ZWJraXQub3JnL2IvMTc3NDcyLgorCitwcml2YXRlOgorICAgIEluc3RhbmNlKFJlZjxNb2R1bGU+
JiYpOworICAgIAorICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOworICAgIFJlZlB0cjxDb2RlQmxv
Y2s+IG1fY29kZUJsb2NrOworICAgIFJlZlB0cjxNZW1vcnk+IG1fbWVtb3J5OworICAgIFJlZlB0
cjxUYWJsZT4gbV90YWJsZTsKKyAgICBNYWxsb2NQdHI8dWludDY0X3Q+IG1fZ2xvYmFsczsKKyAg
ICB2b2lkKiBtX2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBjNWY0OGU5Li4wZGM3NzVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjgsMTMgKzI4LDE5
IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1
ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0Rh
dGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5o
PgorI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2su
aD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CiAKQEAgLTUxLDE5ICs1NywxOSBAQCBORVZFUl9JTkxJTkUgTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKSB7
IENSQQogc3RydWN0IE1lbW9yeVJlc3VsdCB7CiAgICAgZW51bSBLaW5kIHsKICAgICAgICAgU3Vj
Y2VzcywKLSAgICAgICAgU3VjY2Vzc0FuZEFzeW5jR0MsCi0gICAgICAgIFN5bmNHQ0FuZFJldHJ5
CisgICAgICAgIFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZSwKKyAgICAgICAgU3luY1Ry
eVRvUmVjbGFpbU1lbW9yeQogICAgIH07Ci0gICAgCisKICAgICBzdGF0aWMgY29uc3QgY2hhciog
dG9TdHJpbmcoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAg
ICAgIGNhc2UgU3VjY2VzczoKICAgICAgICAgICAgIHJldHVybiAiU3VjY2VzcyI7Ci0gICAgICAg
IGNhc2UgU3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICByZXR1cm4gIlN1Y2Nlc3NBbmRB
c3luY0dDIjsKLSAgICAgICAgY2FzZSBTeW5jR0NBbmRSZXRyeToKLSAgICAgICAgICAgIHJldHVy
biAiU3luY0dDQW5kUmV0cnkiOworICAgICAgICBjYXNlIFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQ
cmVzc3VyZToKKyAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNz
dXJlIjsKKyAgICAgICAgY2FzZSBTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OgorICAgICAgICAgICAg
cmV0dXJuICJTeW5jVHJ5VG9SZWNsYWltTWVtb3J5IjsKICAgICAgICAgfQogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk4
LDE3ICsxMDQsMTcgQEAgcHVibGljOgogICAgICAgICBNZW1vcnlSZXN1bHQgcmVzdWx0ID0gWyZd
IHsKICAgICAgICAgICAgIGF1dG8gaG9sZGVyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAg
ICAgIGlmIChtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50KQotICAgICAgICAgICAgICAg
IHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRy
eSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlS
ZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICB2b2lkKiByZXN1bHQgPSBHaWdhY2FnZTo6dHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoR2lnYWNh
Z2U6OlByaW1pdGl2ZSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CiAgICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KG51bGxwdHIs
IE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnkpOworICAgICAgICAgICAgICAgIHJldHVybiBN
ZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9tZW1vcmllcy5hcHBlbmQocmVzdWx0KTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdCgKICAgICAgICAg
ICAgICAgICByZXN1bHQsCi0gICAgICAgICAgICAgICAgbV9tZW1vcmllcy5zaXplKCkgPj0gbV9t
YXhDb3VudCAvIDIgPyBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3NBbmRBc3luY0dDIDogTWVtb3J5UmVz
dWx0OjpTdWNjZXNzKTsKKyAgICAgICAgICAgICAgICBtX21lbW9yaWVzLnNpemUoKSA+PSBtX21h
eENvdW50IC8gMiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJl
IDogTWVtb3J5UmVzdWx0OjpTdWNjZXNzKTsKICAgICAgICAgfSgpOwogICAgICAgICAKICAgICAg
ICAgaWYgKE9wdGlvbnM6OmxvZ1dlYkFzc2VtYmx5TWVtb3J5KCkpCkBAIC0xNTMsMTIgKzE1OSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdDo6S2luZCByZXN1bHQgPSBbJl0gewog
ICAgICAgICAgICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICAgICAg
aWYgKG1fcGh5c2ljYWxCeXRlcyArIGJ5dGVzID4gbWVtb3J5TGltaXQoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX3BoeXNpY2FsQnl0ZXMgKz0gYnl0ZXM7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChtX3BoeXNpY2FsQnl0ZXMgPj0gbWVtb3J5TGltaXQoKSAvIDIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9y
eVByZXNzdXJlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0
OjpTdWNjZXNzOwogICAgICAgICB9KCk7CkBAIC0yMDUsNyArMjExLDcgQEAgc3RhdGljIE1lbW9y
eU1hbmFnZXImIG1lbW9yeU1hbmFnZXIoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
Ym9vbCB0cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9jYXRlKQorYm9vbCB0cnlBbGxv
Y2F0ZShjb25zdCBGdW5jJiBhbGxvY2F0ZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiBu
b3RpZnlNZW1vcnlQcmVzc3VyZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiBzeW5jVHJ5
VG9SZWNsYWltTWVtb3J5KQogewogICAgIHVuc2lnbmVkIG51bVRyaWVzID0gMjsKICAgICBib29s
IGRvbmUgPSBmYWxzZTsKQEAgLTIxNCwxNCArMjIwLDE2IEBAIGJvb2wgdHJ5QW5kR0MoVk0mIHZt
LCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKICAgICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN1Y2Nl
c3M6CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICB2bS5o
ZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICBjYXNlIE1l
bW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAgICAg
aWYgKG5vdGlmeU1lbW9yeVByZXNzdXJlKQorICAgICAgICAgICAgICAgIG5vdGlmeU1lbW9yeVBy
ZXNzdXJlKCk7CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnk6CisgICAgICAgIGNhc2Ug
TWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OgogICAgICAgICAgICAgaWYgKGkg
KyAxID09IG51bVRyaWVzKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgdm0u
aGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICAgICAgaWYg
KHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpCisgICAgICAgICAgICAgICAgc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzAs
MzIgKzIzOCwzMiBAQCBib29sIHRyeUFuZEdDKFZNJiB2bSwgY29uc3QgRnVuYyYgYWxsb2NhdGUp
CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1jb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1l
bW9yeU1vZGUgbW9kZSkKK01lbW9yeTo6TWVtb3J5KCkKIHsKLSAgICBzd2l0Y2ggKG1vZGUpIHsK
LSAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNr
aW5nIjsKLSAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmci
OwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAi
IjsKIH0KIAotTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
LCBGdW5jdGlvbjx2b2lkKCk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIEZ1bmN0aW9uPHZvaWQo
KT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50
LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCiAgICAgOiBtX2luaXRpYWwoaW5p
dGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAgICwgbV9ub3RpZnlNZW1vcnlQcmVz
c3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVz
c3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkoc3RkOjpmb3J3YXJkPFdURjo6
RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkpCisgICAgLCBtX2dyb3dT
dWNjZXNzQ2FsbGJhY2soc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQs
IFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkKIHsKICAgICBBU1NFUlQoIWluaXRp
YWwuYnl0ZXMoKSk7CiAgICAgQVNTRVJUKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZyk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRp
bmcgIiwgKnRoaXMpOwogfQogCi1NZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1v
cnlNb2RlIG1vZGUpCitNZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2Rl
IG1vZGUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgRnVuY3Rpb248
dm9pZCgpPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZChQYWdl
Q291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1fbWVtb3J5
KG1lbW9yeSkKICAgICAsIG1fc2l6ZShpbml0aWFsLmJ5dGVzKCkpCiAgICAgLCBtX2luaXRpYWwo
aW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAgICwgbV9tYXBwZWRDYXBhY2l0
eShtYXBwZWRDYXBhY2l0eSkKICAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9ub3RpZnlNZW1v
cnlQcmVzc3VyZShzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlNZW1v
cnlQcmVzc3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkoc3RkOjpmb3J3YXJk
PFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkpCisgICAgLCBt
X2dyb3dTdWNjZXNzQ2FsbGJhY2soc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdl
Q291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkKIHsKICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CkBA
IC0yNzUsNyArMjgzLDEyIEBAIHN0YXRpYyB2b2lkIGNvbW1pdFplcm9QYWdlcyh2b2lkKiBzdGFy
dEFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKICNlbmRpZgogfQogCi1SZWZQdHI8TWVtb3J5
PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSkKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lbW9yeSgpKTsKK30KKyAgICAKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3Jl
YXRlKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgRnVuY3Rpb248dm9pZCgp
PiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVj
bGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBn
cm93U3VjY2Vzc0NhbGxiYWNrKQogewogICAgIEFTU0VSVChpbml0aWFsKTsKICAgICBSRUxFQVNF
X0FTU0VSVCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBi
ZSBndWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCkBAIC0yODMsMzMgKzI5NiwyNyBAQCBSZWZQdHI8
TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSkKICAgICBjb25zdCBzaXplX3QgaW5pdGlhbEJ5dGVzID0gaW5pdGlhbC5ieXRl
cygpOwogICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtQnl0ZXMgPSBtYXhpbXVtID8gbWF4aW11bS5i
eXRlcygpIDogMDsKIAotICAgIC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBw
cmlvciB0byBydW5uaW5nIGNvZGUuCi0gICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRv
bigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCiAgICAgaWYgKG1heGltdW0gJiYgIW1heGltdW1CeXRlcykgewog
ICAgICAgICAvLyBVc2VyIHNwZWNpZmllZCBhIHplcm8gbWF4aW11bSwgaW5pdGlhbCBzaXplIG11
c3QgYWxzbyBiZSB6ZXJvLgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5pdGlhbEJ5dGVzKTsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtLCBzdGQ6
OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSksIHN0
ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkp
LCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+
KGdyb3dTdWNjZXNzQ2FsbGJhY2spKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgZG9uZSA9IHRy
eUFuZEdDKAotICAgICAgICB2bSwKKyAgICBib29sIGRvbmUgPSB0cnlBbGxvY2F0ZSgKICAgICAg
ICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAgICByZXR1cm4gbWVt
b3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlUGh5c2ljYWxCeXRlcyhpbml0aWFsQnl0ZXMpOwotICAg
ICAgICB9KTsKKyAgICAgICAgfSwgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIHN5bmNUcnlUb1JlY2xh
aW1NZW1vcnkpOwogICAgIGlmICghZG9uZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIAogICAgIGNoYXIqIGZhc3RNZW1vcnkgPSBudWxscHRyOwogICAgIGlmIChPcHRpb25zOjp1
c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSkgewotICAgICAgICB0cnlBbmRHQygKLSAgICAgICAg
ICAgIHZtLAorICAgICAgICB0cnlBbGxvY2F0ZSgKICAgICAgICAgICAgIFsmXSAoKSAtPiBNZW1v
cnlSZXN1bHQ6OktpbmQgewogICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbWVtb3J5TWFu
YWdlcigpLnRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKCk7CiAgICAgICAgICAgICAgICAgZmFzdE1l
bW9yeSA9IGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2VQdHIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQua2luZDsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSwg
bm90aWZ5TWVtb3J5UHJlc3N1cmUsIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgIH0KICAg
ICAKICAgICBpZiAoZmFzdE1lbW9yeSkgewpAQCAtMzIwLDE1ICszMjcsMTUgQEAgUmVmUHRyPE1l
bW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0pCiAgICAgICAgIH0KIAogICAgICAgICBjb21taXRaZXJvUGFnZXMoZmFzdE1lbW9y
eSwgaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVtb3J5KGZhc3RNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5
dGVzKCksIE1lbW9yeU1vZGU6OlNpZ25hbGluZykpOworCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTWVtb3J5KGZhc3RNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIE1lbW9yeTo6ZmFzdE1h
cHBlZEJ5dGVzKCksIE1lbW9yeU1vZGU6OlNpZ25hbGluZywgc3RkOjpmb3J3YXJkPFdURjo6RnVu
Y3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RGOjpG
dW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdU
Rjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxi
YWNrKSkpOwogICAgIH0KICAgICAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Y3Jhc2hJZldl
YkFzc2VtYmx5Q2FudEZhc3RNZW1vcnkoKSkpCiAgICAgICAgIHdlYkFzc2VtYmx5Q291bGRudEdl
dEZhc3RNZW1vcnkoKTsKIAogICAgIGlmICghaW5pdGlhbEJ5dGVzKQotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0sIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6
RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxX
VEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxs
YmFjaykpKTsKICAgICAKICAgICB2b2lkKiBzbG93TWVtb3J5ID0gR2lnYWNhZ2U6OnRyeUFsaWdu
ZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RGOjpwYWdlU2l6ZSgpLCBpbml0aWFsQnl0
ZXMpOwogICAgIGlmICghc2xvd01lbW9yeSkgewpAQCAtMzM2LDcgKzM0Myw3IEBAIFJlZlB0cjxN
ZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgbWVtc2V0KHNs
b3dNZW1vcnksIDAsIGluaXRpYWxCeXRlcyk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1v
cnkoc2xvd01lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgaW5pdGlhbEJ5dGVzLCBNZW1vcnlNb2Rl
OjpCb3VuZHNDaGVja2luZykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KHNsb3dN
ZW1vcnksIGluaXRpYWwsIG1heGltdW0sIGluaXRpYWxCeXRlcywgTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcsIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9y
eVByZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRv
UmVjbGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50
LCBQYWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKIH0KIAogTWVtb3J5Ojp+TWVt
b3J5KCkKQEAgLTM0NSw3ICszNTIsMTAgQEAgTWVtb3J5Ojp+TWVtb3J5KCkKICAgICAgICAgbWVt
b3J5TWFuYWdlcigpLmZyZWVQaHlzaWNhbEJ5dGVzKG1fc2l6ZSk7CiAgICAgICAgIHN3aXRjaCAo
bV9tb2RlKSB7CiAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgotICAgICAgICAg
ICAgbXByb3RlY3QobV9tZW1vcnksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVB
RCB8IFBST1RfV1JJVEUpOworICAgICAgICAgICAgaWYgKG1wcm90ZWN0KG1fbWVtb3J5LCBNZW1v
cnk6OmZhc3RNYXBwZWRCeXRlcygpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAg
ICAgICAgICAgIGRhdGFMb2coIm1wcm90ZWN0IGZhaWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVWaXJ0dWFsUGFnZXMo
bV9tZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmc6CkBAIC0zNzEsMzQgKzM4MSw1MCBAQCBib29sIE1lbW9yeTo6YWRkcmVz
c0lzSW5BY3RpdmVGYXN0TWVtb3J5KHZvaWQqIGFkZHJlc3MpCiAgICAgcmV0dXJuIG1lbW9yeU1h
bmFnZXIoKS5jb250YWluc0FkZHJlc3MoYWRkcmVzcyk7CiB9CiAKLWJvb2wgTWVtb3J5Ojpncm93
KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCitFeHBlY3RlZDxQYWdlQ291bnQsIE1lbW9yeTo6
R3Jvd0ZhaWxSZWFzb24+IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgZGVsdGEpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobmV3U2l6ZSA+IFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSkpOworICAg
IGNvbnN0IFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBzaXplSW5QYWdlcygpOwogCi0g
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6Z3JvdyB0byAiLCBuZXdTaXplLCAiIGZy
b20gIiwgKnRoaXMpOworICAgIGlmICghZGVsdGEuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OkludmFsaWREZWx0YSk7CisgICAgCisgICAg
Y29uc3QgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCA9IG9sZFBhZ2VDb3VudCArIGRlbHRh
OworICAgIGlmICghbmV3UGFnZUNvdW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZSk7CiAKLSAgICBpZiAobWF4aW11bSgpICYm
IG5ld1NpemUgPiBtYXhpbXVtKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHN1
Y2Nlc3MgPSBbJl0gKCkgeworICAgICAgICBtX2dyb3dTdWNjZXNzQ2FsbGJhY2sob2xkUGFnZUNv
dW50LCBuZXdQYWdlQ291bnQpOworICAgICAgICByZXR1cm4gb2xkUGFnZUNvdW50OworICAgIH07
CiAKLSAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5dGVzKCk7CisgICAgaWYgKGRl
bHRhLnBhZ2VDb3VudCgpID09IDApCisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CisKKyAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93KCIsIGRlbHRhLCAiKSB0byAiLCBuZXdQ
YWdlQ291bnQsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgUkVMRUFTRV9BU1NFUlQobmV3UGFnZUNv
dW50ID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisKKyAgICBpZiAobWF4aW11bSgp
ICYmIG5ld1BhZ2VDb3VudCA+IG1heGltdW0oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKEdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW0pOworCisgICAgc2l6ZV90IGRl
c2lyZWRTaXplID0gbmV3UGFnZUNvdW50LmJ5dGVzKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZGVz
aXJlZFNpemUgPiBtX3NpemUpOwogICAgIHNpemVfdCBleHRyYUJ5dGVzID0gZGVzaXJlZFNpemUg
LSBtX3NpemU7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXh0cmFCeXRlcyk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gdHJ5QW5kR0MoCi0gICAgICAgIHZtLAorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2Nlc3Mg
PSB0cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAg
ICAgICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLnRyeUFsbG9jYXRlUGh5c2ljYWxCeXRl
cyhleHRyYUJ5dGVzKTsKLSAgICAgICAgfSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorICAgICAgICB9LCBtX25vdGlmeU1lbW9yeVByZXNzdXJl
LCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOworICAgIGlmICghYWxsb2NhdGlvblN1Y2Nlc3Mp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1v
cnkpOworCiAgICAgc3dpdGNoIChtb2RlKCkpIHsKICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1heGltdW0oKS5ieXRlcygpICE9
IDApOwotICAgICAgICAKKwogICAgICAgICB2b2lkKiBuZXdNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5
QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCksIGRlc2ly
ZWRTaXplKTsKICAgICAgICAgaWYgKCFuZXdNZW1vcnkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246Ok91
dE9mTWVtb3J5KTsKKwogICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXpl
KTsKICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PGNoYXIqPihuZXdNZW1vcnkpICsgbV9zaXpl
LCAwLCBkZXNpcmVkU2l6ZSAtIG1fc2l6ZSk7CiAgICAgICAgIGlmIChtX21lbW9yeSkKQEAgLTQw
Niw3ICs0MzIsNyBAQCBib29sIE1lbW9yeTo6Z3JvdyhWTSYgdm0sIFBhZ2VDb3VudCBuZXdTaXpl
KQogICAgICAgICBtX21lbW9yeSA9IG5ld01lbW9yeTsKICAgICAgICAgbV9tYXBwZWRDYXBhY2l0
eSA9IGRlc2lyZWRTaXplOwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CiAgICAgfQogICAgIGNhc2Ug
TWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbWVtb3J5
KTsKQEAgLTQxNSwxNiArNDQxLDE3IEBAIGJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNv
dW50IG5ld1NpemUpCiAgICAgICAgIAogICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWFy
a2luZyBXZWJBc3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiBhcyBy
ZWFkK3dyaXRlIGluIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyksICIsICIsIFJh
d1BvaW50ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFCeXRlcyksICIpIik7CiAgICAgICAgIGlmICht
cHJvdGVjdChzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUp
KSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IGluLXBs
YWNlIGZhaWxlZCAiLCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBkYXRhTG9nKCJtcHJvdGVjdCBmYWlsZWQ6ICIsIHN0cmVycm9yKGVycm5vKSwgIlxuIik7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAg
ICAgICAgIGNvbW1pdFplcm9QYWdlcyhzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMpOwogICAgICAg
ICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB9Ci0g
ICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CisgICAgfQorICAgIH0KKwogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBv
bGRQYWdlQ291bnQ7CiB9CiAKIHZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXggNjBhOWJiNy4u
M2YxOGMxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaApAQCAtMjcs
OCArMjcsMTEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldhc21N
ZW1vcnlNb2RlLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogCisjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTM4LDE4ICs0MSw4IEBA
IGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5h
bWVzcGFjZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1vZGVz
LiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLWVu
dW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3QgewotICAgIEJvdW5kc0NoZWNraW5nLAotICAg
IFNpZ25hbGluZwotfTsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IE51bWJlck9mTWVtb3J5TW9k
ZXMgPSAyOwotSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlN
b2RlKTsKLQogY2xhc3MgTWVtb3J5IDogcHVibGljIFJlZkNvdW50ZWQ8TWVtb3J5PiB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKQEAgLTU3LDggKzUwLDkgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3Ry
ZWFtJikgY29uc3Q7CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX21lbW9yeTsgfQotICAgIAotICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVhdGUo
Vk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pOworCisgICAgc3RhdGlj
IFJlZlB0cjxNZW1vcnk+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiBjcmVh
dGUoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgc3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNv
dW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAogICAgIH5NZW1vcnkoKTsKIApAQCAtNzUs
MjIgKzY5LDM0IEBAIHB1YmxpYzoKIAogICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQogCi0gICAgLy8gZ3JvdygpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9t
IHRoZSBKU1dlYkFzc2VtYmx5TWVtb3J5IG9iamVjdCBzaW5jZSB0aGF0IG9iamVjdCBuZWVkcyB0
byB1cGRhdGUgaW50ZXJuYWwKLSAgICAvLyBwb2ludGVycyB3aXRoIHRoZSBjdXJyZW50IGJhc2Ug
YW5kIHNpemUuCi0gICAgYm9vbCBncm93KFZNJiwgUGFnZUNvdW50KTsKKyAgICBlbnVtIGNsYXNz
IEdyb3dGYWlsUmVhc29uIHsKKyAgICAgICAgSW52YWxpZERlbHRhLAorICAgICAgICBJbnZhbGlk
R3Jvd1NpemUsCisgICAgICAgIFdvdWxkRXhjZWVkTWF4aW11bSwKKyAgICAgICAgT3V0T2ZNZW1v
cnksCisgICAgfTsKKyAgICBFeHBlY3RlZDxQYWdlQ291bnQsIEdyb3dGYWlsUmVhc29uPiBncm93
KFBhZ2VDb3VudCk7CiAKICAgICB2b2lkIGNoZWNrKCkgeyAgQVNTRVJUKCFkZWxldGlvbkhhc0Jl
Z3VuKCkpOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9tZW1vcnkpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3Np
emUpOyB9CisKIHByaXZhdGU6Ci0gICAgTWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1v
ZGUpOwotICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pOwor
ICAgIE1lbW9yeSgpOworICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBh
Z2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKKyAgICBNZW1vcnko
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1Ry
eVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50
KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbW92
ZSB0aGVzZSB0byB0aGUgaW5zdGFuY2UgdG8gYXZvaWQgYSBsb2FkIG9uIGluc3RhbmNlLT5pbnN0
YW5jZSBjYWxscy4KKyAgICAvLyBGSVhNRTogd2UgY2FjaGUgdGhlc2Ugb24gdGhlIGluc3RhbmNl
cyB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNlIGNhbGxzLiBUaGlzIHdpbGwg
cmVxdWlyZSB1cGRhdGluZyBhbGwgdGhlIGluc3RhbmNlcyB3aGVuIGdyb3cgaXMgY2FsbGVkLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MzA1CiAgICAgdm9pZCog
bV9tZW1vcnkgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKICAgICBQYWdl
Q291bnQgbV9pbml0aWFsOwogICAgIFBhZ2VDb3VudCBtX21heGltdW07CiAgICAgc2l6ZV90IG1f
bWFwcGVkQ2FwYWNpdHkgeyAwIH07CiAgICAgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2Rl
OjpCb3VuZHNDaGVja2luZyB9OworICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX25vdGlmeU1l
bW9yeVByZXNzdXJlOworICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX3N5bmNUcnlUb1JlY2xh
aW1NZW1vcnk7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4g
bV9ncm93U3VjY2Vzc0NhbGxiYWNrOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uY3BwCmluZGV4IGJmNTY1ZjAuLmI1YzM0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcApAQCAtNTcsNyArNTcsNyBA
QCBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAg
ICBzdGQ6OmNhbGxfb25jZShzdGF0aWNQaW5uZWRSZWdpc3RlckluZm9GbGFnLCBbXSAoKSB7CiAg
ICAgICAgIFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOwogICAg
ICAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBH
UFJSZWcgd2FzbUNvbnRleHRQb2ludGVyID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgR1BSUmVn
IHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyID0gSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdp
c3RlciwgYW5kIHdlIHNob3VsZCBhbGxvdyBkaWZmZXJlbnQKICAgICAgICAgLy8gICAgICAgIFdl
YkFzc2VtYmx5Lkluc3RhbmNlIHRvIGhhdmUgZGlmZmVyZW50IHBpbnMuIFJpZ2h0IG5vdyB3ZSB0
YWtlIGEgdmVjdG9yIHdpdGggb25seSBvbmUgZW50cnkuCkBAIC02NSwyNyArNjUsMjcgQEAgY29u
c3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpCiAgICAgICAg
IC8vICAgICAgICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjI5NTIKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZlBpbm5lZFJlZ2lzdGVycyA9IHBpbm5lZFNpemVzLnNpemUo
KSArIDE7Ci0gICAgICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAgICAgICAgaWYg
KCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgICAgICArK251bWJlck9mUGlubmVkUmVn
aXN0ZXJzOwogICAgICAgICBWZWN0b3I8R1BSUmVnPiBwaW5uZWRSZWdzID0gZ2V0UGlubmVkUmVn
aXN0ZXJzKG51bWJlck9mUGlubmVkUmVnaXN0ZXJzKTsKIAogICAgICAgICBiYXNlTWVtb3J5UG9p
bnRlciA9IHBpbm5lZFJlZ3MudGFrZUxhc3QoKTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9y
Q29udGV4dCgpKQotICAgICAgICAgICAgd2FzbUNvbnRleHRQb2ludGVyID0gcGlubmVkUmVncy50
YWtlTGFzdCgpOworICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAg
ICAgIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOwog
CiAgICAgICAgIEFTU0VSVChwaW5uZWRTaXplcy5zaXplKCkgPT0gcGlubmVkUmVncy5zaXplKCkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGlubmVkU2l6ZXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICBzaXplUmVnaXN0ZXJzLmFwcGVuZCh7IHBpbm5lZFJlZ3NbaV0sIHBp
bm5lZFNpemVzW2ldIH0pOwotICAgICAgICBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uY29uc3Ry
dWN0KFdURk1vdmUoc2l6ZVJlZ2lzdGVycyksIGJhc2VNZW1vcnlQb2ludGVyLCB3YXNtQ29udGV4
dFBvaW50ZXIpOworICAgICAgICBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uY29uc3RydWN0KFdU
Rk1vdmUoc2l6ZVJlZ2lzdGVycyksIGJhc2VNZW1vcnlQb2ludGVyLCB3YXNtQ29udGV4dEluc3Rh
bmNlUG9pbnRlcik7CiAgICAgfSk7CiAKICAgICByZXR1cm4gc3RhdGljUGlubmVkUmVnaXN0ZXJJ
bmZvLmdldCgpOwogfQogCi1QaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhW
ZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFz
ZU1lbW9yeVBvaW50ZXIsIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50ZXIpCitQaW5uZWRSZWdpc3Rl
ckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4m
JiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIsIEdQUlJlZyB3YXNtQ29u
dGV4dEluc3RhbmNlUG9pbnRlcikKICAgICA6IHNpemVSZWdpc3RlcnMoV1RGTW92ZShzaXplUmVn
aXN0ZXJzKSkKICAgICAsIGJhc2VNZW1vcnlQb2ludGVyKGJhc2VNZW1vcnlQb2ludGVyKQotICAg
ICwgd2FzbUNvbnRleHRQb2ludGVyKHdhc21Db250ZXh0UG9pbnRlcikKKyAgICAsIHdhc21Db250
ZXh0SW5zdGFuY2VQb2ludGVyKHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKQogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5o
CmluZGV4IDQyMzdiYWMuLjIzMzI5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IFBpbm5l
ZFNpemVSZWdpc3RlckluZm8gewogc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7CiAgICAgVmVj
dG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CiAgICAgR1BSUmVnIGJh
c2VNZW1vcnlQb2ludGVyOwotICAgIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50ZXI7CisgICAgR1BS
UmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwogICAgIHN0YXRpYyBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8mIGdldCgpOwogICAgIFBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVk
U2l6ZVJlZ2lzdGVySW5mbz4mJiwgR1BSUmVnLCBHUFJSZWcpOwogCkBAIC01Miw4ICs1Miw4IEBA
IHN0cnVjdCBQaW5uZWRSZWdpc3RlckluZm8gewogICAgIHsKICAgICAgICAgUmVnaXN0ZXJTZXQg
cmVzdWx0OwogICAgICAgICByZXN1bHQuc2V0KGJhc2VNZW1vcnlQb2ludGVyKTsKLSAgICAgICAg
aWYgKHdhc21Db250ZXh0UG9pbnRlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgcmVz
dWx0LnNldCh3YXNtQ29udGV4dFBvaW50ZXIpOworICAgICAgICBpZiAod2FzbUNvbnRleHRJbnN0
YW5jZVBvaW50ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJlc3VsdC5zZXQod2Fz
bUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwogICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmcpIHsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaW5mbyA6IHNpemVS
ZWdpc3RlcnMpCiAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChpbmZvLnNpemVSZWdpc3Rlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiYzk4NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcApAQCAtMCwwICsx
LDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NvbnN0IGNoYXIqIG1ha2VTdHJpbmco
TWVtb3J5TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIGNhc2Ug
TWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmYzg5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmgKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNFeHBvcnRNYWNyb3MuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworLy8gRklYTUU6IFdlIHNo
b3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjI2OTMKK2VudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3Qgewor
ICAgIEJvdW5kc0NoZWNraW5nLAorICAgIFNpZ25hbGluZworfTsKKworc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7CitKU19FWFBPUlRfUFJJVkFURSBjb25z
dCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGUuY3BwCmluZGV4IDhlMzY2ZjQuLjk5MmUzZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCkBAIC01NiwyNyArNTYsMjYgQEAgc3Rh
dGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtlVmFsaWRhdGlvblJlc3VsdChCQlFQbGFu
JiBwbGFuKQogCiBzdGF0aWMgUGxhbjo6Q29tcGxldGlvblRhc2sgbWFrZVZhbGlkYXRpb25DYWxs
YmFjayhNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0gKFZNKiB2bSwgUGxhbiYgcGxhbikgeworICAgIHJldHVybiBjcmVh
dGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW2NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldIChQbGFuJiBwbGFuKSB7CiAgICAgICAgIEFTU0VSVCghcGxhbi5oYXNXb3JrKCkpOwot
ICAgICAgICBBU1NFUlQodm0pOwotICAgICAgICBjYWxsYmFjay0+cnVuKCp2bSwgbWFrZVZhbGlk
YXRpb25SZXN1bHQoc3RhdGljX2Nhc3Q8QkJRUGxhbiY+KHBsYW4pKSk7CisgICAgICAgIGNhbGxi
YWNrLT5ydW4obWFrZVZhbGlkYXRpb25SZXN1bHQoc3RhdGljX2Nhc3Q8QkJRUGxhbiY+KHBsYW4p
KSk7CiAgICAgfSk7CiB9CiAKLU1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBNb2R1bGU6OnZhbGlk
YXRlU3luYyhWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKK01vZHVsZTo6VmFsaWRh
dGlvblJlc3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8
dWludDhfdD4mJiBzb3VyY2UpCiB7Ci0gICAgUmVmPEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJlZigq
bmV3IEJCUVBsYW4oJnZtLCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIFBs
YW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgUmVmPEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJlZigq
bmV3IEJCUVBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9u
LCBQbGFuOjpkb250RmluYWxpemUoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgIHBsYW4tPnBh
cnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKICAgICByZXR1cm4gbWFrZVZhbGlkYXRpb25SZXN1bHQo
cGxhbi5nZXQoKSk7CiB9CiAKLXZvaWQgTW9kdWxlOjp2YWxpZGF0ZUFzeW5jKFZNJiB2bSwgVmVj
dG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYg
Y2FsbGJhY2spCit2b2lkIE1vZHVsZTo6dmFsaWRhdGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBW
ZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2sm
JiBjYWxsYmFjaykKIHsKLSAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxh
bigmdm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRp
b25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZh
bGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpLCBudWxs
cHRyLCBudWxscHRyKSk7CiAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1v
dmUocGxhbikpOwogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJs
b2NrKE1lbW9yeU1vZGUgbW9kZSkKK1JlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVD
b2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRl
cldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24pCiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTg3LDIzICs4NiwyMyBAQCBSZWY8
Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSkK
ICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBiYWNrIG9mZiByZXRyeWluZyBhdCBzb21l
IHBvaW50OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA2MDcKICAgICBpZiAoIWNvZGVCbG9jayB8fCAoY29kZUJsb2NrLT5jb21waWxhdGlvbkZpbmlz
aGVkKCkgJiYgIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAgY29kZUJsb2NrID0g
Q29kZUJsb2NrOjpjcmVhdGUobW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1v
ZHVsZUluZm9ybWF0aW9uKCkpKTsKKyAgICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVh
dGUoY29udGV4dCwgbW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUlu
Zm9ybWF0aW9uKCkpLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4
Y2VwdGlvbik7CiAgICAgICAgIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2Rl
KV0gPSBjb2RlQmxvY2s7CiAgICAgfQogICAgIHJldHVybiBjb2RlQmxvY2sucmVsZWFzZU5vbk51
bGwoKTsKIH0KIAotUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpjb21waWxlU3luYyhNZW1vcnlNb2Rl
IG1vZGUpCitSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKENvbnRleHQqIGNvbnRl
eHQsIE1lbW9yeU1vZGUgbW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewotICAg
IFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKG1vZGUpOwor
ICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRl
eHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0
aW9uKTsKICAgICBjb2RlQmxvY2stPndhaXRVbnRpbEZpbmlzaGVkKCk7CiAgICAgcmV0dXJuIGNv
ZGVCbG9jazsKIH0KIAotdm9pZCBNb2R1bGU6OmNvbXBpbGVBc3luYyhWTSYgdm0sIE1lbW9yeU1v
ZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrKQordm9p
ZCBNb2R1bGU6OmNvbXBpbGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUs
IENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaywgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uKQogewotICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9y
Q3JlYXRlQ29kZUJsb2NrKG1vZGUpOwotICAgIGNvZGVCbG9jay0+Y29tcGlsZUFzeW5jKHZtLCBX
VEZNb3ZlKHRhc2spKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0
ZUNvZGVCbG9jayhjb250ZXh0LCBtb2RlLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciks
IHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgY29kZUJsb2NrLT5jb21waWxlQXN5bmMoY29udGV4
dCwgV1RGTW92ZSh0YXNrKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKaW5kZXggYTFhZjc1OC4uYTZhZTI5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtMjgsNiArMjgsNyBA
QAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21Db2RlQmxvY2suaCIK
KyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5j
bHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTM2LDE5ICsz
NywyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29u
dGV4dDsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIGNsYXNzIFBsYW47CiAKIHVzaW5nIFNp
Z25hdHVyZUluZGV4ID0gdWludDMyX3Q7Ci0gICAgCisKIGNsYXNzIE1vZHVsZSA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGU+IHsKIHB1YmxpYzoKICAgICB1c2luZyBWYWxpZGF0
aW9uUmVzdWx0ID0gV1RGOjpFeHBlY3RlZDxSZWZQdHI8TW9kdWxlPiwgU3RyaW5nPjsKLSAgICB0
eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZNJiwgVmFsaWRhdGlvblJlc3VsdCYmKTsKKyAgICB0
eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZhbGlkYXRpb25SZXN1bHQmJik7CiAgICAgdXNpbmcg
QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2sgPSBSZWZQdHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+
PjsKIAotICAgIHN0YXRpYyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlU3luYyhWTSYsIFZlY3Rv
cjx1aW50OF90PiYmIHNvdXJjZSk7Ci0gICAgc3RhdGljIHZvaWQgdmFsaWRhdGVBc3luYyhWTSYs
IFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFj
ayYmKTsKKyAgICBzdGF0aWMgVmFsaWRhdGlvblJlc3VsdCB2YWxpZGF0ZVN5bmMoQ29udGV4dCos
IFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7CisgICAgc3RhdGljIHZvaWQgdmFsaWRhdGVBc3lu
YyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRh
dGlvbkNhbGxiYWNrJiYpOwogCiAgICAgc3RhdGljIFJlZjxNb2R1bGU+IGNyZWF0ZShSZWY8TW9k
dWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24pCiAgICAgewpAQCAtNTgsMTQgKzYw
LDE0IEBAIHB1YmxpYzoKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdDsK
ICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9CiAKLSAgICBSZWY8Q29k
ZUJsb2NrPiBjb21waWxlU3luYyhNZW1vcnlNb2RlKTsKLSAgICB2b2lkIGNvbXBpbGVBc3luYyhW
TSYsIE1lbW9yeU1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOwor
ICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDcmVh
dGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICB2b2lkIGNvbXBp
bGVBc3luYyhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9u
Q2FsbGJhY2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+TW9kdWxlKCk7CiAKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9ja0ZvcihNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNf
Y2FzdDx1aW50OF90Pihtb2RlKV0uZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPENvZGVCbG9j
az4gZ2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSk7CisgICAgUmVmPENvZGVCbG9jaz4g
Z2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgTW9kdWxlKFJlZjxNb2R1bGVJ
bmZvcm1hdGlvbj4mJik7CiAgICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9y
bWF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2Vy
LmNwcAppbmRleCA2Yzk0OGI1Li42ZDQ0YWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbU9w
cy5oIgpAQCAtMjY1LDcgKzI2NCw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVs
cGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBQYXJ0aWFsUmVzdWx0IGxp
bWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwogICAgIGlmIChV
TkxJS0VMWSghbGltaXRzKSkKICAgICAgICAgcmV0dXJuIGxpbWl0cy5nZXRVbmV4cGVjdGVkKCk7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighSlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6
ZShpbml0aWFsKSwgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIg
aXMgaW52YWxpZCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdGlhbCA+IG1heFRhYmxl
RW50cmllcywgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMg
dG9vIGJpZywgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJpZXMpOwogCiAgICAgQVNTRVJUKCFtYXhp
bXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5jcHAKaW5kZXggNzRjZjY1My4uY2NkZjcyZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtMzEsOSArMzEsMTAgQEAKICNpbmNs
dWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVl
LmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVh
ZHMuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCkBAIC01MSwxMCArNTIsMTAgQEAgbmFtZXNw
YWNlIFdhc21PTUdQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogfQogCi1PTUdQbGFuOjpPTUdQbGFuKFJlZjxNb2R1bGU+IG1vZHVsZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0g
ICAgOiBCYXNlKG51bGxwdHIsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+
KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQotICAgICwgbV9t
b2R1bGUobW9kdWxlLmNvcHlSZWYoKSkKLSAgICAsIG1fY29kZUJsb2NrKCptb2R1bGUtPmNvZGVC
bG9ja0Zvcihtb2RlKSkKK09NR1BsYW46Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1v
ZHVsZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwg
Q29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBtYWtlUmVmKGNvbnN0
X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkpKSwg
V1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAsIG1f
Y29kZUJsb2NrKCptX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQogICAgICwgbV9mdW5jdGlv
bkluZGV4KGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgc2V0TW9kZShtb2RlKTsKQEAgLTE2MiwxMyAr
MTYzLDEzIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb21w
bGV0ZShob2xkTG9jayhtX2xvY2spKTsKIH0KIAotdm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29u
dGV4dCogY29udGV4dCwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKK3ZvaWQgT01HUGxhbjo6cnVu
Rm9ySW5kZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZnVuY3Rp
b25JbmRleCkKIHsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb250
ZXh0LT5jb2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29udGV4dC0+bWVtb3J5TW9kZSgpID09IGNv
ZGVCbG9jay0+bV9jb2RlQmxvY2stPm1vZGUoKSk7CisgICAgV2FzbTo6Q29kZUJsb2NrJiBjb2Rl
QmxvY2sgPSBpbnN0YW5jZS0+d2FzbUNvZGVCbG9jaygpOworICAgIEFTU0VSVChpbnN0YW5jZS0+
d2FzbU1lbW9yeSgpLT5tb2RlKCkgPT0gY29kZUJsb2NrLm1vZGUoKSk7CiAKLSAgICBpZiAoY29k
ZUJsb2NrLT5tX2NvZGVCbG9jay0+dGllclVwQ291bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3Rh
cnRUaWVyVXAoKSkgewotICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01H
UGxhbihjb250ZXh0LT5tb2R1bGUoKS0+bW9kdWxlKCksIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9j
ay0+bV9jb2RlQmxvY2stPm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBpZiAo
Y29kZUJsb2NrLnRpZXJVcENvdW50KGZ1bmN0aW9uSW5kZXgpLnNob3VsZFN0YXJ0VGllclVwKCkp
IHsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFu
Y2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPndhc21Nb2R1bGUoKSks
IGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7
CiAgICAgICAgIGVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAg
ICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uaAppbmRleCA3MTY0YTllLi5iODA4MjUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIK
ICNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKQEAgLTQxLDE3
ICs0MCwyMCBAQCBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBPTUdQbGFuIGZpbmFsIDogcHVibGlj
IFBsYW4gewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQbGFuOwotICAgIC8vIE5vdGU6IENv
bXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhl
cndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdQbGFuKFJlZjxN
b2R1bGU+LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9uVGFz
ayYmKTsKIAogICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2Nv
bXBsZXRlZDsgfQogICAgIHZvaWQgd29yayhDb21waWxhdGlvbkVmZm9ydCkgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
IAorICAgIHN0YXRpYyB2b2lkIHJ1bkZvckluZGV4KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgpOworCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJlYXNv
biBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCiAgICAgdXNp
bmcgQmFzZTo6bV9sb2NrOwogCisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5v
dCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEg
cmVmZXJlbmNlIGN5Y2xlLgorICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworCiAg
ICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb21wbGV0ZWQ7
IH0KICAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJy
aWRlCiAgICAgewpAQCAtNjUsOCArNjcsNiBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fZnVu
Y3Rpb25JbmRleDsKIH07CiAKLXZvaWQgcnVuT01HUGxhbkZvckluZGV4KENvbnRleHQqLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4KTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QYWdlQ291bnQuaAppbmRleCBlNDM4NDdjLi5lZjA1ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDYgKzU3LDExIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBwYWdlQ291bnQgPD0gbWF4UGFnZUNvdW50OwogICAgIH0KKyAgICAK
KyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFsaWQo
bV9wYWdlQ291bnQpOworICAgIH0KIAogICAgIHN0YXRpYyBQYWdlQ291bnQgZnJvbUJ5dGVzKHVp
bnQ2NF90IGJ5dGVzKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cAppbmRleCBiYTI3Y2Y5Li5kMDYzY2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBsYW4uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDggKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNs
dWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNs
dWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTUxLDIwICs0
OSwyNyBAQCBuYW1lc3BhY2UgV2FzbVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBSZWY8TW9kdWxlSW5mb3Jt
YXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK1BsYW46OlBsYW4oQ29udGV4dCog
Y29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRh
c2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dX
YXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRp
b24oV1RGTW92ZShpbmZvKSkKKyAgICAsIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKFdURk1vdmUo
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKSkKKyAgICAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKHRocm93
V2FzbUV4Y2VwdGlvbikKICAgICAsIG1fc291cmNlKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJj
ZS5kYXRhKCkpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChtX21vZHVsZUluZm9ybWF0aW9uLT5zb3Vy
Y2Uuc2l6ZSgpKQogewotICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cih2bSwgV1RGTW92ZSh0YXNrKSkpOworICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKLVBsYW46OlBsYW4oVk0q
IHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBQbGFuKGNvbnRl
eHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIG51bGxwdHIsIG51bGxwdHIpCit7Cit9
CisKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBz
aXplX3Qgc291cmNlTGVuZ3RoLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVs
ZUluZm9ybWF0aW9uKGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oVmVjdG9yPHVpbnQ4
X3Q+KCkpKSkKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fc291cmNlTGVuZ3RoKHNv
dXJjZUxlbmd0aCkKIHsKLSAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIodm0sIFdURk1vdmUodGFzaykpKTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQogCiB2b2lkIFBsYW46OnJ1
bkNvbXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCkBAIC03MiwxOCArNzcsMTgg
QEAgdm9pZCBQbGFuOjpydW5Db21wbGV0aW9uVGFza3MoY29uc3QgQWJzdHJhY3RMb2NrZXImKQog
ICAgIEFTU0VSVChpc0NvbXBsZXRlKCkgJiYgIWhhc1dvcmsoKSk7CiAKICAgICBmb3IgKGF1dG8m
IHRhc2sgOiBtX2NvbXBsZXRpb25UYXNrcykKLSAgICAgICAgdGFzay5zZWNvbmQtPnJ1bih0YXNr
LmZpcnN0LCAqdGhpcyk7CisgICAgICAgIHRhc2suc2Vjb25kLT5ydW4oKnRoaXMpOwogICAgIG1f
Y29tcGxldGlvblRhc2tzLmNsZWFyKCk7CiAgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxsKCk7CiB9
CiAKLXZvaWQgUGxhbjo6YWRkQ29tcGxldGlvblRhc2soVk0mIHZtLCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCit2b2lkIFBsYW46OmFkZENvbXBsZXRpb25UYXNrKENvbnRleHQqIGNvbnRleHQsIENv
bXBsZXRpb25UYXNrJiYgdGFzaykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwog
ICAgIGlmICghaXNDb21wbGV0ZSgpKQotICAgICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoJnZtLCBXVEZNb3ZlKHRhc2spKSk7CisgICAgICAgIG1fY29tcGxldGlv
blRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiAg
ICAgZWxzZQotICAgICAgICB0YXNrLT5ydW4oJnZtLCAqdGhpcyk7CisgICAgICAgIHRhc2stPnJ1
bigqdGhpcyk7CiB9CiAKIHZvaWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24oKQpAQCAtOTQsMTkg
Kzk5LDE5IEBAIHZvaWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24oKQogICAgIH0KIH0KIAotYm9v
bCBQbGFuOjp0cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdChWTSYgdm0pCitib29sIFBsYW46OnRy
eVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogCiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
LSAgICAgICAgLy8gV2UgYWxsb3cgdGhlIGZpcnN0IGNvbXBsZXRpb24gdGFzayB0byBub3QgaGF2
ZSBhIHZtLgorICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNrIHRv
IG5vdCBoYXZlIGEgQ29udGV4dC4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1f
Y29tcGxldGlvblRhc2tzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgQVNTRVJUKG1fY29tcGxl
dGlvblRhc2tzW2ldLmZpcnN0KTsKICAgICB9CiAKICAgICBib29sIHJlbW92ZWRBbnlUYXNrcyA9
IGZhbHNlOwotICAgIG1fY29tcGxldGlvblRhc2tzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29u
c3Qgc3RkOjpwYWlyPFZNKiwgQ29tcGxldGlvblRhc2s+JiBwYWlyKSB7Ci0gICAgICAgIGJvb2wg
c2hvdWxkUmVtb3ZlID0gcGFpci5maXJzdCA9PSAmdm07CisgICAgbV9jb21wbGV0aW9uVGFza3Mu
cmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRp
b25UYXNrPiYgcGFpcikgeworICAgICAgICBib29sIHNob3VsZFJlbW92ZSA9IHBhaXIuZmlyc3Qg
PT0gJmNvbnRleHQ7CiAgICAgICAgIHJlbW92ZWRBbnlUYXNrcyB8PSBzaG91bGRSZW1vdmU7CiAg
ICAgICAgIHJldHVybiBzaG91bGRSZW1vdmU7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaAppbmRleCAxMGY4YTFiLi43YTA3YmZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmgKQEAgLTI4LDggKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIK
ICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+
CiAjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KQEAgLTM5LDI1ICszOSwyNyBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIENhbGxMaW5rSW5mbzsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0Owot
Y2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENv
bnRleHQ7CisKIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4g
ewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0qLCBQbGFuJik7Cisg
ICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShQbGFuJik7CiAgICAgdXNpbmcgQ29tcGxldGlv
blRhc2sgPSBSZWZQdHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMgQ29t
cGxldGlvblRhc2sgZG9udEZpbmFsaXplKCkgeyByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxDYWxs
YmFja1R5cGU+KFtdKFZNKiwgUGxhbiYpIHsgfSk7IH0KLSAgICBQbGFuKFZNKiwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJik7CisKKyAgICBzdGF0aWMgQ29tcGxldGlv
blRhc2sgZG9udEZpbmFsaXplKCkgeyByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxDYWxsYmFja1R5
cGU+KFtdKFBsYW4mKSB7IH0pOyB9CisgICAgUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9y
bWF0aW9uPiwgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CisgICAgUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9u
PiwgQ29tcGxldGlvblRhc2smJik7CiAKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNo
b3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1
bGUgZS5nLiB2YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
UGxhbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qs
IENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4o
KTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9yZGVyaW5nIGhlcmUsIHlvdSBjYW4g
cmVseSBvbiBGSUZPIG9mIHRoZQogICAgIC8vIGNvbXBsZXRpb24gdGFza3MgYmVpbmcgY2FsbGVk
LgotICAgIHZvaWQgYWRkQ29tcGxldGlvblRhc2soVk0mLCBDb21wbGV0aW9uVGFzayYmKTsKKyAg
ICB2b2lkIGFkZENvbXBsZXRpb25UYXNrKENvbnRleHQqLCBDb21wbGV0aW9uVGFzayYmKTsKIAog
ICAgIHZvaWQgc2V0TW9kZShNZW1vcnlNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQogICAg
IE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpAQCAtNzIsNyArNzQs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIGl0IGNhbmNlbGxlZCB0aGUgcGxhbi4KLSAgICBib29sIHRyeVJlbW92ZVZN
QW5kQ2FuY2VsSWZMYXN0KFZNJik7CisgICAgYm9vbCB0cnlSZW1vdmVDb250ZXh0QW5kQ2FuY2Vs
SWZMYXN0KENvbnRleHQmKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgcnVuQ29tcGxldGlvblRh
c2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CkBAIC04Myw3ICs4NSwxMCBAQCBwcm90ZWN0ZWQ6
CiAKICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAKLSAg
ICBWZWN0b3I8c3RkOjpwYWlyPFZNKiwgQ29tcGxldGlvblRhc2s+LCAxPiBtX2NvbXBsZXRpb25U
YXNrczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENvbnRleHQqLCBDb21wbGV0aW9uVGFzaz4sIDE+
IG1fY29tcGxldGlvblRhc2tzOworCisgICAgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyIG1fY3JlYXRl
RW1iZWRkZXJXcmFwcGVyOworICAgIFRocm93V2FzbUV4Y2VwdGlvbiBtX3Rocm93V2FzbUV4Y2Vw
dGlvbiB7IG51bGxwdHIgfTsKIAogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNv
bnN0IHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNpZ25hdHVyZS5jcHAKaW5kZXggOGI2MDBlZC4uNmE0MmQ1MSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNpZ25hdHVyZS5oCmluZGV4IGU0MTNiMjUuLmFhY2VkNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNiBAQCBjbGFzcyBQcmlu
dFN0cmVhbTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2Fz
bSB7CiAKIHVzaW5nIFNpZ25hdHVyZUFyZ0NvdW50ID0gdWludDMyX3Q7CkBAIC0xNTYsNyArMTU0
LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Oldhc206OlNpZ25hdHVyZUhh
c2g+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEoKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKIAotLy8gU2lnbmF0dXJlIGluZm9ybWF0aW9uIGlzIGhlbGQgZ2xvYmFsbHkgYW5k
IHNoYXJlZCBieSBWTXMgdG8gYWxsb3cgYWxsIHNpZ25hdHVyZXMgdG8gYmUgdW5pcXVlLiBUaGlz
IGlzIHJlcXVpcmVkIHdoZW4gd2FzbSBjYWxscyBhbm90aGVyIHdhc20gaW5zdGFuY2UsIGFuZCBt
dXN0IHdvcmsgd2hlbiBtb2R1bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBWTXMuCisv
LyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5IHRo
ZSBlbnRpcmUgcHJvY2VzcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRo
aXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5k
IG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4K
IC8vIE5vdGU6IHNpZ25hdHVyZXMgYXJlIG5ldmVyIHJlbW92ZWQgYmVjYXVzZSB0aGF0IHdvdWxk
IHJlcXVpcmUgYWNjb3VudGluZyBmb3IgYWxsIFdlYkFzc2VtYmx5Lk1vZHVsZSBhbmQgd2hpY2gg
c2lnbmF0dXJlcyB0aGV5IHVzZS4gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25hdHVyZXMgaXMg
Ym91bmRlZCwgYW5kIGlzbid0IHdvcnRoIHRoZSBjb3VudGluZyBvdmVyaGVhZC4gV2UgY291bGQg
Y2xlYXIgZXZlcnl0aGluZyB3aGVuIHdlIHJlYWNoIHplcm8gb3V0c3RhbmRpbmcgV2ViQXNzZW1i
bHkuTW9kdWxlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDM3
CiBjbGFzcyBTaWduYXR1cmVJbmZvcm1hdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2lnbmF0dXJlSW5mb3JtYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJs
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1NDA5ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKQEAg
LTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK1JlZlB0cjxUYWJsZT4gVGFibGU6
OmNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVt
KQoreworICAgIGlmICghaXNWYWxpZFNpemUoaW5pdGlhbCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9m
KFRhYmxlKSkpIFRhYmxlKGluaXRpYWwsIG1heGltdW0pKTsKK30KKworVGFibGU6On5UYWJsZSgp
Cit7Cit9CisKK1RhYmxlOjpUYWJsZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBtYXhpbXVtKQoreworICAgIG1fc2l6ZSA9IGluaXRpYWw7CisgICAgbV9tYXhpbXVt
ID0gbWF4aW11bTsKKyAgICBBU1NFUlQoaXNWYWxpZFNpemUobV9zaXplKSk7CisgICAgQVNTRVJU
KCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOworCisgICAgLy8gRklYTUU6IEl0
IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUg
c3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgorICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3Qg
ZG9pbmcgdGhhdC4KKyAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1
bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19j
YXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgbV9pbnN0YW5jZXMgPSBNYWxsb2NQdHI8SlNXZWJB
c3NlbWJseUluc3RhbmNlKj46Om1hbGxvYyhzaXplb2YoSlNXZWJBc3NlbWJseUluc3RhbmNlKikg
KiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBzaXplKCk7ICsraSkgeworICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkg
V2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0
KClbaV0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAv
LyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KKyAgICAgICAgbV9pbnN0YW5jZXMu
Z2V0KClbaV0gPSBudWxscHRyOworICAgIH0KK30KKworc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
VGFibGU6Omdyb3codWludDMyX3QgZGVsdGEpCit7CisgICAgaWYgKGRlbHRhID09IDApCisgICAg
ICAgIHJldHVybiBzaXplKCk7CisKKyAgICB1c2luZyBDaGVja2VkID0gQ2hlY2tlZDx1aW50MzJf
dCwgUmVjb3JkT3ZlcmZsb3c+OworICAgIENoZWNrZWQgbmV3U2l6ZUNoZWNrZWQgPSBzaXplKCk7
CisgICAgbmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7CisgICAgdWludDMyX3QgbmV3U2l6ZTsKKyAg
ICBpZiAobmV3U2l6ZUNoZWNrZWQuc2FmZUdldChuZXdTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRp
ZE92ZXJmbG93KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKG1heGlt
dW0oKSAmJiBuZXdTaXplID4gKm1heGltdW0oKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICBpZiAoIWlzVmFsaWRTaXplKG5ld1NpemUpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgYXV0byBjaGVja2VkR3JvdyA9IFsmXSAoYXV0byYgY29udGFpbmVyKSB7
CisgICAgICAgIENoZWNrZWQgcmVhbGxvY1NpemVDaGVja2VkID0gbmV3U2l6ZUNoZWNrZWQ7Cisg
ICAgICAgIHJlYWxsb2NTaXplQ2hlY2tlZCAqPSBzaXplb2YoKmNvbnRhaW5lci5nZXQoKSk7Cisg
ICAgICAgIHVpbnQzMl90IHJlYWxsb2NTaXplOworICAgICAgICBpZiAocmVhbGxvY1NpemVDaGVj
a2VkLnNhZmVHZXQocmVhbGxvY1NpemUpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnRhaW5lci5yZWFsbG9jKHJlYWxs
b2NTaXplKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gbV9zaXplOyBpIDwgbmV3U2l6ZTsg
KytpKQorICAgICAgICAgICAgbmV3ICgmY29udGFpbmVyLmdldCgpW2ldKSBzdGQ6OnJlbW92ZV9y
ZWZlcmVuY2VfdDxkZWNsdHlwZSgqY29udGFpbmVyLmdldCgpKT4oKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfTsKKworICAgIGlmICghY2hlY2tlZEdyb3cobV9mdW5jdGlvbnMpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghY2hlY2tlZEdyb3cobV9pbnN0YW5j
ZXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgbV9zaXplID0gbmV3U2l6
ZTsKKworICAgIHJldHVybiBuZXdTaXplOworfQorCit2b2lkIFRhYmxlOjpjbGVhckZ1bmN0aW9u
KHVpbnQzMl90IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsK
KyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7
CisgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XS5zaWduYXR1cmVJbmRleCA9PSBX
YXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21w
aWxlZCBjb2RlLgorICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgVGFibGU6OnNldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4LCBDYWxsYWJsZUZ1bmN0aW9u
IGZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0g
PSBmdW5jdGlvbjsKKyAgICBtX2luc3RhbmNlcy5nZXQoKVtpbmRleF0gPSBpbnN0YW5jZTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OlRhYmxlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDhlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaApAQCAtMCwwICsxLDc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVk
ZSAiV2FzbUxpbWl0cy5oIgorI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hvdWxkIGJlIFdhc206Okluc3RhbmNlIGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhYmxl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRhYmxlPiB7CitwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBDcmVhdGVGYWlsIHsKKyAgICAgICAgSW52YWxpZFNpemUsCisgICAgfTsKKyAgICBz
dGF0aWMgUmVmUHRyPFRhYmxlPiBjcmVhdGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+VGFibGUoKTsK
KworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBt
X21heGltdW07IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZ3Jvdyh1aW50MzJfdCBkZWx0YSkgV0FSTl9V
TlVTRURfUkVUVVJOOworICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9p
ZCBzZXRGdW5jdGlvbih1aW50MzJfdCwgQ2FsbGFibGVGdW5jdGlvbiwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKik7IC8vIEZJWE1FIG1ha2UgdGhpcyBXYXNtOjpJbnN0YW5jZS4gaHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTc3NDcyCisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9zaXplKTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUs
IG1fZnVuY3Rpb25zKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZXMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1faW5zdGFuY2VzKTsgfQorCisgICAg
c3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6ZSkgeyByZXR1cm4gc2l6ZSA8IG1h
eFRhYmxlRW50cmllczsgfQorCitwcml2YXRlOgorICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWws
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOworCisgICAgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gbV9tYXhpbXVtOworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICBNYWxsb2NQdHI8
Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7CisgICAgLy8gY2FsbF9pbmRpcmVjdCBuZWVk
cyB0byBkbyBhbiBJbnN0YW5jZSBjaGVjayB0byBwb3RlbnRpYWxseSBjb250ZXh0IHN3aXRjaCB3
aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0byBhbm90aGVyIGluc3RhbmNlLiBXZSBjYW4gaG9sZCBy
YXcgcG9pbnRlcnMgdG8gSW5zdGFuY2UgaGVyZSBiZWNhdXNlIHRoZSBlbWJlZGRlciBlbnN1cmVz
IHRoYXQgVGFibGUga2VlcHMgYWxsIHRoZSBpbnN0YW5jZXMgYWxpdmUuIFdlIGNvdWxkbid0IGhv
bGQgYSBSZWYgaGVyZSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGN5Y2xlcy4KKyAgICBNYWxsb2NQ
dHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4gbV9pbnN0YW5jZXM7IC8vIEZJWE1FIG1ha2UgdGhp
cyBhIFdhc206Okluc3RhbmNlLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCmluZGV4IDk3N2IwMWIu
LmMyMzU5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVu
a3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBA
IC0yOSwxMSArMjksOSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkND
YWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgogI2luY2x1ZGUgIkhlYXBD
ZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCkBAIC00OCw0NiArNDYsMTggQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRv
cihjb25zdCBBYnN0cmFjdExvY2tlciYKIAogICAgIC8vIFRoZSB0aGluZyB0aGF0IGp1bXBzIGhl
cmUgbXVzdCBtb3ZlIEV4Y2VwdGlvblR5cGUgaW50byB0aGUgYXJndW1lbnRHUFIxIGJlZm9yZSBq
dW1waW5nIGhlcmUuCiAgICAgLy8gV2UncmUgYWxsb3dlZCB0byB1c2UgdGVtcCByZWdpc3RlcnMg
aGVyZS4gV2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSBjYWxsZWUgc2F2ZXMuCi0gICAgaml0Lmxv
YWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjIsIENvbnRleHQ6Om9mZnNl
dE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bCgpOwogICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICAgICBqaXQuYnJl
YWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbm90IHJlYWNoIHRoaXMuCiAKLSAgICB2b2lkKiAoKnRo
cm93V2FzbUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgV2FzbTo6
Q29udGV4dCopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBl
LCBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCkgLT4gdm9pZCogewotICAgICAgICBWTSogdm0g
PSB3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmplY3QoKTsKLQotICAgICAgICAgICAg
SlNPYmplY3QqIGVycm9yOyAKLSAgICAgICAgICAgIGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6
OlN0YWNrT3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZShleGVjLCAq
dm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2Fz
bTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7Ci0gICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFt
ZUZvckNhdGNoKTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6Ci0gICAgICAg
IC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFu
ZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKLSAgICAgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4g
dGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBu
b3QgcmVxdWlyZQotICAgICAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBj
b25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9u
Ci0gICAgICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2gg
aW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCi0gICAgICAgIC8vIHRvIHRo
ZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlz
IHRlcnJpYmxlIGhhY2suCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA0NDAKLSAgICAgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylb
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4od2FzbUNvbnRl
eHQtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKLSAgICAgICAgcmV0dXJuIHZtLT50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdzsKLSAgICB9OwotCisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7
CisgICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5j
dGlvblB0cih0aHJvd1dhc21FeGNlcHRpb24pKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKSk7CiB9CiAKQEAgLTExOSw4
ICs4OSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2Vu
ZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKICNlbmRpZgogICAgIHVuc2lnbmVkIG51bWJl
ck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVy
c1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsKIAotICAgIGppdC5sb2FkV2FzbUNvbnRleHQo
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihydW5PTUdQbGFuRm9ySW5kZXgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpSdW4pKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90KTsKKyAgICBSdW4gcnVuID0gT01HUGxhbjo6cnVuRm9y
SW5kZXg7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocnVuKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0
LmNhbGwoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKIAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1Nw
aWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVz
ZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKQEAgLTE0Miw2ICsxMTQsMTkgQEAgVGh1bmtz
JiBUaHVua3M6OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuICp0aHVua3M7CiB9CiAKK3ZvaWQgVGh1
bmtzOjpzZXRUaHJvd1dhc21FeGNlcHRpb24oVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgLy8g
VGhlIHRodW5rcyBhcmUgdW5pcXVlIGZvciB0aGUgZW50aXJlIHByb2Nlc3MsIHRoZXJlZm9yZSBj
aGFuZ2luZyB0aGUgdGhyb3dpbmcgZnVuY3Rpb24gY2hhbmdlcyBpdCBmb3IgYWxsIHVzZXMgb2Yg
V2ViQXNzZW1ibHkuCisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdGhyb3dXYXNtRXhjZXB0aW9uIHx8
IG1fdGhyb3dXYXNtRXhjZXB0aW9uID09IHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgbV90aHJv
d1dhc21FeGNlcHRpb24gPSB0aHJvd1dhc21FeGNlcHRpb247Cit9CisKK1Rocm93V2FzbUV4Y2Vw
dGlvbiBUaHVua3M6OnRocm93V2FzbUV4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIG1fdGhyb3dX
YXNtRXhjZXB0aW9uOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKFRo
dW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKaW5kZXggZGYxNGNh
Mi4uNTI5NzY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRo
dW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaApAQCAt
MjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC00Miw2ICs0Myw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAgICAgc3RhdGljIFRodW5rcyYgc2luZ2xldG9u
KCk7CiAKKyAgICB2b2lkIHNldFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24p
OworICAgIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24oKTsKKwogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViKFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgc3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsK
QEAgLTUwLDYgKzU0LDcgQEAgcHJpdmF0ZToKICAgICBUaHVua3MoKSA9IGRlZmF1bHQ7CiAKICAg
ICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fc3R1YnM7
CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9
OwogICAgIExvY2sgbV9sb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Xb3JrbGlzdC5jcHAKaW5kZXggOWM1YjY4NC4uMmZlMTMyYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBAIC0xNzIsMTMgKzE3MywxMyBAQCB2b2lkIFdvcmts
aXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCiAgICAgcGxhbi53YWl0
Rm9yQ29tcGxldGlvbigpOwogfQogCi12b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShW
TSYgdm0pCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JDb250ZXh0KENvbnRleHQmIGNv
bnRleHQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgVmVjdG9yPFF1
ZXVlRWxlbWVudD4gZWxlbWVudHM7CiAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewog
ICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUuZGVxdWV1ZSgpOwotICAgICAg
ICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxh
c3Qodm0pOworICAgICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3Zl
Q29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsKICAgICAgICAgaWYgKCFkaWRDYW5jZWwp
CiAgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgfQpA
QCAtMTg4LDcgKzE4OSw3IEBAIHZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2
bSkKIAogICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV90aHJlYWRzKSB7CiAgICAgICAgIGlmICh0
aHJlYWQtPmVsZW1lbnQucGxhbikgewotICAgICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJl
YWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAg
ICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29u
dGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsKICAgICAgICAgICAgIGlmIChkaWRDYW5jZWwp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBk
ZWFkbG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNhbid0IGJsb2NrIHdpdGhvdXQgY2hlY2tpbmcg
Zm9yIGEgbmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0aGUgbG9jayB0byBkbyBzby4KICAgICAgICAg
ICAgICAgICB0aHJlYWQtPnN5bmNocm9uaXplLndhaXQoKm1fbG9jayk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCmluZGV4IDZiNjkzNTIuLjc0OGE5ZWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCkBAIC0yNyw4ICsyNyw2IEBA
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgotCiAjaW5jbHVk
ZSA8cXVldWU+CiAKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CkBAIC0zNywxMCAr
MzUsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7Ci0K
IG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENvbnRleHQ7CiBjbGFzcyBQbGFuOwogCiBjbGFz
cyBXb3JrbGlzdCB7CkBAIC01MCwxMyArNDcsMTAgQEAgcHVibGljOgogICAgIH5Xb3JrbGlzdCgp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbnF1ZXVlKFJlZjxQbGFuPik7Ci0gICAg
dm9pZCBzdG9wQWxsUGxhbnNGb3JWTShWTSYpOworICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yQ29u
dGV4dChDb250ZXh0Jik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXBsZXRlUGxh
blN5bmNocm9ub3VzbHkoUGxhbiYpOwogCi0gICAgdm9pZCBhY3RpdmF0ZVBsYW4oSlNQcm9taXNl
RGVmZXJyZWQqLCBQbGFuKik7Ci0gICAgdm9pZCBkZWFjdGl2ZVBsYW4oSlNQcm9taXNlRGVmZXJy
ZWQqLCBQbGFuKik7Ci0KICAgICBlbnVtIGNsYXNzIFByaW9yaXR5IHsKICAgICAgICAgU2h1dGRv
d24sCiAgICAgICAgIFN5bmNocm9ub3VzLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjcxMDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bS5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1RvV2Fz
bS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiV2FzbUNh
bGxpbmdDb252ZW50aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K3N0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIo
Q29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2Rl
LCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQoreworICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNv
bXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRKSVQ7CisKKyAgICBhdXRvIHJlc3VsdCA9IHN0
ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKKworICAgIC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgaml0LnN0
b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZl
ZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVNb3Zl
ID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92ZUxvY2F0aW9uKTsKKyAgICB9KTsKKworICAg
IGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlubmVkUmVncy50b1NhdmUobW9k
ZSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9IHRv
U2F2ZS5udW1iZXJPZlNldEdQUnMoKTsKKyAgICAvLyBUaGV5IHNob3VsZCBhbGwgYmUgY2FsbGVl
IHNhdmVzLgorICAgIHRvU2F2ZS5maWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7CisgICAgQVNTRVJUKHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKSA9PSB0b1NhdmVTaXpl
KTsKKyNlbmRpZgorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCh0
b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVy
QmFzZWQpOworICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVn
aXN0ZXJzVG9TcGlsbDsKKworICAgIHVuc2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJz
VG9TcGlsbC5zaXplKCkgKiBzaXplb2Yodm9pZCopOworICAgIHRvdGFsRnJhbWVTaXplICs9IFdh
c21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1l
U2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9
IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNp
Z25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAg
Y2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVT
aXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICArK251bUdQUnM7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGNhc2UgV2FzbTo6RjY0
OgorICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9m
cHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yo
dm9pZCopOworICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdG90YWxGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCB0b3RhbEZyYW1lU2l6ZSk7CisgICAgaml0
LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRvdGFsRnJhbWVTaXplKSwgTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdlIHNhdmUgYWxs
IHRoZXNlIHJlZ2lzdGVycyByZWdhcmRsZXNzIG9mIGhhdmluZyBhIG1lbW9yeSBvciBub3QuCisg
ICAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHdlIHVzZSBvbmUgb2YgdGhlc2UgYXMgYSBzY3JhdGNo
LiBUaGF0IHNhaWQsCisgICAgLy8gYWxtb3N0IGFsbCByZWFsIHdhc20gcHJvZ3JhbXMgdXNlIG1l
bW9yeSwgc28gaXQncyBub3QgcmVhbGx5CisgICAgLy8gd29ydGggb3B0aW1pemluZyBmb3IgdGhl
IGNhc2UgdGhhdCB0aGV5IGRvbid0LgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYg
cmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSBy
ZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0
T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBqaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCkpOworICAgIH0KKwor
ICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4
dEluc3RhbmNlUG9pbnRlcjsKKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
IGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMgPSAwOworICAgICAgICBudW1GUFJzID0gMDsK
KyAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVy
IHRoaXMuIFNvCisgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5v
dyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBw
aW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNl
dCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisKKyAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBwYXNzZXMgV2FzbTo6Q29udGV4dConcyBpbnN0
YW5jZSBhcyB0aGUgZmlyc3QgSlMgYXJndW1lbnQgd2hlbiB3ZSdyZQorICAgICAgICAvLyBub3Qg
dXNpbmcgZmFzdCBUTFMgdG8gaG9sZCB0aGUgV2FzbTo6Q29udGV4dConcyBpbnN0YW5jZS4KKyAg
ICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNP
ZmZzZXQpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwdHJkaWZmX3Qg
d2FzbU9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZv
aWQqKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQo
aSkpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgY2FzZSBXYXNt
OjpJNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkubV9ncHJBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0
dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkkzMikgeworICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
c3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBz
aXplb2Yodm9pZCopOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJB
cmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9n
cHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKytudW1HUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBX
YXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgICAgICBp
ZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6
RjMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVu
dChpKSA9PSBXYXNtOjpGMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZz
ZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZERvdWJsZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZw
cigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkg
PSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIGlmICghQ29udGV4dDo6
dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAg
ICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NF
UlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1l
cyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJz
IHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdz
WzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
c2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9CisKKyAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgIH0KKworICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgp
OworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZv
LmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwg
aW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgIGppdC5hZGRMaW5rVGFzayhbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVu
ZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4U3Bh
Y2UgfSk7CisgICAgfSk7CisKKworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVn
QXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdB
dE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZz
ZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOworICAgIH0KKworICAgIHN3aXRjaCAo
c2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBq
aXQubW92ZUZsb2F0VG8zMihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAg
aml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQo
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGI5
OGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc20uaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXYXNtQjNJUkdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5
LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNp
Z25hdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPG1lbW9yeT4K
KworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworc3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJB
c3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
LmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5LmgKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCnJlbmFtZSB0byBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKaW5kZXggMGZhZjk3Ny4uYzU3OGRm
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaApAQCAt
MjgsMzEgKzI4LDMxIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNP
YmplY3QuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCi0jaW5j
bHVkZSAianMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCIKLSNp
bmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvci5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlUYWJsZS5oIgot
I2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNs
dWRlICJqcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBl
LmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2lu
Y2x1ZGUgImpzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMv
V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgiCi0jaW5j
bHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3Nl
bWJseVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29u
c3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlw
ZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oIgotI2luY2x1
ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3Nl
bWJseVRvSlNDYWxsZWUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUxpbmtFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24u
aCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
ICJXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlM
aW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TGlua0Vycm9yUHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgorI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlUHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRlICJX
ZWJBc3NlbWJseVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9y
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlw
ZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlND
YWxsZWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKaW5kZXggZjkxZTZj
Ny4uMDgyNTE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKQEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9y
eS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJXYXNtQmlu
ZGluZy5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgorI2luY2x1ZGUgIldh
c21Ub0pTLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtNDQsNyArNDQs
NyBAQCBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0geyAi
V2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscAogSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4g
Y29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUpCiB7CiAgICAgY29uc3QgV2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGUo
KS5tb2R1bGVJbmZvcm1hdGlvbigpOwotICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25T
aXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkpKSBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVCbG9jayksIG1vZHVsZUluZm9ybWF0aW9uKTsK
KyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgV1RGTW92
ZShjb2RlQmxvY2spLCBtb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVh
dGlvbih2bSwgbW9kdWxlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTgsNyArNTgsNyBA
QCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwg
UmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMucmVzZXJ2
ZUNhcGFjaXR5KG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgIGZvciAo
dW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBvcnRJbmRleCA8IG1fY29kZUJsb2NrLT5mdW5j
dGlvbkltcG9ydENvdW50KCk7ICsraW1wb3J0SW5kZXgpIHsKICAgICAgICAgV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlv
blNpZ25hdHVyZUluZGljZXMuYXQoaW1wb3J0SW5kZXgpOwotICAgICAgICBhdXRvIGJpbmRpbmcg
PSBXYXNtOjp3YXNtVG9Kcygmdm0sIG1fY2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGlt
cG9ydEluZGV4KTsKKyAgICAgICAgYXV0byBiaW5kaW5nID0gV2FzbTo6d2FzbVRvSlMoJnZtLCBt
X2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRJbmRleCk7CiAgICAgICAgIGlm
IChVTkxJS0VMWSghYmluZGluZykpIHsKICAgICAgICAgICAgIHN3aXRjaCAoYmluZGluZy5lcnJv
cigpKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9y
eToKQEAgLTY4LDcgKzY4LDcgQEAgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgY28KICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV93YXNt
VG9KU0V4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQoYmluZGluZy52YWx1ZSgpKTsKLSAgICAgICAg
aW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1w
b3J0SW5kZXhdLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBtX2NvZGVCbG9j
ay0+aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGltcG9ydEluZGV4KSA9IG1fd2FzbVRvSlNFeGl0
U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIH0K
IApAQCAtODMsMTEgKzgzLDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4o
Y2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6On5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKCk7
CiB9CiAKLWJvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aXNTYWZlVG9SdW4oSlNXZWJBc3Nl
bWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAotewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNT
YWZlVG9SdW4obWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkpOwotfQotCiB2b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsSUNzKFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8gaXRl
ciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApp
bmRleCA1MjcwM2Y4Li5hYmI4YzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCkBAIC02NCwzOSArNjQsMTIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gJnZtLndlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7IH0KLSAgICBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQorICAgIFdh
c206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0K
IAotICAgIGJvb2wgaXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSopIGNvbnN0OworICAg
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdl
dCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVs
ZSopOwogCi0gICAgLy8gVGhlc2UgdHdvIGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9u
Y2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVsYXRlZC4KLQotICAgIFdhc206OkNhbGxlZSYg
anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAg
IHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAgIH0KLSAgICBXYXNtOjpXYXNtRW50cnlwb2lu
dExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KHJ1bm5hYmxlKCkpOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwot
ICAgIH0KLQotICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21Ub0pzQ2Fs
bFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICBBU1NF
UlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiAmaW1wb3J0V2FzbVRvSlNTdHViKGltcG9y
dEluZGV4KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2Fz
bVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9m
ZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleDsKLSAgICB9
Ci0KLSAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
LmdldCgpOyB9Ci0KICAgICB2b2lkIGNsZWFySlNDYWxsSUNzKFZNJik7CiAKICAgICBib29sIHJ1
bm5hYmxlKCkgY29uc3QgeyByZXR1cm4gIW1fZXJyb3JNZXNzYWdlOyB9CkBAIC0xMTQsMjEgKzg3
LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0
YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRTdHVicygpCi0gICAgewotICAgICAgICByZXR1cm4g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lkKik+KHNpemVvZihKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBvcnRDb3VudCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGZ1bmN0aW9uSW1w
b3J0Q291bnQpLnVuc2FmZUdldCgpOwotICAgIH0KLQotICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9K
U1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gKmJpdHdp
c2VfY2FzdDx2b2lkKio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9y
dFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCkpOwotICAgIH0KLQogICAgIGNsYXNzIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwogICAgIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmNwcAppbmRleCBjNzdmYTA1Li5jNTJlZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTQ5
LDEyICs0OSwxNyBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5z
aWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQorSlNXZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVt
SW1wb3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYgaW5zdGFuY2UpCiAgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2luc3RhbmNlKFdURk1vdmUoaW5zdGFuY2UpKQog
ICAgICwgbV92bSgmdm0pCisgICAgLCBtX3dhc21Nb2R1bGUobV9pbnN0YW5jZS0+bW9kdWxlKCkp
CisgICAgLCBtX3dhc21UYWJsZShtX2luc3RhbmNlLT5tX3RhYmxlLmdldCgpKQorICAgICwgbV9n
bG9iYWxzKG1faW5zdGFuY2UtPm1fZ2xvYmFscy5nZXQoKSkKICAgICAsIG1fbnVtSW1wb3J0RnVu
Y3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsKLSAgICBtZW1zZXQoaW1wb3J0RnVuY3Rpb25z
KCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICogc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVj
dD4pKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1JbXBvcnRGdW5jdGlvbnM7
ICsraSkKKyAgICAgICAgbmV3IChpbXBvcnRGdW5jdGlvbkluZm8oaSkpIEltcG9ydEZ1bmN0aW9u
SW5mbygpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QpCkBAIC02MywxMiArNjgsMTAgQEAgdm9pZCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlLAogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBt
X21vZHVsZS5zZXQodm0sIHRoaXMsIG1vZHVsZSk7Ci0gICAgY29uc3Qgc2l6ZV90IGV4dHJhTWVt
b3J5U2l6ZSA9IGdsb2JhbE1lbW9yeUJ5dGVTaXplKCk7Ci0gICAgbV9nbG9iYWxzID0gTWFsbG9j
UHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVtb3J5U2l6ZSk7Ci0gICAgaGVhcCgpLT5yZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1lbW9yeVNpemUpOwotCiAgICAgbV9tb2R1bGVO
YW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAg
IG1fY2FsbGVlLnNldCh2bSwgdGhpcywgbW9kdWxlLT5jYWxsZWUoKSk7CisgICAgCisgICAgaGVh
cCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX2luc3RhbmNlLT5leHRyYU1lbW9yeUFs
bG9jYXRlZCgpKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpAQCAtODgsNDAgKzkxLDQ0IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
Y2FsbGVlKTsKLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0
LT5nbG9iYWxNZW1vcnlCeXRlU2l6ZSgpKTsKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlLT5leHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5j
dGlvbnM7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVu
Y3Rpb25zKClbaV0pOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRG
dW5jdGlvbkluZm8oaSktPmltcG9ydEZ1bmN0aW9uKTsgLy8gVGhpcyBhbHNvIGtlZXBzIHRoZSBm
dW5jdGlvbnMnIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSBhbGl2ZS4KIH0KIAogdm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9jaykKIHsKKyAgICBtX2luc3RhbmNl
LT5maW5hbGl6ZUNyZWF0aW9uKHdhc21Db2RlQmxvY2suY29weVJlZigpKTsKKyAgICBtX3dhc21D
b2RlQmxvY2sgPSB3YXNtQ29kZUJsb2NrLnB0cigpOworCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF3YXNtQ29kZUJsb2NrLT5ydW5uYWJsZSgp
KSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtF
cnJvclN0cnVjdHVyZSgpLCB3YXNtQ29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlQod2FzbUNvZGVCbG9jay0+aXNT
YWZlVG9SdW4obWVtb3J5TW9kZSgpKSk7Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29k
ZUJsb2NrID0gbW9kdWxlKCktPmNvZGVCbG9jayhtZW1vcnlNb2RlKCkpOwotICAgIGlmIChjb2Rl
QmxvY2spIHsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBqc0NvZGVCbG9jayA9IG1fbW9k
dWxlLT5jb2RlQmxvY2sobWVtb3J5TW9kZSgpKTsKKyAgICBpZiAoanNDb2RlQmxvY2spIHsKICAg
ICAgICAgLy8gQSBDb2RlQmxvY2sgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcGlsZWQuIElm
IHNvLCBpdCBtZWFucwogICAgICAgICAvLyB0aGF0IHRoZSBDb2RlQmxvY2sgd2UgYXJlIHRyeWlu
ZyB0byBjb21waWxlIG11c3QgYmUgdGhlIHNhbWUKICAgICAgICAgLy8gYmVjYXVzZSB3ZSB3aWxs
IG5ldmVyIGNvbXBpbGUgYSBDb2RlQmxvY2sgYWdhaW4gb25jZSBpdCdzCiAgICAgICAgIC8vIHJ1
bm5hYmxlLgotICAgICAgICBBU1NFUlQoJmNvZGVCbG9jay0+Y29kZUJsb2NrKCkgPT0gd2FzbUNv
ZGVCbG9jay5wdHIoKSk7Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJs
b2NrKTsKKyAgICAgICAgQVNTRVJUKCZqc0NvZGVCbG9jay0+Y29kZUJsb2NrKCkgPT0gd2FzbUNv
ZGVCbG9jay5wdHIoKSk7CisgICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywganNDb2Rl
QmxvY2spOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmNyZWF0ZSh2bSwgd2FzbUNvZGVCbG9jay5jb3B5UmVmKCksIG1fbW9kdWxlLmdl
dCgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFjb2RlQmxvY2stPnJ1bm5hYmxlKCkpKSB7Ci0g
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtF
cnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJy
b3JTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOworICAgICAgICBqc0Nv
ZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgV1RGTW92ZSh3YXNt
Q29kZUJsb2NrKSwgbV9tb2R1bGUuZ2V0KCkpOworICAgICAgICBpZiAoVU5MSUtFTFkoIWpzQ29k
ZUJsb2NrLT5ydW5uYWJsZSgpKSkgeworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywg
c2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2Jq
ZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJlKCksIGpzQ29kZUJsb2NrLT5lcnJv
ck1lc3NhZ2UoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1f
Y29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKLSAgICAgICAgbW9kdWxlKCktPnNl
dENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBjb2RlQmxvY2spOworICAgICAgICBtX2NvZGVC
bG9jay5zZXQodm0sIHRoaXMsIGpzQ29kZUJsb2NrKTsKKyAgICAgICAgbV9tb2R1bGUtPnNldENv
ZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBqc0NvZGVCbG9jayk7CiAgICAgfQogCiAgICAgYXV0
byogbW9kdWxlUmVjb3JkID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKj4obV9tb2R1
bGVOYW1lc3BhY2VPYmplY3QtPm1vZHVsZVJlY29yZCgpKTsKLSAgICBtb2R1bGVSZWNvcmQtPmxp
bmsoZXhlYywgbW9kdWxlKCksIHRoaXMpOworICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBt
X21vZHVsZS5nZXQoKSwgdGhpcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKIAogICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRl
KGV4ZWMpOwpAQCAtMTI5LDcgKzEzNiw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpm
aW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBSZWY8V2FzbTo6CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIH0KIAotSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmpl
Y3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3Ry
dWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSwgUmVmPFdhc206Okluc3RhbmNlPiYmIGluc3RhbmNl
KQogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE1
OCw4ICsxNjUsOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFt
ZXNwYWNlKGV4ZWMpOwogICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0
eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVyZS4KLSAgICBhdXRvKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0u
aGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3Vu
dCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1vZHVs
ZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxlTmFtZXNwYWNlKTsKKyAgICBhdXRvKiBqc0lu
c3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNl
Pih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlv
bkNvdW50KCkpKSkgSlNXZWJBc3NlbWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwg
bW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpLCBXVEZNb3ZlKGluc3RhbmNl
KSk7CisgICAganNJbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGpzTW9kdWxlLCBtb2R1bGVO
YW1lc3BhY2UpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7
CiAKICAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVt
cHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVt
b3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4K
QEAgLTE5MCwxNSArMTk3LDIxIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIGltcG9ydEZhaWxNZXNz
YWdlKGltcG9ydCwgImltcG9ydCBmdW5jdGlvbiIsICJtdXN0IGJlIGNhbGxhYmxlIikpKTsKIAor
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjYWxsZWVJbnN0YW5jZSA9IG51bGxw
dHI7CisgICAgICAgICAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50
cnlwb2ludCA9IG51bGxwdHI7CiAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nh
c3Q8SlNPYmplY3QqPih2YWx1ZSk7CisKICAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4
cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKiB3YXNtRnVuY3Rpb247CiAgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5
SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0
aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2Vz
IG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vy
cm9yLgogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0
dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKKyAgICAgICAgICAg
ICAgICBpZiAod2FzbUZ1bmN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2ln
bmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxlZUluc3RhbmNlID0gd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpOworICAg
ICAgICAgICAgICAgICAgICB3YXNtRW50cnlwb2ludCA9IHdhc21GdW5jdGlvbi0+d2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNt
V3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICAv
LyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgpAQCAtMjE1LDcgKzIyOCwxMCBAQCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBK
U0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVsZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMg
Yi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5k
IHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCiAKICAgICAgICAgICAgIEFTU0VSVChudW1JbXBv
cnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+
aW1wb3J0RnVuY3Rpb25zKClbbnVtSW1wb3J0RnVuY3Rpb25zKytdLnNldCh2bSwgaW5zdGFuY2Us
IGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEltcG9ydEZ1bmN0aW9uSW5mbyogaW5mbyA9IGpzSW5z
dGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhudW1JbXBvcnRGdW5jdGlvbnMrKyk7CisgICAgICAg
ICAgICBpbmZvLT50YXJnZXRJbnN0YW5jZSA9IGNhbGxlZUluc3RhbmNlOworICAgICAgICAgICAg
aW5mby0+d2FzbUVudHJ5cG9pbnQgPSB3YXNtRW50cnlwb2ludDsKKyAgICAgICAgICAgIGluZm8t
PmltcG9ydEZ1bmN0aW9uLnNldCh2bSwganNJbnN0YW5jZSwgZnVuY3Rpb24pOwogICAgICAgICAg
ICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0yNDMsNyArMjU5LDggQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKIAog
ICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIHRhYmxlcy4KICAgICAgICAgICAgIC8vIGlp
aS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBpbnN0YW5jZS0+
bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3RhbmNl
LT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0
YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFibGUoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKQEAgLTI3Myw4ICsyOTAsOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwog
CiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCiAgICAgICAgICAgICAv
LyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIEFTU0VS
VCghaW5zdGFuY2UtPm1fbWVtb3J5KTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5z
ZXQodm0sIGluc3RhbmNlLCBtZW1vcnkpOworICAgICAgICAgICAgQVNTRVJUKCFqc0luc3RhbmNl
LT5tX21lbW9yeSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9y
eSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI5MSwxMyArMzA4LDEzIEBAIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZt
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFs
cyA9PSBpbXBvcnQua2luZEluZGV4KTsKICAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3Jt
YXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBlKSB7CiAgICAgICAgICAgICBjYXNl
IFdhc206OkkzMjoKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9y
dEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAgICAgICAgICAgICAganNJbnN0
YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgV2Fz
bTo6RjMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xv
YmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKKyAg
ICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRH
bG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChleGVjKSkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAg
ICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGpz
SW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC0zMTUsMTQgKzMzMiwyMSBAQCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKUwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAm
JiAhaGFzTWVtb3J5SW1wb3J0KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwogICAgICAgICAgICAgLy8gV2UgY3JlYXRl
IGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9uLgotICAgICAgICAgICAgUmVm
UHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5t
YXhpbXVtKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pc0ltcG9ydCgpKTsKKworICAgICAgICAgICAgYXV0byoganNNZW1vcnkgPSBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOworCisgICAgICAgICAgICBSZWZQdHI8
V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZShtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgp
LAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0QXN5bmMoQ29sbGVj
dGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAgICAgICAgICBbJnZtXSAoKSB7IHZtLmhlYXAu
Y29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAgICAgICAgICBb
JnZtLCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VD
b3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2FsbGJhY2sodm0sIG9s
ZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAgICAgICAgICBpZiAoIW1lbW9yeSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
ZXhlYykpOwogCi0gICAgICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnkuc2V0KHZtLCBpbnN0YW5j
ZSwKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAgICAgIGpzTWVtb3J5LT5hZG9w
dChtZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5zZXRN
ZW1vcnkodm0sIGpzTWVtb3J5KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzYsMTkgKzM2MCwyNCBA
QCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlv
bi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkgewogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQo
KSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBk
ZWZpbml0aW9uLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2Vi
QXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOworICAgICAgICAgICAgUmVmUHRyPFdhc206OlRh
YmxlPiB3YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6Y3JlYXRlKG1vZHVsZUluZm9ybWF0aW9uLnRh
YmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0
aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICBpZiAoIXdhc21UYWJsZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywg
dm0sICJjb3VsZG4ndCBjcmVhdGUgVGFibGUiKSk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5
VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCB3YXNt
VGFibGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlz
IGJlIGFibGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFzc2VtYmx5VGFibGUgd2UndmUgZGVmaW5lZC4K
ICAgICAgICAgICAgIC8vIElmIGl0J3MgZGVmaW5lZCB0byBiZSB0b28gbGFyZ2UsIHdlIHNob3Vs
ZCBoYXZlIHRocm93biBhIHZhbGlkYXRpb24gZXJyb3IuCiAgICAgICAgICAgICB0aHJvd1Njb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBBU1NFUlQodGFibGUpOwotICAgICAg
ICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZtLCBpbnN0YW5jZSwgdGFibGUpOworICAgICAg
ICAgICAganNJbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGpzSW5zdGFuY2UsIHRhYmxlKTsKKyAg
ICAgICAgICAgIGpzSW5zdGFuY2UtPm1fd2FzbVRhYmxlID0gdGFibGUtPnRhYmxlKCk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKCFpbnN0YW5jZS0+bWVtb3J5KCkpIHsKKyAgICBp
ZiAoIWpzSW5zdGFuY2UtPm1lbW9yeSgpKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZl
IGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0IHdhc20gLT4gd2FzbSB0aHVua3MgYXZvaWQgY2hlY2tp
bmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0cnlpbmcgdG8gc2V0IHBpbm5lZCByZWdpc3Rl
cnMuCi0gICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLCBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0s
IDAsIDApLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAgYXV0byoganNNZW1vcnkgPSBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGpzTWVtb3J5LT5h
ZG9wdChXYXNtOjpNZW1vcnk6OmNyZWF0ZSgpLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBq
c0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIGpzTWVtb3J5KTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICB9CiAgICAgCkBAIC0zNjAsMjAgKzM4
OSwxMyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgQVNTRVJUKGdsb2Jh
bC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFsOjpJc0ltcG9ydCk7CiAgICAgICAg
ICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpHbG9iYWw6OkZyb21H
bG9iYWxJbXBvcnQpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRz
T3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsKLSAgICAgICAgICAgICAgICBpbnN0
YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9i
YWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOworICAgICAgICAgICAgICAgIGpzSW5zdGFu
Y2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2JhbEluZGV4LCBqc0luc3RhbmNlLT5pbnN0YW5j
ZSgpLmxvYWRJNjRHbG9iYWwoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xv
YmFsSW5kZXgsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKTsKKyAgICAgICAgICAg
ICAgICBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFs
LmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNT
RVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOwotCi0gICAgcmV0dXJuIGluc3RhbmNlOwotfQot
Ci1zaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMu
c2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICByZXR1cm4ganNJbnN0YW5jZTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmluZGV4IDNjZmU1NDkuLmQ1MjU1MGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldhc21J
bnN0YW5jZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzksNzUgKzQxLDk0IEBAIGNsYXNz
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNs
YXNzIFdlYkFzc2VtYmx5VG9KU0NhbGxlZTsKIAorbmFtZXNwYWNlIFdhc20geworY2xhc3MgQ29k
ZUJsb2NrOworY2xhc3MgVGFibGU7IC8vIEZJWE1FIHJlbW92ZSB0aGlzIGFmdGVyIHJlZmFjdG9y
aW5nLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKK30KKwogY2xhc3MgSlNXZWJBc3NlbWJs
eUluc3RhbmNlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxl
KiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1v
ZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0
YW5jZT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAg
ICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay5nZXQoKTsgfQogICAgIHZvaWQgZmluYWxpemVDcmVhdGlvbihWTSYsIEV4ZWNTdGF0
ZSosIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYpOwotCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSog
bW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLQotICAgIEpTT2JqZWN0
KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpIHsgUkVMRUFTRV9BU1NFUlQoaWR4IDwgbV9u
dW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4gaW1wb3J0RnVuY3Rpb25zKClbaWR4XS5nZXQoKTsg
fQotCisgICAgCisgICAgV2FzbTo6SW5zdGFuY2UmIGluc3RhbmNlKCkgeyByZXR1cm4gbV9pbnN0
YW5jZS5nZXQoKTsgfQorICAgIFdhc206OkNvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVy
biAmbV92bS0+d2FzbUNvbnRleHQ7IH0KICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9k
dWxlTmFtZXNwYWNlT2JqZWN0KCkgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3QuZ2V0
KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5n
ZXQoKTsgfQorICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogd2ViQXNzZW1ibHlUb0pTQ2FsbGVl
KCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRNZW1vcnko
Vk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsg
bV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldE1lbW9yeShWTSYg
dm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBtX21l
bW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgbV93YXNtTWVtb3J5ID0gJm1lbW9yeSgpLT5tZW1v
cnkoKTsgfQogICAgIFdhc206Ok1lbW9yeU1vZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9y
eSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAotICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUo
KSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9Ci0KLSAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9Ci0gICAgaW50
NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5n
ZXQoKVtpXTsgfQotICAgIGZsb2F0IGxvYWRGMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMyR2xvYmFsKGkpKTsgfQotICAgIGRvdWJs
ZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxk
b3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9Ci0gICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQg
aSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQoKVtpXSA9IGJpdHM7IH0KLQotICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX21lbW9yeSk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUlu
c3RhbmNlLCBtX3RhYmxlKTsgfQorICAgIC8vIFRhaWwgYWNjZXNzb3JzLgorICAgIHN0YXRpYyBz
aXplX3Qgb2Zmc2V0T2ZUYWlsKCkgeyByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNp
emVvZih1aW50NjRfdCk+KHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsgfQorICAgIHN0
cnVjdCBJbXBvcnRGdW5jdGlvbkluZm8geworICAgICAgICAvLyBUYXJnZXQgaW5zdGFuY2UgYW5k
IGVudHJ5cG9pbnQgYXJlIG9ubHkgc2V0IGZvciB3YXNtLT53YXNtIGNhbGxzLCBhbmQgYXJlIG90
aGVyd2lzZSBudWxscHRyLiBUaGUgZW1iZWRkZXItc3BlY2lmaWMgbG9naWMgb2NjdXJzIHRocm91
Z2ggaW1wb3J0IGZ1bmN0aW9uLgorICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHRhcmdl
dEluc3RhbmNlIHsgbnVsbHB0ciB9OworICAgICAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiB3YXNtRW50cnlwb2ludCB7IG51bGxwdHIgfTsKKyAgICAgICAgV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PiBpbXBvcnRGdW5jdGlvbiB7IFdyaXRlQmFycmllcjxKU09iamVjdD4oKSB9Owor
ICAgIH07CisgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbXBvcnRGdW5jdGlvbkluZm8oc2l6ZV90
IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiAmYml0d2lzZV9jYXN0PEltcG9ydEZ1bmN0aW9u
SW5mbyo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlRhaWwoKSlbaW1wb3J0
RnVuY3Rpb25OdW1dOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlRhcmdldEluc3RhbmNl
KHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBv
cnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNF
VE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgdGFyZ2V0SW5zdGFuY2UpOyB9CisgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50KHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyBy
ZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRG
dW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbUVu
dHJ5cG9pbnQpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNp
emVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRG
dW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9G
KEltcG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVuY3Rpb24pOyB9CisgICAgSlNPYmplY3QqIGlt
cG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9uTnVtKSB7IFJFTEVBU0VfQVNTRVJU
KGltcG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4gaW1wb3J0
RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKS0+aW1wb3J0RnVuY3Rpb24uZ2V0KCk7IH0K
KyAgICAKKyAgICAvLyBGSVhNRSByZW1vdmUgdGhlc2UgYWZ0ZXIgcmVmYWN0b3JpbmcgdGhlbSBv
dXQuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorICAgIFdhc206Ok1lbW9yeSYgaW50ZXJu
YWxNZW1vcnkoKSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5KCk7IH0KKyAgICBXYXNtOjpDb2Rl
QmxvY2smIHdhc21Db2RlQmxvY2soKSBjb25zdCB7IHJldHVybiAqbV9pbnN0YW5jZS0+Y29kZUJs
b2NrKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbVRhYmxlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93YXNtVGFibGUpOyB9
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhbGxlZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fY2FsbGVlKTsgfQotICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZWTSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2Us
IG1fdm0pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fY29kZUJsb2NrKTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93YXNtQ29kZUJsb2NrKTsgfQogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jYWNoZWRTdGFja0xpbWl0KTsgfQotICAg
IHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSB7IHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9y
dEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZJbXBv
cnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKHNpemVvZihXcml0ZUJh
cnJpZXI8SlNDZWxsPikpOyB9Ci0KLSAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIHdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZSgpIHsgcmV0dXJuIG1fY2FsbGVlLmdldCgpOyB9Ci0KLSAgICB2b2lkKiBj
YWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9Ci0g
ICAgdm9pZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZvaWQqIGxpbWl0KSB7IG1fY2FjaGVkU3RhY2tM
aW1pdCA9IGxpbWl0OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZldhc21NZW1vcnko
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21N
ZW1vcnkpOyB9CisgICAgdm9pZCogY2FjaGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgUkVMRUFTRV9B
U1NFUlQobV9pbnN0YW5jZS0+Y2FjaGVkU3RhY2tMaW1pdCgpID09IG1fY2FjaGVkU3RhY2tMaW1p
dCk7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7IH0KKyAgICB2b2lkIHNldENhY2hlZFN0YWNr
TGltaXQodm9pZCogbGltaXQpIHsgbV9pbnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChsaW1p
dCk7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9CisgICAgV2FzbTo6TWVtb3J5KiB3YXNt
TWVtb3J5KCkgeyByZXR1cm4gbV93YXNtTWVtb3J5OyB9CisgICAgV2FzbTo6TW9kdWxlJiB3YXNt
TW9kdWxlKCkgeyByZXR1cm4gbV93YXNtTW9kdWxlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5j
dGlvbnMpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2ln
bmVkIG51bUltcG9ydEZ1bmN0aW9ucywgUmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0
aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBudW1JbXBvcnRGdW5jdGlv
bnMpCiAgICAgewotICAgICAgICByZXR1cm4gKG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBz
aXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogbnVtSW1wb3J0RnVuY3Rpb25zKS51bnNhZmVH
ZXQoKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXRPZlRhaWwoKSArIHNpemVvZihJbXBvcnRGdW5j
dGlvbkluZm8pICogbnVtSW1wb3J0RnVuY3Rpb25zKS51bnNhZmVHZXQoKTsKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgVk0qIG1fdm07Ci0gICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0
RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4q
PihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7
IH0KLSAgICBzaXplX3QgZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoKSBjb25zdDsKKyAgICBKU1dlYkFz
c2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQor
CisgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2luc3RhbmNlOwogCisgICAgVk0qIG1fdm07CiAg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJh
cnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0Owog
ICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxlOwogICAgIFdyaXRlQmFycmllcjxX
ZWJBc3NlbWJseVRvSlNDYWxsZWU+IG1fY2FsbGVlOwotICAgIE1hbGxvY1B0cjx1aW50NjRfdD4g
bV9nbG9iYWxzOworICAgIAorICAgIC8vIEZJWE1FIHJlbW92ZSB0aGVzZSBhZnRlciByZWZhY3Rv
cmluZyB0aGVtIG91dC4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCiAgICAgdm9pZCogbV9j
YWNoZWRTdGFja0xpbWl0IHsgYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnRwdHJfdD46Om1heCgpKSB9OworICAgIFdhc206OkNvZGVCbG9jayogbV93YXNtQ29kZUJs
b2NrIHsgbnVsbHB0ciB9OworICAgIFdhc206Ok1vZHVsZSYgbV93YXNtTW9kdWxlOworICAgIFdh
c206Ok1lbW9yeSogbV93YXNtTWVtb3J5IHsgbnVsbHB0ciB9OworICAgIFdhc206OlRhYmxlKiBt
X3dhc21UYWJsZSB7IG51bGxwdHIgfTsKKyAgICB1aW50NjRfdCogbV9nbG9iYWxzIHsgbnVsbHB0
ciB9OworCiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
CmluZGV4IDIyM2M1OGIuLmQ2NDBhNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCkBAIC0zNyw3ICszNyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6c19p
bmZvID0geyAiV2ViQXNzZW1ibHkuTWVtb3J5IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TWVtb3J5KSB9OwogCi1KU1dl
YkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6TWVtb3J5PiYmIG1l
bW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogZ2xvYmFs
T2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtNTAsMTAgKzUwLDE2IEBA
IEpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0CiAgICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUV2YWxFcnJvcihl
eGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwog
Ci0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFz
c2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJl
LCBXVEZNb3ZlKG1lbW9yeSkpOwotICAgIGluc3RhbmNlLT5tX21lbW9yeS0+Y2hlY2soKTsKLSAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAg
ICBhdXRvKiBtZW1vcnkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5
TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlKTsKKyAg
ICBtZW1vcnktPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gbWVtb3J5OworfQorICAg
IAordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjphZG9wdChSZWY8V2FzbTo6TWVtb3J5PiYmIG1l
bW9yeSkKK3sKKyAgICBtX21lbW9yeS5zd2FwKG1lbW9yeSk7CisgICAgQVNTRVJUKG1fbWVtb3J5
LT5yZWZDb3VudCgpID09IDEpOworICAgIG1fbWVtb3J5LT5jaGVjaygpOwogfQogCiBTdHJ1Y3R1
cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNjEsMTMgKzY3LDEw
IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2Vt
Ymx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1vcnk+
JiYgbWVtb3J5KQorSlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAg
ICwgbV9tZW1vcnkoV1RGTW92ZShtZW1vcnkpKQorICAgICwgbV9tZW1vcnkoV2FzbTo6TWVtb3J5
OjpjcmVhdGUoKS5yZWxlYXNlTm9uTnVsbCgpKQogewotICAgIEFTU0VSVChtX21lbW9yeS0+cmVm
Q291bnQoKSA9PSAxKTsKLSAgICBtX21lbW9yeUJhc2UgPSBtX21lbW9yeS0+bWVtb3J5KCk7Ci0g
ICAgbV9tZW1vcnlTaXplID0gbV9tZW1vcnktPnNpemUoKTsKIH0KIAogSlNBcnJheUJ1ZmZlciog
SlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKQEAgLTg1LDUyICs4OCw0NSBAQCBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAg
IHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7CiB9CiAKLVdhc206OlBhZ2VDb3VudCBKU1dl
YkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBk
ZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCitXYXNtOjpQYWdlQ291
bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWlu
dDMyX3QgZGVsdGEpCiB7Ci0gICAgLy8gTm90ZTogV2UgY2FuIG9ubHkgdXNlIGV4ZWMgaWYgc2hv
dWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlIGlzIHRydWUuCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBXYXNtOjpQYWdlQ291bnQgb2xkUGFn
ZUNvdW50ID0gbWVtb3J5KCkuc2l6ZUluUGFnZXMoKTsKLQotICAgIGlmICghV2FzbTo6UGFnZUNv
dW50Ojppc1ZhbGlkKGRlbHRhKSkgewotICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25z
T25GYWlsdXJlKQorICAgIGF1dG8gZ3Jvd24gPSBtZW1vcnkoKS5ncm93KFdhc206OlBhZ2VDb3Vu
dChkZWx0YSkpOworICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgc3dpdGNoIChncm93bi5lcnJv
cigpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxp
ZERlbHRhOgogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93
IGV4cGVjdHMgdGhlIGRlbHRhIHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCIpKSk7Ci0gICAgICAg
IHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKLSAgICB9Ci0KLSAgICBXYXNtOjpQYWdlQ291bnQg
bmV3U2l6ZSA9IG9sZFBhZ2VDb3VudCArIFdhc206OlBhZ2VDb3VudChkZWx0YSk7Ci0gICAgaWYg
KCFuZXdTaXplKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWls
UmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNz
ZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUgZ3Jvd24gc2l6ZSB0byBiZSBhIHZhbGlkIHBh
Z2UgY291bnQiKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6TWVt
b3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IHdvdWxkIGV4Y2VlZCB0aGUgbWVtb3J5
J3MgZGVjbGFyZWQgbWF4aW11bSBzaXplIikpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihleGVjKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICByZXR1
cm4gV2FzbTo6UGFnZUNvdW50KCk7CiAgICAgfQogCi0gICAgaWYgKGRlbHRhKSB7Ci0gICAgICAg
IGJvb2wgc3VjY2VzcyA9IG1lbW9yeSgpLmdyb3codm0sIG5ld1NpemUpOwotICAgICAgICBpZiAo
IXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX21lbW9yeUJhc2UgPT0gbWVtb3J5KCku
bWVtb3J5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZSA9PSBtZW1vcnkoKS5z
aXplKCkpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkK
LSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLSAgICAgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291
bnQoKTsKLSAgICAgICAgfQotICAgICAgICBtX21lbW9yeUJhc2UgPSBtZW1vcnkoKS5tZW1vcnko
KTsKLSAgICAgICAgbV9tZW1vcnlTaXplID0gbWVtb3J5KCkuc2l6ZSgpOwotICAgIH0KKyAgICBy
ZXR1cm4gZ3Jvd24udmFsdWUoKTsKK30KIAotICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRo
ZSBvbGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nCi0gICAg
Ly8gdG8gc3RhbGUgbWVtb3J5Lgordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vz
c0NhbGxiYWNrKFZNJiB2bSwgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFn
ZUNvdW50IG5ld1BhZ2VDb3VudCkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0aGUg
b2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1pZ2h0IG5vdyBiZSBwb2ludGluZyB0byBzdGFs
ZSBtZW1vcnkuCiAgICAgLy8gTmV1dGVyIHRoZSBvbGQgYXJyYXkuCiAgICAgaWYgKG1fYnVmZmVy
KSB7CiAgICAgICAgIG1fYnVmZmVyLT5uZXV0ZXIodm0pOwogICAgICAgICBtX2J1ZmZlciA9IG51
bGxwdHI7CiAgICAgICAgIG1fYnVmZmVyV3JhcHBlci5jbGVhcigpOwogICAgIH0KLQorICAgIAog
ICAgIG1lbW9yeSgpLmNoZWNrKCk7Ci0KLSAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKFdhc206OlBhZ2VDb3VudChkZWx0YSkuYnl0ZXMoKSk7Ci0gICAgcmV0dXJuIG9sZFBh
Z2VDb3VudDsKKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5l
d1BhZ2VDb3VudC5ieXRlcygpIC0gb2xkUGFnZUNvdW50LmJ5dGVzKCkpOwogfQogCiB2b2lkIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAppbmRleCAxZDA2
YzRjLi40YmJiY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5oCkBAIC00OCwyNiArNDgsMjMgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gJnZtLmVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlOwogICAgIH0K
IAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0m
LCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5PiYmKTsKKyAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseU1lbW9yeSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKKyAgICB2b2lkIGFkb3B0KFJlZjxX
YXNtOjpNZW1vcnk+JiYpOwogICAgIFdhc206Ok1lbW9yeSYgbWVtb3J5KCkgeyByZXR1cm4gbV9t
ZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBidWZmZXIoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCopOwotICAgIFdhc206OlBhZ2VDb3VudCBncm93KFZNJiwgRXhlY1N0YXRlKiwgdWlu
dDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKLQotICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1vcnlCYXNlKTsgfQotICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlNZW1vcnksIG1fbWVtb3J5U2l6ZSk7IH0KKyAgICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhWTSYs
IEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhKTsKKyAgICB2b2lkIGdyb3dTdWNjZXNzQ2FsbGJh
Y2soVk0mLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdlQ291bnQgbmV3
UGFnZUNvdW50KTsKIAogcHJpdmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3Ry
dWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4mJik7CisgICAgSlNXZWJBc3NlbWJseU1lbW9yeShW
TSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQqIG1fbWVtb3J5QmFzZTsKLSAgICBz
aXplX3QgbV9tZW1vcnlTaXplOwogICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OwogICAg
IFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CiAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXggYmFiMTE4MS4uNDBjMTAwNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRl
ICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKICNpbmNsdWRlICJXZWJBc3Nl
bWJseVRvSlNDYWxsZWUuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02MSw2
ICs2Miw3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCisKIEpTV2ViQXNzZW1ibHlNb2R1bGU6OkpT
V2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206
Ok1vZHVsZT4mJiBtb2R1bGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21v
ZHVsZShXVEZNb3ZlKG1vZHVsZSkpCkBAIC05MSw2ICs5MywzNiBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIFdhc206OlNpZ25hdHVyZUluZm9y
bWF0aW9uOjp0cnlDbGVhbnVwKCk7CiB9CiAKK2NvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9u
JiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOworfQorCitTeW1ib2xUYWJsZSog
SlNXZWJBc3NlbWJseU1vZHVsZTo6ZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOworfQorCitXYXNtOjpTaWduYXR1cmVJbmRl
eCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdAoreworICAgIHJldHVybiBtX21v
ZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhT
cGFjZSk7Cit9CisKK1dlYkFzc2VtYmx5VG9KU0NhbGxlZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6
Y2FsbGVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7Cit9CisKK0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayhXYXNtOjpN
ZW1vcnlNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KG1vZGUpXS5nZXQoKTsKK30KKworV2FzbTo6TW9kdWxlJiBKU1dlYkFzc2VtYmx5TW9k
dWxlOjptb2R1bGUoKQoreworICAgIHJldHVybiBtX21vZHVsZS5nZXQoKTsKK30KKwogdm9pZCBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxvY2soVk0mIHZtLCBXYXNtOjpNZW1vcnlNb2Rl
IG1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBtX2NvZGVC
bG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2sp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5oCmluZGV4IDNkYzY3YTMuLjAxYjVkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTMwLDE1ICszMCwxOSBA
QAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCi0jaW5jbHVkZSAiV2FzbU1v
ZHVsZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5o
PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1l
c3BhY2UgV2FzbSB7CiBjbGFzcyBNb2R1bGU7CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiBj
bGFzcyBQbGFuOwordXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1aW50MzJfdDsKIH0KIAogY2xhc3Mg
U3ltYm9sVGFibGU7CkBAIC01MiwyMyArNTYsMjAgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgV2FzbTo6TW9k
dWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgV1RGOjpFeHBlY3RlZDxSZWZQdHI8V2FzbTo6TW9kdWxlPiwgU3RyaW5nPiYmKTsKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOwogCi0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9y
bWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7IH0K
LSAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4
cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9Ci0gICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFj
ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQotICAgIFdl
YkFzc2VtYmx5VG9KU0NhbGxlZSogY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWUuZ2V0
KCk7IH0KKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRp
b24oKSBjb25zdDsKKyAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdDsK
KyAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdDsKKyAgICBXZWJBc3NlbWJs
eVRvSlNDYWxsZWUqIGNhbGxlZSgpIGNvbnN0OwogCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tz
W3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLmdldCgpOyB9CisgICAgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSk7CisgICAgdm9pZCBzZXRD
b2RlQmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7
CiAKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZSgpIGNvbnN0OwogCi0gICAgV2Fz
bTo6TW9kdWxlJiBtb2R1bGUoKSB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotICAgIHZvaWQg
c2V0Q29kZUJsb2NrKFZNJiwgV2FzbTo6TWVtb3J5TW9kZSwgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhc206Ok1vZHVsZSYgbW9kdWxlKCk7CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcApp
bmRleCBmZjQ2ZDRkLi5hZGFhNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKQEAgLTI5LDMwICsyOSwyMiBAQAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRl
ICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVRhYmxlOjpzX2lu
Zm8gPSB7ICJXZWJBc3NlbWJseS5UYWJsZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseVRhYmxlKSB9OwogCi1KU1dlYkFz
c2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bSkKK0pTV2ViQXNzZW1ibHlUYWJsZSogSlNXZWJBc3NlbWJs
eVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYgdGFibGUpCiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgYXV0byBleGNlcHRpb24gPSBbJl0gKEpTT2Jq
ZWN0KiBlcnJvcikgewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBl
cnJvcik7CisgICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKSB7Cisg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUV2YWxFcnJvcihl
eGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotCi0gICAgaWYgKCFnbG9iYWxPYmplY3Qt
PndlYkFzc2VtYmx5RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUV2
YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3Nh
Z2UoKSkpOwotCi0gICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKLSAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICB9CiAKLSAgICBh
dXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlU
YWJsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJlLCBpbml0aWFs
LCBtYXhpbXVtKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2bSwg
c3RydWN0dXJlLCBXVEZNb3ZlKHRhYmxlKSk7CiAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC02MiwyMyArNTQsMTUgQEAgU3RydWN0
dXJlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IG1heGltdW0pCitKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlU
YWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYgdGFi
bGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhYmxlKFdURk1vdmUodGFi
bGUpKQogewotICAgIG1fc2l6ZSA9IGluaXRpYWw7Ci0gICAgQVNTRVJUKGlzVmFsaWRTaXplKG1f
c2l6ZSkpOwotICAgIG1fbWF4aW11bSA9IG1heGltdW07Ci0gICAgQVNTRVJUKCFtX21heGltdW0g
fHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOwotCiAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdv
cnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1l
bmRzIGRvaW5nIHNvLgogICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4K
LSAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFs
bG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4o
bV9zaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19j
YXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fc2l6
ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxs
YWJsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWdu
YXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkg
b24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8
V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2Jq
ZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkpOworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQo
KVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAgIH0KIH0KIAogdm9pZCBKU1dlYkFz
c2VtYmx5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTk5LDcgKzgzLDcgQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9zaXpl
OyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPnNpemUoKTsg
KytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzRnVuY3Rpb25zLmdl
dCgpW2ldKTsKIH0KIApAQCAtMTA3LDQ3ICs5MSw0NCBAQCBib29sIEpTV2ViQXNzZW1ibHlUYWJs
ZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IG5ld1Np
emVDaGVja2VkID0gbV9zaXplOwotICAgIG5ld1NpemVDaGVja2VkICs9IGRlbHRhOwotICAgIHVp
bnQzMl90IG5ld1NpemU7Ci0gICAgaWYgKG5ld1NpemVDaGVja2VkLnNhZmVHZXQobmV3U2l6ZSkg
PT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+ICptYXhpbXVtKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWlzVmFsaWRTaXplKG5ld1NpemUpKQorCisgICAgc2l6ZV90IG9sZFNp
emUgPSBzaXplKCk7CisKKyAgICBhdXRvIGdyZXcgPSBtX3RhYmxlLT5ncm93KGRlbHRhKTsKKyAg
ICBpZiAoIWdyZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnVuY3Rpb25zLnJl
YWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihuZXdTaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOworICAgIHNpemVf
dCBuZXdTaXplID0gZ3Jldy52YWx1ZSgpOworICAgIG1fanNGdW5jdGlvbnMucmVhbGxvYyhzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBuZXdTaXplKTsKIAotICAgIGZvciAodWludDMy
X3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkgewotICAgICAgICBuZXcgKCZtX2Z1bmN0
aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworICAgIGZvciAoc2l6ZV90
IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQogICAgICAgICBuZXcgKCZtX2pzRnVuY3Rp
b25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgfQotICAgIG1fc2l6
ZSA9IG5ld1NpemU7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorSlNPYmplY3QqIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIHJldHVybiBtX2pzRnVuY3Rpb25zLmdldCgpW2lu
ZGV4XS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24o
dWludDMyX3QgaW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwor
ICAgIG1fdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5kZXgpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0
KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAgIG1fZnVuY3Rpb25zLmdl
dCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKLSAgICBBU1NFUlQobV9mdW5j
dGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52
YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCiB9CiAKIHZv
aWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4
LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChp
bmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+c2V0RnVuY3Rpb24oaW5kZXgsIGZ1bmN0aW9u
LT5jYWxsYWJsZUZ1bmN0aW9uKCksIGZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAgICBtX2pzRnVu
Y3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBtX2Z1bmN0
aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpOwogfQogCiB2
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRl
eCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGZ1bmN0aW9uKQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwg
ZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgZnVuY3Rpb24tPmluc3RhbmNlKCkpOwogICAg
IG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwotICAg
IG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAppbmRleCBkZjgzZTk3Li40NDg3NTMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOSw1NyArMjksNDIgQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXYXNtTGltaXRzLmgiCisjaW5jbHVkZSAi
V2FzbVRhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFdhc20gewotc3RydWN0IENhbGxhYmxl
RnVuY3Rpb247Ci19Ci0KIGNsYXNzIEpTV2ViQXNzZW1ibHlUYWJsZSA6IHB1YmxpYyBKU0Rlc3Ry
dWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVj
dCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSogY3JlYXRlKEV4ZWNTdGF0
ZSosIFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gbWF4aW11bSk7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSogY3JlYXRlKEV4
ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
bWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsgfQotICAgIHVpbnQzMl90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1
aW50MzJfdCBzaXplKSB7IHJldHVybiBXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUoc2l6ZSk7IH0K
KyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV90
YWJsZS0+bWF4aW11bSgpOyB9CisgICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFibGUtPnNpemUoKTsgfQogICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBkZWx0YSkgV0FSTl9VTlVT
RURfUkVUVVJOOwotICAgIEpTT2JqZWN0KiBnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKLSAg
ICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICAgICAgcmV0
dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOwotICAgIH0KLSAgICB2b2lkIGNs
ZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpOwotICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1
aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiopOwotICAgIHZvaWQgc2V0RnVuY3Rp
b24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsKLQot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9zaXplKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSlNG
dW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBt
X2pzRnVuY3Rpb25zKTsgfQorICAgIEpTT2JqZWN0KiBnZXRGdW5jdGlvbih1aW50MzJfdCk7Cisg
ICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIHNldEZ1bmN0aW9uKFZN
JiwgdWludDMyX3QsIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsKKyAgICB2b2lkIHNldEZ1bmN0aW9u
KFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKik7CiAKLSAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKQotICAgIHsKLSAgICAgICAgLy8gVGhp
cyB0b3BzIG91dCBhdCB+Mzg0IE1CIHdvcnRoIG9mIGRhdGEgaW4gdGhpcyBjbGFzcy4KLSAgICAg
ICAgcmV0dXJuIHNpemUgPCAoMSA8PCAyNCk7Ci0gICAgfQorICAgIFdhc206OlRhYmxlKiB0YWJs
ZSgpIHsgcmV0dXJuIG1fdGFibGUucHRyKCk7IH0KIAogcHJpdmF0ZToKLSAgICBKU1dlYkFzc2Vt
Ymx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtYXhpbXVtKTsKKyAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1
cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIE1hbGxvY1B0cjxXYXNtOjpD
YWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICBSZWY8V2FzbTo6VGFibGU+IG1fdGFi
bGU7CiAgICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+IG1fanNGdW5jdGlvbnM7
Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOwotICAgIHVpbnQzMl90IG1f
c2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2FzbVRvSlMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4
YWQ2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5jcHAKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YXNtVG9KUy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ0NhbGxI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCisjaW5jbHVkZSAiSklURXhjZXB0
aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCisjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRp
b25UeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIEpJ
VCA9IENDYWxsSGVscGVyczsKKworc3RhdGljIHZvaWQgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwo
SklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIC8v
IFdlJ3JlIGNhbGxpbmcgb3V0IG9mIHRoZSBjdXJyZW50IFdlYkFzc2VtYmx5Lkluc3RhbmNlLiBU
aGF0IEluc3RhbmNlIGhhcyBhIGxpc3Qgb2YgYWxsIGl0cyBpbXBvcnQgZnVuY3Rpb25zLgorICAg
IGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShyZXN1bHQpOworICAgIGppdC5sb2FkUHRyKEpJ
VDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRG
dW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOworfQorCitFeHBlY3RlZDxNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSogdm0sIEJhZzxDYWxsTGlu
a0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5z
aWduZWQgaW1wb3J0SW5kZXgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lc24n
dCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCisgICAgLy8g
SXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY5NDAxCisgICAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNt
Q0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCBKU0NDYWxsaW5nQ29udmVu
dGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7CisgICAgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsK
KyAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisgICAg
SklUIGppdDsKKworICAgIC8vIE5vdGU6IFdhc21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhhdCB0
aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVlIHNhdmUuCisgICAgLy8gSWYgd2UgZXZlciBj
aGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gY2hhbmdlIFdhc21CM0lSR2VuZXJhdG9y
LgorCisgICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRp
b24gaXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KKyAgICBBU1NFUlQoIWpzQ0MubV9ncHJBcmdzLnNp
emUoKSk7CisgICAgQVNTRVJUKCFqc0NDLm1fZnByQXJncy5zaXplKCkpOworCisgICAgaml0LmVt
aXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIo
MCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBG
SVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTMyMQorCisgICAgeworICAgICAgICBib29sIGhhc0JhZEk2NFVz
ZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJldHVyblR5cGUo
KSA9PSBJNjQ7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJn
Q291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJn
VHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChh
cmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6
CisgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAgY2FzZSBJNjQ6IHsKKyAgICAgICAgICAg
ICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkgewor
ICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgaml0
LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisKKyAgICAg
ICAgICAgIC8vIFN0b3JlIENhbGxlZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgICAgICAgICAgYXV0byBjYWxsID0gaml0
LmNhbGwoKTsKKyAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CisK
KyAgICAgICAgICAgIHZvaWQgKCp0aHJvd0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlKSAtPiB2b2lkIHsKKyAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAg
ICAgICAgICAgICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVj
LCAqdm0sIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1
cmUoKSwgQVNDSUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJn
dW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7CisgICAgICAgICAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZm
ZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CisKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7CisgICAgICAgICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0
IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZl
cyBhdCBsZWFzdCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3Qg
bmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNh
bGxlZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiB0aGlzLgorICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdD
YWxsZWVTYXZlcyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgbWlzc2luZ0Nh
bGxlZVNhdmVzLmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIEFTU0VS
VChtaXNzaW5nQ2FsbGVlU2F2ZXMuaXNFbXB0eSgpKTsKKworICAgIGlmICghT3B0aW9uczo6dXNl
Q2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzKCkpIHsKKyAgICAgICAgU2NyYXRjaEJ1ZmZl
ciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhcmdDb3VudCAqIHNp
emVvZih1aW50NjRfdCkpOworICAgICAgICBjaGFyKiBidWZmZXIgPSBhcmdDb3VudCA/IHN0YXRp
Y19jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKKyAg
ICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkRlBScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGJ1ZmZlck9mZnNldCA9IDA7CisgICAg
ICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBjb25zdCBHUFJS
ZWcgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ0NTMDsKKyAgICAgICAgaml0LnN1YlB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIHNpemVvZihSZWdpc3RlcikpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcikp
OworCisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7
ICsrYXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1l
bnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlm
dW5jOgorICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIGdwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3
YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2Fz
bUNDLm1fZ3ByQXJnc1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJn
dW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAg
ICAgICAgICAgICAgICBncHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBmck9mZnNldCksIGdwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9
IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGpp
dC56ZXJvRXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoZ3ByUmVnLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAg
ICsrbWFyc2hhbGxlZEdQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7
CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFy
c2hhbGxlZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVn
aXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnBy
UmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZEZsb2F0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQp
LCBmcHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0
ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0
VG9Eb3VibGUoZnByUmVnLCBmcHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91Ymxl
VG82NChmcHJSZWcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNj
cmF0Y2hHUFIsIGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7CisgICAgICAgICAgICAgICAgKyttYXJz
aGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgRjY0OiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAg
ICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkK
KyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVk
RlBSc10uZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMg
YXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBG
UFJJbmZvOjphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91Ymxl
KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJS
ZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnBy
UmVnLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BS
LCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQ
UnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJ1ZmZlck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAg
ICB9CisgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAo
YXJnQ291bnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBHQyBzaG91bGQgbm90IGxvb2sgYXQgdGhp
cyBidWZmZXIgYXQgYWxsLCB0aGVzZSBhcmVuJ3QgSlNWYWx1ZXMuCisgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09m
QWN0aXZlTGVuZ3RoKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ2NF90ICgqY2FsbEZ1bmMpKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgU2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KikgPQorICAgICAgICAg
ICAgW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNhbGxlZSwgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KiBidWZmZXIpIC0+IHVpbnQ2NF90IHsgCisgICAgICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7CisgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCk7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICAgICAgICAgIFR5cGUg
YXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGFyZzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBG
dW5jOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJMzI6CisgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihidWZmZXJbYXJn
TnVtXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRjMyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZyA9IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJ1ZmZlclth
cmdOdW1dKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICAg
ICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRD
YWxsRGF0YShjYWxsZWUsIGNhbGxEYXRhKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWxsKGV4ZWMsIGNhbGxlZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5l
ZCgpLCBhcmdzKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIDApOworCisgICAgICAgICAgICAgICAgdWludDY0X3QgcmVhbFJlc3VsdDsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIEZ1bmM6CisgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAg
ICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IFZvaWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
STMyOiB7CisgICAgICAgICAgICAgICAgICAgIHJlYWxSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlc3VsdC50b0ludDMyKGV4ZWMpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIEY2NDoKKyAgICAgICAgICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgICAg
ICAgICByZWFsUmVzdWx0ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihyZXN1bHQudG9OdW1iZXIo
ZXhlYykpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhbFJlc3VsdDsKKyAgICAg
ICAgICAgIH07CisgICAgICAgIAorICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnN0
b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7CisgICAgICAgIAorICAgICAgICBtYXRlcmlhbGl6ZUltcG9ydEpT
Q2VsbChqaXQsIGltcG9ydEluZGV4LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgPj0gNCwgIldl
IHJlbHkgb24gdGhpcyB3aXRoIHRoZSBjYWxsIGJlbG93LiIpOworICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc2lnbmF0dXJlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYnVmZmVyKSk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGF1
dG8gbm9FeGNlcHRpb24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxw
ZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKworICAgICAgICAvLyBleGNlcHRpb24gaGVy
ZS4KKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIHZvaWQgKCpkb1Vu
d2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKKyAg
ICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZt
LCBleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7Cisg
ICAgICAgIH07CisgICAgICAgIGF1dG8gZXhjZXB0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAg
ICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CisKKyAgICAgICAgbm9FeGNlcHRp
b24ubGluaygmaml0KTsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7
CisgICAgICAgIGNhc2UgRjY0OiB7CisgICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRjMyOiB7CisgICAgICAgICAgICBq
aXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVy
blZhbHVlRlBSKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAg
IGppdC5yZXQoKTsKKworICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIGlmIChVTkxJS0VMWShs
aW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CisKKyAgICAgICAgbGlua0J1
ZmZlci5saW5rKGNhbGwsIGNhbGxGdW5jKTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4Y2Vw
dGlvbkNhbGwsIGRvVW53aW5kaW5nKTsKKworICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShs
aW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBv
cnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKKyAgICB9CisK
KyAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYSBzdGFjayBjaGVjayBoZXJl
IHNpbmNlIFdhc21CM0lSR2VuZXJhdG9yCisgICAgLy8gd2lsbCBkbyB0aGUgc3RhY2sgY2hlY2sg
Zm9yIHVzLiBXaGVuZXZlciBpdCBkZXRlY3RzIHRoYXQgaXQgbWlnaHQgbWFrZQorICAgIC8vIGEg
Y2FsbCB0byB0aGlzIHRodW5rLCBpdCdsbCBtYWtlIHN1cmUgaXRzIHN0YWNrIGNoZWNrIGluY2x1
ZGVzIHNwYWNlCisgICAgLy8gZm9yIHVzIGhlcmUuCisKKyAgICBjb25zdCB1bnNpZ25lZCBudW1i
ZXJPZlBhcmFtZXRlcnMgPSBhcmdDb3VudCArIDE7IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3Vt
ZW50LgorICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPSBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyArIG51bWJlck9mUGFyYW1ldGVyczsKKyAgICBjb25zdCB1
bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXpl
b2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworICAgIGNvbnN0IHVuc2ln
bmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworICAgIGppdC5zdWJQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja09mZnNldCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgSklUOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICAvLyBG
SVhNRSBtYWtlIHRoZXNlIGxvb3BzIHdoaWNoIHN3aXRjaCBvbiBTaWduYXR1cmUgaWYgdGhlcmUg
YXJlIG1hbnkgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4gSXQnbGwgb3RoZXJ3aXNlIGJlIGh1Z2Ug
Zm9yIGh1Z2Ugc2lnbmF0dXJlcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTU0NworICAgIAorICAgIC8vIEZpcnN0IGdvIHRocm91Z2ggdGhlIGludGVnZXIgcGFy
YW1ldGVycywgZnJlZWluZyB1cCB0aGVpciByZWdpc3RlciBmb3IgdXNlIGFmdGVyd2FyZHMuCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7CisgICAgICAgIHVuc2ln
bmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZz
ZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsr
YXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQo
YXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2Fz
ZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5j
OgorICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICAgICAgICAgIGNhc2UgSTMyOiB7
CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFy
c2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
c3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBz
Y3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQ
UjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdwclJlZyk7CisgICAgICAgICAgICAgICAg
ICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7CisgICAgICAgICAgICAgICAgaml0Lnplcm9F
eHRlbmQzMlRvUHRyKGdwclJlZywgZ3ByUmVnKTsgLy8gQ2xlYXIgbm9uLWludDMyIGFuZCBub24t
dGFnIGJpdHMuCisgICAgICAgICAgICAgICAgaml0LmJveEludDMyKGdwclJlZywgSlNWYWx1ZVJl
Z3MoZ3ByUmVnKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmU2NChncHJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBGMzI6CisgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAgICAgICAgICAgICAvLyBTa2lwcGVk
OiBoYW5kbGVkIGJlbG93LgorICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA+PSB3
YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0g
c2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAg
ICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgeworICAgICAgICAvLyBJbnRlZ2VyIHJlZ2lzdGVycyBoYXZlIGFscmVhZHkgYmVlbiBz
cGlsbGVkLCB0aGVzZSBhcmUgbm93IGF2YWlsYWJsZS4KKyAgICAgICAgR1BSUmVnIGRvdWJsZUVu
Y29kZU9mZnNldEdQUlJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIGJvb2wgaGFzTWF0ZXJp
YWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0gZmFsc2U7CisgICAgICAgIGF1dG8gbWF0ZXJpYWxp
emVEb3VibGVFbmNvZGVPZmZzZXQgPSBbJmhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNl
dCwgJmppdF0gKEdQUlJlZyBkZXN0KSB7CisgICAgICAgICAgICBpZiAoIWhhc01hdGVyaWFsaXpl
ZERvdWJsZUVuY29kZU9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoRG91
YmxlRW5jb2RlT2Zmc2V0ID09IDFsbCA8PCA0OCwgImNvZGVnZW4gYXNzdW1lcyB0aGlzIGJlbG93
Iik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tMzIoMSksIGRlc3Qp
OworICAgICAgICAgICAgICAgIGppdC5sc2hpZnQ2NChKSVQ6OlRydXN0ZWRJbW0zMig0OCksIGRl
c3QpOworICAgICAgICAgICAgICAgIGhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdW5zaWduZWQgbWFy
c2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Cisg
ICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RB
cmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHVu
c2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgeworICAgICAgICAgICAgVHlw
ZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0
Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2Ug
RnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgIGNhc2UgSTY0Ogor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQg
YWJvdmUuCisgICAgICAgICAgICBjYXNlIEkzMjoKKyAgICAgICAgICAgICAgICAvLyBTa2lwcGVk
OiBoYW5kbGVkIGFib3ZlLgorICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkR1BScyA+PSB3
YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0g
c2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOworICAg
ICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAg
ICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwg
d2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdh
c21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFy
Z3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAg
ICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNl
dCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVnLCBmcHJSZWcpOworICAgICAgICAgICAg
ICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJs
ZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZURvdWJs
ZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcpOworICAgICAgICAgICAgICAg
IGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcsIHNjcmF0Y2gpOworICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVl
RnJhbWVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXpl
b2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEY2NDogewor
ICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNo
YWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAg
IGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNw
aWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2Ny
YXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIw
OworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOworICAgICAgICAgICAgICAgIGpp
dC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIG1hdGVy
aWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyk7CisgICAg
ICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zm
c2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBS
czsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LnN0b3JlUHRyKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpKSk7CisKKyAgICBHUFJSZWcgaW1wb3J0SlNDZWxsR1BSUmVnID0gR1BSSW5mbzo6cmVnVDA7
IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBmb3Igc2xvdyBwYXRoIGJlbG93LgorICAg
IEFTU0VSVCghd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQoaW1wb3J0SlNDZWxsR1BS
UmVnKSk7CisKKyAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQsIGltcG9ydEluZGV4LCBp
bXBvcnRKU0NlbGxHUFJSZWcpOworCisgICAgaml0LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVn
LCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0
ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgUGF5bG9hZE9mZnNldCkpOworICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0
KFZhbHVlVW5kZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAg
ICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUgaXMgdm9pZCBhbmQg
bm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NTQ4OAorCisgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBjYWxs
TGlua0luZm9zLmFkZCgpOworICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6Q2FsbCwgQ29kZU9yaWdpbigpLCBpbXBvcnRKU0NlbGxHUFJSZWcpOworICAgIEpJVDo6RGF0
YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAgSklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxS
aWdodFZhbHVlKDApOworICAgIEpJVDo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRo
UGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBpbXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdl
dFRvQ2hlY2ssIGluaXRpYWxSaWdodFZhbHVlKTsKKyAgICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBq
aXQubmVhckNhbGwoKTsKKyAgICBKSVQ6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgc2xv
d1BhdGgubGluaygmaml0KTsKKyAgICAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVy
ZS4KKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0lu
Zm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMi4K
KyAgICBKSVQ6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBkb25lLmxpbmso
JmppdCk7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKKwor
ICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgIGNhc2UgVm9pZDoKKyAg
ICAgICAgLy8gRGlzY2FyZC4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jOgorICAgIGNh
c2UgQW55ZnVuYzoKKyAgICAgICAgLy8gRm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1w
b3J0cyB3aXRoIHRoZXNlIHR5cGVzIGluIHRoZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2Vi
QXNzZW1ibHkuTW9kdWxlIHZhbGlkYXRpb24gZXJyb3IuCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSTY0OiB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgfQor
ICAgIGNhc2UgSTMyOiB7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBzbG93UGF0
aC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBE
b05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFu
Y2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RI
YXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBkb25l
LmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0aW9u
Q2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKKworICAgICAgICBp
bnQzMl90ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAorICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICAgICAgICAgIHJldHVybiB2LnRvSW50MzIoZXhlYyk7CisgICAgICAgIH07
CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9JMzIpOworICAgICAg
ICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEYzMjogeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Cisg
ICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBpc0Rv
dWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgLy8gV2UncmUgYW4gaW50
MzIKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zs
b2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIGlzRG91YmxlLmxpbmso
JmppdCk7CisgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIp
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5t
b3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIpOworICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOworICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKKworICAgICAgICBmbG9hdCAo
KmNvbnZlcnRUb0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHYpIC0+IGZsb2F0IHsgCisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsK
KyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0Yz
Mik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgRjY0OiB7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVy
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAg
ICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAvLyBX
ZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0LmNvbnZl
cnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIGlz
RG91YmxlLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRh
Z1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgICAgICBqaXQuYWRk
NjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKwor
ICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNh
bGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0
SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCko
RXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+
IGRvdWJsZSB7IAorICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIHJl
dHVybiB2LnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbCwgY29udmVydFRvRjY0KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5s
aW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgaml0LmVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgpOworCisgICAgaWYgKCFleGNlcHRpb25D
aGVja3MuZW1wdHkoKSkgeworICAgICAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKKyAg
ICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
LT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5j
YWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CisKKyAgICAg
ICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMp
IC0+IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIGdl
bmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFt
ZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgZG9VbndpbmRpbmcpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwor
ICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CisK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRo
QmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSk7CisgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKGZhc3RDYWxsKTsKKyAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJl
dHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7CisKKyAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBv
cnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0
YSgpKSk7Cit9CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgV2Fz
bTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQor
eworICAgIFZNKiB2bSA9IGluc3RhbmNlLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICAgICAgSlNPYmplY3QqIGVy
cm9yOworICAgICAgICBpZiAodHlwZSA9PSBFeGNlcHRpb25UeXBlOjpTdGFja092ZXJmbG93KQor
ICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYywgZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXJyb3IgPSBKU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5
UnVudGltZUVycm9yU3RydWN0dXJlKCksIFdhc206OmVycm9yTWVzc2FnZUZvckV4Y2VwdGlvblR5
cGUodHlwZSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJv
cik7CisgICAgfQorCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgQVNTRVJUKCEh
dm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFjaGluZVBD
Rm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgYmV0dGVyOgorICAg
IC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFu
ZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKKyAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUg
Y2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCBy
ZXF1aXJlCisgICAgLy8gdGhpcyBzaW5jZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQg
Vk0gcG9pbnRlci4pIFdlIGNvdWxkIG1ha2UgdGhlIGNhbGxpbmcgY29udmVudGlvbgorICAgIC8v
IGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZy
YW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCisgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5k
bGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCisg
ICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgp
KTsKKyAgICByZXR1cm4gdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZmMyNGFhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5j
bHVkZSAiV2FzbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKKyNpbmNsdWRl
IDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBDYWxsTGlua0luZm87CitjbGFzcyBWTTsKKworbmFtZXNwYWNlIFdhc20gewor
CitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwg
dW5zaWduZWQgaW1wb3J0SW5kZXgpOworCit2b2lkKiB3YXNtVG9KU0V4Y2VwdGlvbihFeGVjU3Rh
dGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAKaW5kZXggMGQyNzc2NS4uYzU4NWYwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTYwLDcgKzYw
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IHdlIHRoaW5rIHdlIGFyZSBnb2lu
ZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2UgZXhwZWN0LgotICAgIEFTU0VSVCh3YXNt
RnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rp
b24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7CisgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5z
dGFuY2UoKS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKS0+aXNTYWZlVG9SdW4od2FzbUZ1bmN0aW9u
LT5pbnN0YW5jZSgpLT5tZW1vcnkoKS0+bWVtb3J5KCkubW9kZSgpKSk7CiAgICAgewogICAgICAg
ICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZGlzYWxsb3dlZCBJNjQgdXNlLgogCkBAIC04MiwxMSAr
ODIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2Vt
Ymx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIFRyYWNlU2NvcGUgdHJhY2VTY29wZShX
ZWJBc3NlbWJseUV4ZWN1dGVTdGFydCwgV2ViQXNzZW1ibHlFeGVjdXRlRW5kKTsKIAogICAgIFZl
Y3RvcjxKU1ZhbHVlPiBib3hlZEFyZ3M7Ci0gICAgV2FzbTo6Q29udGV4dCogd2FzbUNvbnRleHQg
PSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7Ci0gICAgLy8gV2hlbiB3ZSBkb24ndCB1c2UgZmFz
dCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBqcwotICAgIC8vIGVudHJ5IHdyYXBwZXIg
ZXhwZWN0cyB0aGUgV2FzbUNvbnRleHQqIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KLSAgICBpZiAo
IVdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIGJveGVkQXJncy5hcHBlbmQo
d2FzbUNvbnRleHQpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSB3YXNt
RnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAgLy8gV2hlbiB3ZSBkb24ndCB1c2UgZmFzdCBUTFMg
dG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBKUworICAgIC8vIGVudHJ5IHdyYXBwZXIgZXhwZWN0
cyB0aGUgaW5zdGFuY2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgIGlmICghV2FzbTo6Q29u
dGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGluc3RhbmNlKTsK
IAogICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7ICsrYXJnSW5kZXgpIHsKICAgICAgICAgSlNWYWx1ZSBhcmcgPSBleGVj
LT5hcmd1bWVudChhcmdJbmRleCk7CkBAIC0xMjcsNyArMTI3LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjKQogICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0ciwgd2FzbUZ1bmN0aW9uLCBmaXJz
dEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJncyk7CiAKICAgICAvLyBGSVhNRSBEbyBh
d2F5IHdpdGggdGhpcyBlbnRpcmUgZnVuY3Rpb24sIGFuZCBvbmx5IHVzZSB0aGUgZW50cnlwb2lu
dCBnZW5lcmF0ZWQgYnkgQjMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjY0ODYKLSAgICBXYXNtOjpDb250ZXh0KiBwcmV2V2FzbUNvbnRleHQgPSBXYXNtOjpsb2Fk
Q29udGV4dCh2bSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBwcmV2SW5zdGFuY2UgPSB2
bS53YXNtQ29udGV4dC5sb2FkKCk7CiAgICAgewogICAgICAgICAvLyBXZSBkbyB0aGUgc3RhY2sg
Y2hlY2sgaGVyZSBmb3IgdGhlIHdyYXBwZXIgZnVuY3Rpb24gYmVjYXVzZSB3ZSBkb24ndAogICAg
ICAgICAvLyB3YW50IHRvIGVtaXQgYSBzdGFjayBjaGVjayBpbnNpZGUgZXZlcnkgd3JhcHBlciBm
dW5jdGlvbi4KQEAgLTEzNywyMiArMTM3LDIyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICAg
ICAgaWYgKFVOTElLRUxZKChzcCA8IHN0YWNrU3BhY2VVc2VkKSB8fCAoKHNwIC0gc3RhY2tTcGFj
ZVVzZWQpIDwgYml0d2lzZV9jYXN0PGludHB0cl90Pih2bS5zb2Z0U3RhY2tMaW1pdCgpKSkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKSk7CiAgICAgfQotICAgIFdhc206
OnN0b3JlQ29udGV4dCh2bSwgd2FzbUNvbnRleHQpOworICAgIHZtLndhc21Db250ZXh0LnN0b3Jl
KGluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAgICBBU1NFUlQod2FzbUZ1bmN0aW9u
LT5pbnN0YW5jZSgpKTsKLSAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpID09IFdh
c206OmxvYWRDb250ZXh0KHZtKSk7CisgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2Uo
KSA9PSB2bS53YXNtQ29udGV4dC5sb2FkKCkpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3Vs
dCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0VudHJ5cG9pbnQoKSwgJnZtLCAmcHJv
dG9DYWxsRnJhbWUpOwogICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgaW4gYSBy
ZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQncyBzdG9yZWQgaW4gVmVjdG9yPEpTVmFs
dWU+LgogICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBzaW5j
ZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxkIGtlZXAgdGhlIGluc3RhbmNlCiAgICAg
Ly8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4KLSAgICB3YXNtQ29udGV4dC0+dXNlKCk7
Ci0gICAgaWYgKHByZXZXYXNtQ29udGV4dCAhPSB3YXNtQ29udGV4dCkgeworICAgIGluc3RhbmNl
LT51c2UoKTsKKyAgICBpZiAocHJldkluc3RhbmNlICE9IGluc3RhbmNlKSB7CiAgICAgICAgIC8v
IFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRyYSBzYWZldHkgaW5zdGVhZCBvZiBsZWF2aW5nIGEg
Y2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGluIHRoZXJlLiBJZiB3ZSBldmVyIGZvcmdldCB0byBz
ZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbAogICAgICAgICAvLyBib3VuZHMsIHRoaXMgd2lsbCBm
b3JjZSBldmVyeSBzdGFjayBvdmVyZmxvdyBjaGVjayB0byBpbW1lZGlhdGVseQogICAgICAgICAv
LyBmaXJlLgotICAgICAgICB3YXNtQ29udGV4dC0+c2V0Q2FjaGVkU3RhY2tMaW1pdChiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpKTsKKyAg
ICAgICAgaW5zdGFuY2UtPnNldENhY2hlZFN0YWNrTGltaXQoYml0d2lzZV9jYXN0PHZvaWQqPihz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSk7CiAgICAgfQotICAgIFdhc206
OnN0b3JlQ29udGV4dCh2bSwgcHJldldhc21Db250ZXh0KTsKKyAgICB2bS53YXNtQ29udGV4dC5z
dG9yZShwcmV2SW5zdGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBl
KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGE5ZDhmMGQuLjJmZGQ1
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtMzIsMTIgKzMyLDE0IEBA
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQu
aCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTVG9X
YXNtLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlNb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgi
CiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKQEAgLTc1LDEw
ICs3NywxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleAogICAgIFN0cnVjdHVyZSogaW5zdGFu
Y2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShl
eGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBp
bnN0YW5jZVN0cnVjdHVyZSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9ydE9i
amVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUsIFdhc206Okluc3RhbmNlOjpjcmVhdGUoUmVmPFdhc206
Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCi0gICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMsIG1v
ZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSkpOworICAg
IGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBleGVjLCBtb2R1bGUtPm1vZHVsZSgpLmNv
bXBpbGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgJldhc206
OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Ondhc21Ub0pTRXhjZXB0aW9uKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGluc3RhbmNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNjQ5ODli
NS4uODZmODE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKQEAgLTk2LDEzICs5Niwx
OCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFz
c2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVm
UHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIGluaXRp
YWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOworICAgIGF1dG8qIGpzTWVtb3J5ID0gSlNX
ZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBSZWZQdHI8V2FzbTo6
TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZShpbml0aWFsUGFnZUNvdW50LCBt
YXhpbXVtUGFnZUNvdW50LAorICAgICAgICBbJnZtXSAoKSB7IHZtLmhlYXAuY29sbGVjdEFzeW5j
KENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5j
b2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICBbJnZtLCBqc01l
bW9yeV0gKFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQ
YWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2FsbGJhY2sodm0sIG9sZFBhZ2VDb3Vu
dCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAgaWYgKCFtZW1vcnkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0gICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKm1lbW9yeS5sZWFrUmVmKCkp
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotCisgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWVtb3J5KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuY3BwCmluZGV4IGU5OTRkYzguLjRmY2E4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5j
cHAKQEAgLTc3LDggKzc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQogICAgIHVpbnQzMl90IGRl
bHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgYm9vbCBzaG91bGRU
aHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSB0cnVlOwotICAgIFdhc206OlBhZ2VDb3VudCByZXN1
bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNP
bkZhaWx1cmUpOworICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0s
IGV4ZWMsIGRlbHRhKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdC5wYWdlQ291bnQo
KSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRleCA5NjEwMjRkLi4xNjYxMDZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtMTYxLDExICsxNjEsMTIgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1vZHVsZUV4cG9ydHMoRXhlY1N0YXRl
KiBleGVjKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNX
ZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
cjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBzdHJ1Y3R1cmUpKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0
YXRlKiBleGVjKQpAQCAtMTc1LDE2ICsxNzYsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNG
dW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSIpKTsKIH0K
IAotSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJ1ZmZlciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dl
YkFzc2VtYmx5TW9kdWxlKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1
bGUoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJv
bVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3Vi
Y2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
cmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVy
ZSwgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmModm0sIFdURk1vdmUoc291cmNlKSkpOworICAg
IHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1
cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShi
dWZmZXIpKSk7CiB9CiAKIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
ZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3IuaAppbmRleCA2MDI1Yzk4Li4xM2FjYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5o
CkBAIC0zMCw4ICszMCwxMSBAQAogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5TW9k
dWxlUHJvdG90eXBlOwogCiBjbGFzcyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yIDogcHVi
bGljIEludGVybmFsRnVuY3Rpb24gewpAQCAtNDQsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVNb2R1bGUoRXhlY1N0YXRl
KiwgSlNWYWx1ZSBidWZmZXIsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVy
KTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJs
eU1vZHVsZVByb3RvdHlwZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGNiMWZlYzEuLjBhODY2
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IG1vZHVsZSwKICAgICBVTlVTRURfUEFSQU0oc2NvcGUpOwogICAgIGF1dG8qIGdsb2JhbE9iamVj
dCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAotICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2RlQmxvY2soKTsKKyAgICBXYXNtOjpDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5pbnN0YW5jZSgpLmNvZGVCbG9jaygpOwogICAg
IGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVs
ZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xU
YWJsZSA9IG1vZHVsZS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAgICAgLy8gUmV0dXJuIFRvSlNWYWx1ZSh2
KS4KICAgICAgICAgICAgIHN3aXRjaCAoZ2xvYmFsLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2Ug
V2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3Rh
bmNlLT5sb2FkSTMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBleHBv
cnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xvYmFsKGV4
cC5raW5kSW5kZXgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpJNjQ6CkBAIC0xNjAsMTEgKzE2MCwxMSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxl
LAogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6
Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxvYWRG
MzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUg
PSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRGMzJHbG9iYWwoZXhwLmtpbmRJbmRl
eCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFdhc206OkY2
NDoKLSAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9h
ZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1
ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEY2NEdsb2JhbChleHAua2luZElu
ZGV4KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBA
IC0yMTcsMTIgKzIxNywxMiBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFs
dWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5tb2R1bGUoKTsKLSAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCk7CisgICAgV2FzbTo6TW9kdWxlJiBtb2R1bGUgPSBtX2luc3RhbmNlLT5p
bnN0YW5jZSgpLm1vZHVsZSgpOworICAgIFdhc206OkNvZGVCbG9jayogY29kZUJsb2NrID0gbV9p
bnN0YW5jZS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKTsKKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUubW9kdWxlSW5mb3JtYXRpb24o
KTsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gbV9pbnN0YW5jZS0+dGFibGUoKTsK
IAotICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50OjpQdHI+JiBkYXRhID0gbV9pbnN0YW5j
ZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0YTsKKyAgICBjb25zdCBWZWN0b3I8
V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9IG1vZHVsZUluZm9ybWF0aW9uLmRhdGE7CiAgICAg
SlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBtX2luc3RhbmNlLT5tZW1vcnkoKTsKIAog
ICAgIHN0ZDo6b3B0aW9uYWw8SlNWYWx1ZT4gZXhjZXB0aW9uOwpAQCAtMjM5LDcgKzIzOSw3IEBA
IEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhl
YykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgdWludDMyX3QgdGFi
bGVJbmRleCA9IGVsZW1lbnQub2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkKLSAgICAgICAgICAgICAg
ICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5sb2FkSTMyR2xvYmFsKGVsZW1l
bnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQorICAgICAgICAgICAgICAgID8gc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChlbGVt
ZW50Lm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkKICAgICAgICAgICAgICAgICA6IGVsZW1l
bnQub2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAgICAgICAgZm4oZWxlbWVudCwgdGFibGVJ
bmRleCk7CkBAIC0yNTUsNyArMjU1LDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgIGZvciAoY29uc3QgV2FzbTo6
U2VnbWVudDo6UHRyJiBzZWdtZW50IDogZGF0YSkgewogICAgICAgICAgICAgdWludDMyX3Qgb2Zm
c2V0ID0gc2VnbWVudC0+b2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkKLSAgICAgICAgICAgICAgICA/
IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5sb2FkSTMyR2xvYmFsKHNlZ21lbnQt
Pm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkKKyAgICAgICAgICAgICAgICA/IHN0YXRpY19j
YXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoc2VnbWVu
dC0+b2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQogICAgICAgICAgICAgICAgIDogc2VnbWVu
dC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAgICAgICAgZm4obWVtb3J5LCBzaXplSW5C
eXRlcywgc2VnbWVudCwgb2Zmc2V0KTsKQEAgLTI5Myw3ICsyOTMsNyBAQCBKU1ZhbHVlIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAg
ICAvLyBmb3IgdGhlIGltcG9ydC4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tpXTsKLSAgICAgICAgICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICBXYXNtOjpTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS5zaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25J
bmRleCA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CiAgICAgICAgICAgICAg
ICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5j
ZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAgICAgICAgIGlmIChp
c1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNw
cAppbmRleCBlOWE2MzRhLi4xZmI5NDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgpAQCAtNDAsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiU3Ry
b25nSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRv
SlMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmgiCkBAIC05NCw3ICs5Niw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJv
bWlzZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyh2
bSwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJh
Y2tUeXBlPihbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0XSAoVk0mIHZtLCBXYXNtOjpNb2R1bGU6OlZh
bGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBXYXNtOjpNb2R1bGU6
OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNo
YXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtwcm9taXNlLCBnbG9iYWxPYmpl
Y3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29v
bihwcm9taXNlLCBbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3Vs
dCksICZ2bV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMTM1LDcgKzEzNyw3IEBAIHN0YXRpYyB2b2lk
IGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZSwgSlNXCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlhbGx5IHJlY29tcGlsaW5nIGEgbW9k
dWxlLiBXZSBmaXJzdCBnYXRoZXIgYWxsIHRoZSBpbXBvcnQvbWVtb3J5IGluZm9ybWF0aW9uIHBy
aW9yIHRvIGNvbXBpbGluZyBjb2RlLgotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBv
cnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5j
ZVN0cnVjdHVyZSgpKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1
cmUoKSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2FzbTo6TW9kdWxlPihtb2R1bGUtPm1v
ZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlamVjdChleGVjLCBz
Y29wZSwgcHJvbWlzZSkpOwogCiAgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNp
ZXM7CkBAIC0xNDMsMTMgKzE0NSwxMyBAQCBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZShWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVwogICAgIGRl
cGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGluc3RhbmNlKSk7CiAgICAgdm0u
cHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2UsIFdURk1vdmUo
ZGVwZW5kZW5jaWVzKSk7CiAgICAgLy8gTm90ZTogVGhpcyBjb21wbGV0aW9uIHRhc2sgbWF5IG9y
IG1heSBub3QgZ2V0IGNhbGxlZCBpbW1lZGlhdGVseS4KLSAgICBtb2R1bGUtPm1vZHVsZSgpLmNv
bXBpbGVBc3luYyh2bSwgaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgY3JlYXRlU2hhcmVkVGFzazxX
YXNtOjpDb2RlQmxvY2s6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUs
IHJlc29sdmVLaW5kXSAoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHJlZkNvZGVCbG9j
aykgbXV0YWJsZSB7CisgICAgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlQXN5bmMoJnZtLndhc21D
b250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206OkNv
ZGVCbG9jazo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2
ZUtpbmQsICZ2bV0gKFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgcmVmQ29kZUJsb2NrKSBtdXRhYmxl
IHsKICAgICAgICAgUmVmUHRyPFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2NrID0gV1RGTW92ZShy
ZWZDb2RlQmxvY2spOwogICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVX
b3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmQs
ICZ2bSwgY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxvY2spXSAoKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOwogICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2Us
IG1vZHVsZSwgY29kZUJsb2NrLnJlbGVhc2VOb25OdWxsKCksIHJlc29sdmVLaW5kKTsKICAgICAg
ICAgfSk7Ci0gICAgfSkpOworICAgIH0pLCAmV2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVyLCAm
V2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pOwogfQogCiBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5z
dGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9t
aXNlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmplY3QqIGltcG9ydE9iamVjdCkKQEAgLTE2NSw3ICsx
NjcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcgogICAgIFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGJ1ZmZlcik7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKSk7
CiAKLSAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmModm0sIFdURk1vdmUoc291cmNlKSwg
Y3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGlt
cG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0XSAoVk0mIHZtLCBXYXNtOjpNb2R1bGU6OlZhbGlkYXRp
b25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVB
c3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxX
YXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11
dGFibGUgewogICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29v
bihwcm9taXNlLCBbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9
IFdURk1vdmUocmVzdWx0KSwgJnZtXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMjEzLDcgKzIxNSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4
ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3QgYnl0ZVNpemU7CiAgICAgdWludDhfdCogYmFzZSA9
IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGJ5dGVPZmZz
ZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNp
emUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKKyAgICBCQlFQ
bGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIEJC
UVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKICAgICAvLyBGSVhNRTog
V2UgbWlnaHQgd2FudCB0byB0aHJvdyBhbiBPT00gZXhjZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0
IHRoYXQgc29tZXRoaW5nIHdpbGwgT09NLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjYwMTUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggMTE4NjVmNS4uMmM1YmM3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3Bw
CkBAIC05MCw4ICs5MCwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB9CiAg
ICAgfQogCisgICAgUmVmUHRyPFdhc206OlRhYmxlPiB3YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6
Y3JlYXRlKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmICghd2FzbVRhYmxlKSB7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwK
KyAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJjb3VsZG4n
dCBjcmVhdGUgVGFibGUiKSkpKTsKKyAgICB9CisKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4
ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1
Y3R1cmUoKSwgaW5pdGlhbCwgbWF4aW11bSkpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5yZWxlYXNl
Tm9uTnVsbCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwCmluZGV4IDAyMWM2MTguLjY4ZTk1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKQEAg
LTYzLDcgKzYzLDcgQEAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE8KICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHModm0sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
OjppbmZvKCkpLCAiV2Ugc2hvdWxkIG5ldmVyIGRvdWJsZSB3cmFwIGEgd3JhcHBlciBmdW5jdGlv
bi4iKTsKICAgICBTdHJpbmcgbmFtZSA9ICIiOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5h
bWUpOwotICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgeyBzaWduYXR1cmVJbmRleCwg
aW5zdGFuY2UtPmNvZGVCbG9jaygpLT53YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydElu
ZGV4KSB9KTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXAp
KSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIFdhc206OkNhbGxhYmxl
RnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgaW5zdGFuY2UtPndhc21Db2RlQmxvY2soKS53YXNt
VG9KU0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSB9ICk7CiAgICAgY29uc3QgV2FzbTo6
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxl
LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFuY2UpOwog
ICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3dhc20vV2FzbU1vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjViMGI5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93YXNtL1dhc21Nb2R1bGUuaApAQCAtMCwwICsxLDIgQEAKKyNwcmFnbWEgb25jZQorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dhc21Nb2R1bGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDk3NWM5Yzku
Ljc4NDAzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUv
VHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CiAj
aW5jbHVkZSA8d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg+CisjaW5jbHVkZSA8d2FzbS9X
YXNtTW9kdWxlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0tIAoyLjkuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322012</attachid>
            <date>2017-09-27 13:35:23 -0700</date>
            <delta_ts>2017-09-28 11:44:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>430571</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAyMzliYzgyYWRmYjBiZmU2NzE0Y2I1YTc0YzBkOTg1ZmJkMjcxMjgwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NDcgKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgICAgICAgICB8ICAyMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaCAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaCAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCAgICAgICAgICAgfCAxMjIgKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAgICAgICAgfCAgNzYgKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCAgICAgICAgICB8ICA1OSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oICAgICAgICAgICAgfCAg
IDUgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCAgICAgICAg
fCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oICAgICAg
ICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAg
ICAgICAgICB8IDIyNyArKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oICAgICAgICAgICB8ICA0OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgfCAgIDAKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4g
anN9L0pTV2ViQXNzZW1ibHkuaCAgIHwgIDUwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAgICAgICAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTE4ICsrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDg1ICsrLQogLi4uL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgfCAgNzYgKystCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggICB8ICAxMyAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAg
MzIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAg
fCAgMjUgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAgIHwgIDc1ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmggfCAgNDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCAgICAgICAgIHwgNjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8
ICAxOSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAg
ICAgfCAgIDUgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAg
ICAgICAgIHwgIDIyICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgICB8ICAxNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVj
dG9yLmNwcCAgICAgICAgfCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAgICAgICAgIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93YXNtL1dhc21Nb2R1bGUuaCB8ICAgMiArCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8ICAgMSArCiAxMTEgZmlsZXMgY2hhbmdlZCwgMzA3
NyBpbnNlcnRpb25zKCspLCAxNzQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeU1vZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAwJSkKIHJlbmFtZSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggKDYyJSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd2Fz
bS9XYXNtTW9kdWxlLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDVhN2IwMmQuLjQzNjVmZWIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDkt
MjUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2Vt
Ymx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRXhjZWVkaW5nIG1h
eCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyCisgICAg
ICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdlOiBpdCB1c2Vk
IHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIHRl
c3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qczoKKyAgICAgICAgKGFz
c2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAgKGFzc2Vy
dC50aHJvd3MpOgorCiAyMDE3LTA5LTI1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIFtERkddIFN1cHBvcnQgQXJyYXlQdXNoIHdpdGggbXVsdGlwbGUg
YXJncwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uN2ZlNmIxMyAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0
IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIq
NjQqMTAyNCk7CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5j
ZSBpdCBmYWlscy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVy
cm9yLCAiT3V0IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdy
b3coMTAwMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNl
ZWQgdGhlIG1lbW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOyAKICAgICBhc3NlcnRFcShi
dWZmZXIuYnl0ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnkuYnVmZmVy
LCBidWZmZXIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0ZCAxMDA2
NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFi
bGVJbXBvcnQodGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0
cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVy
IHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxp
bWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVh
dGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tp
bml0aWFsOiAyKiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBw
YWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUn
cyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJd
LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQg
LyAyNzogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmln
LCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBj
b3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCiAgICAgXTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDI4MjMzOGUuLjQ3NzVhNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1MCBAQAorMjAxNy0wOS0yNSAgSkYgQmFzdGllbiAgPGpm
YmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVy
c2lvbiBvZiBldmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZW50YWlscyBjbGVhbmluZyB1cCBh
bmQgc3BsaXR0aW5nIGEgYnVuY2ggb2YgY29kZSB3aGljaCB3ZSBoYWQKKyAgICAgICAgaW50ZXJ0
d2luZWQgYmV0d2VlbiBDKysgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgSlMgb2JqZWN0cywgYW5k
IHB1cmUgQysrCisgICAgICAgIGltcGxlbWVudGF0aW9uIG9iamVjdHMuIFRoaXMgc3BlY2lmaWMg
Y2hhbmdlIGdvZXMgbW9zdCBvZiB0aGUgd2F5IHRvd2FyZHMKKyAgICAgICAgYWxsb3dpbmcgSlND
J3MgV2ViQXNzZW1ibHkgdG8gd29yayB3aXRob3V0IFZNIC8gSlMsIHVwIHRvIGJ1dCBleGNsdWRp
bmcKKyAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlICh0aGVyZSdzIFdhc206Okluc3RhbmNl
LCBidXQgaXQncyBub3QgKnRoZSogdGhpbmcKKyAgICAgICAgeWV0KS4gQmVjYXVzZSBvZiB0aGlz
IHdlIHN0aWxsIGhhdmUgYSBmZXcgRklYTUUgaWRlbnRpZnlpbmcgcGxhY2VzIHRoYXQgbmVlZCB0
bworICAgICAgICBjaGFuZ2UuIEEgZm9sbG93LXVwIGNoYW5nZSB3aWxsIGdvIHRoZSByZXN0IG9m
IHRoZSB3YXkuCisKKyAgICAgICAgSSB3ZW50IGFib3V0IHRoaXMgY2hhbmdlIGluIHRoZSBzaW1w
bGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCisgICAgICAgIEphdmFTY3JpcHRDb3JlL3dhc20g
ZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNsdWRlIHRoZSAv
anMvCisgICAgICAgIHN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCisKKyAgICAgICAgTm9uZSBvZiB0aGlzIGNoYW5nZSBy
ZW1vdmVzIHRoZSBuZWVkIGZvciBhIEpJVCBlbnRpdGxlbWVudCB0byBiZSBhYmxlIHRvIHVzZQor
ICAgICAgICBXZWJBc3NlbWJseS4gV2UgZG9uJ3QgaGF2ZSBhbiBpbnRlcnByZXRlciwgdGhlIHBy
b2Nlc3MgdGhlcmVmb3JlIHN0aWxsIG5lZWRzIHRvCisgICAgICAgIGJlIGFsbG93ZWQgdG8gSklU
IHRvIHVzZSB0aGVzZSBwdXJlLUMrKyBBUElzLgorCisgICAgICAgIEludGVyZXN0aW5nIHRoaW5n
cyB0byBub3RlOgorCisgICAgICAgICAgLSBSZW1vdmUgVk0gZnJvbSBQbGFuIGFuZCBhc3NvY2lh
dGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KKyAgICAgICAgICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCisgICAgICAgICAgLSBXYXNtOjpN
ZW1vcnkgc2hvdWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhl
IEdDIHRvCisgICAgICAgICAgICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1i
ZGFzIGF0IGNvbnN0cnVjdGlvbiB0aW1lIGZvciB0aGlzCisgICAgICAgICAgICBwdXJwb3NlOiBv
bmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9y
CisgICAgICAgICAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgYWxsb3dz
IHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCisgICAgICAgICAgICBkaWN0YXRlIGhvdyB0
byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1iZWRkaW5nIHRoYXQn
cyB0bworICAgICAgICAgICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3RpdmVs
eSkuCisgICAgICAgICAgLSBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5
IHRvIFdhc206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCisgICAgICAgICAgICB0aGVyZSwg
d2l0aCBhbiBlbnVtIGNsYXNzIGZvciBmYWlsdXJlIHR5cGVzLgorICAgICAgICAgIC0gRXhjZWVk
aW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVy
IHNwZWMuIFRoaXMKKyAgICAgICAgICAgIGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5n
ZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVwZGF0ZSB0aGUKKyAgICAgICAgICAgIGNv
cnJlc3BvbmRpbmcgdGVzdC4KKyAgICAgICAgICAtIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3Jvd19t
ZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCisgICAgICAgICAg
ICByZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgorICAgICAgICAg
IC0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWls
dXJlLCBiZWNhdXNlIGl0J3Mgb25seQorICAgICAgICAgICAgZXZlciBjYWxsZWQgZnJvbSBKUyAo
bm90IGZyb20gZ3Jvd19tZW1vcnkgYXMgYmVmb3JlKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9y
eSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dz
IEpTCisgICAgICAgICAgICB3cmFwcGVycyB0byByZWdpc3RlciB0aGVtc2VsdmVzIHdoZW4gZ3Jv
d3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CisgICAgICAgICAgICBrbm93bmluZyBh
bnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxpc3Qgb2YgY2Fs
bGJhY2tzCisgICAgICAgICAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAorICAgICAgICAgICAgdW5kZXIgYSBs
b2NrKS4KKyAgICAgICAgICAtIFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUg
c291cmNlIG9mIHRydXRoIGFib3V0IGFkZHJlc3MgLyBzaXplLAorICAgICAgICAgICAgdXNlZCBk
aXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBpbnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnku
CisgICAgICAgICAgLSBNb3ZlIHdhc21Ub0pTIGZyb20gdGhlIGdlbmVyYWwgV2FzbUJpbmRpbmcg
aGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCisgICAgICAgICAgICB3YXNtL2pzLiBJdCdz
IG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwLCBhbmQgdXNl
cyBWTSwKKyAgICAgICAgICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3NlbWJs
eS4KKyAgICAgICAgICAtIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBh
IHN0cnVjdCBob2xkaW5nIGEKKyAgICAgICAgICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBu
b3cpIGluc3RlYWQgb2YgYW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcworICAgICAgICAg
ICAgZG9lc24ndCBhZGQgYW55dGhpbmcgdG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdl
IHdoYXQgYWN0dWFsbHkgZ2V0cworICAgICAgICAgICAgcGFzc2VkIGFyb3VuZCBpbiBKSVQgY29k
ZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAg
ICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVudGlyZSBwdXJwb3NlIG9m
IHRoaXMgY2hhbmdlIGlzIHRvCisgICAgICAgICAgICBhbGxvdyBwYXNzaW5nIFdhc206OkNvbnRl
eHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZNCisgICAg
ICAgICAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZl
Y3RpdmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKKyAgICAgICAgICAgIHRoaXMgc2V0dXAgYSBub24t
SlMgZW1iZWRkaW5nIGlzIG11Y2ggYmV0dGVyIG9mZi4KKyAgICAgICAgICAtIE1vdmUgSlNXZWJB
c3NlbWJseSBpbnRvIHRoZSBKUyBmb2xkZXIuCisgICAgICAgICAgLSBPTUdQbGFuOiB1c2UgV2Fz
bTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4K
KyAgICAgICAgICAtIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24gV2FzbTo6Q29kZUJsb2NrJ3Mg
dGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKKyAgICAgICAgICAgIGJlaW5nIG9uIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5FbWJlZGRlcgor
ICAgICAgICAgICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCisgICAgICAgICAgICBjYWxsZWQgd2FzbS0+
SlMgc3R1Yi4gVGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNy
ZWF0aW5nCisgICAgICAgICAgICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhl
IHN0dWJzIHRvIGNhbGwgYmFjayBpbnRvIHRoZQorICAgICAgICAgICAgZW1iZWRkZXIuIFRoaXMg
aXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVz
ZQorICAgICAgICAgICAgdGhlIEIzIElSIGdlbmVyYXRvciBub3cgcmVhY2hlcyBmb3IgV2FzbTo6
Q29kZUJsb2NrIGluc3RlYWQgb2YKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
CisgICAgICAgICAgLSBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24gY29t
cGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KKyAgICAgICAgICAgIGF0b21pYzxib29s
PiBmbGFnIGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBs
b2NrLCBhbmQKKyAgICAgICAgICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJh
Y2UuanMgYmVjYXVzZSBiZWZvcmUgbXkgY2hhbmdlcworICAgICAgICAgICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayBkaWQgaXRzIG93biBjb21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJv
bQorICAgICAgICAgICAgV2FzbTo6Q29kZUJsb2NrLCB3aXRob3V0IGdldHRpbmcgdGhlIGxvY2su
IE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxv
Y2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2VyLCB0aGUgbG9jayB3YXMg
YmVpbmcKKyAgICAgICAgICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2VydGlvbi4K
KyAgICAgICAgICAtIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQg
dGhyb3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKKyAgICAgICAgICAgIGluIGF0IGNvbXBp
bGF0aW9uIHRpbWUsIGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20g
d3JhcHBlci4KKyAgICAgICAgICAtIFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJv
dXQgZmF1bHQgaGFuZGxpbmcgdGh1bmtzLiBPbmx5IHRoZSBJUgorICAgICAgICAgICAgZ2VuZXJh
dG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24g
dGhyb3dpbmcKKyAgICAgICAgICAgIHRodW5rIGlzIGdlbmVyYXRlZCBpZiBhbnkgbWVtb3J5IGlz
IHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5vdAorICAgICAgICAgICAgYWxs
IG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KKyAgICAgICAgICAtIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCisgICAgICAgICAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFy
IEMrKyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKKyAgICAgICAgICAgIGNvZGUgd2hl
biBhIFdlYkFzc2VtYmx5IGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJl
ZGRlciB0byBnZXQKKyAgICAgICAgICAgIGNhbGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBw
cm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5nbGUgb2YgdGhlc2UKKyAgICAgICAgICAgIGZ1bmN0
aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJvY2VzcykgYmVjYXVzZSB0aGUgdHJh
cCBoYW5kbGVyIGlzIGEKKyAgICAgICAgICAgIHNpbmdsZXRvbi4gVGhhdCBjYW4gYmUgZml4ZWQg
aW4gaW4gIzE3NzQ3NS4KKyAgICAgICAgICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVyZSBh
bGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgorICAgICAgICAgIC0gU3BsaXQgdXAgSlNX
ZWJBc3NlbWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKKyAgICAgICAgICAgIHJl
ZmNvdW50ZWQuIEpTV2ViQXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVu
Y3Rpb25zIGluIHRoZQorICAgICAgICAgICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0
J3MgdXNlZCBieSB0aGUgSklUIGNvZGUgdG8gbG9va3VwIHdoZXJlIHRvCisgICAgICAgICAgICBj
YWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZvciBjb250ZXh0IHN3aXRjaCkuIE5vdGUg
dGhhdCB0aGlzIGNyZWF0ZXMKKyAgICAgICAgICAgIGFuIGV4dHJhIGFsbG9jYXRpb24gZm9yIGFs
bCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhjaGFuZ2UKKyAgICAgICAg
ICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUgaW5zdGFu
Y2UgdXNlZCB0byBiZSBvYnRhaW5lZAorICAgICAgICAgICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlv
bi4gQWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKKyAgICAg
ICAgICAgIGluc3RhbmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1
bWIgcG9pbnRlciB0byB0aGUKKyAgICAgICAgICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBv
dGhlcndpc2Ugd291bGQgY2F1c2UgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICAgICAgICAtIEFkZCBX
YXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVjaCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCisg
ICAgICAgICAgLSBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBkb2Vzbid0IGp1c3QgY29udGFp
biB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCisgICAgICAgICAgICBKU09iamVjdHMsIGl0IGFs
c28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3YXNtCisgICAg
ICAgICAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAorICAgICAgICAgICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91
bGRuJ3QgYmUgdGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAorICAg
ICAgICAgICAgY3JlYXRlcyBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVh
c2llciB0byBkaXNhc3NvY2lhdGUKKyAgICAgICAgICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5n
cyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhpbmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKKyAgICAg
ICAgICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBnZW5lcmF0b3Igb25seSBuZWVkcyBv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgorICAgICAgICAgICAgdGhlIGNhbGwgb3Bjb2RlICh3
aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdoZXRoZXIgdGhlCisg
ICAgICAgICAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhpcyBp
c24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKKyAgICAgICAgICAgIGJlY2F1c2UgaXQncyBkZXBl
bmRlbnQgb24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBp
ZgorICAgICAgICAgICAgdGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFy
Z2V0IGluc3RhbmNlIChvbmx5IHdhc20tPndhc20KKyAgICAgICAgICAgIGRvZXMpOyB0aGUgb3Ro
ZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcgd2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9u
IHRvCisgICAgICAgICAgICBmaWd1cmUgb3V0IHRoZSB3YXNtLT53YXNtIHRhcmdldCBpbnN0YW5j
ZSwgYW5kIHRoZW4gZ2V0cworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0
T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwKKyAgICAgICAgICAgIGNh
bGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5zdGFuY2Ug
Y2FuIGJlCisgICAgICAgICAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRo
ZSBDb250ZXh0IGlzLCBhbmQKKyAgICAgICAgICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
IGlzIGFscmVhZHkgZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKKyAgICAg
ICAgICAgIGNhbiBtb3ZlIHRoaXMgdGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUlu
c3RhbmNlIHRvIFdhc206Okluc3RhbmNlLAorICAgICAgICAgICAgYW5kIGxlYXZlIGltcG9ydEZ1
bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVyIHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmlj
LAorICAgICAgICAgICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdyaXRlQmFycmllcjxKU09iamVj
dD4uCisgICAgICAgICAgLSBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJhbWUsIGFuZCBp
biBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAorICAgICAgICAgICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAorICAgICAgICAgICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBp
bnN0ZWFkIHN0b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYworICAgICAgICAgICAgbG9jYXRp
b24uIFRoYXQgY2hhbmdlIHdvbid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29k
ZSBjaHVybiwgYnV0CisgICAgICAgICAgICB3aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBz
b21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMgbWFubmVyIHdpdGhvdXQKKyAgICAgICAgICAgIGhh
dmluZyBhIFZNLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6dW53aW5kRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dy
YW0pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogZGZn
L0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0
Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4
aXQpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9z
ckVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21w
aWxlU3R1Yik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6
dW5zYWZlQ2FsbGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6RXhlY1N0YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkV4ZWNTdGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUgY29uc3QpOgorICAg
ICAgICAqIGludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAgICAoSlNDOjpOYXRpdmVD
YWxsRnJhbWVUcmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6CisgICAgICAgIChKU0M6Ok5h
dGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRo
UmVzdG9yZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3Jl
Ojp+TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAgICAqIGludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0
b3IoKSBjb25zdCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IpOgorICAgICAgICAo
SlNDOjpTdGFja1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zp
c2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6
OkZyYW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
aDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVySXNFbnRyeUZyYW1l
IGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmg6CisgICAgICAg
IChKU0M6OlZNRW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6
Vk1FbnRyeVJlY29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAoSlNDOjpF
bnRyeUZyYW1lOjp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNo
UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
SW1wbCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0
Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKToKKyAgICAg
ICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAg
ICAgICAoSlNDOjp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0
aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OkZyYW1lV2Fs
a2VyKToKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VUb1BhcmVudEZyYW1lKToK
KyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1Ry
YWNlcyk6CisgICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6
VGhyb3dTY29wZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAg
ICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KToKKyAg
ICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjppc1NhbmVGcmFtZSk6
CisgICAgICAgIChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAg
ICAgICAoSlNDOjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2spOgorICAgICAg
ICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChK
U0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29t
cGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAqIHdh
c20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFu
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20v
V2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVC
bG9jazo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpzZXRD
b21waWxhdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFN0dWJzKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6
Oldhc206OkNvZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yik6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxsU3R1YkZvckltcG9ydCk6
CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRpb25GaW5pc2hlZCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21D
b250ZXh0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpDb250ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAg
ICAgICAqIHdhc20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6CisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6CisgICAgICAgICogd2Fz
bS9XYXNtSW5zdGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbik6
CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpJbnN0YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6
Om1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0YWJsZSk6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpJbnN0YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
Okluc3RhbmNlOjpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5z
dGFuY2U6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRP
ZkNhY2hlZFN0YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVk
U3RhY2tMaW1pdCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRDYWNo
ZWRTdGFja0xpbWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRS
ZWdpc3RlckluZm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9TYXZlIGNvbnN0KToKKyAg
ICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlVmFs
aWRhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5
bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZTo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQ
YXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFuKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6T01HUGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4u
aDoKKyAgICAgICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGFnZUNvdW50Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OnJ1bkNvbXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmFkZENv
bXBsZXRpb25UYXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6dHJ5UmVtb3ZlQ29udGV4
dEFuZENhbmNlbElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25h
dHVyZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgICogd2Fz
bS9XYXNtVGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Z3Jvdyk6Cisg
ICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRh
YmxlOjpvZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZG
dW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAqIHdh
c20vV2FzbVRodW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJv
bVdhc21UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVy
VXBUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c2V0VGhyb3dX
YXNtRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtzOjp0aHJvd1dhc21FeGNl
cHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdhc20vV2Fz
bVdvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OnN0b3BBbGxQbGFu
c0ZvckNvbnRleHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0Lmg6CisgICAgICAgICog
d2FzbS9qcy9KU1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVK
U1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaC4KKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2Vt
Ymx5LmguCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbnN0YW5jZSk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29udGV4dCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0NhbGxlZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludCk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVybmFsTWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29kZUJsb2NrIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21UYWJsZSk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscyk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNhY2hlZFN0YWNrTGltaXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldENhY2hlZFN0
YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21NZW1v
cnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21Nb2R1bGUpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFsbG9jYXRpb25TaXplKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1bGUgY29uc3QpOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1v
cnk6OmFkb3B0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3Nl
bWJseU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKToK
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlU
YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFz
c2VtYmx5VGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6
ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRv
SlMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGlu
Zy5jcHAuCisgICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9K
U0V4Y2VwdGlvbik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJs
eUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFz
c2VtYmx5TWVtb3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3Nl
bWJseU1vZHVsZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6
OmNyZWF0ZU1vZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6
CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlD
b21waWxlRnVuYyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6
Y29tcGlsZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0
ZUZ1bmMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTctMDktMjUgIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0RGR10gU3VwcG9y
dCBBcnJheVB1c2ggd2l0aCBtdWx0aXBsZSBhcmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGZlYjc0MDEuLmI5MDUyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMDgwLDcgKzEwODAsNyBAQAogCQk3OUM0QjE1RTFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2
ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyog
TExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUQ1Q0Q1QjFDMTEw
NkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBs
aW5nUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk3OURBRTI3QTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUw
M0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovOyB9OworCQk3OURBRTI3QTFF
MDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZBQSAvKiBX
YXNtRXhjZXB0aW9uVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc5REZDQkRCMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNh
Y2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURG
Q0JEQTFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RUUwQzAwMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFi
bGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vi
c3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTQ1OCw3ICsxNDU4LDYgQEAKIAkJQUQyRkNDMjAxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzE0MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJs
eVRhYmxlQ29uc3RydWN0b3IubHV0LmggKi87IH07CiAJCUFEMkZDQzIxMURCNTlDQjIwMEIzRTcz
NiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMTUxREI1OUM1OTAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggKi87IH07CiAJCUFEMkZDQzJEMURCODM4RkQw
MEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2IC8qIFdlYkFz
c2VtYmx5UHJvdG90eXBlLmggKi87IH07Ci0JCUFEMkZDQzMxMURCODNENDkwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovOyB9Owog
CQlBRDQxMkIzNDFFN0IyRTlFMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDEyQjMyMUU3QjJFOEEwMDhBRjE1
NyAvKiBXYXNtQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUFENDI1MjUxMUU1RDBFMTQwMDlEMkE5NyAvKiBGdWxsQ29kZU9yaWdpbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0MjUyNTAx
RTVEMERFQjAwOUQyQTk3IC8qIEZ1bGxDb2RlT3JpZ2luLmggKi87IH07CiAJCUFENDkzN0M0MURE
QkU2MTQwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3QzIxRERCRTYwQTAwNzdDODA3IC8q
IEFic3RyYWN0TW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTE0NjYsNiArMTQ2NSwxMyBAQAogCQlBRDQ5MzdENDFEREQyN0RF
MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLzsgfTsKIAkJQUQ0QjFERkExREYyNDRFMjAwNzFBRTMyIC8qIFdh
c21CaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDRCMURGODFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCAqLzsgfTsKIAkJQUQ1
QjQxNkYxRUJBRkI3NzAwOEVGQTQzIC8qIFdhc21OYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVCNDE2RTFFQkFGQjY1MDA4RUZBNDMgLyogV2Fz
bU5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlBRDVDMzZERDFGNjg4QjY1MDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZEQzFGNjg4QjVGMDAwQkNB
QUYgLyogV2FzbUVtYmVkZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RTIxRjY5OUVDMDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2REYx
RjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBX
YXNtVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFQTFGNzVBRDZBMDAwQkNB
QUYgLyogSlNUb1dhc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFEOERENkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkVCMUY3NUFENzMw
MDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBREQwOUFGMzFGNjI0ODJFMDAxMzEzQzIgLyogSlNXZWJBc3NlbWJs
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFE
NUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdh
c21Ub0pTLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQUQ1QzM2RUYxRjdBMjYzQTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZFRTFGN0EyNjI5MDAw
QkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBRDc0MzhDMDFFMDQ1N0E0MDBGRDBDMkEgLyogV2FzbVNpZ25h
dHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ3
NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3
N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
RDhGRjM5ODFFQjVCREIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDhGRjM5NTFFQjVCRDg1MDA4N0ZG
ODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTQxNTUsOSArNDE2MSwyNSBAQAogCQlBRDJGQ0MxNTFEQjU5QzU5
MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMjYxREI4MzhDNDAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5UHJvdG90
eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMjcxREI4MzhDNDAw
QjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVBy
b3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDJGQ0MyRTFEQjgzOUY3
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1dlYkFzc2VtYmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRm9ybWF0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNDcxRjRCQTc4NjAwNjY5OTEyIC8qIFdB
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUQzRjFFNEExRjRERTY4QzAwNjY5OTEyIC8qIFdBSW5zdGFuY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0FJbnN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0
QjFGNERFNjhDMDA2Njk5MTIgLyogV0FUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVRhYmxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTRDMUY0REU2OEMwMDY2OTkxMiAv
KiBXQU1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBRDNGMUU1MjFGNEY0QUU1MDA2Njk5MTIgLyogV0FNZW1vcnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0FNZW1vcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDNGMUU1MzFGNEY0QUU1MDA2Njk5MTIgLyogV0FNb2R1bGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0FNb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNG
MUU1NDFGNEY0QUU1MDA2Njk5MTIgLyogV0FJbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXQUluc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTUx
RjRGNEFFNTAwNjY5OTEyIC8qIFdBVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FUYWJs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY0MUY1MEU1N0YwMDY2
OTkxMiAvKiBXQUV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUV4Y2VwdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2NTFGNTBFNTdGMDA2Njk5MTIgLyogV0FF
eGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FFeGNlcHRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1v
cnlEZXNjcmlwdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTWVtb3J5RGVzY3JpcHRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY5MUY1NDdDQjYwMDY2OTkx
MiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FNZW1vcnlEZXNjcmlw
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZBMUY1NDdDQjYwMDY2
OTkxMiAvKiBXQUltcG9ydE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUltcG9ydE9iamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2QjFGNTQ3Q0I4MDA2Njk5MTIg
LyogV0FUYWJsZURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FUYWJsZURlc2NyaXB0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkMxRjU0N0NCODAwNjY5OTEy
IC8qIFdBSW1wb3J0T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBSW1wb3J0T2JqZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkQxRjU0N0NCODAwNjY5
OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBVGFibGVE
ZXNjcmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNzAxRjU0
QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FGdW5jdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU3MTFGNTRDM0FBMDA2Njk5MTIg
LyogV0FGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUZ1bmN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0MTJCMzExRTdCMkU4QTAwOEFGMTU3IC8qIFdh
c21Db250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21D
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0MTJCMzIxRTdCMkU4
QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENDEyQjM1
MUU3QjU3QzAwMDhBRjE1NyAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2VJZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDE3MiwxNSArNDE5NCwy
OCBAQAogCQlBRDRCMURGNzFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUJpbmRpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBRDRCMURGODFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJp
bmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUJpbmRpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1QjQxNkUxRUJBRkI2NTAwOEVGQTQzIC8q
IFdhc21OYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRDMUY2ODhCNUYwMDBCQ0FBRiAv
KiBXYXNtRW1iZWRkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUVtYmVkZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5z
dGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUluc3RhbmNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0
YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQUQ1QzM2RTMxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21UYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZFRTFG
N0EyNjI5MDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1l
bW9yeU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2RjAxRjdBMjZC
RjAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21N
ZW1vcnlNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3NDM4QkUxRTA0
NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbVNpZ25hdHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TaWduYXR1cmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0dDTWFwSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDhERDZDRjFGNjcwODlGMDAwNEVC
NTIgLyogSlNUb1dhc20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNUb1dhc20uaDsgcGF0aCA9IGpzL0pT
VG9XYXNtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOERENkQwMUY2NzA4QTMw
MDA0RUI1MiAvKiBKU1RvV2FzbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1RvV2FzbS5jcHA7
IHBhdGggPSBqcy9KU1RvV2FzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
OEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUluZGV4T3JOYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUluZGV4T3JOYW1l
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ5RTg1MkUxRThBMEM2RTAwOERF
MzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREI2RjY3QzFFMTVE
NzUwMDA4MkYzODQgLyogV2FzbVBhZ2VDb3VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXYXNtUGFnZUNvdW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVRvSlND
YWxsZWUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3Nl
bWJseVRvSlNDYWxsZWUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5VG9KU0NhbGxlZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2Fz
bVRvSlMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2FzbVRvSlMuaDsgcGF0aCA9IGpzL1dhc21Ub0pTLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUVGMUY1RjYyM0YwMDEzMTNDMiAv
KiBXYXNtVG9KUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXYXNtVG9KUy5jcHA7IHBhdGggPSBq
cy9XYXNtVG9KUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUYyMUY2
MjQ4MjkwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpT
V2ViQXNzZW1ibHkuY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2Vt
Ymx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHkuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDMxRUIzMDc3MTAw
REY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUREOEZBNDQxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTmFtZVNlY3Rp
b25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERCMUY2MjE4RDc3
REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MTkwLDYgKzQyMjUsOCBAQAogCQlBREU4MDI5NjFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNz
ZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBREU4MDI5NzFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJy
b3JQcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjlEMUUwOEYyMjYwMDU4REU3OCAv
KiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwOyBw
YXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY3MUY0N0E3QjgwMDY0NTFEMyAvKiBXZWJBc3NlbWJs
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBREZDMzBGOTFGNDdBOEMwMDA2NDUxRDMgLyogV0FNb2R1bGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0FNb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU5Rjg5Mzcx
ODkxQUQzMzAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlGODkzODE4OTFBREI1MDBENUNDREMgLyogVW5s
aW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRvb2xFeGVjdXRhYmxlLnhj
Y29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTY0Miw2ICs1Njc5LDI2IEBA
CiAJCQkJODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8s
CiAJCQkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLywK
IAkJCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLywKKwkJ
CQlBRDNGMUU0NzFGNEJBNzg2MDA2Njk5MTIgLyogV0FCYXNlLmggKi8sCisJCQkJQUQzRjFFNjUx
RjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmNwcCAqLywKKwkJCQlBRDNGMUU2NDFGNTBF
NTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uaCAqLywKKwkJCQlBRDNGMUU3MTFGNTRDM0FBMDA2
Njk5MTIgLyogV0FGdW5jdGlvbi5jcHAgKi8sCisJCQkJQUQzRjFFNzAxRjU0QzNBQTAwNjY5OTEy
IC8qIFdBRnVuY3Rpb24uaCAqLywKKwkJCQlBRDNGMUU2QzFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FJ
bXBvcnRPYmplY3QuY3BwICovLAorCQkJCUFEM0YxRTZBMUY1NDdDQjYwMDY2OTkxMiAvKiBXQUlt
cG9ydE9iamVjdC5oICovLAorCQkJCUFEM0YxRTU0MUY0RjRBRTUwMDY2OTkxMiAvKiBXQUluc3Rh
bmNlLmNwcCAqLywKKwkJCQlBRDNGMUU0QTFGNERFNjhDMDA2Njk5MTIgLyogV0FJbnN0YW5jZS5o
ICovLAorCQkJCUFEM0YxRTUyMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1lbW9yeS5jcHAgKi8sCisJ
CQkJQUQzRjFFNEMxRjRERTY4QzAwNjY5OTEyIC8qIFdBTWVtb3J5LmggKi8sCisJCQkJQUQzRjFF
NjgxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5jcHAgKi8sCisJCQkJQUQz
RjFFNjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5oICovLAorCQkJCUFE
M0YxRTUzMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1vZHVsZS5jcHAgKi8sCisJCQkJQURGQzMwRjkx
RjQ3QThDMDAwNjQ1MUQzIC8qIFdBTW9kdWxlLmggKi8sCisJCQkJQUQzRjFFNTUxRjRGNEFFNTAw
NjY5OTEyIC8qIFdBVGFibGUuY3BwICovLAorCQkJCUFEM0YxRTRCMUY0REU2OEMwMDY2OTkxMiAv
KiBXQVRhYmxlLmggKi8sCisJCQkJQUQzRjFFNkQxRjU0N0NCODAwNjY5OTEyIC8qIFdBVGFibGVE
ZXNjcmlwdG9yLmNwcCAqLywKKwkJCQlBRDNGMUU2QjFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJs
ZURlc2NyaXB0b3IuaCAqLywKKwkJCQlBREZDMzBGNzFGNDdBN0I4MDA2NDUxRDMgLyogV2ViQXNz
ZW1ibHkuaCAqLywKIAkJCQk1REUzRDBGNDBERDhEREZCMDA0Njg3MTQgLyogV2ViS2l0QXZhaWxh
YmlsaXR5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IEFQSTsKQEAgLTYwMDEsOCArNjA1OCw2IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUFEMkZDQjhBMURCNTg0
MDAwMEIzRTczNiAvKiBqcyAqLywKLQkJCQlBRDJGQ0MyRTFEQjgzOUY3MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseS5jcHAgKi8sCi0JCQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2Vi
QXNzZW1ibHkuaCAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJ
UkdlbmVyYXRvci5oICovLAogCQkJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJR
UGxhbi5jcHAgKi8sCkBAIC02MDE4LDYgKzYwNzMsNyBAQAogCQkJCTUyNkFDNEI1MUU5NzdDNUQw
MDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8sCiAJCQkJQUQ0MTJCMzExRTdCMkU4QTAwOEFG
MTU3IC8qIFdhc21Db250ZXh0LmNwcCAqLywKIAkJCQlBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcg
LyogV2FzbUNvbnRleHQuaCAqLywKKwkJCQlBRDVDMzZEQzFGNjg4QjVGMDAwQkNBQUYgLyogV2Fz
bUVtYmVkZGVyLmggKi8sCiAJCQkJNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNl
cHRpb25UeXBlLmggKi8sCiAJCQkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0IC8qIFdhc21GYXVs
dFNpZ25hbEhhbmRsZXIuY3BwICovLAogCQkJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBX
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmggKi8sCkBAIC02MDI2LDYgKzYwODIsOCBAQAogCQkJCTUz
RjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQlB
RDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAqLywKIAkJCQlB
RDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8sCisJCQkJQUQ1
QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCisJCQkJQUQ1QzM2
REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovLAogCQkJCUFEMDA2NTlEMUVD
QUM3RkUwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggKi8sCiAJCQkJNTNFOUUwQTkxRUFFODNERTAw
RkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5jcHAgKi8sCiAJCQkJNTNFOUUwQUExRUFFODNE
RTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovLApAQCAtNjAzMyw2ICs2MDkxLDgg
QEAKIAkJCQk1MzU1NTcxMzFEOUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5oICovLAogCQkJ
CTc5Qjc1OTcxMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICov
LAogCQkJCTc5Qjc1OTcyMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24u
aCAqLywKKwkJCQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuY3Bw
ICovLAorCQkJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICov
LAogCQkJCTc5MDA4MTM2MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxlLmNwcCAqLywKIAkJ
CQk3OTAwODEzNzFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVsZS5oICovLAogCQkJCTUzRTc3
N0UxMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwICovLApAQCAt
NjA1NCw2ICs2MTE0LDggQEAKIAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNl
Y3Rpb25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1
cmUuY3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJl
LmggKi8sCisJCQkJQUQ1QzM2RTMxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5jcHAgKi8s
CisJCQkJQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5oICovLAogCQkJCTUy
NTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLywKIAkJCQk1MjUwRDJE
MDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovLAogCQkJCTUzRTlFMEFFMUVBRUM0
NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLywKQEAgLTc2NTYsNiArNzcxOCwxMCBA
QAogCQlBRDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFEOERENkQwMUY2NzA4QTMwMDA0RUI1MiAvKiBK
U1RvV2FzbS5jcHAgKi8sCisJCQkJQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9XYXNt
LmggKi8sCisJCQkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuY3Bw
ICovLAorCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi8s
CiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwICovLAogCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmggKi8sCiAJCQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8sCkBAIC03Njc1LDYgKzc3NDEsOCBAQAogCQkJCUFE
MkZDQkFEMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmggKi8s
CiAJCQkJQUQyRkNCQUUxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5jcHAg
Ki8sCiAJCQkJQUQyRkNCQUYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5o
ICovLAorCQkJCUFERDA5QUVGMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5jcHAgKi8sCisJ
CQkJQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmggKi8sCiAJCQkJQUQyRkNC
QjAxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3Iu
Y3BwICovLAogCQkJCUFEMkZDQkIxMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJQUQyRkNCQjIxREI1OERBNDAwQjNFNzM2IC8q
IFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcCAqLywKQEAgLTc5NTAsNiArODAx
OCw3IEBACiAJCQkJMEZFQzg1QkIxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIz
S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVBRjczIC8qIEIz
TGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFQzFGNzVB
RDdDMDAwQkNBQUYgLyogV2FzbVRvSlMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTFFMUJG
Mjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzE5
REEwNDFDMUJFNDBEMDAxRDI2MEIgLyogQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJU
b0Fpci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQwLDYgKzgxMDksNyBAQAogCQkJCUUzMjhEQUVC
MUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRlY29kZVJld3JpdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVk
UmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAv
KiBDYWdlZEJhcnJpZXJQdHIuaCBpbiBIZWFkZXJzICovLApAQCAtODI0NCw2ICs4MzE0LDcgQEAK
IAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdOdWxsQWJzdHJhY3RTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkRE
MUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUxIC8qIERG
R09wSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzU0LDggKzg0MjUsMTAgQEAKIAkJCQkwRjNB
Qzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBp
biBIZWFkZXJzICovLAorCQkJCUFENUMzNkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNTcxRjMzQTQ1MzAwRjU5QjZDIC8qIEZhc3RNYWxs
b2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzODE3
QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVD
MzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI0RTU0MzE3RUE5RjU5MDBBQkIyMTcgLyogRlBSSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTM0RURCRjcxREI1RkZDOTAwREM4N0E1IC8qIEZyYW1lVHJhY2Vycy5oIGluIEhl
YWRlcnMgKi8sCkBAIC04NzU3LDcgKzg4MzAsNiBAQAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNC
MDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQUQyRkNDMzExREI4M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEg
LyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04OTUwLDYgKzkwMjIsNyBAQAogCQkJCUJDRDIwMkQ2MEUxNzA3MDgw
MDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
N0MzOUZCMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTcxMkI0MTExQzdCMjM1MDA3QTUzMTUgLyogUmVnRXhwS2V5LmggaW4gSGVhZGVycyAq
LywKKwkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ1QjBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjdDMzlGRDFDOEY2NTk1MDA0ODAxNTEgLyogUmVnRXhwT2JqZWN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzQwRTE3MDZBNzAwMkM3RTgyIC8q
IFJlZ0V4cFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTE5LDYgKzkxOTIsNyBAQAog
CQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBWaXNpdGluZ1RpbWVv
dXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkVGMUY3QTI2M0EwMDBCQ0FBRiAvKiBXYXNt
TWVtb3J5TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3ODYwOTAwRTA2RkJE
IC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjAwRTE2RjVDRDAw
QjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1
RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKaW5kZXggNDE0NTVkYi4uYjRhNGI0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dApAQCAtOTM1LDcgKzkzNSw2IEBAIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCiB0b29s
cy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNwZWN0b3IuY3BwCiAKLXdhc20v
SlNXZWJBc3NlbWJseS5jcHAKIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCiB3YXNtL1dhc21C
QlFQbGFuLmNwcAogd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTk0MywxMiArOTQyLDE2IEBAIHdh
c20vV2FzbUNhbGxlZS5jcHAKIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAogd2FzbS9X
YXNtQ29kZUJsb2NrLmNwcAogd2FzbS9XYXNtQ29udGV4dC5jcHAKK3dhc20vV2FzbUVtYmVkZGVy
LmgKIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKIHdhc20vV2FzbUZvcm1hdC5jcHAK
IHdhc20vV2FzbUluZGV4T3JOYW1lLmNwcAord2FzbS9XYXNtSW5zdGFuY2UuY3BwCit3YXNtL1dh
c21JbnN0YW5jZS5oCiB3YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKIHdhc20vV2FzbU1lbW9y
eS5jcHAKIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAord2FzbS9XYXNtTWVtb3J5TW9k
ZS5jcHAKIHdhc20vV2FzbU1vZHVsZS5jcHAKIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNw
cAogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtOTU4LDEwICs5NjEsMTUgQEAgd2FzbS9X
YXNtT3Bjb2RlT3JpZ2luLmNwcAogd2FzbS9XYXNtUGFnZUNvdW50LmNwcAogd2FzbS9XYXNtUGxh
bi5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAKK3dhc20vV2FzbVRhYmxlLmNwcAord2FzbS9X
YXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcAogd2FzbS9XYXNtVmFsaWRhdGUuY3BwCiB3
YXNtL1dhc21Xb3JrbGlzdC5jcHAKIAord2FzbS9qcy9KU1RvV2FzbS5jcHAKK3dhc20vanMvSlNU
b1dhc20uaAord2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3Bw
CiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCkBAIC05NzEsNiArOTc5LDgg
QEAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcAogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmNwcAord2FzbS9qcy9X
YXNtVG9KUy5oCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3Bw
CiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAogd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggNDIyODBjNS4uZjhhMzk3NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgQ2FsbFNpdGVJbmRleCBBY2Nlc3NHZW5lcmF0aW9u
U3RhdGU6Om9yaWdpbmFsQ2FsbFNpdGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIHN0dWIKIHZvaWQg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCkKIHsK
ICAgICByZXN0b3JlU2NyYXRjaCgpOwotICAgIGppdC0+Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihtX3ZtKTsKKyAgICBqaXQtPmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0udG9wRW50cnlGcmFtZSk7CiAgICAgaWYg
KG5lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oKSkgewogICAgICAgICAvLyBUbyB0
aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiBoYW5kbGluZwogICAg
ICAgICAvLyBjYWxsIHNpdGUsIHRoZXkgd2lsbCBleHBlY3QgdGhlIE9TUiBleGl0IHRvIGJlIGFy
cml2ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCmluZGV4
IDM0OGM2OGMuLjc3MTZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqCkBAIC02
NTIsOCArNjUyLDggQEAgdm9pZCBEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rpb24oKQogICAgIGlm
ICghbV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BW
TUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBtX3BhdXNlT25DYWxsRnJh
bWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1l
KHRvcFZNRW50cnlGcmFtZSkgOiBudWxscHRyOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJh
bWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJy
ZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZy
YW1lKSA6IG51bGxwdHI7CiAgICAgbV9wYXVzZU9uU3RlcE91dCA9IHRydWU7CiAgICAgc2V0U3Rl
cHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG5vdGlmeURvbmVQcm9jZXNzaW5n
RGVidWdnZXJFdmVudHMoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2b2lkIERlYnVnZ2VyOjpyZXR1
cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUg
PSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9j
dXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5
RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlG
cmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIGNhbGwsIHRoZXJlIHdhcyBhdCBsZWFz
dCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdlIGFyZSByZXR1cm5pbmcgdG8uCiAg
ICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQgPSB0cnVlOwpAQCAtODU2LDggKzg1
Niw4IEBAIHZvaWQgRGVidWdnZXI6OnVud2luZEV2ZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWTUVu
dHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRv
cFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IG1fdm0udG9w
RW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIFRyZWF0IHN0ZXBwaW5n
IG92ZXIgYW4gZXhjZXB0aW9uIGxvY2F0aW9uIGxpa2UgYSBzdGVwLW91dC4KICAgICBpZiAobV9j
dXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkKQEAgLTg4Niw4ICs4ODYsOCBA
QCB2b2lkIERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
ICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1F
bnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0
b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRv
cEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJv
bSBhIHByb2dyYW0sIGNvdWxkIGJlIGV2YWwoKSwgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBleHBy
ZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVybmluZyB0by4KICAgICBtX3Bhc3RG
aXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IGQxOWRkYjcuLjVmYTQ4ZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0xNDAsNyArMTQw
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICBp
ZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsKICAg
ICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlzKTsK
IAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9u
SGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFu
ZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
dm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBK
SVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0
aW9uQ2hlY2tzLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3MubGluayh0aGlz
KTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0
aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAo
dGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCmluZGV4IDU4M2JmOTguLjAyMWVhYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQqIHByZXBhcmVP
U1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBi
eXRlY29kZUluCiAgICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNl
dChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7
CiAKICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5z
aXplKCk7Ci0gICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS0+dG9w
Vk1FbnRyeUZyYW1lKTsKKyAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVjb3Jk
KHZtLT50b3BFbnRyeUZyYW1lKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0
ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgY3VycmVudEVudHJ5ID0g
cmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKTsKICAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0
ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAKaW5kZXggMzQzMzA4Yy4uYWI3YWM1NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBp
ZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkgewogICAgICAgICAgICAgLy8gV2UgYXJl
IGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9t
IGdlbmVyaWNVbndpbmQoKS4KICAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3Vy
IGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICBqaXQucmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgICAg
ICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubG9hZFB0cih2bS0+YWRkcmVz
c09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAg
ICAgICB9CiAgICAgICAgIGppdC5hZGRQdHIoCkBAIC01MzcsNyArNTM3LDcgQEAgdm9pZCBPU1JF
eGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0
JiBleGl0LCBjb25zdAogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OwogCiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICAgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVu
dHJ5RnJhbWUpOwogCiAgICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBz
dG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwCmluZGV4IGI3MzI3ZjMuLmQwYzRmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgaml0LmFib3J0V2l0
aFJlYXNvbihERkdVbnJlYXNvbmFibGVPU1JFbnRyeUp1bXBEZXN0aW5hdGlvbik7CiAKICAgICBv
ay5saW5rKCZqaXQpOwotICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgaml0LmVt
aXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBqaXQuanVtcChHUFJJbmZv
OjpyZWdUMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAppbmRleCBm
ZjJjZTU2Li5mZjI0Njc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9p
bnQ6OlJlc3VsdCYgc2FmZXBvaW50UmVzdWx0KQogCiAgICAgLy8gRW1pdCB0aGUgZXhjZXB0aW9u
IGhhbmRsZXIuCiAgICAgKnN0YXRlLmV4Y2VwdGlvbkhhbmRsZXIgPSBqaXQubGFiZWwoKTsKLSAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7
CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
LnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAKaW5kZXggN2MwMTgxZC4uMmExZWI3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQog
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwo
KTsKIAogICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDApKTsKLSAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICAgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZy
YW1lKTsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigm
dm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVy
RnJhbWUgPSBqaXQuY2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCmluZGV4IGM3OTM0ZTMuLmE5OWI1YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yNjQsNyArMjY0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkp
LAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2
bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihqaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDhl
MDgxZDcuLjFjN2U2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xODYsNyArMTg2LDcgQEAgc3RhdGljIHZvaWQgY29tcGls
ZVN0dWIoCiAgICAgLy8gVGhlIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgcmVzdGFibGlz
aCBvdXIgZnJhbWUgaW4gdGhlIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgogICAgIGlmIChleGl0Lmlz
R2VuZXJpY1Vud2luZEhhbmRsZXIoKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2Fs
bEZyYW1lRm9yQ2F0Y2gpOyAvLyBUaGUgZmlyc3QgdGltZSB3ZSBoaXQgdGhpcyBleGl0LCBsaWtl
IGF0IGFsbCBvdGhlciB0aW1lcywgdGhpcyBmaWVsZCBzaG91bGQgYmUgbm9uLW51bGwuCi0gICAg
ICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKnZtKTsKKyAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgICAgICBqaXQubG9hZFB0cih2
bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9p
bnRlclJlZ2lzdGVyKTsKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtNDEyLDggKzQxMiw4IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNh
dmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICBSZWdpc3Rl
clNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7
CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgaml0LmxvYWRQ
dHIoJnZtLT50b3BWTUVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxlZVNhdmVS
ZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoJnZtLT50b3BFbnRyeUZyYW1lLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJl
Z2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAgIH0KIAogICAgIGZv
ciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcu
bmV4dCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwCmluZGV4IDlmYTI5ZDAuLmJlNjFhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxMy0yMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0
LmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CkBAIC0yMTcsNyArMjE4LDcg
QEAgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVj
dChWTSYgdm0pCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIGlmICghY2FsbGVlKCkuaXNX
YXNtKCkpCiAgICAgICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJu
IFdhc206OmxvYWRDb250ZXh0KHZtKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIHZtLndh
c21Db250ZXh0LmxvYWQoKS0+Z2xvYmFsT2JqZWN0KCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TSh2bSk7CiAgICAgcmV0dXJuIGxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTIzNywyNCArMjM4
LDI0IEBAIGJvb2wgQ2FsbEZyYW1lOjppc0FueVdhc21DYWxsZWUoKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKFZNRW50cnlGcmFtZSom
IGN1cnJWTUVudHJ5RnJhbWUpCitDYWxsRnJhbWUqIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWUoRW50
cnlGcmFtZSomIGN1cnJFbnRyeUZyYW1lKQogewotICAgIGlmIChjYWxsZXJGcmFtZU9yVk1FbnRy
eUZyYW1lKCkgPT0gY3VyclZNRW50cnlGcmFtZSkgewotICAgICAgICBWTUVudHJ5UmVjb3JkKiBj
dXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyclZNRW50cnlGcmFtZSk7Ci0gICAg
ICAgIGN1cnJWTUVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcFZNRW50cnlG
cmFtZSgpOworICAgIGlmIChjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpID09IGN1cnJFbnRyeUZy
YW1lKSB7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRy
eVJlY29yZChjdXJyRW50cnlGcmFtZSk7CisgICAgICAgIGN1cnJFbnRyeUZyYW1lID0gY3VyclZN
RW50cnlSZWNvcmQtPnByZXZUb3BFbnRyeUZyYW1lKCk7CiAgICAgICAgIHJldHVybiBjdXJyVk1F
bnRyeVJlY29yZC0+cHJldlRvcENhbGxGcmFtZSgpOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSk7CiB9
CiAKLVNVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2FmZUNhbGxlckZyYW1l
KFZNRW50cnlGcmFtZSomIGN1cnJWTUVudHJ5RnJhbWUpCitTVVBQUkVTU19BU0FOIENhbGxGcmFt
ZSogQ2FsbEZyYW1lOjp1bnNhZmVDYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYgY3VyckVudHJ5RnJh
bWUpCiB7Ci0gICAgaWYgKHVuc2FmZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJy
Vk1FbnRyeUZyYW1lKSB7Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3Jk
ID0gdm1FbnRyeVJlY29yZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAgY3VyclZNRW50cnlG
cmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wVk1FbnRyeUZyYW1lKCk7Cisg
ICAgaWYgKHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gY3VyckVudHJ5RnJhbWUp
IHsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVj
b3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAgICAgICAgY3VyckVudHJ5RnJhbWUgPSBjdXJyVk1FbnRy
eVJlY29yZC0+dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUoKTsKICAgICAgICAgcmV0dXJuIGN1cnJW
TUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wQ2FsbEZyYW1lKCk7CiAgICAgfQotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPih1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1l
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPih1bnNhZmVDYWxsZXJGcmFt
ZU9yRW50cnlGcmFtZSgpKTsKIH0KIAogU291cmNlT3JpZ2luIENhbGxGcmFtZTo6Y2FsbGVyU291
cmNlT3JpZ2luKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAppbmRleCA2MjMwOWEwLi42ZDVkNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC0xNDEsMTIgKzE0MSwxMiBAQCBuYW1lc3BhY2Ug
SlNDICB7CiAKICAgICAgICAgQ2FsbEZyYW1lJiBvcGVyYXRvcj0oY29uc3QgUmVnaXN0ZXImIHIp
IHsgKnN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcykgPSByOyByZXR1cm4gKnRoaXM7IH0KIAot
ICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpKTsgfQotICAgICAgICB2
b2lkKiBjYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gY2FsbGVyRnJh
bWVBbmRQQygpLmNhbGxlckZyYW1lOyB9Ci0gICAgICAgIFNVUFBSRVNTX0FTQU4gdm9pZCogdW5z
YWZlQ2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHVuc2FmZUNhbGxl
ckZyYW1lQW5kUEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVP
ckVudHJ5RnJhbWUoKSk7IH0KKyAgICAgICAgdm9pZCogY2FsbGVyRnJhbWVPckVudHJ5RnJhbWUo
KSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KKyAgICAg
ICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpIGNv
bnN0IHsgcmV0dXJuIHVuc2FmZUNhbGxlckZyYW1lQW5kUEMoKS5jYWxsZXJGcmFtZTsgfQogCi0g
ICAgICAgIENhbGxGcmFtZSogdW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYpOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKFZNRW50cnlGcmFt
ZSomKTsKKyAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYp
OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKEVudHJ5
RnJhbWUqJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU291cmNlT3JpZ2luIGNhbGxl
clNvdXJjZU9yaWdpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvRnJhbWVUcmFjZXJzLmgKaW5kZXggYzViNmI4My4uNzZhY2Q2NCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgVk1FbnRyeUZyYW1lOworc3RydWN0IEVudHJ5
RnJhbWU7CiAKIGNsYXNzIFN1c3BlbmRFeGNlcHRpb25TY29wZSB7CiBwdWJsaWM6CkBAIC03NCwz
MyArNzQsMzMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKHZtKTsKICAgICAgICAg
QVNTRVJUKGNhbGxGcmFtZSk7Ci0gICAgICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0tPnRvcFZNRW50cnlGcmFt
ZSkpOworICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbEZyYW1lKSA8
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAgICAgICAgIHZt
LT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgfQogfTsKIAogY2xhc3MgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgewogcHVibGljOgotICAgIEFMV0FZU19JTkxJTkUgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUoVk0qIHZtLCBWTUVudHJ5RnJhbWUqIHZtRW50
cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAgQUxXQVlTX0lOTElORSBOYXRpdmVD
YWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZShWTSogdm0sIEVudHJ5RnJhbWUqIEVudHJ5RnJhbWUs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICA6IG1fdm0odm0pCiAgICAgewogICAgICAg
ICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAgICAgbV9zYXZl
ZFRvcFZNRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIG1fc2F2ZWRU
b3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1fc2F2ZWRUb3BDYWxs
RnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwotICAgICAgICB2bS0+dG9wVk1FbnRyeUZyYW1lID0g
dm1FbnRyeUZyYW1lOworICAgICAgICB2bS0+dG9wRW50cnlGcmFtZSA9IEVudHJ5RnJhbWU7CiAg
ICAgICAgIHZtLT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgfQogCiAgICAgQUxXQVlT
X0lOTElORSB+TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUoKQogICAgIHsKLSAgICAg
ICAgbV92bS0+dG9wVk1FbnRyeUZyYW1lID0gbV9zYXZlZFRvcFZNRW50cnlGcmFtZTsKKyAgICAg
ICAgbV92bS0+dG9wRW50cnlGcmFtZSA9IG1fc2F2ZWRUb3BFbnRyeUZyYW1lOwogICAgICAgICBt
X3ZtLT50b3BDYWxsRnJhbWUgPSBtX3NhdmVkVG9wQ2FsbEZyYW1lOwogICAgIH0KIAogcHJpdmF0
ZToKICAgICBWTSogbV92bTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fc2F2ZWRUb3BWTUVudHJ5RnJh
bWU7CisgICAgRW50cnlGcmFtZSogbV9zYXZlZFRvcEVudHJ5RnJhbWU7CiAgICAgQ2FsbEZyYW1l
KiBtX3NhdmVkVG9wQ2FsbEZyYW1lOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggMTM1M2UxMC4uYTUxM2U0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CkBAIC02NTMsOSArNjUzLDkgQEAgcHVibGljOgogCiAgICAgICAgIG5vdGlmeURlYnVnZ2VyT2ZV
bndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRvcik7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwogCi0gICAgICAg
IGJvb2wgc2hvdWxkU3RvcFVud2luZGluZyA9IHZpc2l0b3ItPmNhbGxlcklzVk1FbnRyeUZyYW1l
KCk7CisgICAgICAgIGJvb2wgc2hvdWxkU3RvcFVud2luZGluZyA9IHZpc2l0b3ItPmNhbGxlcklz
RW50cnlGcmFtZSgpOwogICAgICAgICBpZiAoc2hvdWxkU3RvcFVud2luZGluZykKICAgICAgICAg
ICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKQEAgLTY2Myw3ICs2NjMsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAg
dm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihTdGFja1Zp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0CiAgICAgewogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9P
Rl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY3VycmVudENhbGxlZVNhdmVzID0gdmlzaXRvci0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwpA
QCAtNjc2LDcgKzY3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIGludHB0cl90KiBmcmFtZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3QqPihtX2NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpOwogCiAg
ICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPnNpemUo
KTsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRv
cFZNRW50cnlGcmFtZSk7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlS
ZWNvcmQobV92bS50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewogICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBj
dXJyZW50RW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmF0KGkpOwogICAgICAgICAgICAgaWYg
KGRvbnRDb3B5UmVnaXN0ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpAQCAtNzAyLDcgKzcw
Miw3IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYg
dm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogCiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVud2luZEZyb21DYWxs
ZXJGcmFtZSkgewotICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9yVk1FbnRyeUZy
YW1lKCkgPT0gdm0udG9wVk1FbnRyeUZyYW1lKQorICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZU9yRW50cnlGcmFtZSgpID09IHZtLnRvcEVudHJ5RnJhbWUpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZy
YW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCmluZGV4IDg1ZDE0N2EuLmQwODJiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDQsMTggKzQ0LDE4IEBAIFN0YWNrVmlzaXRvcjo6U3RhY2tWaXNpdG9yKENhbGxGcmFtZSogc3Rh
cnRGcmFtZSwgVk0qIHZtKQogICAgIENhbGxGcmFtZSogdG9wRnJhbWU7CiAgICAgaWYgKHN0YXJ0
RnJhbWUpIHsKICAgICAgICAgQVNTRVJUKHZtKTsKLSAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlG
cmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1l
ID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgICAgIHRvcEZyYW1lID0gdm0tPnRvcENhbGxGcmFt
ZTsKICAgICAgICAgCi0gICAgICAgIGlmICh0b3BGcmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4o
bV9mcmFtZS5tX1ZNRW50cnlGcmFtZSkgPT0gc3RhdGljX2Nhc3Q8dm9pZCo+KHRvcEZyYW1lKSkg
ewotICAgICAgICAgICAgdG9wRnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUubV9WTUVudHJ5
RnJhbWUpLT5tX3ByZXZUb3BDYWxsRnJhbWU7Ci0gICAgICAgICAgICBtX2ZyYW1lLm1fVk1FbnRy
eUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKS0+bV9wcmV2VG9w
Vk1FbnRyeUZyYW1lOworICAgICAgICBpZiAodG9wRnJhbWUgJiYgc3RhdGljX2Nhc3Q8dm9pZCo+
KG1fZnJhbWUubV9lbnRyeUZyYW1lKSA9PSBzdGF0aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7
CisgICAgICAgICAgICB0b3BGcmFtZSA9IHZtRW50cnlSZWNvcmQobV9mcmFtZS5tX2VudHJ5RnJh
bWUpLT5tX3ByZXZUb3BDYWxsRnJhbWU7CisgICAgICAgICAgICBtX2ZyYW1lLm1fZW50cnlGcmFt
ZSA9IHZtRW50cnlSZWNvcmQobV9mcmFtZS5tX2VudHJ5RnJhbWUpLT5tX3ByZXZUb3BFbnRyeUZy
YW1lOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlG
cmFtZSA9IDA7CisgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gMDsKICAgICAgICAgdG9w
RnJhbWUgPSAwOwogICAgIH0KLSAgICBtX2ZyYW1lLm1fY2FsbGVySXNWTUVudHJ5RnJhbWUgPSBm
YWxzZTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVySXNFbnRyeUZyYW1lID0gZmFsc2U7CiAgICAgcmVh
ZEZyYW1lKHRvcEZyYW1lKTsKIAogICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRoZSBjYWxsZXIgd2Fu
dHMgdG8gc3RhcnQgdW53aW5kaW5nIGZyb20uCkBAIC03NSwxNCArNzUsMTQgQEAgdm9pZCBTdGFj
a1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUoKQogICAgICAgICAgICAgICAgIHJlYWRJbmxpbmVkRnJh
bWUobV9mcmFtZS5jYWxsRnJhbWUoKSwgJmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyKTsK
ICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX2ZyYW1lLmlubGluZUNhbGxGcmFt
ZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlGcmFtZSA9
IG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWU7CisgICAgICAgICAgICBtX2ZyYW1lLm1fZW50
cnlGcmFtZSA9IG1fZnJhbWUubV9jYWxsZXJFbnRyeUZyYW1lOwogICAgICAgICAgICAgcmVhZEZy
YW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCBjYWxsZXJDb2RlT3JpZ2luKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLSAgICBt
X2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZTsKKyAg
ICBtX2ZyYW1lLm1fZW50cnlGcmFtZSA9IG1fZnJhbWUubV9jYWxsZXJFbnRyeUZyYW1lOwogICAg
IHJlYWRGcmFtZShtX2ZyYW1lLmNhbGxlckZyYW1lKCkpOwogfQogCkBAIC0xNTIsOSArMTUyLDkg
QEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmkKIHsKICAgICBtX2ZyYW1lLm1fY2FsbEZyYW1lID0g
Y2FsbEZyYW1lOwogICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKLSAgICBtX2ZyYW1lLm1fQ2Fs
bGVyVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX1ZNRW50cnlGcmFtZTsKLSAgICBtX2ZyYW1lLm1f
Y2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKG1fZnJhbWUubV9DYWxsZXJWTUVu
dHJ5RnJhbWUpOwotICAgIG1fZnJhbWUubV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IG1fZnJhbWUu
bV9DYWxsZXJWTUVudHJ5RnJhbWUgIT0gbV9mcmFtZS5tX1ZNRW50cnlGcmFtZTsKKyAgICBtX2Zy
YW1lLm1fY2FsbGVyRW50cnlGcmFtZSA9IG1fZnJhbWUubV9lbnRyeUZyYW1lOworICAgIG1fZnJh
bWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUobV9mcmFtZS5tX2NhbGxl
ckVudHJ5RnJhbWUpOworICAgIG1fZnJhbWUubV9jYWxsZXJJc0VudHJ5RnJhbWUgPSBtX2ZyYW1l
Lm1fY2FsbGVyRW50cnlGcmFtZSAhPSBtX2ZyYW1lLm1fZW50cnlGcmFtZTsKICAgICBtX2ZyYW1l
Lm1faXNXYXNtRnJhbWUgPSBmYWxzZTsKIAogICAgIENhbGxlZUJpdHMgY2FsbGVlID0gY2FsbEZy
YW1lLT5jYWxsZWUoKTsKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJh
bWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBzdGQ6OmZ1bmN0aW9u
PAogCiAgICAgICAgICAgICBpbmRlbnQtLTsKICAgICAgICAgfQotICAgICAgICBvdXQucHJpbnQo
aW5kZW50LCAidm1FbnRyeUZyYW1lOiAiLCBSYXdQb2ludGVyKHZtRW50cnlGcmFtZSgpKSwgIlxu
Iik7CisgICAgICAgIG91dC5wcmludChpbmRlbnQsICJFbnRyeUZyYW1lOiAiLCBSYXdQb2ludGVy
KG1fZW50cnlGcmFtZSksICJcbiIpOwogICAgICAgICBpbmRlbnQtLTsKICAgICB9CiAgICAgb3V0
LnByaW50KGluZGVudCwgIn1cbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5oCmluZGV4IDhhZDA5NDAuLmUyYTEzNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IH0KLSAg
ICAgICAgYm9vbCBjYWxsZXJJc1ZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVy
SXNWTUVudHJ5RnJhbWU7IH0KKyAgICAgICAgYm9vbCBjYWxsZXJJc0VudHJ5RnJhbWUoKSBjb25z
dCB7IHJldHVybiBtX2NhbGxlcklzRW50cnlGcmFtZTsgfQogICAgICAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJGcmFtZTsgfQogICAgICAgICBDYWxs
ZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9CiAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KQEAgLTk3LDcg
Kzk3LDYgQEAgcHVibGljOgogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwogCiAgICAgICAgIENsb25lZEFyZ3VtZW50cyogY3JlYXRlQXJndW1lbnRz
KCk7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9WTUVudHJ5RnJhbWU7IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxGcmFtZTsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiwgSW5kZW50ZXIgPSBJbmRlbnRlcigpKSBjb25zdDsKQEAgLTExNCw4ICsxMTMsOCBA
QCBwdWJsaWM6CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogbV9pbmxpbmVDYWxsRnJhbWU7CiAj
ZW5kaWYKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKLSAgICAgICAgVk1FbnRyeUZy
YW1lKiBtX1ZNRW50cnlGcmFtZTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiBtX0NhbGxlclZNRW50
cnlGcmFtZTsKKyAgICAgICAgRW50cnlGcmFtZSogbV9lbnRyeUZyYW1lOworICAgICAgICBFbnRy
eUZyYW1lKiBtX2NhbGxlckVudHJ5RnJhbWU7CiAgICAgICAgIENhbGxGcmFtZSogbV9jYWxsZXJG
cmFtZTsKICAgICAgICAgQ2FsbGVlQml0cyBtX2NhbGxlZTsKICAgICAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKQEAgLTEyMyw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBt
X2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICB1bnNpZ25lZCBtX2J5dGVjb2Rl
T2Zmc2V0OwogICAgICAgICBXYXNtOjpJbmRleE9yTmFtZSBtX3dhc21GdW5jdGlvbkluZGV4T3JO
YW1lOwotICAgICAgICBib29sIG1fY2FsbGVySXNWTUVudHJ5RnJhbWUgOiAxOworICAgICAgICBi
b29sIG1fY2FsbGVySXNFbnRyeUZyYW1lIDogMTsKICAgICAgICAgYm9vbCBtX2lzV2FzbUZyYW1l
IDogMTsKIAogICAgICAgICBmcmllbmQgY2xhc3MgU3RhY2tWaXNpdG9yOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNRW50cnlSZWNvcmQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKaW5kZXggZjM2YzJi
ZS4uMDEwM2E3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1ZNRW50cnlSZWNvcmQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXN0cnVjdCBWTUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIFZNOwogCkBAIC00MCw3ICs0MCw3IEBAIHN0cnVjdCBWTUVudHJ5UmVjb3JkIHsK
ICAgICAgKi8KICAgICBWTSogbV92bTsKICAgICBFeGVjU3RhdGUqIG1fcHJldlRvcENhbGxGcmFt
ZTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fcHJldlRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZy
YW1lKiBtX3ByZXZUb3BFbnRyeUZyYW1lOwogCiAjaWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaW50cHRyX3QgY2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlcltOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSU107CkBAIC00OSwyMCAr
NDksMjAgQEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgIEV4ZWNTdGF0ZSogcHJldlRvcENh
bGxGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcENhbGxGcmFtZTsgfQogICAgIFNVUFBSRVNTX0FT
QU4gRXhlY1N0YXRlKiB1bnNhZmVQcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9w
Q2FsbEZyYW1lOyB9CiAKLSAgICBWTUVudHJ5RnJhbWUqIHByZXZUb3BWTUVudHJ5RnJhbWUoKSB7
IHJldHVybiBtX3ByZXZUb3BWTUVudHJ5RnJhbWU7IH0KLSAgICBTVVBQUkVTU19BU0FOIFZNRW50
cnlGcmFtZSogdW5zYWZlUHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcFZN
RW50cnlGcmFtZTsgfQorICAgIEVudHJ5RnJhbWUqIHByZXZUb3BFbnRyeUZyYW1lKCkgeyByZXR1
cm4gbV9wcmV2VG9wRW50cnlGcmFtZTsgfQorICAgIFNVUFBSRVNTX0FTQU4gRW50cnlGcmFtZSog
dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BFbnRyeUZyYW1lOyB9
CiB9OwogCi1leHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoVk1FbnRyeUZy
YW1lKik7CitleHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoRW50cnlGcmFt
ZSopOwogCi1zdHJ1Y3QgVk1FbnRyeUZyYW1lIHsKK3N0cnVjdCBFbnRyeUZyYW1lIHsKICNpZiBF
TkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBz
dGF0aWMgcHRyZGlmZl90IHZtRW50cnlSZWNvcmRPZmZzZXQoKQogICAgIHsKLSAgICAgICAgVk1F
bnRyeUZyYW1lKiBmYWtlVk1FbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxWTUVudHJ5RnJh
bWUqPigweDEwMDApOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVj
b3JkKGZha2VWTUVudHJ5RnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiBmYWtlRW50cnlGcmFt
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RW50cnlGcmFtZSo+KDB4MTAwMCk7CisgICAgICAgIFZNRW50
cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZUVudHJ5RnJhbWUpOwogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYWtlVk1FbnRy
eUZyYW1lKSk7CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWNvcmQpIC0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFrZUVudHJ5RnJhbWUpKTsKICAgICB9CiAKICAgICBz
dGF0aWMgcHRyZGlmZl90IGNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IDhkMzFmN2Eu
LmE0YTRjMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRv
bVRodW5rKFZNJiB2bSwgR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsCiB9CiAjZW5k
aWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0pCit2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1l
KiYgdG9wRW50cnlGcmFtZSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0
QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwpAQCAtNjA1LDggKzYwNSw4IEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoVk0mIHZtCiAgICAgfQogICAgIEFTU0VSVChzY3JhdGNoICE9IEludmFsaWRH
UFJSZWcpOwogCi0gICAgbG9hZFB0cigmdm0udG9wVk1FbnRyeUZyYW1lLCBzY3JhdGNoKTsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1
ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2Ny
YXRjaCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVn
aXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNh
bGxlZSBzYXZlcyBleGNlcHQgZm9yIHRoZSBzY3JhdGNoLgogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKQEAgLTYyNyw3ICs2MjcsNyBAQCB2b2lkIEFz
c2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKFZNJiB2bQogICAgIEFTU0VSVChzY3JhdGNoID09IGVudHJ5LnJlZygpLmdwcigp
KTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgZW50cnkub2Zmc2V0KCkpLCBzY3JhdGNo
KTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odG9wRW50
cnlGcmFtZSk7CiAjZW5kaWYKIH0KIApAQCAtNzc4LDQxICs3NzgsNDEgQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oVk0mIHZtLCBKU1ZhbHVlUmVncyB2
YWx1ZSwgR1BSUmUKIH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLXZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjpsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRzdCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJz
Ojpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJSZWcgZHN0KQogewogI2lmIEVOQUJMRShGQVNU
X1RMU19KSVQpCi0gICAgaWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKKyAgICBp
ZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgIGxvYWRGcm9tVExTUHRy
KGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RGX1dBU01fQ09OVEVYVF9LRVkpLCBkc3QpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShXYXNtOjpQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpLndhc21Db250ZXh0UG9pbnRlciwgZHN0KTsKKyAgICBtb3ZlKFdhc206OlBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIGRzdCk7CiB9
CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0KEdQUlJlZyBzcmMpCit2
b2lkIEFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBzcmMp
CiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6dXNlRmFzdFRMU0Zv
ckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAg
ICAgICAgc3RvcmVUb1RMU1B0cihzcmMsIGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RGX1dBU01fQ09O
VEVYVF9LRVkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIG1vdmUoc3Jj
LCBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLndhc21Db250ZXh0UG9pbnRlcik7Cisg
ICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRJ
bnN0YW5jZVBvaW50ZXIpOwogfQogCi1ib29sIEFzc2VtYmx5SGVscGVyczo6bG9hZFdhc21Db250
ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCitib29sIEFzc2VtYmx5SGVscGVyczo6bG9h
ZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkKIHsKICNpZiBF
TkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgp
KQorICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgIHJldHVybiBs
b2FkRnJvbVRMU1B0ck5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRO
ZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdh
c21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkKIHsKICNpZiBFTkFC
TEUoRkFTVF9UTFNfSklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKQor
ICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgIHJldHVybiBzdG9y
ZVRvVExTUHRyTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtODc1LDEwICs4NzUsMTAgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmRlYnVn
Q2FsbChWTSYgdm0sIFZfRGVidWdPcGVyYXRpb25fRVBQIGZ1bmN0aW9uLCB2b2lkKiBhcmcKICAg
ICB9CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIpCit2b2lk
IEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKIHsKICNpZiBOVU1CRVJfT0ZfQ0FM
TEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlG
cmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgY2FsbGVlU2F2ZXNCdWZm
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlck9mZnNldCgpKSwgY2FsbGVlU2F2ZXNCdWZmZXIpOwogCiAgICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rl
ck9mZnNldHMoKTsKICAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0OjpzdGFja1JlZ2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKaW5kZXggYTY4YzM2OS4uY2UwYWJkZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0zNjAsMjggKzM2MCwyOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KEdQUlJlZyB2bUdQUikKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyh2bUdQUiwgVk06OnRvcFZNRW50cnlGcmFt
ZU9mZnNldCgpKSwgdm1HUFIpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh2bUdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyh2
bUdQUiwgVk06OnRvcEVudHJ5RnJhbWVPZmZzZXQoKSksIHZtR1BSKTsKKyAgICAgICAgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZtR1BSKTsKICNlbHNl
CiAgICAgICAgIFVOVVNFRF9QQVJBTSh2bUdQUik7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lk
IGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtLCBj
b25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIGNvbnN0
IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZy
ZWVHUFIoMCk7Ci0gICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwgdGVtcDEpOwot
ICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1w
bCh0ZW1wMSk7CisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAg
ICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAx
KTsKICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgICAgIFVOVVNFRF9QQVJB
TSh0b3BFbnRyeUZyYW1lKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHVzZWRSZWdpc3RlcnMpOwog
I2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomKTsKIAotICAgIHZvaWQg
Y29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoVk0mIHZtLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQorICAgIHZvaWQgY29w
eUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9
KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAg
ICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwpAQCAtMzkyLDgg
KzM5Miw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKIAogICAgICAg
ICAvLyBDb3B5IHNhdmVkIGNhbGxlZVNhdmVzIG9uIHN0YWNrIG9yIHVuc2F2ZWQgY2FsbGVlU2F2
ZXMgaW4gcmVnaXN0ZXIgdG8gdm0gY2FsbGVlU2F2ZSBidWZmZXIKLSAgICAgICAgbG9hZFB0cigm
dm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
Vk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7
CisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0
KCkpLCB0ZW1wMSk7CiAKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNh
dmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9IGNvZGVCbG9jaygpLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC00MDEsMTIgKzQwMSwxMiBAQCBwdWJsaWM6CiAgICAgICAg
IHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwogCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgdm1FbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsK
LSAgICAgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQodm1FbnRyeS5yZWcoKSkpCisg
ICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkp
OworICAgICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiBj
dXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+ZmluZCh2bUVudHJ5LnJlZygp
KTsKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGN1cnJlbnRGcmFtZUVudHJ5ID0gY3Vy
cmVudENhbGxlZVNhdmVzLT5maW5kKGVudHJ5LnJlZygpKTsKIAotICAgICAgICAgICAgaWYgKHZt
RW50cnkucmVnKCkuaXNHUFIoKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BS
KCkpIHsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVnVG9TdG9yZTsKICAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBj
YWxsZWVTYXZlIGZyb20gc3RhY2sgaW50byB0ZW1wIHJlZ2lzdGVyCkBAIC00MTQsOSArNDE0LDkg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2lu
dGVyUmVnaXN0ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIHJlZ1RvU3RvcmUpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHN0b3Jl
IGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIHJlZ1RvU3RvcmUgPSB2
bUVudHJ5LnJlZygpLmdwcigpOworICAgICAgICAgICAgICAgICAgICByZWdUb1N0b3JlID0gZW50
cnkucmVnKCkuZ3ByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihyZWdUb1N0b3JlLCBB
ZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgc3RvcmVQ
dHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgZW50cnkub2Zmc2V0KCkpKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwUmVnVG9TdG9yZTsKICAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKQEAgLTQyNSwxMyArNDI1LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbG9hZERvdWJsZShBZGRyZXNzKGZyYW1lUG9p
bnRlclJlZ2lzdGVyLCBjdXJyZW50RnJhbWVFbnRyeS0+b2Zmc2V0KCkpLCBmcFJlZ1RvU3RvcmUp
OwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHN0
b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIGZwUmVnVG9TdG9y
ZSA9IHZtRW50cnkucmVnKCkuZnByKCk7CisgICAgICAgICAgICAgICAgICAgIGZwUmVnVG9TdG9y
ZSA9IGVudHJ5LnJlZygpLmZwcigpOwogCi0gICAgICAgICAgICAgICAgc3RvcmVEb3VibGUoZnBS
ZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgICAg
ICAgICAgc3RvcmVEb3VibGUoZnBSZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCBlbnRyeS5vZmZz
ZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQotICAgICAgICBVTlVTRURf
UEFSQU0odm0pOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CiAgICAgICAg
IFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKICNlbmRpZgogICAgIH0KQEAgLTE2NDQsMTQg
KzE2NDQsMTQgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0g
ICAgdm9pZCBsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRzdCk7Ci0gICAgdm9pZCBzdG9yZVdhc21D
b250ZXh0KEdQUlJlZyBzcmMpOwotICAgIHN0YXRpYyBib29sIGxvYWRXYXNtQ29udGV4dE5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdG9yZVdhc21Db250ZXh0
TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOworICAgIHZvaWQgbG9hZFdhc21Db250ZXh0SW5z
dGFuY2UoR1BSUmVnIGRzdCk7CisgICAgdm9pZCBzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BS
UmVnIHNyYyk7CisgICAgc3RhdGljIGJvb2wgbG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01h
Y3JvU2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dElu
c3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAKIHByb3RlY3RlZDoK
LSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJ
bXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVy
KTsKIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2Vs
aW5lQ29kZUJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDVlY2YzYTYuLmM4
MTJmOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2
b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIHNraXBPcHRpbWl6ZS5h
cHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9u
Q291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
PmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2Rl
T2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9t
RnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50
cnlGcmFtZSk7CiAKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVj
b2RlT2Zmc2V0KTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmV0dXJuVmFsdWVHUFIpKTsKQEAgLTg4NSw3ICs4ODUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrc1dpdGhD
YWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0
aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUp
OwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMg
cGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUq
KS4KIApAQCAtOTA1LDcgKzkwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKICAgICAgICAgbV9leGNlcHRpb25IYW5kbGVyID0gbGFiZWwoKTsKICAgICAg
ICAgbV9leGNlcHRpb25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFt
ZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFy
Z3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRleCBjYTJkYjhjLi5mMjAx
OGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01Niw4ICs1Niw4IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0
ZSogY2FsbEZyYW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKICAgICAKICAgICBFeGVjU3Rh
dGUqIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZTsKICAgICBpZiAodW53aW5kU3Rh
cnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdG9w
Vk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICAgICAgc2hhZG93Q2hpY2tl
blRvcEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAg
ICAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAg
ICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50
cnlGcmFtZSk7CiAgICAgfQogICAgIHZtLT5zaGFkb3dDaGlja2VuKCkubG9nKCp2bSwgc2hhZG93
Q2hpY2tlblRvcEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93UGFja2V0KCkpOwog
ICAgIApAQCAtODQsNyArODQsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3Rh
dGUqIGNhbGxGcmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgfSBlbHNlCiAgICAg
ICAgIGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRyKGhhbmRsZVVuY2F1Z2h0RXhjZXB0
aW9uKTsKICAgICAKLSAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1l
KSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BWTUVudHJ5RnJhbWUpKTsKKyAgICBB
U1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAKICAgICB2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2ggPSBjYWxsRnJhbWU7CiAgICAgdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93ID0gY2F0Y2hS
b3V0aW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggOWI0
MTY2YS4uOGI0YmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigq
dm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS0+dG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSgpKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19z
dHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICByZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAg
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+
dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsK
ICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
LCBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGkKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRp
bWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgICAgIEp1bXAgbm9PcHRpbWl6ZWRFbnRyeSA9
IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGExMjI4ZDMuLjBhZDc4MjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sg
R2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc2NSw3
ICs3NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwot
ICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkp
OworICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkt
PnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIHJlZ1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxl
cigqdm0oKSk7CkBAIC04MjYsNyArODI2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX3N0
cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKnZtKCkpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV92bSksIHJlZ1QzKTsKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJh
bWUgZm9yIHRoZSBoYW5kbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKaW5kZXggYzA0Y2RjNC4uZTYzOTkzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xMDMsMTQgKzEwMywxNCBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVj
LCBDb2RlQmxvY2sqCiAgICAgVk0qIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50
cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50
cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7
CiAgICAgICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0t
PnRvcFZNRW50cnlGcmFtZTsKKyAgICAgICAgZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1l
OwogICAgIH0KIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
V2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgdGhy
b3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKIH0KIApAQCAtMTIwLDEw
ICsxMjAsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93RGl2aWRlRXJyb3Io
RXhlY1N0YXRlKiBleGVjKQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50
cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50
cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1l
LCBjYWxsZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsK
ICAgICB0aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxl
ckZyYW1lLCBBU0NJSUxpdGVyYWwoIkRpdmlzaW9uIGJ5IHplcm8gb3IgZGl2aXNpb24gb3ZlcmZs
b3cuIikpKTsKIH0KQEAgLTEzMywxMCArMTMzLDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25UaHJvd091dE9mQm91bmRzQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5
RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZt
RW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZy
YW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRy
eUZyYW1lKTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
V2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgRXJy
b3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0aHJvd0V4Y2VwdGlvbihjYWxs
ZXJGcmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1lLCBBU0NJSUxpdGVyYWwoIk91
dC1vZi1ib3VuZHMgYWNjZXNzLiIpKSk7CiB9CkBAIC0xNDksOSArMTQ5LDkgQEAgaW50MzJfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhlYykKIAog
ICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNr
Rm9yKGV4ZWMsICp2bSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAw
KSB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlG
cmFtZTsKLSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1l
KHZtRW50cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3Jl
IHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJh
bWUqIGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxl
ckZyYW1lKTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNj
b3BlKTsKICAgICB9CiAKQEAgLTE2NSw5ICsxNjUsOSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICBpbnQz
Ml90IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVj
LCAqdm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGlmIChtaXNzaW5nQXJnQ291bnQgPCAwKSB7
Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFt
ZTsKLSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZt
RW50cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRy
YWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUq
IGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZy
YW1lKTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3Bl
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAppbmRleCA5MmU0MmIxLi45MDNhMDVjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtNjYsNyArNjYsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkK
ICAgICAvLyBldmVuIHRob3VnaCB3ZSB3b24ndCB1c2UgaXQuCiAgICAgaml0LnByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwog
Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KnZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgaml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQq
Pihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMzYy
LDcgKzM2Miw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJh
dG9yKFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBrCiAgICAgLy8gSGFuZGxlIGFuIGV4
Y2VwdGlvbgogICAgIGV4Y2VwdGlvbkhhbmRsZXIubGluaygmaml0KTsKIAotICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRy
eUZyYW1lKTsKICAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lz
dGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxVRTMy
XzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBlOWEwZDJhLi4zNTAzNWRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcApAQCAtMTg3Miw4ICsxODcyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblByaW50U3RkRXJyKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gcHJpbnQK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQ2FsbEZyYW1lKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFZNRW50cnlGcmFt
ZSogdG9wVk1FbnRyeUZyYW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIEV4ZWNTdGF0ZSog
Y2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVu
dHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOworICAgIEV4ZWNTdGF0
ZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBp
ZiAoY2FsbGVyRnJhbWUpCiAgICAgICAgIHZtLmludGVycHJldGVyLT5kdW1wQ2FsbEZyYW1lKGNh
bGxlckZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXgg
NzM1ZTcxYi4uMzY2NGUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCkBAIC00ODEsMTMgKzQ4MSwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzdGFja19jaGVjaykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVu
dHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9w
RW50cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwogICAgIGlmICghY2FsbGVyRnJh
bWUpIHsKICAgICAgICAgY2FsbGVyRnJhbWUgPSBleGVjOwotICAgICAgICB2bUVudHJ5RnJhbWUg
PSB2bS50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIHRvcEVudHJ5RnJhbWUgPSB2bS50b3BFbnRy
eUZyYW1lOwogICAgIH0KLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFj
ZXIoJnZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIoJnZtLCB0b3BFbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7
CiAKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCmluZGV4IDM2ZjY0ODYuLjUyOTY3ZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3
ICsxMTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9OYXRpdmUodm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3MsIFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCi1leHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNv
cmQoVk1FbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQorZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2
bUVudHJ5UmVjb3JkKEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUpCiB7CiAgICAgLy8gVGhlIEMgTG9v
cCBkb2Vzbid0IGhhdmUgYW55IGNhbGxlZSBzYXZlIHJlZ2lzdGVycywgc28gdGhlIFZNRW50cnlS
ZWNvcmQgaXMgYWxsb2NhdGVkIGF0IHRoZSBiYXNlIG9mIHRoZSBmcmFtZS4KICAgICBpbnRwdHJf
dCBzdGFja0FsaWdubWVudCA9IHN0YWNrQWxpZ25tZW50Qnl0ZXMoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCA1ZGRl
NjY0Li43YmYxZWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC02NTksNyArNjU5LDcgQEAgZW5kCiAKIG1hY3JvIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAg
ICAgaWYgQVJNNjQgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRv
cFZNRW50cnlGcmFtZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVb
dm1dLCB0ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVh
cCBWTUVudHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAg
ICAgICAgIGlmIEFSTTY0CkBAIC03MDEsNyArNzAxLDcgQEAgZW5kCiAKIG1hY3JvIHJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKICAg
ICBpZiBBUk02NCBvciBYODZfNjQgb3IgWDg2XzY0X1dJTgotICAgICAgICBsb2FkcCBWTTo6dG9w
Vk1FbnRyeUZyYW1lW3ZtXSwgdGVtcAorICAgICAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2
bV0sIHRlbXAKICAgICAgICAgdm1FbnRyeVJlY29yZCh0ZW1wLCB0ZW1wKQogICAgICAgICBsZWFw
IFZNRW50cnlSZWNvcmQ6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJbdGVtcF0sIHRlbXAKICAg
ICAgICAgaWYgQVJNNjQKQEAgLTExNDQsNyArMTE0NCw3IEBAIGlmIG5vdCBDX0xPT1AKICAgICAg
ICAgc3RvcmVwIGFkZHJlc3MsIFZNOjptX2xhc3RTdGFja1RvcFt2bV0KICAgICAgICAgcmV0CiAg
ICAgCi0gICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0IFZNRW50cnlGcmFt
ZSogZW50cnlGcmFtZSkKKyAgICAjIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoY29uc3Qg
RW50cnlGcmFtZSogZW50cnlGcmFtZSkKICAgICBnbG9iYWwgX3ZtRW50cnlSZWNvcmQKICAgICBf
dm1FbnRyeVJlY29yZDoKICAgICAgICAgaWYgWDg2IG9yIFg4Nl9XSU4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20K
aW5kZXggMTE0YTk3OC4uMzMwOTBlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTEyNSw4ICsxMjUs
OCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgc3RvcmVwIHZtLCBWTUVudHJ5UmVj
b3JkOjptX3ZtW3NwXQogICAgIGxvYWRwIFZNOjp0b3BDYWxsRnJhbWVbdm1dLCB0NAogICAgIHN0
b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXQotICAgIGxvYWRw
IFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dLCB0NAotICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29y
ZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXQorICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1l
W3ZtXSwgdDQKKyAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJh
bWVbc3BdCiAKICAgICAjIEFsaWduIHN0YWNrIHBvaW50ZXIKICAgICBpZiBYODZfV0lOIG9yIE1J
UFMKQEAgLTE4OSw4ICsxODksOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9h
ZHAgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQ1CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6
bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDQKICAgICBzdG9yZXAgdDQsIFZNOjp0b3BDYWxsRnJh
bWVbdDVdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3Nw
XSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDVdCisgICAgbG9hZHAg
Vk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ0CisgICAgc3RvcmVwIHQ0
LCBWTTo6dG9wRW50cnlGcmFtZVt0NV0KIAogICAgIGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2Zy
LCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCB0NQpAQCAtMjQxLDcgKzI0MSw3IEBAIG1hY3JvIGRv
Vk1FbnRyeShtYWtlQ2FsbCkKIAogLmNvcHlBcmdzRG9uZToKICAgICBzdG9yZXAgc3AsIFZNOjp0
b3BDYWxsRnJhbWVbdm1dCi0gICAgc3RvcmVwIGNmciwgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0K
KyAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIG1ha2VDYWxsKGVu
dHJ5LCB0MywgdDQpCiAKQEAgLTI1NSw4ICsyNTUsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNh
bGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQ1CiAgICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDQKICAgICBzdG9yZXAgdDQsIFZN
Ojp0b3BDYWxsRnJhbWVbdDVdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1F
bnRyeUZyYW1lW3NwXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDVd
CisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ0Cisg
ICAgc3RvcmVwIHQ0LCBWTTo6dG9wRW50cnlGcmFtZVt0NV0KIAogICAgIGlmIEFSTXY3CiAgICAg
ICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCB0NQpAQCAtMzI0LDggKzMyNCw4
IEBAIF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjpt
X3ZtW3NwXSwgdDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVb
c3BdLCB0NQogICAgIHN0b3JlcCB0NSwgVk06OnRvcENhbGxGcmFtZVt0M10KLSAgICBsb2FkcCBW
TUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdLCB0NQotICAgIHN0b3JlcCB0
NSwgVk06OnRvcFZNRW50cnlGcmFtZVt0M10KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3By
ZXZUb3BFbnRyeUZyYW1lW3NwXSwgdDUKKyAgICBzdG9yZXAgdDUsIFZNOjp0b3BFbnRyeUZyYW1l
W3QzXQogCiAgICAgaWYgQVJNdjcKICAgICAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2
ZVNpemUsIHQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCmluZGV4IDVkNjI5ODcuLjc2OWY2MjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBA
IC0xMjksOCArMTI5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2
bSwgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3Zt
XSwgdDQKICAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtz
cF0KLSAgICBsb2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQs
IFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6
dG9wRW50cnlGcmFtZVt2bV0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3By
ZXZUb3BFbnRyeUZyYW1lW3NwXQogCiAgICAgbG9hZGkgUHJvdG9DYWxsRnJhbWU6OnBhZGRlZEFy
Z0NvdW50W3Byb3RvQ2FsbEZyYW1lXSwgdDQKICAgICBhZGRwIENhbGxGcmFtZUhlYWRlclNsb3Rz
LCB0NCwgdDQKQEAgLTE3MSw4ICsxNzEsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAg
ICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVt0NF0sIHZtCiAgICAgbG9hZHAgVk1FbnRyeVJl
Y29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCiAgICAgc3RvcmVwIGV4
dHJhVGVtcFJlZywgVk06OnRvcENhbGxGcmFtZVt2bV0KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3Jk
OjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcKLSAgICBzdG9yZXAgZXh0
cmFUZW1wUmVnLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNv
cmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcKKyAgICBzdG9yZXAgZXh0
cmFUZW1wUmVnLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIHN1YnAgY2ZyLCBDYWxsZWVS
ZWdpc3RlclNhdmVTaXplLCBzcAogCkBAIC0yMjAsNyArMjIwLDcgQEAgbWFjcm8gZG9WTUVudHJ5
KG1ha2VDYWxsKQogICAgIGVsc2UKICAgICAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2FsbEZyYW1l
W3ZtXQogICAgIGVuZAotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisg
ICAgc3RvcmVwIGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudChleHRyYVRlbXBSZWcsIDB4YmFkMGRjMDIpCiAKQEAgLTIzNiw4ICsyMzYs
OCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6
bV92bVt0NF0sIHZtCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1l
W3Q0XSwgdDIKICAgICBzdG9yZXAgdDIsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAg
Vk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwgdDIKLSAgICBzdG9yZXAg
dDIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9w
cmV2VG9wRW50cnlGcmFtZVt0NF0sIHQyCisgICAgc3RvcmVwIHQyLCBWTTo6dG9wRW50cnlGcmFt
ZVt2bV0KIAogICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCBzcAogCkBAIC0y
NzYsNyArMjc2LDYgQEAgbWFjcm8gbWFrZUhvc3RGdW5jdGlvbkNhbGwoZW50cnksIHRlbXApCiAg
ICAgZW5kCiBlbmQKIAotCiBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgQ2Fs
bGVlW2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCkBAIC0yOTEsOCArMjkw
LDggQEAgX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6
Om1fdm1bdDJdLCB0MwogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFt
ZVt0Ml0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BDYWxs
RnJhbWVbdDNdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1l
W3QyXSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcFZNRW50
cnlGcmFtZVt0M10KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1l
W3QyXSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcEVudHJ5
RnJhbWVbdDNdCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCBhNWE1M2M2Li4y
YTJiYmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAt
NDA2LDcgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQog
ICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseSgpID0gZmFsc2U7CiAKICAgICBpZiAoIU9w
dGlvbnM6OnVzZVdlYkFzc2VtYmx5KCkpCi0gICAgICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5
RmFzdFRMUygpID0gZmFsc2U7CisgICAgICAgIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29u
dGV4dCgpID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
CiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggM2NlYzU1Mi4uODQ3NWMyMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDY3LDggKzQ2Nyw3IEBAIHR5cGVk
ZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5
RmFzdE1lbW9yeVJlZHpvbmVQYWdlcywgMTI4LCBOb3JtYWwsICJXZWJBc3NlbWJseSBmYXN0IG1l
bW9yaWVzIHVzZSA0R2lCIHZpcnR1YWwgYWxsb2NhdGlvbnMsIHBsdXMgYSByZWR6b25lIChjb3Vu
dGVkIGFzIG11bHRpcGxlIG9mIDY0S2lCIFdlYkFzc2VtYmx5IHBhZ2VzKSBhdCB0aGUgZW5kIHRv
IGNhdGNoIHJlZytpbW0gYWNjZXNzZXMgd2hpY2ggZXhjZWVkIDMyLWJpdCwgYW55dGhpbmcgYmV5
b25kIHRoZSByZWR6b25lIGlzIGV4cGxpY2l0bHkgYm91bmRzLWNoZWNrZWQiKSBcCiAgICAgdihi
b29sLCBjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklm
IHRydWUsIHdlIHdpbGwgY3Jhc2ggaWYgd2UgY2FuJ3Qgb2J0YWluIGZhc3QgbWVtb3J5IGZvciB3
YXNtLiIpIFwKICAgICB2KHVuc2lnbmVkLCBtYXhOdW1XZWJBc3NlbWJseUZhc3RNZW1vcmllcywg
NCwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMs
IHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1s
b2NhbCBzdG9yYWdlIGlmIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4iKSBcCi0g
ICAgdihib29sLCB1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQsIHRydWUsIE5vcm1hbCwgIklmIHRy
dWUgKGFuZCBmYXN0IFRMUyBpcyBlbmFibGVkKSwgd2Ugd2lsbCBzdG9yZSBjb250ZXh0IGluIGZh
c3QgVExTLiBJZiBmYWxzZSwgd2Ugd2lsbCBwaW4gaXQgdG8gYSByZWdpc3Rlci4iKSBcCisgICAg
dihib29sLCB1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUs
IHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0IFRMUy4gSWYgZmFsc2UsIHdlIHdpbGwgcGlu
IGl0IHRvIGEgcmVnaXN0ZXIuIikgXAogICAgIHYoYm9vbCwgdXNlQ2FsbElDc0ZvcldlYkFzc2Vt
Ymx5VG9KU0NhbGxzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBDYWxsTGlu
a0luZm8gdG8gaW5saW5lIGNhY2hlIFdhc20gdG8gSlMgY2FsbHMuIikgXAogICAgIHYoYm9vbCwg
dXNlT2JqZWN0UmVzdFNwcmVhZCwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFi
bGUgT2JqZWN0IFJlc3QvU3ByZWFkIGZlYXR1cmUuIikgXAogICAgIHYoYm9vbCwgdXNlQXJyYXlB
bGxvY2F0aW9uUHJvZmlsaW5nLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBv
dXIgbm9ybWFsIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsaW5nLiBJZiBmYWxzZSwgdGhlIGFsbG9j
YXRpb24gcHJvZmlsZSB3aWxsIGFsd2F5cyBjbGFpbSB0byBiZSB1bmRlY2lkZWQuIikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKaW5k
ZXggYTRiZTk1Yi4uM2JjZjZjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAg
IEZyYW1lV2Fsa2VyKFZNJiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBjb2RlQmxvY2tTZXRMb2NrZXIsIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBtYWNoaW5l
VGhyZWFkc0xvY2tlcikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fY2FsbEZyYW1l
KGNhbGxGcmFtZSkKLSAgICAgICAgLCBtX3ZtRW50cnlGcmFtZSh2bS50b3BWTUVudHJ5RnJhbWUp
CisgICAgICAgICwgbV9lbnRyeUZyYW1lKHZtLnRvcEVudHJ5RnJhbWUpCiAgICAgICAgICwgbV9j
b2RlQmxvY2tTZXRMb2NrZXIoY29kZUJsb2NrU2V0TG9ja2VyKQogICAgICAgICAsIG1fbWFjaGlu
ZVRocmVhZHNMb2NrZXIobWFjaGluZVRocmVhZHNMb2NrZXIpCiAgICAgewpAQCAtMTMwLDcgKzEz
MCw3IEBAIHByb3RlY3RlZDoKICAgICBTVVBQUkVTU19BU0FOCiAgICAgdm9pZCBhZHZhbmNlVG9Q
YXJlbnRGcmFtZSgpCiAgICAgewotICAgICAgICBtX2NhbGxGcmFtZSA9IG1fY2FsbEZyYW1lLT51
bnNhZmVDYWxsZXJGcmFtZShtX3ZtRW50cnlGcmFtZSk7CisgICAgICAgIG1fY2FsbEZyYW1lID0g
bV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxlckZyYW1lKG1fZW50cnlGcmFtZSk7CiAgICAgfQogCiAg
ICAgYm9vbCBpc0F0VG9wKCkgY29uc3QKQEAgLTE4OCw3ICsxODgsNyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICBWTSYgbV92bTsKICAgICBFeGVjU3RhdGUqIG1fY2FsbEZyYW1lOwotICAgIFZNRW50cnlG
cmFtZSogbV92bUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogbV9lbnRyeUZyYW1lOwogICAg
IGNvbnN0IEFic3RyYWN0TG9ja2VyJiBtX2NvZGVCbG9ja1NldExvY2tlcjsKICAgICBjb25zdCBB
YnN0cmFjdExvY2tlciYgbV9tYWNoaW5lVGhyZWFkc0xvY2tlcjsKICAgICBib29sIG1fYmFpbGlu
Z091dCB7IGZhbHNlIH07CkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
Ojpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKICAgICAgICAgICAgICAgICAvLyBXZSBy
ZXVzZSBMTEludCBDb2RlQmxvY2tzIGZvciB0aGUgYmFzZWxpbmUgSklULCBzbyB3ZSBuZWVkIHRv
IGNoZWNrIGZvciBib3RoIGppdCB0eXBlcy4KICAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0
IGFsc28gYmUgZmFsc2UgZm9yIHZhcmlvdXMgcmVhc29ucyAoa25vd24gYW5kIHVua25vd24pLCBl
dmVuIHRob3VnaAogICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwZXIgdW5saWtlbHkuIE9uZSBy
ZWFzb24gdGhhdCB0aGlzIGNhbiBiZSBmYWxzZSBpcyB3aGVuIHdlIHRocm93IGZyb20gYSBERkcg
ZnJhbWUsCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZpbmcgdG8gdW53aW5k
IHBhc3QgYSBWTUVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZworICAgICAgICAg
ICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGFuIEVudHJ5RnJh
bWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZwogICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0
aGUgTExJbnQncyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFn
YWluc3QgdGhpcwogICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAppbmRleCAwNmU5MzAzLi40YzY1ZDYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NywxMyArNTcsMTMg
QEAgVGhyb3dTY29wZTo6flRocm93U2NvcGUoKQogCiAgICAgYm9vbCB3aWxsQmVIYW5kbGVCeUxM
SW50T3JKSVQgPSBmYWxzZTsKICAgICB2b2lkKiBwcmV2aW91c1Njb3BlID0gbV9wcmV2aW91c1Nj
b3BlOwotICAgIHZvaWQqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOwor
ICAgIHZvaWQqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CiAKLSAgICAvLyBJ
ZiB0aGUgdG9wVk1FbnRyeUZyYW1lIHdhcyBwdXNoZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBw
cmV2aW91c1Njb3BlIHdhcyBpbnN0YW50aWF0ZWQsCisgICAgLy8gSWYgdGhlIHRvcEVudHJ5RnJh
bWUgd2FzIHB1c2hlZCBvbiB0aGUgc3RhY2sgYWZ0ZXIgdGhlIHByZXZpb3VzU2NvcGUgd2FzIGlu
c3RhbnRpYXRlZCwKICAgICAvLyB0aGVuIHRoaXMgdGhyb3dTY29wZSB3aWxsIGJlIHJldHVybmlu
ZyB0byBMTElOVCBvciBKSVQgY29kZSB0aGF0IGFsd2F5cyBkbyBhbiBleGNlcHRpb24KICAgICAv
LyBjaGVjay4gSW4gdGhhdCBjYXNlLCBza2lwIHRoZSBzaW11bGF0ZWQgdGhyb3cgYmVjYXVzZSB0
aGUgTExJbnQgYW5kIEpJVCB3aWxsIGJlCiAgICAgLy8gY2hlY2tpbmcgZm9yIHRoZSBleGNlcHRp
b24gdGhlaXIgb3duIHdheSBpbnN0ZWFkIG9mIGNhbGxpbmcgVGhyb3dTY29wZTo6ZXhjZXB0aW9u
KCkuCi0gICAgaWYgKHRvcFZNRW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wVk1FbnRy
eUZyYW1lKQorICAgIGlmICh0b3BFbnRyeUZyYW1lICYmIHByZXZpb3VzU2NvcGUgPiB0b3BFbnRy
eUZyYW1lKQogICAgICAgICB3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQgPSB0cnVlOwogICAgIAog
ICAgIGlmICghd2lsbEJlSGFuZGxlQnlMTEludE9ySklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCmluZGV4IDE4MWUzYjcuLjNlZTUxODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAsIHZtVHlwZSh2bVR5cGUpCiAgICAgLCBjbGll
bnREYXRhKDApCi0gICAgLCB0b3BWTUVudHJ5RnJhbWUobnVsbHB0cikKKyAgICAsIHRvcEVudHJ5
RnJhbWUobnVsbHB0cikKICAgICAsIHRvcENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkp
CiAgICAgLCBwcm9taXNlRGVmZXJyZWRUaW1lcihzdGQ6Om1ha2VfdW5pcXVlPFByb21pc2VEZWZl
cnJlZFRpbWVyPigqdGhpcykpCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlKHZtVHlwZSA9PSBE
ZWZhdWx0ID8gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSA6IG5ldyBBdG9t
aWNTdHJpbmdUYWJsZSkKQEAgLTM2OCw3ICszNjgsNyBAQCBWTTo6flZNKCkKICAgICBwcm9taXNl
RGVmZXJyZWRUaW1lci0+c3RvcFJ1bm5pbmdUYXNrcygpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKICAgICBpZiAoV2FzbTo6ZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpKQotICAgICAgICBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpLnN0b3BBbGxQbGFuc0ZvclZNKCp0aGlzKTsKKyAgICAgICAgV2Fz
bTo6ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JDb250ZXh0KHdhc21Db250ZXh0KTsK
ICNlbmRpZgogICAgIGlmIChVTkxJS0VMWShtX3dhdGNoZG9nKSkKICAgICAgICAgbV93YXRjaGRv
Zy0+d2lsbERlc3Ryb3lWTSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4
IDk1NTg1OTQuLmQyMGUzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNTUs
NiArNTUsNyBAQAogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1
ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCisjaW5jbHVkZSAiV2Fz
bUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQ
b2ludGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CkBA
IC0zMjksMTQgKzMzMCwxNSBAQCBwdWJsaWM6CiAKICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENs
aWVudERhdGEqIGNsaWVudERhdGE7Ci0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWU7
CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZTsKICAgICAvLyBOT1RFOiBXaGVuIHRocm93
aW5nIGFuIGV4Y2VwdGlvbiB3aGlsZSByb2xsaW5nIGJhY2sgdGhlIGNhbGwgZnJhbWUsIHRoaXMg
bWF5IGJlIGVxdWFsIHRvCi0gICAgLy8gdG9wVk1FbnRyeUZyYW1lLgorICAgIC8vIHRvcEVudHJ5
RnJhbWUuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgdm9pZCosIGJlY2F1c2UgaXQg
bWlnaHQgbm90IHBvaW50IHRvIGEgQ2FsbEZyYW1lLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA0NDEKICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFt
ZSB7IG51bGxwdHIgfTsKLSAgICAvLyBGSVhNRTogU2F2ZSB0aGlzIHN0YXRlIGVsc2V3aGVyZSB0
byBhbGxvdyBQSUMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3
NzMKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0IHsgbnVsbHB0ciB9Owor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBXYXNtOjpDb250ZXh0IHdhc21Db250ZXh0Owor
I2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKQEAgLTUwMSw5ICs1
MDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRhcmdl
dE1hY2hpbmVQQ0ZvclRocm93KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHRvcFZN
RW50cnlGcmFtZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zm
c2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcFZNRW50
cnlGcmFtZSk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJh
bWUpOwogICAgIH0KIAogICAgIHZvaWQgcmVzdG9yZVByZXZpb3VzRXhjZXB0aW9uKEV4Y2VwdGlv
biogZXhjZXB0aW9uKSB7IHNldEV4Y2VwdGlvbihleGNlcHRpb24pOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGRlYWE0NDkuLjg3M2QzNTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC04OSw3ICs4OSw3IEBA
IGlubGluZSBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxsRnJhbWUqIHRvcENh
bGxGcmFtZSkKICAgICByZXR1cm4gdG9wQ2FsbEZyYW1lOwogfQogCi1zdGF0aWMgYm9vbCBpc1Nh
bmVGcmFtZShDYWxsRnJhbWUqIGZyYW1lLCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBWTUVudHJ5
RnJhbWUqIGVudHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzKQorc3RhdGljIGJvb2wg
aXNTYW5lRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgRW50
cnlGcmFtZSogZW50cnlGcmFtZSwgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMpCiB7CiAgICAgaWYg
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZyYW1lKSA+PSByZWludGVycHJldF9jYXN0PHZvaWQq
PihlbnRyeUZyYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIxLDE4ICsxMjEsMTgg
QEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQm
IGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGZvdW5k
Q29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZt
LnRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0udG9wRW50
cnlGcmFtZTsKIAogICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjYWxsZWUgdG8gc3RhcnQgd2l0aC4g
U28sIHVzZSB0aGUgZW5kIG9mIHRoZSBzdGFjayB0byBrZWVwIHRoZQogICAgIC8vIGlzU2FuZUZy
YW1lKCkgY2hlY2tlciBiZWxvdyBoYXBweSBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi4gSXQgd2ls
bCBzdGlsbCBjaGVjawogICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlzIGluIHRo
ZSBzdGFja0JvdW5kcy4KICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gcmVpbnRlcnByZXRf
Y2FzdDxDYWxsRnJhbWUqPihzdGFja0JvdW5kcy5lbmQoKSk7CiAKLSAgICBpZiAoIXZtRW50cnlG
cmFtZSB8fCAhY2FsbEZyYW1lKQorICAgIGlmICghZW50cnlGcmFtZSB8fCAhY2FsbEZyYW1lKQog
ICAgICAgICByZXR1cm47IC8vIE5vdCBydW5uaW5nIEpTIGNvZGUuIExldCB0aGUgU2lnbmFsU2Vu
ZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAogICAgIGRvIHsKLSAgICAgICAgaWYgKCFpc1NhbmVGcmFt
ZShjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCB2bUVudHJ5RnJhbWUsIHN0YWNrQm91bmRzKSkKKyAg
ICAgICAgaWYgKCFpc1NhbmVGcmFtZShjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBlbnRyeUZyYW1l
LCBzdGFja0JvdW5kcykpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2Vu
ZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAogICAgICAgICBDb2RlQmxvY2sqIGNhbmRpZGF0ZUNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC0xNDIsOSArMTQyLDkgQEAgdm9pZCBW
TVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQs
IFN0YWNrQm91bmRzIHN0YWMKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxlZUZyYW1lID0gY2Fs
bEZyYW1lOwotICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50
cnlGcmFtZSk7CisgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50
cnlGcmFtZSk7CiAKLSAgICB9IHdoaWxlIChjYWxsRnJhbWUgJiYgdm1FbnRyeUZyYW1lKTsKKyAg
ICB9IHdoaWxlIChjYWxsRnJhbWUgJiYgZW50cnlGcmFtZSk7CiAKICAgICBpZiAoIWZvdW5kQ29k
ZUJsb2NrKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIGp1c3QgZW50ZXJlZCB0aGUgZnJhbWUg
YW5kIHRoZSBjb2RlQmxvY2sgcG9pbnRlciBpcyBub3QKQEAgLTE4MSwxNyArMTgxLDE3IEBAIHZv
aWQgVk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKExvY2tlcjxMb2NrPiYsIEV4
ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lCiAKICAgICBtX25lZWRUb0ludmFsaWRhdGVkQ29kZUJsb2Nr
cyA9IGZhbHNlOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bSgpLnRvcFZN
RW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0oKS50b3BFbnRyeUZy
YW1lOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdG9wQ2FsbEZyYW1lOwogCi0gICAgaWYg
KCF2bUVudHJ5RnJhbWUpCisgICAgaWYgKCFlbnRyeUZyYW1lKQogICAgICAgICByZXR1cm47IC8v
IE5vdCBydW5uaW5nIEpTIGNvZGUuIE5vdGhpbmcgdG8gaW52YWxpZGF0ZS4KIAogICAgIHdoaWxl
IChjYWxsRnJhbWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwogICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpl
dHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7Ci0gICAgICAgIGNhbGxGcmFt
ZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICAgICAgY2FsbEZy
YW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRl
eCBhZDdkNjIxLi5hZjZjZmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC00OSw4ICs0OSw2IEBACiAjaW5jbHVkZSAiQjNXYXNt
Qm91bmRzQ2hlY2tWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgi
Ci0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIlNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2lu
Y2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgpAQCAtMTc4LDcgKzE3Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAog
ICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCwgVGllclVwQ291bnQqKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25h
dHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5
cGUsIHVpbnQzMl90KTsKQEAgLTI0Nyw3ICsyNDUsNyBAQCBwcml2YXRlOgogCiAgICAgaW50MzJf
dCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlw
ZSYsIHVpbnQzMl90KTsKIAotICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYs
IEJhc2ljQmxvY2sqLCBWYWx1ZSopOworICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFu
Y2UoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayosIFZhbHVlKik7CiAgICAgdm9pZCByZXN0b3JlV2Vi
QXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0
YW5jZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOwogCiAgICAgT3JpZ2luIG9yaWdpbigpOwpA
QCAtMjY3LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgSW5zZXJ0aW9uU2V0IG1fY29uc3RhbnRJ
bnNlcnRpb25WYWx1ZXM7CiAgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJS
ZWcgfTsKICAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9OwotICAg
IEdQUlJlZyBtX3dhc21Db250ZXh0R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBt
X3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9vbCBtX21h
a2VzQ2FsbHMgeyBmYWxzZSB9OwogCiAgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1ZSB7IG51bGxw
dHIgfTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0
YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2VkLgpAQCAtMjkxLDM3ICsyODksMzcg
QEAgaW50MzJfdCBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Np
b25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lk
IEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2lj
QmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJnKQordm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2Fz
bUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1
ZSogYXJnKQogewotICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKENv
bnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9y
aWdpbigpKTsKLSAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVX
YXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQogICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJz
KCkpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OnN0b3JlV2Fz
bUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVdhc21Db250ZXh0KHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxw
ZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBd
LmdwcigpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ly8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0IHJl
Z2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4g
dGhlIGNhbGxlciBzaWRlLgorICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBj
bG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3Jl
IGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgogICAgIC8vIFRo
aXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkp
IGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBP
cmlnaW4oKSk7CiAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIGVm
ZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBS
YW5nZTo6dG9wKCk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7Ci0gICAgcGF0
Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEdQUikpOworICAg
IHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRJbnN0YW5j
ZUdQUikpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXIpOwotICAgIEdQUlJlZyB3YXNtQ29udGV4dEdQUiA9IG1fd2FzbUNvbnRl
eHRHUFI7CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0
SW5zdGFuY2VHUFI7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKLSAgICAg
ICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgaml0
Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogICAgIH0pOwog
fQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRp
b24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKK0IzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYg
cHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2Rl
LCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0
aW9uKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29t
cGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKQEAgLTMzOSw5ICszMzcsOSBAQCBCM0lSR2Vu
ZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9j
ZWR1cmUmIHByb2NlZHVyZQogICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7CiAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CiAK
LSAgICBtX3dhc21Db250ZXh0R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dFBvaW50ZXI7Ci0g
ICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICBtX3Byb2MucGluUmVnaXN0
ZXIobV93YXNtQ29udGV4dEdQUik7CisgICAgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlu
bmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKyAgICBpZiAoIUNvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKKyAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRJbnN0
YW5jZUdQUik7CiAKICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKICAg
ICAgICAgQVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CkBA
IC0zNTAsNiArMzQ4LDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIG1f
cHJvYy5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAgICAgfQogCisgICAgaWYg
KHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJv
d1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKKwogICAgIGlmIChpbmZvLm1lbW9y
eSkgewogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIpIHsKICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKQEAgLTM2Myw2ICszNjQs
MTYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRz
TWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsK
KyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgLy8gTW9z
dCBtZW1vcnkgYWNjZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUgZG9uJ3QgZG8gYW4gZXhwbGljaXQg
ZXhjZXB0aW9uIGNoZWNrIGJlY2F1c2UgdGhleSBjYW4gcmVseSBvbiBmYXVsdCBoYW5kbGluZyB0
byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0
aGVsZXNzIG5lZWRzIHRoZSB0aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNhbiBqdW1wIHRvIHRo
YXQgdGh1bmsuCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCku
c3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmY29tcGlsYXRp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2sp
OwpAQCAtMzczLDEyICszODQsMTIgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAg
bV9pbnN0YW5jZVZhbHVlID0gc3RhY2tPdmVyZmxvd0NoZWNrOwogICAgICAgICBzdGFja092ZXJm
bG93Q2hlY2stPmFwcGVuZFNvbWVSZWdpc3RlcihmcmFtZVBvaW50ZXIpOwogICAgICAgICBzdGFj
a092ZXJmbG93Q2hlY2stPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVy
cygpKTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHQg
cmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBp
biB0aGUgY2FsbGVyIHNpZGUuCisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMg
d2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2Ug
bmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAgICAgICAgIC8vIFRo
aXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkp
IGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCiAgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hl
Y2stPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7CiAgICAgICAgICAgICBzdGFja092ZXJm
bG93Q2hlY2stPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwotICAgICAgICAgICAgc3RhY2tP
dmVyZmxvd0NoZWNrLT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250
ZXh0R1BSKTsKKyAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWlu
dCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAgICAgICAgfQog
ICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDI7CiAg
ICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewpAQCAt
NDAxLDcgKzQxMiw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICBib29s
IG5lZWRVbmRlcmZsb3dDaGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4g
T3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpOwogICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJm
bG93Q2hlY2sgPSBtX21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50
Q2hlY2tTaXplIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKIAotICAgICAgICAgICAgR1BSUmVnIGNv
bnRleHQgPSB1c2VGYXN0VExTRm9yQ29udGV4dCgpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNt
Q29udGV4dEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250ZXh0
Ojp1c2VGYXN0VExTKCkgPyBwYXJhbXNbMF0uZ3ByKCkgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VH
UFI7CiAKICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBk
byBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJhbWUgc2l6ZSBpcyB3aXRoaW4KICAgICAgICAgICAg
IC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRoZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFscmVhZHkg
ZG9uZSB0aGUgY2hlY2suCkBAIC00MTEsMTAgKzQyMiwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2Nl
ZHVyZQogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2go
MCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgx
KTsKIAotICAgICAgICAgICAgICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAg
ICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgICAgICAgICAgICAgIGppdC5s
b2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwogCi0gICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHQsIENvbnRleHQ6Om9m
ZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CiAg
ICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hl
Y2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgb3ZlcmZsb3c7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRVbmRl
cmZsb3dDaGVjaykpCkBAIC00MjMsMTAgKzQzNCwxMCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2Vu
ZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVy
ZQogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVy
ZmxvdywgQ29kZUxvY2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3Rh
Y2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIHVz
ZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5z
dGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBObyBvdmVyZmxvdyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0
aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3QuCi0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2Fz
bUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGpp
dC5sb2FkV2FzbUNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2Fk
V2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1
cm4gYSBwb2ludGVyLiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3Qg
dXNlZCwgYnV0IHRoZSBwYXRjaHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVj
dHMgKHBvdGVudGlhbCBzdGFjayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcg
cmVtb3ZlZC4KICAgICAgICAgICAgIH0KQEAgLTQzOCw3ICs0NDksNyBAQCBCM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUm
IHByb2NlZHVyZQogCiB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2Jh
bFN0YXRlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBpbnN0YW5jZSwg
UHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKLSAgICByZXN0b3JlV2FzbUNv
bnRleHQocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKyAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0
YW5jZShwcm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAgaWYgKCEhbWVtb3J5KSB7CiAgICAg
ICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3Rl
ckluZm86OmdldCgpOwpAQCAtNDU4LDEyICs0NjksMTIgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpy
ZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVt
b3IKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJlZ3NdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MtPmJhc2VNZW1v
cnlQb2ludGVyOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHBhcmFtc1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgp
KSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MocGFyYW1zWzBdLmdwcigpLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2Fz
bU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVn
cyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJl
Z3Muc2l6ZSgpID49IDEpOwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zm
c2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNh
bGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVt
b3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9y
eSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rl
cik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCiAg
ICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXpl
UmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tp
XS5zaXplUmVnaXN0ZXIpOwogICAgICAgICB9KTsKQEAgLTU0MSwyNCArNTUyLDIyIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGludDMyX3QgKCpncm93
TWVtb3J5KSAoQ29udGV4dCosIGludDMyX3QpID0gW10gKENvbnRleHQqIHdhc21Db250ZXh0LCBp
bnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsKLSAgICAgICAgVk0mIHZtID0gKndhc21Db250ZXh0
LT52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogd2FzbU1lbW9yeSA9IHdhc21Db250ZXh0LT5t
ZW1vcnkoKTsKLQorICAgIGludDMyX3QgKCpncm93TWVtb3J5KShKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqLCBpbnQzMl90KSA9IFtdIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBpbnQz
Ml90IGRlbHRhKSAtPiBpbnQzMl90IHsKICAgICAgICAgaWYgKGRlbHRhIDwgMCkKICAgICAgICAg
ICAgIHJldHVybiAtMTsKIAotICAgICAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFp
bHVyZSA9IGZhbHNlOwotICAgICAgICAvLyBncm93KCkgZG9lcyBub3QgcmVxdWlyZSBFeGVjU3Rh
dGUqIGlmIGl0IGRvZXNuJ3QgdGhyb3cgZXhjZXB0aW9ucy4KLSAgICAgICAgRXhlY1N0YXRlKiBl
eGVjID0gbnVsbHB0cjsKLSAgICAgICAgUGFnZUNvdW50IHJlc3VsdCA9IHdhc21NZW1vcnktPmdy
b3codm0sIGV4ZWMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihkZWx0YSksIHNob3VsZFRocm93RXhj
ZXB0aW9uc09uRmFpbHVyZSk7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlv
bigpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgYXV0byBncm93biA9IGluc3RhbmNlLT5pbnRlcm5hbE1lbW9yeSgpLmdyb3coUGFnZUNvdW50
KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jv
d24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJ
bnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246Oklu
dmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6
V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVh
c29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gcmVzdWx0LnBhZ2VDb3VudCgpOworICAg
ICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKICAgICB9OwogCiAgICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMy
LCBvcmlnaW4oKSwKQEAgLTU3MiwxMyArNTgxLDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
R3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkK
IAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpKTsKKyAgICBWYWx1ZSogbWVtb3J5
T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSk7CiAK
LSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqPihudWxscHRyKS0+bWVtb3J5KCktPm1lbW9yeSgpLnNpemUoKSkpID09IHNp
emVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBWYWx1
ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KEpT
V2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7CisgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8V2FzbTo6TWVtb3J5Kj4obnVsbHB0ciktPnNpemUo
KSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsK
KyAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0PGlu
dDMyX3Q+KFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsKICAgICAKICAgICBjb25zdGV4
cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OwotICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50
OjpwYWdlU2l6ZSA9PSAxIDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNv
ZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6
cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBj
b2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKICAgICAg
ICAgc2l6ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHNoaWZ0VmFsdWUpKTsKIApAQCAtMTA2OSwxNCArMTA3OCwxMyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjpt
YXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNp
emUoKSkpOwogCiAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBoZXJlLCBp
bnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBvcnQgc3R1
YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgIFZhbHVlKiBmdW5j
dGlvbkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9u
KGZ1bmN0aW9uSW5kZXgpKSk7Ci0gICAgICAgIFZhbHVlKiBqc1R5cGVPZkltcG9ydCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4o
KSwgZnVuY3Rpb25JbXBvcnQsIHNhZmVDYXN0PGludDMyX3Q+KEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpKTsKLSAgICAgICAgVmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwganNUeXBlT2ZJbXBvcnQs
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSkpOworICAgICAgICBWYWx1ZSogdGFyZ2V0SW5zdGFu
Y2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMy
X3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShmdW5jdGlv
bkluZGV4KSkpOworICAgICAgICBWYWx1ZSogaXNXYXNtQ2FsbCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9yaWdpbigpLCB0YXJnZXRJbnN0YW5j
ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIDApKTsKIAogICAgICAgICBCYXNpY0Jsb2NrKiBpc1dhc21CbG9jayA9IG1fcHJvYy5hZGRC
bG9jaygpOwotICAgICAgICBCYXNpY0Jsb2NrKiBpc0pTQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2so
KTsKKyAgICAgICAgQmFzaWNCbG9jayogaXNFbWJlZGRlckJsb2NrID0gbV9wcm9jLmFkZEJsb2Nr
KCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygp
OwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywg
QjM6OkJyYW5jaCwgb3JpZ2luKCksIGlzV2FzbUNhbGwsIEZyZXF1ZW50ZWRCbG9jayhpc1dhc21C
bG9jayksIEZyZXF1ZW50ZWRCbG9jayhpc0pTQmxvY2spKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBp
c1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2so
aXNFbWJlZGRlckJsb2NrKSk7CiAKICAgICAgICAgVmFsdWUqIHdhc21DYWxsUmVzdWx0ID0gd2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdp
bigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CkBAIC0xMDk3LDE1ICsxMTA1LDE1IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwKICAgICAgICAgVXBzaWxvblZhbHVlKiB3YXNtQ2FsbFJlc3VsdFVwc2ls
b24gPSByZXR1cm5UeXBlID09IFZvaWQgPyBudWxscHRyIDogaXNXYXNtQmxvY2stPmFwcGVuZE5l
dzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHdhc21DYWxsUmVzdWx0KTsKICAgICAg
ICAgaXNXYXNtQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdp
bigpLCBjb250aW51YXRpb24pOwogCi0gICAgICAgIC8vIEZJWE1FOiBMZXRzIHJlbW92ZSB0aGlz
IGluZGlyZWN0aW9uIGJ5IGNyZWF0aW5nIGEgUElDIGZyaWVuZGx5IElDCisgICAgICAgIC8vIEZJ
WE1FOiBMZXQncyByZW1vdmUgdGhpcyBpbmRpcmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmll
bmRseSBJQwogICAgICAgICAvLyBmb3IgY2FsbHMgb3V0IHRvIEpTLiBUaGlzIHNob3VsZG4ndCBi
ZSB0aGF0IGhhcmQgdG8gZG8uIFdlIGNvdWxkIHByb2JhYmx5CiAgICAgICAgIC8vIGltcGxlbWVu
dCB0aGUgSUMgdG8gYmUgb3ZlciBXYXNtOjpDb250ZXh0Ki4KICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM3NQotICAgICAgICBWYWx1ZSogY29k
ZUJsb2NrID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKLSAgICAg
ICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNh
ZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDb2RlQmxvY2so
KSkpOwotICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9uID0gaXNKU0Jsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKLSAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLCBjb2RlQmxvY2ssIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6Om9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKGZ1bmN0aW9uSW5kZXgpKSk7Ci0gICAg
ICAgIFZhbHVlKiBqc0NhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENh
bGwobV9wcm9jLCBpc0pTQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBl
KSwKKyAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsCisgICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mV2FzbUNvZGVCbG9jaygpKSk7CisgICAgICAgIFZhbHVlKiBqdW1w
RGVzdGluYXRpb24gPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLAorICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNvZGVCbG9j
aywgc2FmZUNhc3Q8aW50MzJfdD4oQ29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVk
ZGVyU3R1YihmdW5jdGlvbkluZGV4KSkpOworICAgICAgICBWYWx1ZSogZW1iZWRkZXJDYWxsUmVz
dWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRl
ckJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAg
ICBbJl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTExMTksOCArMTEyNyw4
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwo
cGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSk7CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgVXBzaWxvblZhbHVlKiBqc0NhbGxSZXN1
bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzSlNCbG9jay0+YXBw
ZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwganNDYWxsUmVzdWx0KTsKLSAg
ICAgICAgaXNKU0Jsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmln
aW4oKSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVXBzaWxvblZhbHVlKiBlbWJlZGRlckNhbGxS
ZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzRW1iZWRkZXJC
bG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZW1iZWRkZXJD
YWxsUmVzdWx0KTsKKyAgICAgICAgaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIAogICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKIApAQCAtMTEyOSw3ICsxMTM3LDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNv
bnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFBoaSwgdG9CM1R5cGUocmV0dXJu
VHlwZSksIG9yaWdpbigpKTsKICAgICAgICAgICAgIHdhc21DYWxsUmVzdWx0VXBzaWxvbi0+c2V0
UGhpKHJlc3VsdCk7Ci0gICAgICAgICAgICBqc0NhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVz
dWx0KTsKKyAgICAgICAgICAgIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1
bHQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRv
IGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZp
ZWQgb3VyIE1lbW9yeS4KQEAgLTExNjUsMTcgKzExNzMsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHBy
ZXNzaW8KICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlND
YWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIAogICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5
cGUganNGdW5jdGlvbkJ1ZmZlcjsKKyAgICBFeHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXI7
CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemU7CiAgICAgewog
ICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAg
ICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKSk7CisgICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCks
IHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtVGFi
bGUoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwKLSAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5
VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsKLSAgICAgICAganNGdW5jdGlvbkJ1ZmZlciA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9p
bnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJf
dD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkpTRnVuY3Rpb25zKCkpKTsKKyAgICAgICAg
ICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlv
bnMoKSkpOworICAgICAgICBpbnN0YW5jZXNCdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAor
ICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFdhc206OlRhYmxlOjpvZmZzZXRP
Zkluc3RhbmNlcygpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwg
b3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3Nl
bWJseVRhYmxlOjpvZmZzZXRPZlNpemUoKSkpOworICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0
PGludDMyX3Q+KFdhc206OlRhYmxlOjpvZmZzZXRPZlNpemUoKSkpOwogICAgIH0KIAogICAgIC8v
IENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCkBAIC0xMTk1LDYg
KzEyMDMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgIEV4cHJlc3Npb25UeXBlIGNh
bGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIG9mZnNldCk7CiAKICAgICAv
LyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFw
IGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mg
bm90IGluaXRpYWxpemVkLgorICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVy
cywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFs
aWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3
MjEwCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2FsbGFibGVGdW5jdGlvbjo6c2lnbmF0dXJl
SW5kZXgpID09IHNpemVvZih1aW50MzJfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpMzIiKTsK
ICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLCBj
YWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFi
bGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKSk7CiAgICAgewpAQCAtMTIyMywxOSArMTIzMiwx
NyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgIHsKICAgICAgICAgVmFsdWUqIG9mZnNl
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4o
KSwKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
WkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAotICAgICAgICAgICAgY29uc3RhbnQocG9p
bnRlclR5cGUoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pKSk7Ci0gICAgICAgIFZh
bHVlKiBqc09iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGpzRnVuY3Rp
b25CdWZmZXIsIG9mZnNldCkpOworICAgICAgICAgICAgY29uc3RhbnQocG9pbnRlclR5cGUoKSwg
c2l6ZW9mKFdhc206Okluc3RhbmNlKikpKTsKKyAgICAgICAgVmFsdWUqIG5ld0NvbnRleHRJbnN0
YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1ZmZlciwg
b2Zmc2V0KSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFk
ZEJsb2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGRvQ29udGV4dFN3aXRjaCA9IG1fcHJvYy5h
ZGRCbG9jaygpOwogCi0gICAgICAgIFZhbHVlKiBuZXdDb250ZXh0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwKLSAgICAgICAgICAgIGpzT2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSk7Ci0gICAgICAgIFZhbHVlKiBpc1Nh
bWVDb250ZXh0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgb3JpZ2luKCksCi0gICAgICAgICAgICBuZXdDb250ZXh0LCBpbnN0YW5jZVZhbHVlKCkpOwor
ICAgICAgICBWYWx1ZSogaXNTYW1lQ29udGV4dEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCisgICAgICAgICAgICBuZXdD
b250ZXh0SW5zdGFuY2UsIGluc3RhbmNlVmFsdWUoKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwKLSAg
ICAgICAgICAgIGlzU2FtZUNvbnRleHQsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBG
cmVxdWVudGVkQmxvY2soZG9Db250ZXh0U3dpdGNoKSk7CisgICAgICAgICAgICBpc1NhbWVDb250
ZXh0SW5zdGFuY2UsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBGcmVxdWVudGVkQmxv
Y2soZG9Db250ZXh0U3dpdGNoKSk7CiAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKQEAgLTEyNDMsMjYgKzEyNTAsMjYgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHBy
ZXNzaW8KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlN
b2RlOjpCb3VuZHNDaGVja2luZykpOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChuZXdDb250ZXh0LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKG5ld0NvbnRleHRJbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7
CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpT
b21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7Ci0gICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dCA9IHBhcmFtc1swXS5ncHIo
KTsKLSAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0ID0gcGFyYW1zWzFdLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CiAg
ICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRS
ZWdpc3RlckluZm86OmdldCgpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBw
aW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9
IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgICAgICAgICBBU1NFUlQobmV3Q29u
dGV4dCAhPSBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhvbGRDb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQo
KSksIGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQoKSkpOwotICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHQobmV3Q29udGV4
dCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29u
dGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBKU1dlYkFz
c2VtYmx5TWVtb3J5Ki4KKyAgICAgICAgICAgIEFTU0VSVChuZXdDb250ZXh0SW5zdGFuY2UgIT0g
YmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Mob2xkQ29udGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
YmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgICAg
ICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJ
bnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJh
c2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnkqLgogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdz
LnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIgIT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyICE9IG5ld0NvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNp
emVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwogICAgICAgICAgICAgQVNTRVJUKCFz
aXplUmVnc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNp
emUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbU1l
bW9yeTo6dm9pZCouCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBd
LnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6OnZvaWQqLgogICAgICAgICB9
KTsKICAgICAgICAgZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIApAQCAtMTMzOSwxOTQgKzEzNDYsNiBA
QCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNv
bnRyb2xTdGFjaywgY29uc3QgRXhwcmVzcwogICAgIGRhdGFMb2dMbigpOwogfQogCi1zdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0
aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCkKLXsKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpjb21waWxhdGlv
bkNvbnRleHQuanNFbnRyeXBvaW50SklUOwotCi0gICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7Ci0gICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3Vl
KCk7Ci0KLSAgICAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQotICAgIGppdC5zdG9yZTY0KEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIpOwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1
bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGNhbGxlZU1vdmVMb2NhdGlvbik7Ci0gICAgfSk7Ci0KLSAgICBjb25zdCBQ
aW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgp
OwotICAgIFJlZ2lzdGVyU2V0IHRvU2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1vZGUpOwotCi0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHVuc2lnbmVkIHRvU2F2ZVNpemUgPSB0b1NhdmUubnVt
YmVyT2ZTZXRHUFJzKCk7Ci0gICAgLy8gVGhleSBzaG91bGQgYWxsIGJlIGNhbGxlZSBzYXZlcy4K
LSAgICB0b1NhdmUuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwot
ICAgIEFTU0VSVCh0b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCkgPT0gdG9TYXZlU2l6ZSk7Ci0jZW5k
aWYKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwodG9TYXZlLCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJhc2VkKTsK
LSAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1Rv
U3BpbGw7Ci0KLSAgICB1bnNpZ25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwu
c2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsKLSAgICB0b3RhbEZyYW1lU2l6ZSArPSBXYXNtQ2FsbGlu
Z0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzKCk7Ci0gICAgdG90YWxGcmFtZVNpemUgLT0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgIHVuc2lnbmVkIG51bUdQUnMgPSAwOwotICAg
IHVuc2lnbmVkIG51bUZQUnMgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUu
YXJndW1lbnQoaSkpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpJNjQ6Ci0gICAgICAgIGNhc2UgV2Fz
bTo6STMyOgotICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9u
KCkubV9ncHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBz
aXplb2Yodm9pZCopOwotICAgICAgICAgICAgKytudW1HUFJzOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAg
ICAgICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5z
aXplKCkpCi0gICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsK
LSAgICAgICAgICAgICsrbnVtRlBSczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHRvdGFsRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgdG90YWxGcmFtZVNpemUpOwotICAgIGppdC5zdWJQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBXZSBzYXZlIGFsbCB0aGVzZSBy
ZWdpc3RlcnMgcmVnYXJkbGVzcyBvZiBoYXZpbmcgYSBtZW1vcnkgb3Igbm90LgotICAgIC8vIFRo
ZSByZWFzb24gaXMgdGhhdCB3ZSB1c2Ugb25lIG9mIHRoZXNlIGFzIGEgc2NyYXRjaC4gVGhhdCBz
YWlkLAotICAgIC8vIGFsbW9zdCBhbGwgcmVhbCB3YXNtIHByb2dyYW1zIHVzZSBtZW1vcnksIHNv
IGl0J3Mgbm90IHJlYWxseQotICAgIC8vIHdvcnRoIG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIHRo
YXQgdGhleSBkb24ndC4KLSAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zm
c2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewotICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZz
ZXQucmVnKCkuZ3ByKCk7Ci0gICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5v
ZmZzZXQoKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBHUFJS
ZWcgd2FzbUNvbnRleHRHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0UG9pbnRlcjsKLQotICAg
IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgICAgIG51
bUdQUnMgPSAwOwotICAgICAgICBudW1GUFJzID0gMDsKLSAgICAgICAgLy8gV2UncmUgZ29pbmcg
dG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCi0gICAgICAgIC8vIHdl
IGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92
ZS4KLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2lu
dGVyOwotCi0gICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICAgICAgLy8gdm1FbnRyeVRv
V2FzbSBwYXNzZXMgV2FzbTo6Q29udGV4dCogYXMgdGhlIGZpcnN0IEpTIGFyZ3VtZW50IHdoZW4g
d2UncmUKLSAgICAgICAgLy8gbm90IHVzaW5nIGZhc3QgVExTIHRvIGhvbGQgdGhlIFdhc206OkNv
bnRleHQqLgotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKLSAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ29udGV4dEdQUik7Ci0gICAgICAgICAgICBqc09mZnNl
dCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHRyZGlm
Zl90IHdhc21PZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVv
Zih2b2lkKik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3Vt
ZW50KGkpKSB7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgIGNhc2Ug
V2FzbTo6STY0OgotICAgICAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNp
Z25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQg
Kz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkkzMikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1f
Z3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigp
Lm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICsrbnVtR1BSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKG51bUZQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUo
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdh
c206OkYzMikgewotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRj
aFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBj
YWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hS
ZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2Fs
bGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCopOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJn
dW1lbnQoaSkgPT0gV2FzbTo6RjMyKQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRG
bG9hdChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpz
T2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigp
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJz
XS5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbnVtRlBSczsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICghIWluZm8ubWVtb3J5KSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlTWVt
b3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKLQotICAgICAgICBpZiAoIXVzZUZh
c3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Mod2FzbUNvbnRleHRHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGppdC5s
b2FkV2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobW9k
ZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNp
emVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOwotICAgICAgICAgICAgQVNTRVJUKHNp
emVSZWdzLnNpemUoKSA+PSAxKTsKLSAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6
ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFu
ZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdp
c3Rlcik7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
LCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1v
cnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICB9Ci0KLSAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAg
ICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW5mby5pbXBv
cnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGluZm8u
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4U3BhY2VdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxsKSwgZnVuY3Rpb25JbmRleFNwYWNlIH0p
OwotICAgIH0pOwotCi0KLSAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zm
c2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewotICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZz
ZXQucmVnKCkuZ3ByKCk7Ci0gICAgICAgIEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwotICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7
Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwgcmVnKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHNpZ25h
dHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgaml0Lm1v
dmVGbG9hdFRvMzIoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgIGppdC5t
b3ZlRG91YmxlVG82NChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+
IE9yaWdpbgogewogICAgIE9wY29kZU9yaWdpbiBvcmlnaW4obV9wYXJzZXItPmN1cnJlbnRPcGNv
ZGUoKSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKTsKQEAgLTE1MzQs
NyArMTM1Myw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gT3JpZ2luCiAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KG9yaWdpbik7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29t
cGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0
aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBp
bGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJV
cENvdW50KiB0aWVyVXApCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRp
b25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25M
ZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2Rl
LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21F
eGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjpt
YWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogCkBAIC0xNTU4LDExICsxMzc3LDExIEBA
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlC
QlFPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdP
cHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dChpbmZvLCBw
cm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNv
bXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKLSAgICBGdW5jdGlvblBhcnNl
cjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25M
ZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihp
bmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1v
ZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNl
cHRpb24pOworICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVy
YXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CiAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKLSAgICBjb250
ZXh0Lmluc2VydENvbnN0YW50cygpOworICAgIGlyR2VuZXJhdG9yLmluc2VydENvbnN0YW50cygp
OwogCiAgICAgcHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgaWYgKCFBU1NFUlRf
RElTQUJMRUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuaAppbmRleCBlMmM2YWRiLi42OWJlNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJC
M0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVk
ZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1
ZGUgIldhc21UaWVyVXBDb3VudC5oIgpAQCAtNTQsOSArNTUsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRp
b25Db250ZXh0IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IHdh
c21FbnRyeXBvaW50Qnlwcm9kdWN0czsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250
ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlN
b2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50
KiA9IG51bGxwdHIpOwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRl
SlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
TWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
TWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVy
VXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCmluZGV4IDIyZWRkMTYuLmQwZWFmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTI5LDggKzI5LDYgQEAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiSlND
SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2FzbUIz
SVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21D
YWxsZWUuaCIKQEAgLTUzLDIxICs1MSwyMSBAQCBuYW1lc3BhY2UgV2FzbUJCUVBsYW5JbnRlcm5h
bCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLUJCUVBsYW46OkJC
UVBsYW4oVk0qIHZtLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3Jr
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKHZtLCBXVEZNb3ZlKGluZm8pLCBX
VEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9k
dWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRh
c2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dX
YXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICA6IEJhc2UoY29udGV4dCwgV1RG
TW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIp
LCB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgLCBtX3N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpCiAg
ICAgLCBtX2FzeW5jV29yayh3b3JrKQogewogfQogCi1CQlFQbGFuOjpCQlFQbGFuKFZNKiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2sm
JiB0YXNrKQotICAgIDogQkJRUGxhbih2bSwgYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlv
bihXVEZNb3ZlKHNvdXJjZSkpKSwgd29yaywgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBs
YW4oQ29udGV4dCogY29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsg
d29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVh
dGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24p
CisgICAgOiBCQlFQbGFuKGNvbnRleHQsIGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24o
V1RGTW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1i
ZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQogewogICAgIG1fc3RhdGUgPSBTdGF0
ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25U
YXNrJiYgdGFzaykKLSAgICA6IEJhc2Uodm0sIHNvdXJjZSwgc291cmNlTGVuZ3RoLCBXVEZNb3Zl
KHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9u
VGFzayYmIHRhc2spCisgICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNlTGVuZ3RoLCBX
VEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAsIG1fYXN5
bmNXb3JrKHdvcmspCiB7CkBAIC0yNjksNyArMjY3LDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIAogICAgICAgICBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+KCk7CiAgICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRpb25zOjp1c2VCQlFU
aWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA6IG51bGxwdHI7
Ci0gICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1f
Y29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rp
b25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbklu
ZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6
OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CisgICAgICAgIGF1dG8gcGFyc2VBbmRD
b21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgs
IHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSgh
cGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwpAQCAtMjg1LDcgKzI4Myw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1
bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAKICAgICAgICAgaWYgKG1fZXhwb3J0
ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBjcmVhdGVK
U1RvV2FzbVdyYXBwZXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWdu
YXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5j
dGlvbkluZGV4LCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29udGV4dHNb
ZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVu
Y3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25J
bmRleCkpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKICAgICAgICAgfQogCkBAIC0zMTQsMTQgKzMxMiwxNCBAQCB2b2lkIEJCUVBsYW46OmNv
bXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICAgICAgICAg
IFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKGF1dG8ganNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9q
c1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlvbkluZGV4KSkgeworICAgICAgICAg
ICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9lbWJlZGRlclRv
V2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlvbkluZGV4KSkgewogICAgICAgICAgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxw
dHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAg
QmFzZTo6ZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBp
biBmdW5jdGlvbiBlbnRyeXBvaW50IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9u
SW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBqc1RvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQu
Y29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAg
ICAgICAgICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBp
bGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAg
ICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1i
bHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCiAgICAg
ICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApp
bmRleCAzNTlmMTNiLi5jNmVhNDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmgKQEAgLTI4LDEyICsyOCwxMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAog
I2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRl
ICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5o
IgogI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAj
aW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDEsOCArNDEsNiBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIENhbGxMaW5rSW5mbzsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3Mg
SlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTAsMTIgKzQ4LDEz
IEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CiBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IFBsYW47CiAgICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBp
bGUsIFZhbGlkYXRpb24gfTsKKwogICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBu
b3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBh
IHJlZmVyZW5jZSBjeWNsZS4KLSAgICBCQlFQbGFuKFZNKiwgUmVmPE1vZHVsZUluZm9ybWF0aW9u
PiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBC
QlFQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2sm
Jik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNX
b3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNt
RXhjZXB0aW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKENvbnRleHQqLCBWZWN0
b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRl
cldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0
cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRp
bmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCiAgICAgLy8gRklYTUU6
IFdoZW4gd2UgZ2V0IHJpZCBvZiBmdW5jdGlvbiB0ZXN0cyB3ZSBzaG91bGQgcmVtb3ZlIEFzeW5j
V29yayBmcm9tIHRoaXMgY29uc3RydWN0b3IuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxh
bihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2sm
Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgY29uc3QgdWludDhf
dCosIHNpemVfdCwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIGJvb2wgcGFy
c2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogCkBAIC0xNDEsNyArMTQwLDcgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnM7CiAgICAgSGFzaFNldDx1aW50MzJfdCwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8
dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQz
Ml90Pj4gbV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVp
bnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJf
dD4+IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVp
bnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJf
dD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBWZWN0b3I8Q29tcGls
YXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CiAgICAgVmVjdG9yPFRpZXJVcENv
dW50PiBtX3RpZXJVcENvdW50czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbklubGluZXMuaAppbmRleCAxYjhiNTZmLi40NDQ3OTBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaApAQCAtMzksMTAgKzM5
LDEwIEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYgY2Fs
bGJhY2spCiAgICAgQVNTRVJUKCFmYWlsZWQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5h
bEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7CiAKLSAgICAgICAg
UmVmUHRyPFdhc206OkNhbGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlOwotICAgICAgICBpZiAoYXV0
byBqc1RvV2FzbUZ1bmN0aW9uID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChpbnRl
cm5hbEZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICBqc0VudHJ5cG9pbnRDYWxsZWUgPSBX
YXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGpzVG9XYXNtRnVuY3Rpb24tPmVudHJ5cG9pbnQp
KTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihqc1RvV2FzbUZ1
bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oanNFbnRyeXBv
aW50Q2FsbGVlLmdldCgpKSk7CisgICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVtYmVkZGVy
RW50cnlwb2ludENhbGxlZTsKKyAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21GdW5jdGlv
biA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlv
bkluZGV4KSkgeworICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6
Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZW1iZWRkZXJU
b1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgSW50
ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5h
bEZ1bmN0aW9uSW5kZXhdLmdldCgpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIEJCUVBsYW46Omlu
aXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogICAgICAgICBSZWY8V2Fz
bTo6Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdU
Rk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9j
YXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsK
IAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoanNFbnRy
eXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICBj
YWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IDY3Y2NmNWUuLjQ5
MTBjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAg
LTI5LDU5NiArMjksMTQgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKLSNpbmNsdWRlICJKSVRF
eGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJOYXRp
dmVFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5j
bHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCi0jaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIK
LSNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCiB1c2luZyBKSVQgPSBDQ2FsbEhlbHBlcnM7CiAKLXN0YXRpYyB2b2lkIG1h
dGVyaWFsaXplSW1wb3J0SlNDZWxsKEpJVCYgaml0LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgR1BS
UmVnIHJlc3VsdCkKLXsKLSAgICAvLyBXZSdyZSBjYWxsaW5nIG91dCBvZiB0aGUgY3VycmVudCBX
ZWJBc3NlbWJseS5JbnN0YW5jZS4gVGhhdCBJbnN0YW5jZSBoYXMgYSBsaXN0IG9mIGFsbCBpdHMg
aW1wb3J0IGZ1bmN0aW9ucy4KLSAgICBqaXQubG9hZFdhc21Db250ZXh0KHJlc3VsdCk7Ci0gICAg
aml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHJlc3VsdCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSksIHJlc3VsdCk7Ci19Ci0KLUV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pzKFZNKiB2
bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBm
dW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5IGFic3RyYWN0IGF3YXkgdGhlIGNhbGxpbmcgY29udmVu
dGlvbi4KLSAgICAvLyBJdCdkIGJlIHN1cGVyIGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDEKLSAgICBjb25zdCBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24mIHdhc21DQyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwotICAgIGNvbnN0IEpT
Q0NhbGxpbmdDb252ZW50aW9uJiBqc0NDID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOwotICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsKLSAgICBKSVQgaml0OwotCi0gICAgLy8gTm90ZTogV2FzbUIzSVJHZW5lcmF0b3Ig
YXNzdW1lcyB0aGF0IHRoaXMgc3R1YiB0cmVhdHMgU1AgYXMgYSBjYWxsZWUgc2F2ZS4KLSAgICAv
LyBJZiB3ZSBldmVyIGNoYW5nZSB0aGlzLCB3ZSB3aWxsIGFsc28gbmVlZCB0byBjaGFuZ2UgV2Fz
bUIzSVJHZW5lcmF0b3IuCi0KLSAgICAvLyBCZWxvdywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNh
bGxpbmcgY29udmVudGlvbiBpcyBhbHdheXMgb24gdGhlIHN0YWNrLgotICAgIEFTU0VSVCghanND
Qy5tX2dwckFyZ3Muc2l6ZSgpKTsKLSAgICBBU1NFUlQoIWpzQ0MubV9mcHJBcmdzLnNpemUoKSk7
Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBqaXQuc3RvcmU2NChKSVQ6
OlRydXN0ZWRJbW0zMigwKSwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7IC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCi0KLSAgICB7Ci0gICAgICAgIGJv
b2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7Ci0gICAgICAgIGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1
cmUucmV0dXJuVHlwZSgpID09IEk2NDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAw
OyBhcmdOdW0gPCBhcmdDb3VudCAmJiAhaGFzQmFkSTY0VXNlOyArK2FyZ051bSkgewotICAgICAg
ICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAg
ICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgICAgICAgICBjYXNlIEk2NDog
ewotICAgICAgICAgICAgICAgIGhhc0JhZEk2NFVzZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFz
QmFkSTY0VXNlKSB7Ci0gICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgICAgICBq
aXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgICAg
IC8vIFN0b3JlIENhbGxlZS4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgICAgICAgICBqaXQu
c3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwo
KTsKLSAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICAg
ICAgICAgIHZvaWQgKCp0aHJvd0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHdhc21D
b250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotICAg
ICAgICAgICAgICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVj
LCAqdm0sIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1
cmUoKSwgQVNDSUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJn
dW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICAgICAgfTsKLQot
ICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZm
ZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7Ci0KLSAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7Ci0gICAgICAgICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0
IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZl
cyBhdCBsZWFzdCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3Qg
bmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNh
bGxlZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiB0aGlzLgotICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdD
YWxsZWVTYXZlcyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgbWlzc2luZ0Nh
bGxlZVNhdmVzLmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOwotICAgIEFTU0VS
VChtaXNzaW5nQ2FsbGVlU2F2ZXMuaXNFbXB0eSgpKTsKLQotICAgIGlmICghT3B0aW9uczo6dXNl
Q2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzKCkpIHsKLSAgICAgICAgU2NyYXRjaEJ1ZmZl
ciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhcmdDb3VudCAqIHNp
emVvZih1aW50NjRfdCkpOwotICAgICAgICBjaGFyKiBidWZmZXIgPSBhcmdDb3VudCA/IHN0YXRp
Y19jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKLSAg
ICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkRlBScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGJ1ZmZlck9mZnNldCA9IDA7Ci0gICAg
ICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBjb25zdCBHUFJS
ZWcgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ0NTMDsKLSAgICAgICAgaml0LnN1YlB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIHNpemVvZihSZWdpc3RlcikpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcikp
OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7
ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1l
bnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAg
Y2FzZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgY2FzZSBBbnlm
dW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAgICAg
ICAgR1BSUmVnIGdwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3
YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2Fz
bUNDLm1fZ3ByQXJnc1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJn
dW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAg
ICAgICAgICAgICAgICBncHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBmck9mZnNldCksIGdwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9
IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGpp
dC56ZXJvRXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoZ3ByUmVnLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAgICAgICAgICAgICAg
ICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7
Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5z
aXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFy
c2hhbGxlZEZQUnNdLmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVn
aXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZnBy
UmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZEZsb2F0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQp
LCBmcHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0
ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0
VG9Eb3VibGUoZnByUmVnLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91Ymxl
VG82NChmcHJSZWcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNj
cmF0Y2hHUFIsIGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7Ci0gICAgICAgICAgICAgICAgKyttYXJz
aGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAg
ICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkK
LSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVk
RlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMg
YXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBG
UFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91Ymxl
KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJS
ZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnBy
UmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BS
LCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQ
UnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGJ1ZmZlck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAg
ICB9Ci0gICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksIHNjcmF0Y2hHUFIpOwotICAgICAgICBpZiAo
YXJnQ291bnQpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBzaG91bGQgbm90IGxvb2sgYXQgdGhp
cyBidWZmZXIgYXQgYWxsLCB0aGVzZSBhcmVuJ3QgSlNWYWx1ZXMuCi0gICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09m
QWN0aXZlTGVuZ3RoKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICAgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVpbnQ2NF90ICgqY2FsbEZ1bmMpKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgU2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KikgPQotICAgICAgICAg
ICAgW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNhbGxlZSwgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KiBidWZmZXIpIC0+IHVpbnQ2NF90IHsgCi0gICAgICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgICAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgICAgIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCk7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIFR5cGUg
YXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGFyZzsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBG
dW5jOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihidWZmZXJbYXJn
TnVtXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgRjMyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZyA9IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJ1ZmZlclth
cmdOdW1dKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICAg
ICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRD
YWxsRGF0YShjYWxsZWUsIGNhbGxEYXRhKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWxsKGV4ZWMsIGNhbGxlZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5l
ZCgpLCBhcmdzKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIDApOwotCi0gICAgICAgICAgICAgICAgdWludDY0X3QgcmVhbFJlc3VsdDsKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAg
ICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IFZvaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
STMyOiB7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWxSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlc3VsdC50b0ludDMyKGV4ZWMpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBjYXNlIEY2NDoKLSAgICAgICAgICAgICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAgICAg
ICAgICByZWFsUmVzdWx0ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihyZXN1bHQudG9OdW1iZXIo
ZXhlYykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVhbFJlc3VsdDsKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihH
UFJJbmZvOjphcmd1bWVudEdQUjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSkpOwotICAgICAgICAKLSAgICAgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0
LCBpbXBvcnRJbmRleCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzID49IDQsICJXZSByZWx5IG9u
IHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxvdy4iKTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHNpZ25hdHVyZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZl
cikpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBhdXRvIG5vRXhj
ZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6SW52
ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0KLSAgICAgICAgLy8gZXhjZXB0aW9uIGhlcmUuCi0gICAg
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2
bSk7Ci0gICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSop
ID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwotICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAg
ICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9OwotICAgICAgICBh
dXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0pOwotCi0gICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7Ci0gICAg
ICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewotICAgICAgICBjYXNlIEY2NDog
ewotICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAg
ICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQ
UkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgICAgICBqaXQucmV0KCk7Ci0KLSAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9B
bGxvY2F0ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFp
bHVyZTo6T3V0T2ZNZW1vcnkpOwotCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjYWxs
RnVuYyk7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25DYWxsLCBkb1Vud2luZGlu
Zyk7Ci0KLSAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3Nl
bWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50
b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Ci0gICAgfQotCi0gICAgLy8gTm90ZTogV2UgZG9u
J3QgbmVlZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJUkdlbmVy
YXRvcgotICAgIC8vIHdpbGwgZG8gdGhlIHN0YWNrIGNoZWNrIGZvciB1cy4gV2hlbmV2ZXIgaXQg
ZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IG1ha2UKLSAgICAvLyBhIGNhbGwgdG8gdGhpcyB0aHVuaywg
aXQnbGwgbWFrZSBzdXJlIGl0cyBzdGFjayBjaGVjayBpbmNsdWRlcyBzcGFjZQotICAgIC8vIGZv
ciB1cyBoZXJlLgotCi0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gYXJn
Q291bnQgKyAxOyAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KLSAgICBjb25zdCB1bnNp
Z25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7Ci0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZCeXRl
c0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0
ZXNGb3JDYWxsKTsKLSAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
c3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
IEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotCi0gICAgLy8gRklYTUUgbWFrZSB0aGVzZSBsb29w
cyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFyZ3VtZW50cyBv
biB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdlIHNpZ25hdHVyZXMu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1NDcKLSAgICAKLSAg
ICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRoZSBpbnRlZ2VyIHBhcmFtZXRlcnMsIGZyZWVpbmcgdXAg
dGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBhZnRlcndhcmRzLgotICAgIHsKLSAgICAgICAgdW5zaWdu
ZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9
IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6
Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAg
ICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAg
IGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgIGNhc2Ug
STY0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhh
bmRsZWQgYWJvdmUuCi0gICAgICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgIEdQ
UlJlZyBncHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUND
Lm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5t
X2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50
cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAg
ICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
ZnJPZmZzZXQpLCBncHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK21hcnNo
YWxsZWRHUFJzOwotICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJSZWcs
IGdwclJlZyk7IC8vIENsZWFyIG5vbi1pbnQzMiBhbmQgbm9uLXRhZyBiaXRzLgotICAgICAgICAg
ICAgICAgIGppdC5ib3hJbnQzMihncHJSZWcsIEpTVmFsdWVSZWdzKGdwclJlZyksIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
Y2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjMyOgotICAgICAgICAgICAg
Y2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBiZWxvdy4KLSAg
ICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPj0gd2FzbUNDLm1fZnByQXJncy5zaXpl
KCkpCi0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBjYWxsZWVG
cmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHsKLSAgICAgICAgLy8g
SW50ZWdlciByZWdpc3RlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc3BpbGxlZCwgdGhlc2UgYXJlIG5v
dyBhdmFpbGFibGUuCi0gICAgICAgIEdQUlJlZyBkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcgPSBH
UFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
YXJndW1lbnRHUFIxOwotICAgICAgICBib29sIGhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9m
ZnNldCA9IGZhbHNlOwotICAgICAgICBhdXRvIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0
ID0gWyZoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQsICZqaXRdIChHUFJSZWcgZGVz
dCkgewotICAgICAgICAgICAgaWYgKCFoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQp
IHsKLSAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KERvdWJsZUVuY29kZU9mZnNldCA9PSAx
bGwgPDwgNDgsICJjb2RlZ2VuIGFzc3VtZXMgdGhpcyBiZWxvdyIpOwotICAgICAgICAgICAgICAg
IGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKDEpLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBq
aXQubHNoaWZ0NjQoSklUOjpUcnVzdGVkSW1tMzIoNDgpLCBkZXN0KTsKLSAgICAgICAgICAgICAg
ICBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9OwotCi0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAg
ICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBjYWxs
ZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBh
cmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVy
ZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAg
ICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBj
YXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgotICAgICAgICAgICAg
Y2FzZSBJMzI6Ci0gICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBhYm92ZS4KLSAg
ICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPj0gd2FzbUNDLm1fZ3ByQXJncy5zaXpl
KCkpCi0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKLSAgICAgICAgICAgICAgICBjYWxsZWVG
cmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwot
ICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6
ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNo
YWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lz
dGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJl
ZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRG
bG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwg
ZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVy
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRv
RG91YmxlKGZwclJlZywgZnByUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZw
clJlZyk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRj
aCk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91Ymxl
RW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5j
b2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChz
Y3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgICAgICAgICBGUFJS
ZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5t
X2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9m
cHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMs
IHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAg
ICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWREb3VibGUoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBmck9mZnNldCksIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNp
emVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC5w
dXJpZnlOYU4oZnByUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnBy
UmVnLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9m
ZnNldChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5hZGQ2
NChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZz
ZXQpKTsKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0
ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgIEdQUlJlZyBpbXBvcnRK
U0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpyZWdUMDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJl
Z1QwIGZvciBzbG93IHBhdGggYmVsb3cuCi0gICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZl
UmVnaXN0ZXJzLmdldChpbXBvcnRKU0NlbGxHUFJSZWcpKTsKLQotICAgIG1hdGVyaWFsaXplSW1w
b3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0KLSAgICBq
aXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OwotICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyks
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAg
aml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUg
d2FzbSByZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4Ci0KLSAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKCk7Ci0gICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIGltcG9y
dEpTQ2VsbEdQUlJlZyk7Ci0gICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAg
ICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUoMCk7Ci0gICAgSklUOjpKdW1w
IHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUp
OwotICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgIEpJVDo6SnVt
cCBkb25lID0gaml0Lmp1bXAoKTsKLSAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgIC8vIENh
bGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGlu
ayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgotICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOwotICAgIGRvbmUubGluaygmaml0KTsKLQotICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOwotCi0gICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJu
VHlwZSgpKSB7Ci0gICAgY2FzZSBWb2lkOgotICAgICAgICAvLyBEaXNjYXJkLgotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZ1bmM6Ci0gICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAvLyBGb3Ig
dGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhl
aXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBl
cnJvci4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgLy8gSGFuZGxlZCBhYm92ZS4KLSAgICB9Ci0gICAgY2FzZSBJMzI6IHsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwotCi0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1i
ZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwotICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAg
aml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAg
ICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBq
aXQuY2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElm
RXhjZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNT
dGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQz
Ml90IHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJu
IHYudG9JbnQzMihleGVjKTsKLSAgICAgICAgfTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGwsIGNvbnZlcnRUb0kzMik7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGRvbmUubGluaygm
aml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0
LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpOwotICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIo
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpOwotICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgotICAgICAgICBqaXQuc2lnbkV4dGVuZDMy
VG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
LSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7Ci0KLSAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKLSAgICAgICAgaml0Lm1vdmUoSklU
OjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7
Ci0gICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0
RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBub3RB
TnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2Fs
bCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0
aW9uKCp2bSkpOwotCi0gICAgICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBK
U1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKLSAg
ICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICB9OwotICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjMyKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGNjQ6IHsK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAgICAgICBhdXRvIG5vdEFO
dW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNo
SWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCi0gICAgICAgIGppdC5z
aWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBl
bmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKLSAgICAgICAg
aml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAg
IGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0
KTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGV4
Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7Ci0KLSAg
ICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91YmxlIHsgCi0gICAgICAgICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7Ci0gICAg
ICAgIH07Ci0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOwot
ICAgICAgICB9KTsKLQotICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICB9Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQu
cmV0KCk7Ci0KLSAgICBpZiAoIWV4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7Ci0gICAgICAgIGV4
Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOwotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICBqaXQubW92ZShHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAg
YXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIoKnZtKTsKLQotICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10g
KEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwotICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NF
UlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9OwotCi0gICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhjYWxsLCBkb1Vud2luZGluZyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6
Ok91dE9mTWVtb3J5KTsKLQotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9u
UHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9u
KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hl
Y2spKTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0Q2Fs
bExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVy
KTsKLQotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5
LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKLX0KLQogRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKIHsK
ICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3Rl
ckluZm86OmdldCgpOwpAQCAtNjMzLDI0ICs1MSwyMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4
KQogICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CiAgICAg
R1BSUmVnIHNpemVSZWdBc1NjcmF0Y2ggPSBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXI7CiAKLSAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxDb250ZXh0LCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U+Ojp2YWx1ZSwgIlRoaXMgaXMgYXNzdW1lZCBpbiB0aGUgY29kZSBiZWxvdy4iKTsKICAgICAv
LyBCMydzIGNhbGwgY29kZWdlbiBlbnN1cmVzIHRoYXQgdGhlIEpTQ2VsbCBpcyBhIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24uCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChzaXplUmVnQXNTY3JhdGNoKTsg
Ly8gT2xkIEluc3RhbmNlKgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNT
Y3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24oaW1w
b3J0SW5kZXgpKSwgc2NyYXRjaCk7Ci0KLSAgICAvLyBHZXQgdGhlIGNhbGxlZSdzIFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlIGFuZCBzZXQgaXQgYXMgV2FzbUNvbnRleHQuIFRoZSBjYWxsZXIgd2lsbCB0
YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCi0gICAgaml0LmxvYWRQdHIo
SklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mSW5zdGFu
Y2UoKSksIGJhc2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCi0gICAgaml0LnN0b3JlV2FzbUNvbnRl
eHQoYmFzZU1lbW9yeSk7CisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHNpemVSZWdB
c1NjcmF0Y2gpOyAvLyBPbGQgSW5zdGFuY2UqCisgICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXZWJB
c3NlbWJseS5JbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0J3MgaW5zdGFuY2UuIFRo
ZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCisg
ICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShpbXBvcnRJbmRleCkpLCBiYXNlTWVt
b3J5KTsgLy8gSlNXZWJBc3NlbWJseUluc3RhbmNlKi4KKyAgICAvLyBXaGlsZSB3ZSdyZSBhY2Nl
c3NpbmcgdGhhdCBjYWNoZWxpbmUsIGFsc28gZ2V0IHRoZSB3YXNtIGVudHJ5cG9pbnQgc28gd2Ug
Y2FuIHRhaWwgY2FsbCB0byBpdCBiZWxvdy4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Mo
c2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21FbnRy
eXBvaW50KGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOyAvLyBXYXNtOjpXYXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbi4KKyAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKGJhc2VNZW1vcnkp
OwogCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVnQXNT
Y3JhdGNoKTsKICAgICBqaXQuc3RvcmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRyZXNz
KGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xp
bWl0KCkpKTsKIAogICAgIC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQg
YWxsIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGhhdmUgdGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVycy4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgIC8vIFNl
dCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9yeSByZWdpc3RlciBhcyB3ZWxsIGFzIHRoZSBtZW1v
cnkgc2l6ZSByZWdpc3RlcnMuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1v
cnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OyAvLyBKU1dlYkFzc2VtYmx5TWVtb3J5Ki4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Mo
YmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSks
IGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnkqLgogICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0u
c2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAs
IGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4K
LSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1l
bW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1v
cnkgc2l6ZS4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJB
c3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtTWVt
b3J5Ojp2b2lkKi4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2Fz
bTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8v
IE1lbW9yeSBzaXplLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBX
YXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVt
b3J5Ojp2b2lkKi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdpc3RlciAhPSBiYXNl
TWVtb3J5KTsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdpc3RlciAhPSBzY3Jh
dGNoKTsKQEAgLTY1OCw3ICs3NSw2IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwg
QmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgfQog
CiAgICAgLy8gVGFpbCBjYWxsIGludG8gdGhlIGNhbGxlZSBXZWJBc3NlbWJseSBmdW5jdGlvbi4K
LSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2NyYXRjaCwgV2ViQXNzZW1ibHlGdW5jdGlv
bjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgc2NyYXRjaCk7CiAgICAg
aml0LmxvYWRQdHIoc2NyYXRjaCwgc2NyYXRjaCk7CiAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oCmluZGV4IDRlMjYyYmEuLmZl
YzZiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlv
bi5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUg
PHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC00NCw3ICs0Miw2IEBAIGVudW0gY2xhc3MgQmluZGluZ0ZhaWx1cmUgewogfTsKIAogRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1
bnNpZ25lZCBpbXBvcnRJbmRleCk7Ci1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9KcyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0lu
Zm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suY3BwCmluZGV4IDcwZmVmYjAuLmU1MTM2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCkBAIC0zMSwyMCArMzEsMzEgQEAKIAogI2luY2x1
ZGUgIldhc21CQlFQbGFuSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNs
dWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKE1lbW9yeU1v
ZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQorUmVmPENvZGVC
bG9jaz4gQ29kZUJsb2NrOjpjcmVhdGUoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2Rl
LCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3Jh
cHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2Fz
bUV4Y2VwdGlvbikKK3sKKyAgICBzaXplX3QgaW1wb3J0RnVuY3Rpb25Db3VudCA9IG1vZHVsZUlu
Zm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemUoaW1wb3J0RnVuY3Rpb25Db3VudCkp
KSBDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24sIFdURk1vdmUoY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGltcG9ydEZ1bmN0aW9uQ291bnQ7ICsraSkKKyAgICAgICAgcmVzdWx0LT5p
bXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaSkgPSBudWxscHRyOworICAgIHJldHVybiBhZG9wdFJl
ZigqcmVzdWx0KTsKK30KKworQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwg
TWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IG1fY2FsbGVlQ291bnQobW9kdWxlSW5m
b3JtYXRpb24uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkpCiAgICAgLCBtX21vZGUobW9kZSkKIHsK
ICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsKLSAgICBtX3BsYW4g
PSBhZG9wdFJlZigqbmV3IEJCUVBsYW4obnVsbHB0ciwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlv
biksIEJCUVBsYW46OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNr
VHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0q
LCBQbGFuJikgeworCisgICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQs
IG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRl
U2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RG
TW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKICAgICAgICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5lcnJvck1lc3NhZ2UoKTsKLSAgICAgICAgICAg
IG1fcGxhbiA9IG51bGxwdHI7CisgICAgICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNjYsMTAgKzc3LDEwIEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZUluZm9ybWF0aW9uKQogICAgICAgICBtX3dhc21Ub1dhc21DYWxsc2l0ZXMgPSBtX3BsYW4t
PnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7CiAgICAgICAgIG1fdGllclVwQ291bnRzID0gbV9w
bGFuLT50YWtlVGllclVwQ291bnRzKCk7CiAKLSAgICAgICAgbV9wbGFuID0gbnVsbHB0cjsKLSAg
ICB9KSkpOwotCisgICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKKyAgICB9KSwgV1RG
TW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pKTsKICAgICBt
X3BsYW4tPnNldE1vZGUobW9kZSk7CisKICAgICBhdXRvJiB3b3JrbGlzdCA9IFdhc206OmVuc3Vy
ZVdvcmtsaXN0KCk7CiAgICAgLy8gTm90ZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgZW5xdWV1ZSB0
aGUgcGxhbiwgdGhlcmUgaXMgYSBjaGFuY2UgdGhlIGFib3ZlIGNhbGxiYWNrIHdpbGwgYmUgY2Fs
bGVkLgogICAgIHdvcmtsaXN0LmVucXVldWUobWFrZVJlZigqbV9wbGFuLmdldCgpKSk7CkBAIC05
Miw3ICsxMDMsNyBAQCB2b2lkIENvZGVCbG9jazo6d2FpdFVudGlsRmluaXNoZWQoKQogICAgIC8v
IGVsc2UsIGlmIHdlIGRvbid0IGhhdmUgYSBwbGFuLCB3ZSdyZSBhbHJlYWR5IGNvbXBpbGVkLgog
fQogCi12b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgQXN5bmNDb21waWxhdGlv
bkNhbGxiYWNrJiYgdGFzaykKK3ZvaWQgQ29kZUJsb2NrOjpjb21waWxlQXN5bmMoQ29udGV4dCog
Y29udGV4dCwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKIHsKICAgICBSZWZQdHI8
UGxhbj4gcGxhbjsKICAgICB7CkBAIC0xMDQsMTIgKzExNSwxMSBAQCB2b2lkIENvZGVCbG9jazo6
Y29tcGlsZUFzeW5jKFZNJiB2bSwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKICAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBrZWVwIGEgUmVmUHRyIG9uIHRoZSBQbGFuIGJlY2F1
c2UgdGhlIHdvcmtsaXN0IHdpbGwga2VlcAogICAgICAgICAvLyBhIFJlZlB0ciBvbiB0aGUgUGxh
biB1bnRpbCB0aGUgcGxhbiBmaW5pc2hlcyBub3RpZnlpbmcgYWxsIG9mIGl0cyBjYWxsYmFja3Mu
CiAgICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb3RlY3RlZFRoaXMgPSB0aGlzOwotICAgICAg
ICBwbGFuLT5hZGRDb21wbGV0aW9uVGFzayh2bSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxs
YmFja1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92ZSh0YXNrKSwgcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyldIChWTSogdm0sIFBsYW4mKSB7Ci0gICAgICAgICAgICBBU1NF
UlQodm0pOwotICAgICAgICAgICAgdGFzay0+cnVuKCp2bSwgbWFrZVJlZigqdGhpcykpOworICAg
ICAgICBwbGFuLT5hZGRDb21wbGV0aW9uVGFzayhjb250ZXh0LCBjcmVhdGVTaGFyZWRUYXNrPFBs
YW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHRhc2sgPSBXVEZNb3ZlKHRhc2spLCBwcm90ZWN0ZWRU
aGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgICAgICAgICB0YXNr
LT5ydW4obWFrZVJlZigqdGhpcykpOwogICAgICAgICB9KSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IHRhc2stPnJ1bih2bSwgbWFrZVJlZigqdGhpcykpOworICAgICAgICB0YXNrLT5ydW4obWFrZVJl
ZigqdGhpcykpOwogfQogCiBib29sIENvZGVCbG9jazo6aXNTYWZlVG9SdW4oTWVtb3J5TW9kZSBt
ZW1vcnlNb2RlKQpAQCAtMTMwLDYgKzE0MCwxMyBAQCBib29sIENvZGVCbG9jazo6aXNTYWZlVG9S
dW4oTWVtb3J5TW9kZSBtZW1vcnlNb2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorCit2b2lk
IENvZGVCbG9jazo6c2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpCit7CisgICAgbV9wbGFuID0gbnVs
bHB0cjsKKyAgICBtX2NvbXBpbGF0aW9uRmluaXNoZWQuc3RvcmUodHJ1ZSk7Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKaW5kZXggMmRiZjdlNC4u
MDIwMTAyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVC
bG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaApA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1
ZGUgIldhc21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgpAQCAtMzcsMTEgKzM4LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1j
bGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBDYWxsZWU7CitzdHJ1Y3QgQ29u
dGV4dDsKIGNsYXNzIEJCUVBsYW47CiBjbGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVsZUluZm9y
bWF0aW9uOwpAQCAtNTEsMjAgKzUxLDQyIEBAIGVudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4
X3Q7CiAgICAgCiBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
Q29kZUJsb2NrPiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSYs
IFJlZjxDb2RlQmxvY2s+JiYpOworICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoUmVmPENv
ZGVCbG9jaz4mJik7CiAgICAgdXNpbmcgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrID0gUmVmUHRy
PFdURjo6U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMgUmVmPENvZGVCbG9j
az4gY3JlYXRlKE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9y
bWF0aW9uKQorICAgIHN0YXRpYyBSZWY8Q29kZUJsb2NrPiBjcmVhdGUoQ29udGV4dCosIE1lbW9y
eU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CisKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0U3R1YnMo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yo
dm9pZCopPihzaXplb2YoQ29kZUJsb2NrKSk7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBvcnRDb3VudCkKKyAgICB7
CisgICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAq
IGZ1bmN0aW9uSW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOworICAgIH0KKworICAgIHZvaWQqJiBp
bXBvcnRXYXNtVG9FbWJlZGRlclN0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb2RlQmxvY2sobW9kZSwgbW9kdWxlSW5mb3JtYXRp
b24pKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5k
ZXgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRv
RW1iZWRkZXJTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleDsKKyAg
ICB9CisKKyAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9KU0NhbGxT
dHViRm9ySW1wb3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHJ1bm5hYmxlKCkpOworICAgICAgICByZXR1cm4gJmltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yihp
bXBvcnRJbmRleCk7CiAgICAgfQogCiAgICAgdm9pZCB3YWl0VW50aWxGaW5pc2hlZCgpOwotICAg
IHZvaWQgY29tcGlsZUFzeW5jKFZNJiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOworICAg
IHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7
CiAKICAgICBib29sIGNvbXBpbGF0aW9uRmluaXNoZWQoKQogICAgIHsKLSAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICByZXR1cm4gIW1fcGxhbjsKKyAgICAg
ICAgcmV0dXJuIG1fY29tcGlsYXRpb25GaW5pc2hlZC5sb2FkKCk7CiAgICAgfQogICAgIGJvb2wg
cnVubmFibGUoKSB7IHJldHVybiBjb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIW1fZXJyb3JNZXNz
YWdlOyB9CiAKQEAgLTc4LDkgKzEwMCwxMiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdW5zaWdu
ZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvV2FzbUV4aXRT
dHVicy5zaXplKCk7IH0KKyAgICAKKyAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJl
IG9ubHkgdmFsaWQgb25jZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgogCiAgICAg
Q2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1w
b3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRl
eFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogCkBAIC05MCw2ICsxMTUsNyBAQCBwdWJs
aWM6CiAgICAgfQogICAgIENhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFT
U0VSVChydW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNw
YWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUlu
ZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAg
ICBpZiAobV9vcHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4XSkKQEAgLTExNyw3ICsxNDMsOCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPTUdQbGFuOwogCi0gICAgQ29k
ZUJsb2NrKE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJik7CisgICAgQ29kZUJsb2NrKENv
bnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3Jh
cHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5p
c2hlZCgpOwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21v
ZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7CkBAIC0xMjgsNiArMTU1
LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
PiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47Cisg
ICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKICAg
ICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgTG9jayBtX2xvY2s7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwCmluZGV4IGZlYTE2ZGUuLmUwNTlmYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5jcHAKQEAgLTI4LDMw
ICsyOCw0MSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgi
CisKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYgdm0p
Citib29sIENvbnRleHQ6OnVzZUZhc3RUTFMoKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQp
CisgICAgcmV0dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpOworI2Vsc2UK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNlKiBD
b250ZXh0Ojpsb2FkKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlm
ICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENv
bnRleHQqPihfcHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVkp
KTsKKyAgICBpZiAodXNlRmFzdFRMUygpKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdChXVEZfV0FT
TV9DT05URVhUX0tFWSkpOwogI2VuZGlmCi0gICAgcmV0dXJuIHZtLndhc21Db250ZXh0OworICAg
IHJldHVybiBpbnN0YW5jZTsKIH0KIAotdm9pZCBzdG9yZUNvbnRleHQoVk0mIHZtLCBDb250ZXh0
KiBjb250ZXh0KQordm9pZCBDb250ZXh0OjpzdG9yZShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGks
IHZvaWQqIHNvZnRTdGFja0xpbWl0KQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAg
aWYgKHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIF9wdGhyZWFkX3NldHNwZWNpZmlj
X2RpcmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9jYXN0PHZvaWQqPihjb250ZXh0
KSk7CisgICAgaWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNf
ZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGkpKTsKICNl
bmRpZgotICAgIHZtLndhc21Db250ZXh0ID0gY29udGV4dDsKLSAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgY29udGV4dC0+c2V0Q2FjaGVkU3RhY2tMaW1pdCh2bS5zb2Z0U3RhY2tMaW1pdCgpKTsK
KyAgICBpbnN0YW5jZSA9IGk7CisgICAgaWYgKGluc3RhbmNlKQorICAgICAgICBpbnN0YW5jZS0+
c2V0Q2FjaGVkU3RhY2tMaW1pdChzb2Z0U3RhY2tMaW1pdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAppbmRl
eCAzY2Y2NWZiLi5jMmI1MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29udGV4dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250
ZXh0LmgKQEAgLTI3LDM3ICsyNywyMCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0j
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgot
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07CitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdGhpcyB0
byBiZSBzb21ldGhpbmcgZWxzZSBhdCBzb21lIHBvaW50OgotLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDI2MAotdXNpbmcgQ29udGV4dCA9IEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTsKLQotaW5saW5lIGJvb2wgdXNlRmFzdFRMUygpCi17Ci0jaWYgRU5BQkxFKEZB
U1RfVExTX0pJVCkKLSAgICByZXR1cm4gT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0VExTKCk7
Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQorc3RydWN0IENvbnRleHQgewor
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgeyBudWxscHRyIH07CiAKLWlubGlu
ZSBib29sIHVzZUZhc3RUTFNGb3JDb250ZXh0KCkKLXsKLSAgICBpZiAodXNlRmFzdFRMUygpKQot
ICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQorICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogbG9hZCgpIGNvbnN0
OworICAgIHZvaWQgc3RvcmUoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdm9pZCogc29mdFN0YWNr
TGltaXQpOwogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYpOwotdm9pZCBzdG9yZUNvbnRleHQo
Vk0mLCBDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgdXNlRmFzdFRMUygpOworfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RW1iZWRkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg3OTRmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVy
LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworI2luY2x1
ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNz
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsgLy8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5z
dGFuY2UsIHNvIHNob3VsZCB1c2UgYmVsb3cuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3Mgor
CituYW1lc3BhY2UgV2FzbSB7CisKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CitzdHJ1Y3Qg
SW50ZXJuYWxGdW5jdGlvbjsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKK2NsYXNzIFNpZ25h
dHVyZTsKK3N0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOworCisvLyBDcmVhdGUgd3JhcHBl
ciBjb2RlIHRvIGNhbGwgZnJvbSBlbWJlZGRlciAtPiBXZWJBc3NlbWJseS4KK3VzaW5nIENyZWF0
ZUVtYmVkZGVyV3JhcHBlciA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPEludGVybmFs
RnVuY3Rpb24+KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5
TW9kZSwgdWludDMyX3QpPjsKKworLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW4gZXhjZXB0aW9uIGlz
IGRldGVjdGVkLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBQQyB0byBjb250aW51ZSBhdC4KK3Vz
aW5nIFRocm93V2FzbUV4Y2VwdGlvbiA9IHZvaWQqICgqKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNl
cHRpb25UeXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXgg
MmIxZDgyOC4uY2MxZTdkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTMwLDExICszMCwxMSBAQAogCiAjaW5j
bHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCiAKKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCmluZGV4
IDM4MTI4MzYuLmU1ZTA3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIHZvaWQgcmVnaXN0ZXJD
b2RlKHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCmluZGV4IGIyMjIyMTcuLmU3YjNkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKQEAgLTQ0LDE0ICs0NCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgSlNGdW5jdGlvbjsKLQogbmFtZXNwYWNlIEIzIHsKIGNsYXNzIENvbXBpbGF0aW9u
OwogfQogCiBuYW1lc3BhY2UgV2FzbSB7CiAKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7Citz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CisKIGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5cGUg
dHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtSW5zdGFuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0
YmUwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUlu
c3RhbmNlLmgiCisKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20geworCituYW1lc3BhY2Ugeworc2l6ZV90IGdsb2JhbE1lbW9yeUJ5
dGVTaXplKE1vZHVsZSYgbW9kdWxlKQoreworICAgIHJldHVybiBtb2R1bGUubW9kdWxlSW5mb3Jt
YXRpb24oKS5nbG9iYWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3Rlcik7Cit9Cit9CisKK0luc3Rh
bmNlOjpJbnN0YW5jZShSZWY8TW9kdWxlPiYmIG1vZHVsZSkKKyAgICA6IG1fbW9kdWxlKFdURk1v
dmUobW9kdWxlKSkKKyAgICAsIG1fZ2xvYmFscyhNYWxsb2NQdHI8dWludDY0X3Q+OjptYWxsb2Mo
Z2xvYmFsTWVtb3J5Qnl0ZVNpemUobV9tb2R1bGUuZ2V0KCkpKSkKK3sKK30KKworSW5zdGFuY2U6
On5JbnN0YW5jZSgpIHsgfQorCitzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVtb3J5QWxsb2NhdGVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUobV9tb2R1bGUuZ2V0
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzc4YTc0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTAsMCAr
MSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUZv
cm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgi
CisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKKworY2xhc3MgSW5zdGFuY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW5zdGFu
Y2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEluc3RhbmNlPiBjcmVhdGUoUmVmPE1vZHVs
ZT4mJiBtb2R1bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnN0YW5j
ZShXVEZNb3ZlKG1vZHVsZSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5hbGl6ZUNyZWF0
aW9uKFJlZjxDb2RlQmxvY2s+JiYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgbV9jb2RlQmxv
Y2sgPSBXVEZNb3ZlKGNvZGVCbG9jayk7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
fkluc3RhbmNlKCk7CisKKyAgICBzaXplX3QgZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSBjb25zdDsK
KworICAgIE1vZHVsZSYgbW9kdWxlKCkgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CisgICAg
TWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQorICAgIFRhYmxlKiB0
YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KKworICAgIGludDMyX3QgbG9hZEkzMkds
b2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KKyAg
ICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxzLmdldCgpW2ldOyB9CisgICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KGxvYWRJMzJHbG9iYWwoaSkpOyB9CisgICAg
ZG91YmxlIGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9j
YXN0PGRvdWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KKyAgICB2b2lkIHNldEdsb2JhbCh1bnNp
Z25lZCBpLCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQorCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkU3RhY2tMaW1pdCk7IH0KKyAgICB2b2lk
KiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9
CisgICAgdm9pZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZvaWQqIGxpbWl0KSB7IG1fY2FjaGVkU3Rh
Y2tMaW1pdCA9IGxpbWl0OyB9CisKKyAgICBmcmllbmQgY2xhc3MgSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U7IC8vIEZJWE1FIHJlbW92ZSB0aGlzIG9uY2UgcmVmYWN0b3JlZCBodHRwczovL3dl
YmtpdC5vcmcvYi8xNzc0NzIuCisKK3ByaXZhdGU6CisgICAgSW5zdGFuY2UoUmVmPE1vZHVsZT4m
Jik7CisgICAgCisgICAgUmVmPE1vZHVsZT4gbV9tb2R1bGU7CisgICAgUmVmUHRyPENvZGVCbG9j
az4gbV9jb2RlQmxvY2s7CisgICAgUmVmUHRyPE1lbW9yeT4gbV9tZW1vcnk7CisgICAgUmVmUHRy
PFRhYmxlPiBtX3RhYmxlOworICAgIE1hbGxvY1B0cjx1aW50NjRfdD4gbV9nbG9iYWxzOworICAg
IHZvaWQqIG1fY2FjaGVkU3RhY2tMaW1pdCB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1l
cmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGM1ZjQ4ZTkuLjBkYzc3NWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0yOCwxMyArMjgsMTkg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVk
ZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CisjaW5jbHVkZSA8d3RmL09TQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5o
PgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisj
aW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxtdXRleD4KIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIApAQCAtNTEsMTkgKzU3LDE5IEBAIE5FVkVSX0lOTElORSBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpIHsg
Q1JBCiBzdHJ1Y3QgTWVtb3J5UmVzdWx0IHsKICAgICBlbnVtIEtpbmQgewogICAgICAgICBTdWNj
ZXNzLAotICAgICAgICBTdWNjZXNzQW5kQXN5bmNHQywKLSAgICAgICAgU3luY0dDQW5kUmV0cnkK
KyAgICAgICAgU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlLAorICAgICAgICBTeW5jVHJ5
VG9SZWNsYWltTWVtb3J5CiAgICAgfTsKLSAgICAKKwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0
b1N0cmluZyhLaW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAg
ICAgY2FzZSBTdWNjZXNzOgogICAgICAgICAgICAgcmV0dXJuICJTdWNjZXNzIjsKLSAgICAgICAg
Y2FzZSBTdWNjZXNzQW5kQXN5bmNHQzoKLSAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0FuZEFz
eW5jR0MiOwotICAgICAgICBjYXNlIFN5bmNHQ0FuZFJldHJ5OgotICAgICAgICAgICAgcmV0dXJu
ICJTeW5jR0NBbmRSZXRyeSI7CisgICAgICAgIGNhc2UgU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVBy
ZXNzdXJlOgorICAgICAgICAgICAgcmV0dXJuICJTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1
cmUiOworICAgICAgICBjYXNlIFN5bmNUcnlUb1JlY2xhaW1NZW1vcnk6CisgICAgICAgICAgICBy
ZXR1cm4gIlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkiOwogICAgICAgICB9CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTgs
MTcgKzEwNCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdCByZXN1bHQgPSBbJl0g
ewogICAgICAgICAgICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICAg
ICAgaWYgKG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJl
c3VsdDo6U3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHZvaWQqIHJlc3VsdCA9IEdpZ2FjYWdlOjp0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhHaWdhY2Fn
ZTo6UHJpbWl0aXZlLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsKICAgICAgICAgICAgIGlm
ICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwg
TWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1l
bW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX21lbW9yaWVzLmFwcGVuZChyZXN1bHQpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KAogICAgICAgICAg
ICAgICAgIHJlc3VsdCwKLSAgICAgICAgICAgICAgICBtX21lbW9yaWVzLnNpemUoKSA+PSBtX21h
eENvdW50IC8gMiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0MgOiBNZW1vcnlSZXN1
bHQ6OlN1Y2Nlc3MpOworICAgICAgICAgICAgICAgIG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4
Q291bnQgLyAyID8gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUg
OiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3MpOwogICAgICAgICB9KCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoT3B0aW9uczo6bG9nV2ViQXNzZW1ibHlNZW1vcnkoKSkKQEAgLTE1MywxMiArMTU5LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgTWVtb3J5UmVzdWx0OjpLaW5kIHJlc3VsdCA9IFsmXSB7CiAg
ICAgICAgICAgICBhdXRvIGhvbGRlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgICAgICBp
ZiAobV9waHlzaWNhbEJ5dGVzICsgYnl0ZXMgPiBtZW1vcnlMaW1pdCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5OworICAgICAgICAgICAgICAg
IHJldHVybiBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1fcGh5c2ljYWxCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKG1fcGh5c2ljYWxCeXRlcyA+PSBtZW1vcnlMaW1pdCgpIC8gMikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kQXN5bmNHQzsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5
UHJlc3N1cmU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6
OlN1Y2Nlc3M7CiAgICAgICAgIH0oKTsKQEAgLTIwNSw3ICsyMTEsNyBAQCBzdGF0aWMgTWVtb3J5
TWFuYWdlciYgbWVtb3J5TWFuYWdlcigpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1i
b29sIHRyeUFuZEdDKFZNJiB2bSwgY29uc3QgRnVuYyYgYWxsb2NhdGUpCitib29sIHRyeUFsbG9j
YXRlKGNvbnN0IEZ1bmMmIGFsbG9jYXRlLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mIG5v
dGlmeU1lbW9yeVByZXNzdXJlLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mIHN5bmNUcnlU
b1JlY2xhaW1NZW1vcnkpCiB7CiAgICAgdW5zaWduZWQgbnVtVHJpZXMgPSAyOwogICAgIGJvb2wg
ZG9uZSA9IGZhbHNlOwpAQCAtMjE0LDE0ICsyMjAsMTYgQEAgYm9vbCB0cnlBbmRHQyhWTSYgdm0s
IGNvbnN0IEZ1bmMmIGFsbG9jYXRlKQogICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2Vz
czoKICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kQXN5bmNHQzoKLSAgICAgICAgICAgIHZtLmhl
YXAuY29sbGVjdEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CisgICAgICAgIGNhc2UgTWVt
b3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU6CisgICAgICAgICAgICBp
ZiAobm90aWZ5TWVtb3J5UHJlc3N1cmUpCisgICAgICAgICAgICAgICAgbm90aWZ5TWVtb3J5UHJl
c3N1cmUoKTsKICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeToKKyAgICAgICAgY2FzZSBN
ZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnk6CiAgICAgICAgICAgICBpZiAoaSAr
IDEgPT0gbnVtVHJpZXMpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB2bS5o
ZWFwLmNvbGxlY3RTeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CisgICAgICAgICAgICBpZiAo
c3luY1RyeVRvUmVjbGFpbU1lbW9yeSkKKyAgICAgICAgICAgICAgICBzeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIzMCwz
MiArMjM4LDMyIEBAIGJvb2wgdHJ5QW5kR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkK
IAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVt
b3J5TW9kZSBtb2RlKQorTWVtb3J5OjpNZW1vcnkoKQogewotICAgIHN3aXRjaCAobW9kZSkgewot
ICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tp
bmciOwotICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7
Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIi
OwogfQogCi1NZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0pCitNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IEZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgRnVuY3Rpb248dm9pZCgp
PiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQs
IFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1faW5pdGlhbChpbml0
aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgLCBtX25vdGlmeU1lbW9yeVByZXNz
dXJlKHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNz
dXJlKSkKKyAgICAsIG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeShzdGQ6OmZvcndhcmQ8V1RGOjpG
dW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1
Y2Nlc3NDYWxsYmFjayhzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwg
UGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKQogewogICAgIEFTU0VSVCghaW5pdGlh
bC5ieXRlcygpKTsKICAgICBBU1NFUlQobV9tb2RlID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNr
aW5nKTsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGlu
ZyAiLCAqdGhpcyk7CiB9CiAKLU1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50
IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9y
eU1vZGUgbW9kZSkKK01lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUg
bW9kZSwgRnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2
b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VD
b3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKQogICAgIDogbV9tZW1vcnko
bWVtb3J5KQogICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChp
bml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAgLCBtX21hcHBlZENhcGFjaXR5
KG1hcHBlZENhcGFjaXR5KQogICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX25vdGlmeU1lbW9y
eVByZXNzdXJlKHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9y
eVByZXNzdXJlKSkKKyAgICAsIG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeShzdGQ6OmZvcndhcmQ8
V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1f
Z3Jvd1N1Y2Nlc3NDYWxsYmFjayhzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VD
b3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKQogewogICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJNZW1vcnk6Ok1lbW9yeSBhbGxvY2F0aW5nICIsICp0aGlzKTsKIH0KQEAg
LTI3NSw3ICsyODMsMTIgQEAgc3RhdGljIHZvaWQgY29tbWl0WmVyb1BhZ2VzKHZvaWQqIHN0YXJ0
QWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQogI2VuZGlmCiB9CiAKLVJlZlB0cjxNZW1vcnk+
IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKQorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWVtb3J5KCkpOworfQorICAgIAorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVh
dGUoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBGdW5jdGlvbjx2b2lkKCk+
JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNs
YWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdy
b3dTdWNjZXNzQ2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGluaXRpYWwpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMgc2hvdWxkIGJl
IGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KQEAgLTI4MywzMyArMjk2LDI3IEBAIFJlZlB0cjxN
ZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3Vu
dCBtYXhpbXVtKQogICAgIGNvbnN0IHNpemVfdCBpbml0aWFsQnl0ZXMgPSBpbml0aWFsLmJ5dGVz
KCk7CiAgICAgY29uc3Qgc2l6ZV90IG1heGltdW1CeXRlcyA9IG1heGltdW0gPyBtYXhpbXVtLmJ5
dGVzKCkgOiAwOwogCi0gICAgLy8gV2UgbmVlZCB0byBiZSBzdXJlIHdlIGhhdmUgYSBzdHViIHBy
aW9yIHRvIHJ1bm5pbmcgY29kZS4KLSAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9u
KCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KICAgICBpZiAobWF4aW11bSAmJiAhbWF4aW11bUJ5dGVzKSB7CiAg
ICAgICAgIC8vIFVzZXIgc3BlY2lmaWVkIGEgemVybyBtYXhpbXVtLCBpbml0aWFsIHNpemUgbXVz
dCBhbHNvIGJlIHplcm8uCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbml0aWFsQnl0ZXMpOwot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0sIHN0ZDo6
Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgc3Rk
Ojpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVjbGFpbU1lbW9yeSks
IHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPj4o
Z3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBkb25lID0gdHJ5
QW5kR0MoCi0gICAgICAgIHZtLAorICAgIGJvb2wgZG9uZSA9IHRyeUFsbG9jYXRlKAogICAgICAg
ICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0OjpLaW5kIHsKICAgICAgICAgICAgIHJldHVybiBtZW1v
cnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQaHlzaWNhbEJ5dGVzKGluaXRpYWxCeXRlcyk7Ci0gICAg
ICAgIH0pOworICAgICAgICB9LCBub3RpZnlNZW1vcnlQcmVzc3VyZSwgc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSk7CiAgICAgaWYgKCFkb25lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgCiAgICAgY2hhciogZmFzdE1lbW9yeSA9IG51bGxwdHI7CiAgICAgaWYgKE9wdGlvbnM6OnVz
ZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpKSB7Ci0gICAgICAgIHRyeUFuZEdDKAotICAgICAgICAg
ICAgdm0sCisgICAgICAgIHRyeUFsbG9jYXRlKAogICAgICAgICAgICAgWyZdICgpIC0+IE1lbW9y
eVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtZW1vcnlNYW5h
Z2VyKCkudHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoKTsKICAgICAgICAgICAgICAgICBmYXN0TWVt
b3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihyZXN1bHQuYmFzZVB0cik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdC5raW5kOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LCBu
b3RpZnlNZW1vcnlQcmVzc3VyZSwgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgfQogICAg
IAogICAgIGlmIChmYXN0TWVtb3J5KSB7CkBAIC0zMjAsMTUgKzMyNywxNSBAQCBSZWZQdHI8TWVt
b3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSkKICAgICAgICAgfQogCiAgICAgICAgIGNvbW1pdFplcm9QYWdlcyhmYXN0TWVtb3J5
LCBpbml0aWFsQnl0ZXMpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
ZW1vcnkoZmFzdE1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0
ZXMoKSwgTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNZW1vcnkoZmFzdE1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5OjpmYXN0TWFw
cGVkQnl0ZXMoKSwgTWVtb3J5TW9kZTo6U2lnbmFsaW5nLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5j
dGlvbjx2b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4+KHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBzdGQ6OmZvcndhcmQ8V1RG
OjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJh
Y2spKSk7CiAgICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpjcmFzaElmV2Vi
QXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKICAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50R2V0
RmFzdE1lbW9yeSgpOwogCiAgICAgaWYgKCFpbml0aWFsQnl0ZXMpCi0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSwgc3RkOjpmb3J3YXJkPFdURjo6RnVu
Y3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RGOjpG
dW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdU
Rjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxi
YWNrKSkpOwogICAgIAogICAgIHZvaWQqIHNsb3dNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25l
ZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCksIGluaXRpYWxCeXRl
cyk7CiAgICAgaWYgKCFzbG93TWVtb3J5KSB7CkBAIC0zMzYsNyArMzQzLDcgQEAgUmVmUHRyPE1l
bW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBtZW1zZXQoc2xv
d01lbW9yeSwgMCwgaW5pdGlhbEJ5dGVzKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9y
eShzbG93TWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBpbml0aWFsQnl0ZXMsIE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xvd01l
bW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgaW5pdGlhbEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZywgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5
UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9S
ZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQs
IFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogfQogCiBNZW1vcnk6On5NZW1v
cnkoKQpAQCAtMzQ1LDcgKzM1MiwxMCBAQCBNZW1vcnk6On5NZW1vcnkoKQogICAgICAgICBtZW1v
cnlNYW5hZ2VyKCkuZnJlZVBoeXNpY2FsQnl0ZXMobV9zaXplKTsKICAgICAgICAgc3dpdGNoICht
X21vZGUpIHsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Ci0gICAgICAgICAg
ICBtcHJvdGVjdChtX21lbW9yeSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgUFJPVF9SRUFE
IHwgUFJPVF9XUklURSk7CisgICAgICAgICAgICBpZiAobXByb3RlY3QobV9tZW1vcnksIE1lbW9y
eTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygibXByb3RlY3QgZmFpbGVkOiAiLCBzdHJlcnJvcihlcnJubyksICJc
biIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZVZpcnR1YWxQYWdlcyht
X21lbW9yeSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZzoKQEAgLTM3MSwzNCArMzgxLDUwIEBAIGJvb2wgTWVtb3J5OjphZGRyZXNz
SXNJbkFjdGl2ZUZhc3RNZW1vcnkodm9pZCogYWRkcmVzcykKICAgICByZXR1cm4gbWVtb3J5TWFu
YWdlcigpLmNvbnRhaW5zQWRkcmVzcyhhZGRyZXNzKTsKIH0KIAotYm9vbCBNZW1vcnk6Omdyb3co
Vk0mIHZtLCBQYWdlQ291bnQgbmV3U2l6ZSkKK0V4cGVjdGVkPFBhZ2VDb3VudCwgTWVtb3J5OjpH
cm93RmFpbFJlYXNvbj4gTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBkZWx0YSkKIHsKLSAgICBSRUxF
QVNFX0FTU0VSVChuZXdTaXplID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisgICAg
Y29uc3QgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCA9IHNpemVJblBhZ2VzKCk7CiAKLSAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IHRvICIsIG5ld1NpemUsICIgZnJv
bSAiLCAqdGhpcyk7CisgICAgaWYgKCFkZWx0YS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhKTsKKyAgICAKKyAgICBj
b25zdCBXYXNtOjpQYWdlQ291bnQgbmV3UGFnZUNvdW50ID0gb2xkUGFnZUNvdW50ICsgZGVsdGE7
CisgICAgaWYgKCFuZXdQYWdlQ291bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChH
cm93RmFpbFJlYXNvbjo6SW52YWxpZEdyb3dTaXplKTsKIAotICAgIGlmIChtYXhpbXVtKCkgJiYg
bmV3U2l6ZSA+IG1heGltdW0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gc3Vj
Y2VzcyA9IFsmXSAoKSB7CisgICAgICAgIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhvbGRQYWdlQ291
bnQsIG5ld1BhZ2VDb3VudCk7CisgICAgICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CisgICAgfTsK
IAotICAgIHNpemVfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKKyAgICBpZiAoZGVs
dGEucGFnZUNvdW50KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKworICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3coIiwgZGVsdGEsICIpIHRvICIsIG5ld1Bh
Z2VDb3VudCwgIiBmcm9tICIsICp0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdQYWdlQ291
bnQgPiBQYWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpKTsKKworICAgIGlmIChtYXhpbXVtKCkg
JiYgbmV3UGFnZUNvdW50ID4gbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoR3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bSk7CisKKyAgICBzaXplX3QgZGVz
aXJlZFNpemUgPSBuZXdQYWdlQ291bnQuYnl0ZXMoKTsKICAgICBSRUxFQVNFX0FTU0VSVChkZXNp
cmVkU2l6ZSA+IG1fc2l6ZSk7CiAgICAgc2l6ZV90IGV4dHJhQnl0ZXMgPSBkZXNpcmVkU2l6ZSAt
IG1fc2l6ZTsKICAgICBSRUxFQVNFX0FTU0VSVChleHRyYUJ5dGVzKTsKLSAgICBib29sIHN1Y2Nl
c3MgPSB0cnlBbmRHQygKLSAgICAgICAgdm0sCisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VzcyA9
IHRyeUFsbG9jYXRlKAogICAgICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0OjpLaW5kIHsKICAg
ICAgICAgICAgIHJldHVybiBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQaHlzaWNhbEJ5dGVz
KGV4dHJhQnl0ZXMpOwotICAgICAgICB9KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCisgICAgICAgIH0sIG1fbm90aWZ5TWVtb3J5UHJlc3N1cmUs
IG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CisgICAgaWYgKCFhbGxvY2F0aW9uU3VjY2VzcykK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9y
eSk7CisKICAgICBzd2l0Y2ggKG1vZGUoKSkgewogICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmc6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0g
MCk7Ci0gICAgICAgIAorCiAgICAgICAgIHZvaWQqIG5ld01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlB
bGlnbmVkTWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIFdURjo6cGFnZVNpemUoKSwgZGVzaXJl
ZFNpemUpOwogICAgICAgICBpZiAoIW5ld01lbW9yeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6T3V0
T2ZNZW1vcnkpOworCiAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUp
OwogICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld01lbW9yeSkgKyBtX3NpemUs
IDAsIGRlc2lyZWRTaXplIC0gbV9zaXplKTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQpAQCAtNDA2
LDcgKzQzMiw3IEBAIGJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUp
CiAgICAgICAgIG1fbWVtb3J5ID0gbmV3TWVtb3J5OwogICAgICAgICBtX21hcHBlZENhcGFjaXR5
ID0gZGVzaXJlZFNpemU7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKICAgICB9CiAgICAgY2FzZSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmc6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkp
OwpAQCAtNDE1LDE2ICs0NDEsMTcgQEAgYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291
bnQgbmV3U2l6ZSkKICAgICAgICAgCiAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJr
aW5nIFdlYkFzc2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiIGFzIHJl
YWQrd3JpdGUgaW4gcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3
UG9pbnRlcihzdGFydEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKICAgICAgICAgaWYgKG1w
cm90ZWN0KHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkp
IHsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxh
Y2UgZmFpbGVkICIsICp0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGRhdGFMb2coIm1wcm90ZWN0IGZhaWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAiXG4iKTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAg
ICAgICAgY29tbWl0WmVyb1BhZ2VzKHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRlcyk7CiAgICAgICAg
IG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAg
ICAKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKyAgICB9CisgICAgfQorCiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG9s
ZFBhZ2VDb3VudDsKIH0KIAogdm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCA2MGE5YmI3Li4z
ZjE4YzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC0yNyw4
ICsyNywxMSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV2FzbU1l
bW9yeU1vZGUuaCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAKKyNpbmNsdWRlIDx3dGYv
RXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzgsMTggKzQxLDggQEAg
Y2xhc3MgUHJpbnRTdHJlYW07CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFt
ZXNwYWNlIFdhc20gewogCi0vLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMu
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotZW51
bSBjbGFzcyBNZW1vcnlNb2RlIDogdWludDhfdCB7Ci0gICAgQm91bmRzQ2hlY2tpbmcsCi0gICAg
U2lnbmFsaW5nCi19Owotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2Rl
cyA9IDI7Ci1KU19FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1v
ZGUpOwotCiBjbGFzcyBNZW1vcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpAQCAtNTcsOCArNTAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdURjo6UHJpbnRTdHJl
YW0mKSBjb25zdDsKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhIW1fbWVtb3J5OyB9Ci0gICAgCi0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShW
TSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisKKyAgICBzdGF0aWMg
UmVmUHRyPE1lbW9yeT4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0
ZShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5j
VHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291
bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCiAgICAgfk1lbW9yeSgpOwogCkBAIC03NSwy
MiArNjksMzQgQEAgcHVibGljOgogCiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlOyB9CiAKLSAgICAvLyBncm93KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20g
dGhlIEpTV2ViQXNzZW1ibHlNZW1vcnkgb2JqZWN0IHNpbmNlIHRoYXQgb2JqZWN0IG5lZWRzIHRv
IHVwZGF0ZSBpbnRlcm5hbAotICAgIC8vIHBvaW50ZXJzIHdpdGggdGhlIGN1cnJlbnQgYmFzZSBh
bmQgc2l6ZS4KLSAgICBib29sIGdyb3coVk0mLCBQYWdlQ291bnQpOworICAgIGVudW0gY2xhc3Mg
R3Jvd0ZhaWxSZWFzb24geworICAgICAgICBJbnZhbGlkRGVsdGEsCisgICAgICAgIEludmFsaWRH
cm93U2l6ZSwKKyAgICAgICAgV291bGRFeGNlZWRNYXhpbXVtLAorICAgICAgICBPdXRPZk1lbW9y
eSwKKyAgICB9OworICAgIEV4cGVjdGVkPFBhZ2VDb3VudCwgR3Jvd0ZhaWxSZWFzb24+IGdyb3co
UGFnZUNvdW50KTsKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVn
dW4oKSk7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX21lbW9yeSk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6
ZSk7IH0KKwogcHJpdmF0ZToKLSAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5p
dGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9k
ZSk7Ci0gICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7Cisg
ICAgTWVtb3J5KCk7CisgICAgTWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFn
ZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOworICAgIE1lbW9yeShQ
YWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZCgp
PiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5
VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQp
PiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBtb3Zl
IHRoZXNlIHRvIHRoZSBpbnN0YW5jZSB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3Rh
bmNlIGNhbGxzLgorICAgIC8vIEZJWE1FOiB3ZSBjYWNoZSB0aGVzZSBvbiB0aGUgaW5zdGFuY2Vz
IHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5zdGFuY2UgY2FsbHMuIFRoaXMgd2lsbCBy
ZXF1aXJlIHVwZGF0aW5nIGFsbCB0aGUgaW5zdGFuY2VzIHdoZW4gZ3JvdyBpcyBjYWxsZWQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUKICAgICB2b2lkKiBt
X21lbW9yeSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwogICAgIFBhZ2VD
b3VudCBtX2luaXRpYWw7CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKICAgICBzaXplX3QgbV9t
YXBwZWRDYXBhY2l0eSB7IDAgfTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nIH07CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fbm90aWZ5TWVt
b3J5UHJlc3N1cmU7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fc3luY1RyeVRvUmVjbGFp
bU1lbW9yeTsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiBt
X2dyb3dTdWNjZXNzQ2FsbGJhY2s7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlv
bi5jcHAKaW5kZXggYmY1NjVmMC4uYjVjMzRiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC01Nyw3ICs1Nyw3IEBA
IGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKQogICAg
IHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mb0ZsYWcsIFtdICgpIHsKICAg
ICAgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CiAgICAg
ICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIEdQ
UlJlZyB3YXNtQ29udGV4dFBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBHUFJSZWcg
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lz
dGVyLCBhbmQgd2Ugc2hvdWxkIGFsbG93IGRpZmZlcmVudAogICAgICAgICAvLyAgICAgICAgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UgdG8gaGF2ZSBkaWZmZXJlbnQgcGlucy4gUmlnaHQgbm93IHdlIHRh
a2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9uZSBlbnRyeS4KQEAgLTY1LDI3ICs2NSwyNyBAQCBjb25z
dCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAgICAgICAg
Ly8gICAgICAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
Mjk1MgogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07CiAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mUGlubmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6ZXMuc2l6ZSgp
ICsgMTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQorICAgICAgICBpZiAo
IUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgICAgICsrbnVtYmVyT2ZQaW5uZWRSZWdp
c3RlcnM7CiAgICAgICAgIFZlY3RvcjxHUFJSZWc+IHBpbm5lZFJlZ3MgPSBnZXRQaW5uZWRSZWdp
c3RlcnMobnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnMpOwogCiAgICAgICAgIGJhc2VNZW1vcnlQb2lu
dGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOwotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JD
b250ZXh0KCkpCi0gICAgICAgICAgICB3YXNtQ29udGV4dFBvaW50ZXIgPSBwaW5uZWRSZWdzLnRh
a2VMYXN0KCk7CisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAg
ICAgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CiAK
ICAgICAgICAgQVNTRVJUKHBpbm5lZFNpemVzLnNpemUoKSA9PSBwaW5uZWRSZWdzLnNpemUoKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaW5uZWRTaXplcy5zaXplKCk7ICsr
aSkKICAgICAgICAgICAgIHNpemVSZWdpc3RlcnMuYXBwZW5kKHsgcGlubmVkUmVnc1tpXSwgcGlu
bmVkU2l6ZXNbaV0gfSk7Ci0gICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1
Y3QoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0
UG9pbnRlcik7CisgICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RG
TW92ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0SW5zdGFu
Y2VQb2ludGVyKTsKICAgICB9KTsKIAogICAgIHJldHVybiBzdGF0aWNQaW5uZWRSZWdpc3Rlcklu
Zm8uZ2V0KCk7CiB9CiAKLVBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZl
Y3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBiYXNl
TWVtb3J5UG9pbnRlciwgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRlcikKK1Bpbm5lZFJlZ2lzdGVy
SW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYm
IHNpemVSZWdpc3RlcnMsIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BSUmVnIHdhc21Db250
ZXh0SW5zdGFuY2VQb2ludGVyKQogICAgIDogc2l6ZVJlZ2lzdGVycyhXVEZNb3ZlKHNpemVSZWdp
c3RlcnMpKQogICAgICwgYmFzZU1lbW9yeVBvaW50ZXIoYmFzZU1lbW9yeVBvaW50ZXIpCi0gICAg
LCB3YXNtQ29udGV4dFBvaW50ZXIod2FzbUNvbnRleHRQb2ludGVyKQorICAgICwgd2FzbUNvbnRl
eHRJbnN0YW5jZVBvaW50ZXIod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpCiB7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlv
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgK
aW5kZXggNDIzN2JhYy4uMjMzMjllYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgUGlubmVk
U2l6ZVJlZ2lzdGVySW5mbyB7CiBzdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJbmZvIHsKICAgICBWZWN0
b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKICAgICBHUFJSZWcgYmFz
ZU1lbW9yeVBvaW50ZXI7Ci0gICAgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRlcjsKKyAgICBHUFJS
ZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CiAgICAgc3RhdGljIGNvbnN0IFBpbm5lZFJl
Z2lzdGVySW5mbyYgZ2V0KCk7CiAgICAgUGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRT
aXplUmVnaXN0ZXJJbmZvPiYmLCBHUFJSZWcsIEdQUlJlZyk7CiAKQEAgLTUyLDggKzUyLDggQEAg
c3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7CiAgICAgewogICAgICAgICBSZWdpc3RlclNldCBy
ZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5zZXQoYmFzZU1lbW9yeVBvaW50ZXIpOwotICAgICAgICBp
ZiAod2FzbUNvbnRleHRQb2ludGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICByZXN1
bHQuc2V0KHdhc21Db250ZXh0UG9pbnRlcik7CisgICAgICAgIGlmICh3YXNtQ29udGV4dEluc3Rh
bmNlUG9pbnRlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmVzdWx0LnNldCh3YXNt
Q29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6
OlNpZ25hbGluZykgewogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpbmZvIDogc2l6ZVJl
Z2lzdGVycykKICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGluZm8uc2l6ZVJlZ2lzdGVyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWJjOTg1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5TW9kZS5oIgorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY29uc3QgY2hhciogbWFrZVN0cmluZyhN
ZW1vcnlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNZW1vcnlN
b2RlOjpCb3VuZHNDaGVja2luZzogcmV0dXJuICJCb3VuZHNDaGVja2luZyI7CisgICAgY2FzZSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmc6IHJldHVybiAiU2lnbmFsaW5nIjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4xNGZjODk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuaApAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0V4cG9ydE1hY3Jvcy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCisvLyBGSVhNRTogV2Ugc2hv
dWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MjY5MworZW51bSBjbGFzcyBNZW1vcnlNb2RlIDogdWludDhfdCB7Cisg
ICAgQm91bmRzQ2hlY2tpbmcsCisgICAgU2lnbmFsaW5nCit9OworCitzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBOdW1iZXJPZk1lbW9yeU1vZGVzID0gMjsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0
IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1MWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZS5jcHAKaW5kZXggOGUzNjZmNC4uOTkyZTNkNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKQEAgLTU2LDI3ICs1NiwyNiBAQCBzdGF0
aWMgTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IG1ha2VWYWxpZGF0aW9uUmVzdWx0KEJCUVBsYW4m
IHBsYW4pCiAKIHN0YXRpYyBQbGFuOjpDb21wbGV0aW9uVGFzayBtYWtlVmFsaWRhdGlvbkNhbGxi
YWNrKE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXSAoVk0qIHZtLCBQbGFuJiBwbGFuKSB7CisgICAgcmV0dXJuIGNyZWF0
ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0gKFBsYW4mIHBsYW4pIHsKICAgICAgICAgQVNTRVJUKCFwbGFuLmhhc1dvcmsoKSk7Ci0g
ICAgICAgIEFTU0VSVCh2bSk7Ci0gICAgICAgIGNhbGxiYWNrLT5ydW4oKnZtLCBtYWtlVmFsaWRh
dGlvblJlc3VsdChzdGF0aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKKyAgICAgICAgY2FsbGJh
Y2stPnJ1bihtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikp
KTsKICAgICB9KTsKIH0KIAotTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRh
dGVTeW5jKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKQorTW9kdWxlOjpWYWxpZGF0
aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1
aW50OF90PiYmIHNvdXJjZSkKIHsKLSAgICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgQkJRUGxhbigmdm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxh
bjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgQkJRUGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24s
IFBsYW46OmRvbnRGaW5hbGl6ZSgpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgcGxhbi0+cGFy
c2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogICAgIHJldHVybiBtYWtlVmFsaWRhdGlvblJlc3VsdChw
bGFuLmdldCgpKTsKIH0KIAotdm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMoVk0mIHZtLCBWZWN0
b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBj
YWxsYmFjaykKK3ZvaWQgTW9kdWxlOjp2YWxpZGF0ZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIFZl
Y3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYm
IGNhbGxiYWNrKQogewotICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFu
KCZ2bSwgV1RGTW92ZShzb3VyY2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRhdGlv
bkNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKSkpOworICAgIFJlZjxQbGFuPiBwbGFuID0gYWRv
cHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFs
aWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSksIG51bGxw
dHIsIG51bGxwdHIpKTsKICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92
ZShwbGFuKSk7CiB9CiAKLVJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxv
Y2soTWVtb3J5TW9kZSBtb2RlKQorUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNv
ZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtODcsMjMgKzg2LDIzIEBAIFJlZjxD
b2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlKQog
ICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIGJhY2sgb2ZmIHJldHJ5aW5nIGF0IHNvbWUg
cG9pbnQ6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MDYwNwogICAgIGlmICghY29kZUJsb2NrIHx8IChjb2RlQmxvY2stPmNvbXBpbGF0aW9uRmluaXNo
ZWQoKSAmJiAhY29kZUJsb2NrLT5ydW5uYWJsZSgpKSkgewotICAgICAgICBjb2RlQmxvY2sgPSBD
b2RlQmxvY2s6OmNyZWF0ZShtb2RlLCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9k
dWxlSW5mb3JtYXRpb24oKSkpOworICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0
ZShjb250ZXh0LCBtb2RlLCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlSW5m
b3JtYXRpb24oKSksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhj
ZXB0aW9uKTsKICAgICAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUp
XSA9IGNvZGVCbG9jazsKICAgICB9CiAgICAgcmV0dXJuIGNvZGVCbG9jay5yZWxlYXNlTm9uTnVs
bCgpOwogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKE1lbW9yeU1vZGUg
bW9kZSkKK1JlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Y29tcGlsZVN5bmMoQ29udGV4dCogY29udGV4
dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRl
cldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAg
UmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2sobW9kZSk7Cisg
ICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4
dCwgbW9kZSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRp
b24pOwogICAgIGNvZGVCbG9jay0+d2FpdFVudGlsRmluaXNoZWQoKTsKICAgICByZXR1cm4gY29k
ZUJsb2NrOwogfQogCi12b2lkIE1vZHVsZTo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgTWVtb3J5TW9k
ZSBtb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCit2b2lk
IE1vZHVsZTo6Y29tcGlsZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwg
Q29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrLCBDcmVhdGVFbWJlZGRl
cldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24pCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JD
cmVhdGVDb2RlQmxvY2sobW9kZSk7Ci0gICAgY29kZUJsb2NrLT5jb21waWxlQXN5bmModm0sIFdU
Rk1vdmUodGFzaykpOworICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRl
Q29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwg
dGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBjb2RlQmxvY2stPmNvbXBpbGVBc3luYyhjb250ZXh0
LCBXVEZNb3ZlKHRhc2spKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaAppbmRleCBhMWFmNzU4Li5hNmFlMjlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtMzYsMTkgKzM3
LDIwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKK3N0cnVjdCBDb250
ZXh0Owogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogY2xhc3MgUGxhbjsKIAogdXNpbmcgU2ln
bmF0dXJlSW5kZXggPSB1aW50MzJfdDsKLSAgICAKKwogY2xhc3MgTW9kdWxlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZT4gewogcHVibGljOgogICAgIHVzaW5nIFZhbGlkYXRp
b25SZXN1bHQgPSBXVEY6OkV4cGVjdGVkPFJlZlB0cjxNb2R1bGU+LCBTdHJpbmc+OwotICAgIHR5
cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0mLCBWYWxpZGF0aW9uUmVzdWx0JiYpOworICAgIHR5
cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVmFsaWRhdGlvblJlc3VsdCYmKTsKICAgICB1c2luZyBB
c3luY1ZhbGlkYXRpb25DYWxsYmFjayA9IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+
OwogCi0gICAgc3RhdGljIFZhbGlkYXRpb25SZXN1bHQgdmFsaWRhdGVTeW5jKFZNJiwgVmVjdG9y
PHVpbnQ4X3Q+JiYgc291cmNlKTsKLSAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKFZNJiwg
VmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNr
JiYpOworICAgIHN0YXRpYyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlU3luYyhDb250ZXh0Kiwg
VmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKTsKKyAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5j
KENvbnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0
aW9uQ2FsbGJhY2smJik7CiAKICAgICBzdGF0aWMgUmVmPE1vZHVsZT4gY3JlYXRlKFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4mJiBtb2R1bGVJbmZvcm1hdGlvbikKICAgICB7CkBAIC01OCwxNCArNjAs
MTQgQEAgcHVibGljOgogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0Owog
ICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KIAotICAgIFJlZjxDb2Rl
QmxvY2s+IGNvbXBpbGVTeW5jKE1lbW9yeU1vZGUpOwotICAgIHZvaWQgY29tcGlsZUFzeW5jKFZN
JiwgTWVtb3J5TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7Cisg
ICAgUmVmPENvZGVCbG9jaz4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0
ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgY29tcGls
ZUFzeW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25D
YWxsYmFjayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Nb2R1bGUoKTsKIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yKE1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19j
YXN0PHVpbnQ4X3Q+KG1vZGUpXS5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWY8Q29kZUJsb2Nr
PiBnZXRPckNyZWF0ZUNvZGVCbG9jayhNZW1vcnlNb2RlKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBn
ZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBNb2R1bGUoUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiYmKTsKICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3Jt
YXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwCmluZGV4IDZjOTQ4YjUuLjZkNDRhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24u
aCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtT3Bz
LmgiCkBAIC0yNjUsNyArMjY0LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxw
ZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFBhcnRpYWxSZXN1bHQgbGlt
aXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7CiAgICAgaWYgKFVO
TElLRUxZKCFsaW1pdHMpKQogICAgICAgICByZXR1cm4gbGltaXRzLmdldFVuZXhwZWN0ZWQoKTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRTaXpl
KGluaXRpYWwpLCAiVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBp
cyBpbnZhbGlkIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4VGFibGVF
bnRyaWVzLCAiVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyB0
b28gYmlnLCBtYXhpbXVtICIsIG1heFRhYmxlRW50cmllcyk7CiAKICAgICBBU1NFUlQoIW1heGlt
dW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmNwcAppbmRleCA3NGNmNjUzLi5jY2RmNzJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1
ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgor
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21DYWxsZWUu
aCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFk
cy5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKQEAgLTUxLDEwICs1MiwxMCBAQCBuYW1lc3Bh
Y2UgV2FzbU9NR1BsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiB9CiAKLU9NR1BsYW46Ok9NR1BsYW4oUmVmPE1vZHVsZT4gbW9kdWxlLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAg
ICA6IEJhc2UobnVsbHB0ciwgbWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4o
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSksIFdURk1vdmUodGFzaykpCi0gICAgLCBtX21v
ZHVsZShtb2R1bGUuY29weVJlZigpKQotICAgICwgbV9jb2RlQmxvY2soKm1vZHVsZS0+Y29kZUJs
b2NrRm9yKG1vZGUpKQorT01HUGxhbjo6T01HUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9k
dWxlPiYmIG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3Rf
Y2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBX
VEZNb3ZlKHRhc2spKQorICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQorICAgICwgbV9j
b2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCiAgICAgLCBtX2Z1bmN0aW9u
SW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKICAgICBzZXRNb2RlKG1vZGUpOwpAQCAtMTYyLDEzICsx
NjMsMTMgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbXBs
ZXRlKGhvbGRMb2NrKG1fbG9jaykpOwogfQogCi12b2lkIHJ1bk9NR1BsYW5Gb3JJbmRleChDb250
ZXh0KiBjb250ZXh0LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQordm9pZCBPTUdQbGFuOjpydW5G
b3JJbmRleChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4KQogewotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvbnRl
eHQtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb250ZXh0LT5tZW1vcnlNb2RlKCkgPT0gY29k
ZUJsb2NrLT5tX2NvZGVCbG9jay0+bW9kZSgpKTsKKyAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVC
bG9jayA9IGluc3RhbmNlLT53YXNtQ29kZUJsb2NrKCk7CisgICAgQVNTRVJUKGluc3RhbmNlLT53
YXNtTWVtb3J5KCktPm1vZGUoKSA9PSBjb2RlQmxvY2subW9kZSgpKTsKIAotICAgIGlmIChjb2Rl
QmxvY2stPm1fY29kZUJsb2NrLT50aWVyVXBDb3VudChmdW5jdGlvbkluZGV4KS5zaG91bGRTdGFy
dFRpZXJVcCgpKSB7Ci0gICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQ
bGFuKGNvbnRleHQtPm1vZHVsZSgpLT5tb2R1bGUoKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2Nr
LT5tX2NvZGVCbG9jay0+bW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAgIGlmIChj
b2RlQmxvY2sudGllclVwQ291bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAoKSkg
eworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5j
ZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+d2FzbU1vZHVsZSgpKSwg
ZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsK
ICAgICAgICAgZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAg
ICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5oCmluZGV4IDcxNjRhOWUuLmI4MDgyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgog
I2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgpAQCAtNDEsMTcg
KzQwLDIwIEBAIG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIE9NR1BsYW4gZmluYWwgOiBwdWJsaWMg
UGxhbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47Ci0gICAgLy8gTm90ZTogQ29t
cGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVy
d2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR1BsYW4oUmVmPE1v
ZHVsZT4sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNr
JiYpOwogCiAgICAgYm9vbCBoYXNXb3JrKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fY29t
cGxldGVkOyB9CiAgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKICAg
ICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQog
CisgICAgc3RhdGljIHZvaWQgcnVuRm9ySW5kZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCk7CisKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVhc29u
IGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KICAgICB1c2lu
ZyBCYXNlOjptX2xvY2s7CiAKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90
IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSBy
ZWZlcmVuY2UgY3ljbGUuCisgICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CisKICAg
ICBib29sIGlzQ29tcGxldGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbXBsZXRlZDsg
fQogICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikgb3ZlcnJp
ZGUKICAgICB7CkBAIC02NSw4ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9mdW5j
dGlvbkluZGV4OwogfTsKIAotdm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCosIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpOwotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVBhZ2VDb3VudC5oCmluZGV4IGU0Mzg0N2MuLmVmMDVmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CiAgICAgfQorICAgIAor
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNWYWxpZCht
X3BhZ2VDb3VudCk7CisgICAgfQogCiAgICAgc3RhdGljIFBhZ2VDb3VudCBmcm9tQnl0ZXModWlu
dDY0X3QgYnl0ZXMpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
CmluZGV4IGJhMjdjZjkuLmQwNjNjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjksOCArMjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1
ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtNTEsMjAgKzQ5
LDI3IEBAIG5hbWVzcGFjZSBXYXNtUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZl
cmJvc2UgPSBmYWxzZTsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4gaW5mbywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBj
b250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFz
aywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dh
c21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9tb2R1bGVJbmZvcm1hdGlv
bihXVEZNb3ZlKGluZm8pKQorICAgICwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoV1RGTW92ZShj
cmVhdGVFbWJlZGRlcldyYXBwZXIpKQorICAgICwgbV90aHJvd1dhc21FeGNlcHRpb24odGhyb3dX
YXNtRXhjZXB0aW9uKQogICAgICwgbV9zb3VyY2UobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNl
LmRhdGEoKSkKICAgICAsIG1fc291cmNlTGVuZ3RoKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJj
ZS5zaXplKCkpCiB7Ci0gICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KHZtLCBXVEZNb3ZlKHRhc2spKSk7CisgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKIH0KIAotUGxhbjo6UGxhbihWTSog
dm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQ29tcGxldGlv
blRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5m
b3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4oY29udGV4
dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgbnVsbHB0ciwgbnVsbHB0cikKK3sKK30K
KworUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNp
emVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IG1fbW9kdWxl
SW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhf
dD4oKSkpKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291
cmNlTGVuZ3RoKQogewotICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cih2bSwgV1RGTW92ZSh0YXNrKSkpOworICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKIHZvaWQgUGxhbjo6cnVu
Q29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKQEAgLTcyLDE4ICs3NywxOCBA
QCB2b2lkIFBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCiAg
ICAgQVNTRVJUKGlzQ29tcGxldGUoKSAmJiAhaGFzV29yaygpKTsKIAogICAgIGZvciAoYXV0byYg
dGFzayA6IG1fY29tcGxldGlvblRhc2tzKQotICAgICAgICB0YXNrLnNlY29uZC0+cnVuKHRhc2su
Zmlyc3QsICp0aGlzKTsKKyAgICAgICAgdGFzay5zZWNvbmQtPnJ1bigqdGhpcyk7CiAgICAgbV9j
b21wbGV0aW9uVGFza3MuY2xlYXIoKTsKICAgICBtX2NvbXBsZXRlZC5ub3RpZnlBbGwoKTsKIH0K
IAotdm9pZCBQbGFuOjphZGRDb21wbGV0aW9uVGFzayhWTSYgdm0sIENvbXBsZXRpb25UYXNrJiYg
dGFzaykKK3ZvaWQgUGxhbjo6YWRkQ29tcGxldGlvblRhc2soQ29udGV4dCogY29udGV4dCwgQ29t
cGxldGlvblRhc2smJiB0YXNrKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAg
ICAgaWYgKCFpc0NvbXBsZXRlKCkpCi0gICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcigmdm0sIFdURk1vdmUodGFzaykpKTsKKyAgICAgICAgbV9jb21wbGV0aW9u
VGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKICAg
ICBlbHNlCi0gICAgICAgIHRhc2stPnJ1bigmdm0sICp0aGlzKTsKKyAgICAgICAgdGFzay0+cnVu
KCp0aGlzKTsKIH0KIAogdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCkBAIC05NCwxOSAr
OTksMTkgQEAgdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCiAgICAgfQogfQogCi1ib29s
IFBsYW46OnRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJiB2bSkKK2Jvb2wgUGxhbjo6dHJ5
UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChDb250ZXh0JiBjb250ZXh0KQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewot
ICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNrIHRvIG5vdCBoYXZl
IGEgdm0uCisgICAgICAgIC8vIFdlIGFsbG93IHRoZSBmaXJzdCBjb21wbGV0aW9uIHRhc2sgdG8g
bm90IGhhdmUgYSBDb250ZXh0LgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9j
b21wbGV0aW9uVGFza3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBBU1NFUlQobV9jb21wbGV0
aW9uVGFza3NbaV0uZmlyc3QpOwogICAgIH0KIAogICAgIGJvb2wgcmVtb3ZlZEFueVRhc2tzID0g
ZmFsc2U7Ci0gICAgbV9jb21wbGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25z
dCBzdGQ6OnBhaXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4mIHBhaXIpIHsKLSAgICAgICAgYm9vbCBz
aG91bGRSZW1vdmUgPSBwYWlyLmZpcnN0ID09ICZ2bTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5y
ZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNvbnN0IHN0ZDo6cGFpcjxDb250ZXh0KiwgQ29tcGxldGlv
blRhc2s+JiBwYWlyKSB7CisgICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFpci5maXJzdCA9
PSAmY29udGV4dDsKICAgICAgICAgcmVtb3ZlZEFueVRhc2tzIHw9IHNob3VsZFJlbW92ZTsKICAg
ICAgICAgcmV0dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oCmluZGV4IDEwZjhhMWIuLjdhMDdiZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uaApAQCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNp
bmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgog
I2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4K
ICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgpAQCAtMzksMjUgKzM5LDI3IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgQ2FsbExpbmtJbmZvOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1j
bGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKIAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29u
dGV4dDsKKwogY2xhc3MgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7
CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSosIFBsYW4mKTsKKyAg
ICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFBsYW4mKTsKICAgICB1c2luZyBDb21wbGV0aW9u
VGFzayA9IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwotICAgIHN0YXRpYyBDb21w
bGV0aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxi
YWNrVHlwZT4oW10oVk0qLCBQbGFuJikgeyB9KTsgfQotICAgIFBsYW4oVk0qLCBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKKworICAgIHN0YXRpYyBDb21wbGV0aW9u
VGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlw
ZT4oW10oUGxhbiYpIHsgfSk7IH0KKyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3Jt
YXRpb24+LCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dX
YXNtRXhjZXB0aW9uKTsKKyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+
LCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hv
dWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVs
ZSBlLmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQ
bGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUGxhbihDb250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVfdCwg
Q29tcGxldGlvblRhc2smJik7CiAgICAgdmlydHVhbCBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigp
OwogCiAgICAgLy8gSWYgeW91IGd1YXJhbnRlZSB0aGUgb3JkZXJpbmcgaGVyZSwgeW91IGNhbiBy
ZWx5IG9uIEZJRk8gb2YgdGhlCiAgICAgLy8gY29tcGxldGlvbiB0YXNrcyBiZWluZyBjYWxsZWQu
Ci0gICAgdm9pZCBhZGRDb21wbGV0aW9uVGFzayhWTSYsIENvbXBsZXRpb25UYXNrJiYpOworICAg
IHZvaWQgYWRkQ29tcGxldGlvblRhc2soQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogCiAg
ICAgdm9pZCBzZXRNb2RlKE1lbW9yeU1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CiAgICAg
TWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkBAIC03Miw3ICs3NCw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgaXQgY2FuY2VsbGVkIHRoZSBwbGFuLgotICAgIGJvb2wgdHJ5UmVtb3ZlVk1B
bmRDYW5jZWxJZkxhc3QoVk0mKTsKKyAgICBib29sIHRyeVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJ
Zkxhc3QoQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBydW5Db21wbGV0aW9uVGFz
a3MoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKQEAgLTgzLDcgKzg1LDEwIEBAIHByb3RlY3RlZDoK
IAogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKIAotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRh
c2tzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiwgMT4g
bV9jb21wbGV0aW9uVGFza3M7CisKKyAgICBDcmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVF
bWJlZGRlcldyYXBwZXI7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0
aW9uIHsgbnVsbHB0ciB9OwogCiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAgY29u
c3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2lnbmF0dXJlLmNwcAppbmRleCA4YjYwMGVkLi42YTQyZDUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTAgQEAKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2lnbmF0dXJlLmgKaW5kZXggZTQxM2IyNS4uYWFjZWQ1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw4ICs0Myw2IEBAIGNsYXNzIFByaW50
U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNt
IHsKIAogdXNpbmcgU2lnbmF0dXJlQXJnQ291bnQgPSB1aW50MzJfdDsKQEAgLTE1Niw3ICsxNTQs
NyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFz
aD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCi0vLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQg
c2hhcmVkIGJ5IFZNcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRoaXMg
aXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5kIG11
c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4KKy8v
IFNpZ25hdHVyZSBpbmZvcm1hdGlvbiBpcyBoZWxkIGdsb2JhbGx5IGFuZCBzaGFyZWQgYnkgdGhl
IGVudGlyZSBwcm9jZXNzIHRvIGFsbG93IGFsbCBzaWduYXR1cmVzIHRvIGJlIHVuaXF1ZS4gVGhp
cyBpcyByZXF1aXJlZCB3aGVuIHdhc20gY2FsbHMgYW5vdGhlciB3YXNtIGluc3RhbmNlLCBhbmQg
bXVzdCB3b3JrIHdoZW4gbW9kdWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgVk1zLgog
Ly8gTm90ZTogc2lnbmF0dXJlcyBhcmUgbmV2ZXIgcmVtb3ZlZCBiZWNhdXNlIHRoYXQgd291bGQg
cmVxdWlyZSBhY2NvdW50aW5nIGZvciBhbGwgV2ViQXNzZW1ibHkuTW9kdWxlIGFuZCB3aGljaCBz
aWduYXR1cmVzIHRoZXkgdXNlLiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBpcyBi
b3VuZGVkLCBhbmQgaXNuJ3Qgd29ydGggdGhlIGNvdW50aW5nIG92ZXJoZWFkLiBXZSBjb3VsZCBj
bGVhciBldmVyeXRoaW5nIHdoZW4gd2UgcmVhY2ggemVybyBvdXRzdGFuZGluZyBXZWJBc3NlbWJs
eS5Nb2R1bGUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMzcK
IGNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
aWduYXR1cmVJbmZvcm1hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzU0MDllCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApAQCAt
MCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUuaCIKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworUmVmUHRyPFRhYmxlPiBUYWJsZTo6
Y3JlYXRlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0p
Cit7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgZmFzdE1hbGxvYyhzaXplb2Yo
VGFibGUpKSkgVGFibGUoaW5pdGlhbCwgbWF4aW11bSkpOworfQorCitUYWJsZTo6flRhYmxlKCkK
K3sKK30KKworVGFibGU6OlRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IG1heGltdW0pCit7CisgICAgbV9zaXplID0gaW5pdGlhbDsKKyAgICBtX21heGltdW0g
PSBtYXhpbXVtOworICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3NpemUpKTsKKyAgICBBU1NFUlQo
IW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7CisKKyAgICAvLyBGSVhNRTogSXQg
bWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBz
cGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCisgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBk
b2luZyB0aGF0LgorICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVu
Y3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nh
c3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICBtX2luc3RhbmNlcyA9IE1hbGxvY1B0cjxKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqPjo6bWFsbG9jKHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKSAq
IHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBX
YXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQo
KVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8v
IFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBtX2luc3RhbmNlcy5n
ZXQoKVtpXSA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBU
YWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKK3sKKyAgICBpZiAoZGVsdGEgPT0gMCkKKyAgICAg
ICAgcmV0dXJuIHNpemUoKTsKKworICAgIHVzaW5nIENoZWNrZWQgPSBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz47CisgICAgQ2hlY2tlZCBuZXdTaXplQ2hlY2tlZCA9IHNpemUoKTsK
KyAgICBuZXdTaXplQ2hlY2tlZCArPSBkZWx0YTsKKyAgICB1aW50MzJfdCBuZXdTaXplOworICAg
IGlmIChuZXdTaXplQ2hlY2tlZC5zYWZlR2V0KG5ld1NpemUpID09IENoZWNrZWRTdGF0ZTo6RGlk
T3ZlcmZsb3cpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAobWF4aW11
bSgpICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBhdXRvIGNoZWNrZWRHcm93ID0gWyZdIChhdXRvJiBjb250YWluZXIpIHsK
KyAgICAgICAgQ2hlY2tlZCByZWFsbG9jU2l6ZUNoZWNrZWQgPSBuZXdTaXplQ2hlY2tlZDsKKyAg
ICAgICAgcmVhbGxvY1NpemVDaGVja2VkICo9IHNpemVvZigqY29udGFpbmVyLmdldCgpKTsKKyAg
ICAgICAgdWludDMyX3QgcmVhbGxvY1NpemU7CisgICAgICAgIGlmIChyZWFsbG9jU2l6ZUNoZWNr
ZWQuc2FmZUdldChyZWFsbG9jU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29udGFpbmVyLnJlYWxsb2MocmVhbGxv
Y1NpemUpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyAr
K2kpCisgICAgICAgICAgICBuZXcgKCZjb250YWluZXIuZ2V0KClbaV0pIHN0ZDo6cmVtb3ZlX3Jl
ZmVyZW5jZV90PGRlY2x0eXBlKCpjb250YWluZXIuZ2V0KCkpPigpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworCisgICAgaWYgKCFjaGVja2VkR3JvdyhtX2Z1bmN0aW9ucykpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFjaGVja2VkR3JvdyhtX2luc3RhbmNl
cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBtX3NpemUgPSBuZXdTaXpl
OworCisgICAgcmV0dXJuIG5ld1NpemU7Cit9CisKK3ZvaWQgVGFibGU6OmNsZWFyRnVuY3Rpb24o
dWludDMyX3QgaW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOwor
ICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsK
KyAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdh
c206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBp
bGVkIGNvZGUuCisgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXhdID0gbnVsbHB0cjsKK30KKwor
dm9pZCBUYWJsZTo6c2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgsIENhbGxhYmxlRnVuY3Rpb24g
ZnVuY3Rpb24sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9
IGZ1bmN0aW9uOworICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IGluc3RhbmNlOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6VGFibGUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwOGVjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRl
ICJXYXNtTGltaXRzLmgiCisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTsgLy8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5zdGFuY2UgaHR0cHM6
Ly93ZWJraXQub3JnL2IvMTc3NDcyCisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgVGFibGUg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGFibGU+IHsKK3B1YmxpYzoKKyAgICBlbnVt
IGNsYXNzIENyZWF0ZUZhaWwgeworICAgICAgICBJbnZhbGlkU2l6ZSwKKyAgICB9OworICAgIHN0
YXRpYyBSZWZQdHI8VGFibGU+IGNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtYXhpbXVtKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UYWJsZSgpOwor
CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4aW11bTsgfQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
KyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VO
VVNFRF9SRVRVUk47CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lk
IHNldEZ1bmN0aW9uKHVpbnQzMl90LCBDYWxsYWJsZUZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqKTsgLy8gRklYTUUgbWFrZSB0aGlzIFdhc206Okluc3RhbmNlLiBodHRwczovL3dlYmtp
dC5vcmcvYi8xNzc0NzIKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBtX3NpemUpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkZ1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwg
bV9mdW5jdGlvbnMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlcygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9pbnN0YW5jZXMpOyB9CisKKyAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBzaXplIDwgbWF4
VGFibGVFbnRyaWVzOyB9CisKK3ByaXZhdGU6CisgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBtX21heGltdW07CisgICAgdWludDMyX3QgbV9zaXplOworICAgIE1hbGxvY1B0cjxD
YWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICAvLyBjYWxsX2luZGlyZWN0IG5lZWRz
IHRvIGRvIGFuIEluc3RhbmNlIGNoZWNrIHRvIHBvdGVudGlhbGx5IGNvbnRleHQgc3dpdGNoIHdo
ZW4gY2FsbGluZyBhIGZ1bmN0aW9uIHRvIGFub3RoZXIgaW5zdGFuY2UuIFdlIGNhbiBob2xkIHJh
dyBwb2ludGVycyB0byBJbnN0YW5jZSBoZXJlIGJlY2F1c2UgdGhlIGVtYmVkZGVyIGVuc3VyZXMg
dGhhdCBUYWJsZSBrZWVwcyBhbGwgdGhlIGluc3RhbmNlcyBhbGl2ZS4gV2UgY291bGRuJ3QgaG9s
ZCBhIFJlZiBoZXJlIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgY3ljbGVzLgorICAgIE1hbGxvY1B0
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPiBtX2luc3RhbmNlczsgLy8gRklYTUUgbWFrZSB0aGlz
IGEgV2FzbTo6SW5zdGFuY2UuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKaW5kZXggOTc3YjAxYi4u
YzIzNTk4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5r
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAg
LTI5LDExICsyOSw5IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiSGVhcENl
bGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iu
aCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKQEAgLTQ4LDQ2ICs0NiwxOCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9y
KGNvbnN0IEFic3RyYWN0TG9ja2VyJgogCiAgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVy
ZSBtdXN0IG1vdmUgRXhjZXB0aW9uVHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYmVmb3JlIGp1
bXBpbmcgaGVyZS4KICAgICAvLyBXZSdyZSBhbGxvd2VkIHRvIHVzZSB0ZW1wIHJlZ2lzdGVycyBo
ZXJlLiBXZSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIGNhbGxlZSBzYXZlcy4KLSAgICBqaXQubG9h
ZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQ29udGV4dDo6b2Zmc2V0
T2ZWTSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0
SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxs
KCk7CiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGppdC5icmVh
a3BvaW50KCk7IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAotICAgIHZvaWQqICgqdGhy
b3dXYXNtRXhjZXB0aW9uKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBXYXNtOjpD
b250ZXh0KikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUs
IFdhc206OkNvbnRleHQqIHdhc21Db250ZXh0KSAtPiB2b2lkKiB7Ci0gICAgICAgIFZNKiB2bSA9
IHdhc21Db250ZXh0LT52bSgpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotCi0gICAgICAgICAgICBK
U09iamVjdCogZXJyb3I7IAotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6
U3RhY2tPdmVyZmxvdykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihleGVjLCBnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGVycm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGV4ZWMsICp2
bSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNt
OjplcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKLSAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOwotICAgICAgICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cp
OwotICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKLSAgICAgICAg
Ly8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5k
IGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKQotICAgICAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0
aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5v
dCByZXF1aXJlCi0gICAgICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNv
bnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24K
LSAgICAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBp
bmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKLSAgICAgICAgLy8gdG8gdGhl
IGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMg
dGVycmlibGUgaGFjay4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDQ0MAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtD
YWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih3YXNtQ29udGV4
dC0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkpOwotICAgICAgICByZXR1cm4gdm0tPnRhcmdldE1h
Y2hpbmVQQ0ZvclRocm93OwotICAgIH07Ci0KKyAgICBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uID0gVGh1bmtzOjpzaW5nbGV0b24oKS50aHJvd1dhc21FeGNlcHRpb24oKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCh0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyKHRocm93V2FzbUV4Y2VwdGlvbikpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpKTsKIH0KIApAQCAtMTE5LDgg
Kzg5LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5l
cmF0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogI2VuZGlmCiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJz
VG9TcGlsbCwgZXh0cmFQYWRkaW5nQnl0ZXMpOwogCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChH
UFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJ1bk9NR1BsYW5Gb3JJbmRleCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHR5cGVkZWYgdm9pZCAoKlJ1bikoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiwgdWludDMyX3QpOworICAgIFJ1biBydW4gPSBPTUdQbGFuOjpydW5Gb3JJ
bmRleDsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihydW4pKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQu
Y2FsbChHUFJJbmZvOjphcmd1bWVudEdQUjIpOwogCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3Bp
bGwsIFJlZ2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNl
cnZhdGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMpOwpAQCAtMTQyLDYgKzExNCwxOSBAQCBUaHVua3Mm
IFRodW5rczo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gKnRodW5rczsKIH0KIAordm9pZCBUaHVu
a3M6OnNldFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAvLyBU
aGUgdGh1bmtzIGFyZSB1bmlxdWUgZm9yIHRoZSBlbnRpcmUgcHJvY2VzcywgdGhlcmVmb3JlIGNo
YW5naW5nIHRoZSB0aHJvd2luZyBmdW5jdGlvbiBjaGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBvZiBX
ZWJBc3NlbWJseS4KKyAgICBSRUxFQVNFX0FTU0VSVCghbV90aHJvd1dhc21FeGNlcHRpb24gfHwg
bV90aHJvd1dhc21FeGNlcHRpb24gPT0gdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBtX3Rocm93
V2FzbUV4Y2VwdGlvbiA9IHRocm93V2FzbUV4Y2VwdGlvbjsKK30KKworVGhyb3dXYXNtRXhjZXB0
aW9uIFRodW5rczo6dGhyb3dXYXNtRXhjZXB0aW9uKCkKK3sKKyAgICByZXR1cm4gbV90aHJvd1dh
c21FeGNlcHRpb247Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6OnN0dWIoVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3Mu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBkZjE0Y2Ey
Li41Mjk3NjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1
bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0y
OCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTQyLDYgKzQzLDkgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgICBzdGF0aWMgVGh1bmtzJiBzaW5nbGV0b24o
KTsKIAorICAgIHZvaWQgc2V0VGhyb3dXYXNtRXhjZXB0aW9uKFRocm93V2FzbUV4Y2VwdGlvbik7
CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbigpOworCiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWIoVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBzdHViKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1bmtHZW5lcmF0b3IpOwog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IpOwpA
QCAtNTAsNiArNTQsNyBAQCBwcml2YXRlOgogICAgIFRodW5rcygpID0gZGVmYXVsdDsKIAogICAg
IEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9zdHViczsK
KyAgICBUaHJvd1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRyIH07
CiAgICAgTG9jayBtX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVdvcmtsaXN0LmNwcAppbmRleCA5YzViNjg0Li4yZmUxMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAKQEAgLTE3MiwxMyArMTczLDEzIEBAIHZvaWQgV29ya2xp
c3Q6OmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYgcGxhbikKICAgICBwbGFuLndhaXRG
b3JDb21wbGV0aW9uKCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZN
JiB2bSkKK3ZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRleHQoQ29udGV4dCYgY29u
dGV4dCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBWZWN0b3I8UXVl
dWVFbGVtZW50PiBlbGVtZW50czsKICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIFF1ZXVlRWxlbWVudCBlbGVtZW50ID0gbV9xdWV1ZS5kZXF1ZXVlKCk7Ci0gICAgICAg
IGJvb2wgZGlkQ2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFz
dCh2bSk7CisgICAgICAgIGJvb2wgZGlkQ2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVD
b250ZXh0QW5kQ2FuY2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICBpZiAoIWRpZENhbmNlbCkK
ICAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICB9CkBA
IC0xODgsNyArMTg5LDcgQEAgdm9pZCBXb3JrbGlzdDo6c3RvcEFsbFBsYW5zRm9yVk0oVk0mIHZt
KQogCiAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKICAgICAgICAgaWYgKHRo
cmVhZC0+ZWxlbWVudC5wbGFuKSB7Ci0gICAgICAgICAgICBib29sIGRpZENhbmNlbCA9IHRocmVh
ZC0+ZWxlbWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7CisgICAgICAg
ICAgICBib29sIGRpZENhbmNlbCA9IHRocmVhZC0+ZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250
ZXh0QW5kQ2FuY2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGRpZENhbmNlbCkg
ewogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRl
YWRsb2NraW5nIHNpbmNlIHRoZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjaGVja2luZyBm
b3IgYSBuZXcgcGxhbiBhbmQgbXVzdCBob2xkIHRoZSBsb2NrIHRvIGRvIHNvLgogICAgICAgICAg
ICAgICAgIHRocmVhZC0+c3luY2hyb25pemUud2FpdCgqbV9sb2NrKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKaW5kZXggNmI2OTM1Mi4uNzQ4YTllYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTI3LDggKzI3LDYgQEAK
IAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0KICNpbmNsdWRl
IDxxdWV1ZT4KIAogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KQEAgLTM3LDEwICsz
NSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKLQog
bmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIFBsYW47CiAKIGNsYXNz
IFdvcmtsaXN0IHsKQEAgLTUwLDEzICs0NywxMCBAQCBwdWJsaWM6CiAgICAgfldvcmtsaXN0KCk7
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGVucXVldWUoUmVmPFBsYW4+KTsKLSAgICB2
b2lkIHN0b3BBbGxQbGFuc0ZvclZNKFZNJik7CisgICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JDb250
ZXh0KENvbnRleHQmKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFu
U3luY2hyb25vdXNseShQbGFuJik7CiAKLSAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VE
ZWZlcnJlZCosIFBsYW4qKTsKLSAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJl
ZCosIFBsYW4qKTsKLQogICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgewogICAgICAgICBTaHV0ZG93
biwKICAgICAgICAgU3luY2hyb25vdXMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNzEwOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNt
LmNwcApAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVG9XYXNt
LmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMu
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwor
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihD
b21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUs
IHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29t
cGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKKworICAgIGF1dG8gcmVzdWx0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworICAgIGppdC5lbWl0RnVuY3Rpb25Q
cm9sb2d1ZSgpOworCisgICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKKyAgICBqaXQuc3Rv
cmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUg
PSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOworCisgICAg
Y29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKTsKKyAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2Rl
KTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCB0b1NhdmVTaXplID0gdG9T
YXZlLm51bWJlck9mU2V0R1BScygpOworICAgIC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUg
c2F2ZXMuCisgICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKKyAgICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUp
OworI2VuZGlmCisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRv
U2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJC
YXNlZCk7CisgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdp
c3RlcnNUb1NwaWxsOworCisgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNU
b1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7CisgICAgdG90YWxGcmFtZVNpemUgKz0gV2Fz
bUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOworICAgIHRvdGFsRnJhbWVT
aXplIC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICB1bnNpZ25lZCBudW1HUFJzID0g
MDsKKyAgICB1bnNpZ25lZCBudW1GUFJzID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2ln
bmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBj
YXNlIFdhc206OkkzMjoKKyAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNp
emUgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6
CisgICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2Zw
ckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2
b2lkKik7CisgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKKyAgICBqaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2Ugc2F2ZSBhbGwg
dGhlc2UgcmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KKyAg
ICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2gu
IFRoYXQgc2FpZCwKKyAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVt
b3J5LCBzbyBpdCdzIG5vdCByZWFsbHkKKyAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUg
Y2FzZSB0aGF0IHRoZXkgZG9uJ3QuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBy
ZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJl
Z0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRP
ZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQorCisg
ICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0
SW5zdGFuY2VQb2ludGVyOworCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mg
Y2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKKyAgICAgICAgbnVtR1BScyA9IDA7CisgICAgICAgIG51bUZQUnMgPSAwOwor
ICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBzZXQgdGhlIHBpbm5lZCByZWdpc3RlcnMgYWZ0ZXIg
dGhpcy4gU28KKyAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGlzIGFzIGEgc2NyYXRjaCBmb3Igbm93
IHNpbmNlIHdlIHNhdmVkIGl0IGFib3ZlLgorICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHBp
bm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0
ID0gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
KworICAgICAgICAvLyB2bUVudHJ5VG9XYXNtIHBhc3NlcyBXYXNtOjpDb250ZXh0KidzIGluc3Rh
bmNlIGFzIHRoZSBmaXJzdCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCisgICAgICAgIC8vIG5vdCB1
c2luZyBmYXN0IFRMUyB0byBob2xkIHRoZSBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlLgorICAg
ICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09m
ZnNldCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgICAgICAgICAganNPZmZzZXQgKz0g
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHB0cmRpZmZfdCB3
YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9p
ZCopOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChp
KSkgeworICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBjYXNlIFdhc206
Okk2NDoKKyAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1
cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNp
emVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFy
Z3NbbnVtR1BSc10uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dw
ckFyZ3NbbnVtR1BSc10uZ3ByKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICArK251bUdQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdh
c206OkYzMjoKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlm
IChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpG
MzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcp
OworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVl
RnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZy
YW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50
KGkpID09IFdhc206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNl
dCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
RG91YmxlKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnBy
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUZQUnM7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9
IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1
c2VGYXN0VExTKCkpCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Mod2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
Zldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAg
ICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKKyAgICAgICAgICAgIEFTU0VS
VCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVz
IHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMg
cmVsYXRpdmUgdG8gMC4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3Nb
MF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBz
aXplUmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6
TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgfQorCisgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7
CisgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8u
aW1wb3J0RnVuY3Rpb25Db3VudCgpOworICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBp
bmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgaml0LmFkZExpbmtUYXNrKFt1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5k
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFj
ZSB9KTsKKyAgICB9KTsKKworCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdB
dE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0
T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNl
dCgpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7CisgICAgfQorCisgICAgc3dpdGNoIChz
aWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGpp
dC5tb3ZlRmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICBq
aXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1RvV2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Yjk4
ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldhc21CM0lSR2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8bWVtb3J5Pgor
CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4
dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFz
c2VtYmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHku
Y3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHkuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKcmVuYW1lIHRvIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAppbmRleCAwZmFmOTc3Li5jNTc4ZGYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCkBAIC0y
OCwzMSArMjgsMzEgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU09i
amVjdC5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKLSNpbmNs
dWRlICJqcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIgotI2lu
Y2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVRhYmxlLmgiCi0j
aW5jbHVkZSAianMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1
ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUu
aCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5j
bHVkZSAianMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9X
ZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIKLSNpbmNs
dWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25z
dHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBl
LmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVk
ZSAianMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5
Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUxp
bmtFcnJvckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90
b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5
cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JD
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBl
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmOTFlNmM3
Li4wODI1MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5
LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIldhc21CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2Fz
bVRvSlMuaCIKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC00NCw3ICs0NCw3
IEBAIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7ICJX
ZWJBc3NlbWJseUNvZGVCbG9jayIsIG51bGxwCiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiBj
b2RlQmxvY2ssIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSkKIHsKICAgICBjb25zdCBXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0gICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNp
emUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sodm0sIFdURk1vdmUoY29kZUJsb2NrKSwgbW9kdWxlSW5mb3JtYXRpb24pOwor
ICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3Zl
KGNvZGVCbG9jayksIG1vZHVsZUluZm9ybWF0aW9uKTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtLCBtb2R1bGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01OCw3ICs1OCw3IEBA
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBS
ZWY8V2FzbTo6Q29kZUJsb2NrPiYmIGNvCiAgICAgbV93YXNtVG9KU0V4aXRTdHVicy5yZXNlcnZl
Q2FwYWNpdHkobV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9jb2RlQmxvY2stPmZ1bmN0
aW9uSW1wb3J0Q291bnQoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlcy5hdChpbXBvcnRJbmRleCk7Ci0gICAgICAgIGF1dG8gYmluZGluZyA9
IFdhc206Ondhc21Ub0pzKCZ2bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1w
b3J0SW5kZXgpOworICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9KUygmdm0sIG1f
Y2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKICAgICAgICAgaWYg
KFVOTElLRUxZKCFiaW5kaW5nKSkgewogICAgICAgICAgICAgc3dpdGNoIChiaW5kaW5nLmVycm9y
KCkpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6QmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5
OgpAQCAtNjgsNyArNjgsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBtX3dhc21U
b0pTRXhpdFN0dWJzLnVuY2hlY2tlZEFwcGVuZChiaW5kaW5nLnZhbHVlKCkpOwotICAgICAgICBp
bXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBv
cnRJbmRleF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIG1fY29kZUJsb2Nr
LT5pbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRT
dHVic1tpbXBvcnRJbmRleF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogfQog
CkBAIC04MywxMSArODMsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqPihj
ZWxsKS0+SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soKTsK
IH0KIAotYm9vbCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppc1NhZmVUb1J1bihKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBtZW1vcnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1Nh
ZmVUb1J1bihtZW1vcnktPm1lbW9yeSgpLm1vZGUoKSk7Ci19Ci0KIHZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jazo6Y2xlYXJKU0NhbGxJQ3MoVk0mIHZtKQogewogICAgIGZvciAoYXV0byBpdGVy
ID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCmlu
ZGV4IDUyNzAzZjguLmFiYjhjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTY0LDM5ICs2NCwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiAmdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsgfQotICAgIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgV2Fz
bTo6Q29kZUJsb2NrJiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQog
Ci0gICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CisgICAg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxl
Kik7CiAKLSAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25j
ZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgotCi0gICAgV2FzbTo6Q2FsbGVlJiBq
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKLSAgICAgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQotICAgIFdhc206Oldhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQo
cnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0g
ICAgfQotCi0gICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbVRvSnNDYWxs
U3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChydW5uYWJsZSgpKTsKLSAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0
SW5kZXgpOwotICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNt
VG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zm
c2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGltcG9ydEluZGV4OwotICAgIH0K
LQotICAgIFdhc206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2su
Z2V0KCk7IH0KLQogICAgIHZvaWQgY2xlYXJKU0NhbGxJQ3MoVk0mKTsKIAogICAgIGJvb2wgcnVu
bmFibGUoKSBjb25zdCB7IHJldHVybiAhbV9lcnJvck1lc3NhZ2U7IH0KQEAgLTExNCwyMSArODcs
NiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZkltcG9ydFN0dWJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6ZW9mKEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXpl
KENoZWNrZWQ8c2l6ZV90PiBmdW5jdGlvbkltcG9ydENvdW50KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIChvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogZnVuY3Rpb25JbXBv
cnRDb3VudCkudW5zYWZlR2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZComIGltcG9ydFdhc21Ub0pT
U3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAqYml0d2lz
ZV9jYXN0PHZvaWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0
V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KSk7Ci0gICAgfQotCiAgICAgY2xhc3MgVW5jb25kaXRp
b25hbEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewogICAg
ICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CiAgICAgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwCmluZGV4IGM3N2ZhMDUuLmM1MmVlYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtNDks
MTIgKzQ5LDE3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNp
Z25lZCBudW1JbXBvcnRGdW5jdGlvbnMpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1J
bXBvcnRGdW5jdGlvbnMsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiAg
ICAgLCBtX3ZtKCZ2bSkKKyAgICAsIG1fd2FzbU1vZHVsZShtX2luc3RhbmNlLT5tb2R1bGUoKSkK
KyAgICAsIG1fd2FzbVRhYmxlKG1faW5zdGFuY2UtPm1fdGFibGUuZ2V0KCkpCisgICAgLCBtX2ds
b2JhbHMobV9pbnN0YW5jZS0+bV9nbG9iYWxzLmdldCgpKQogICAgICwgbV9udW1JbXBvcnRGdW5j
dGlvbnMobnVtSW1wb3J0RnVuY3Rpb25zKQogewotICAgIG1lbXNldChpbXBvcnRGdW5jdGlvbnMo
KSwgMCwgbV9udW1JbXBvcnRGdW5jdGlvbnMgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PikpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUltcG9ydEZ1bmN0aW9uczsg
KytpKQorICAgICAgICBuZXcgKGltcG9ydEZ1bmN0aW9uSW5mbyhpKSkgSW1wb3J0RnVuY3Rpb25J
bmZvKCk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCkKQEAgLTYzLDEyICs2OCwxMCBAQCB2b2lkIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBtb2R1bGUsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAogICAgIG1f
bW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKLSAgICBjb25zdCBzaXplX3QgZXh0cmFNZW1v
cnlTaXplID0gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoKTsKLSAgICBtX2dsb2JhbHMgPSBNYWxsb2NQ
dHI8dWludDY0X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKLSAgICBoZWFwKCktPnJlcG9y
dEV4dHJhTWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7Ci0KICAgICBtX21vZHVsZU5h
bWVzcGFjZU9iamVjdC5zZXQodm0sIHRoaXMsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAg
bV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBtb2R1bGUtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBoZWFw
KCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxs
b2NhdGVkKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCkBAIC04OCw0MCArOTEsNDQgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9j
YWxsZWUpOwotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3Qt
Pmdsb2JhbE1lbW9yeUJ5dGVTaXplKCkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKHRoaXNPYmplY3QtPm1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0
aW9uczsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5j
dGlvbnMoKVtpXSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1
bmN0aW9uSW5mbyhpKS0+aW1wb3J0RnVuY3Rpb24pOyAvLyBUaGlzIGFsc28ga2VlcHMgdGhlIGZ1
bmN0aW9ucycgSlNXZWJBc3NlbWJseUluc3RhbmNlIGFsaXZlLgogfQogCiB2b2lkIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
UmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrKQogeworICAgIG1faW5zdGFuY2Ut
PmZpbmFsaXplQ3JlYXRpb24od2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOworICAgIG1fd2FzbUNv
ZGVCbG9jayA9IHdhc21Db2RlQmxvY2sucHRyKCk7CisKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXdhc21Db2RlQmxvY2stPnJ1bm5hYmxlKCkp
IHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5r
RXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vy
cm9yU3RydWN0dXJlKCksIHdhc21Db2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVCh3YXNtQ29kZUJsb2NrLT5pc1Nh
ZmVUb1J1bihtZW1vcnlNb2RlKCkpKTsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBtb2R1bGUoKS0+Y29kZUJsb2NrKG1lbW9yeU1vZGUoKSk7Ci0gICAgaWYgKGNvZGVC
bG9jaykgeworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGpzQ29kZUJsb2NrID0gbV9tb2R1
bGUtPmNvZGVCbG9jayhtZW1vcnlNb2RlKCkpOworICAgIGlmIChqc0NvZGVCbG9jaykgewogICAg
ICAgICAvLyBBIENvZGVCbG9jayBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxlZC4gSWYg
c28sIGl0IG1lYW5zCiAgICAgICAgIC8vIHRoYXQgdGhlIENvZGVCbG9jayB3ZSBhcmUgdHJ5aW5n
IHRvIGNvbXBpbGUgbXVzdCBiZSB0aGUgc2FtZQogICAgICAgICAvLyBiZWNhdXNlIHdlIHdpbGwg
bmV2ZXIgY29tcGlsZSBhIENvZGVCbG9jayBhZ2FpbiBvbmNlIGl0J3MKICAgICAgICAgLy8gcnVu
bmFibGUuCi0gICAgICAgIEFTU0VSVCgmY29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29k
ZUJsb2NrLnB0cigpKTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxv
Y2spOworICAgICAgICBBU1NFUlQoJmpzQ29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNtQ29k
ZUJsb2NrLnB0cigpKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBqc0NvZGVC
bG9jayk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6Y3JlYXRlKHZtLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSwgbV9tb2R1bGUuZ2V0
KCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAg
ICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtFcnJv
clN0cnVjdHVyZSgpLCBjb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIGpzQ29k
ZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHdhc21D
b2RlQmxvY2spLCBtX21vZHVsZS5nZXQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghanNDb2Rl
QmxvY2stPnJ1bm5hYmxlKCkpKSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwganNDb2RlQmxvY2stPmVycm9y
TWVzc2FnZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9j
b2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwotICAgICAgICBtb2R1bGUoKS0+c2V0
Q29kZUJsb2NrKHZtLCBtZW1vcnlNb2RlKCksIGNvZGVCbG9jayk7CisgICAgICAgIG1fY29kZUJs
b2NrLnNldCh2bSwgdGhpcywganNDb2RlQmxvY2spOworICAgICAgICBtX21vZHVsZS0+c2V0Q29k
ZUJsb2NrKHZtLCBtZW1vcnlNb2RlKCksIGpzQ29kZUJsb2NrKTsKICAgICB9CiAKICAgICBhdXRv
KiBtb2R1bGVSZWNvcmQgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21vZHVs
ZU5hbWVzcGFjZU9iamVjdC0+bW9kdWxlUmVjb3JkKCkpOwotICAgIG1vZHVsZVJlY29yZC0+bGlu
ayhleGVjLCBtb2R1bGUoKSwgdGhpcyk7CisgICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMsIG1f
bW9kdWxlLmdldCgpLCB0aGlzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogCiAgICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUo
ZXhlYyk7CkBAIC0xMjksNyArMTM2LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZp
bmFsaXplQ3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjoKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVj
dCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSog
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1
Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYgaW5zdGFuY2Up
CiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
YXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTU4
LDggKzE2NSw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlID0gbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1l
c3BhY2UoZXhlYyk7CiAgICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5
IGJpZyB3ZSBzaG91bGQgdHJ5IHRvIHRocm93IE9PTSBoZXJlLgotICAgIGF1dG8qIGluc3RhbmNl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5o
ZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50
KCkpKSkgSlNXZWJBc3NlbWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxl
SW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24odm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOworICAgIGF1dG8qIGpzSW5z
dGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+
KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9u
Q291bnQoKSkpKSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBt
b2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCksIFdURk1vdmUoaW5zdGFuY2Up
KTsKKyAgICBqc0luc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1vZHVsZU5h
bWVzcGFjZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsK
IAogICAgIC8vIExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFsbHktZW1w
dHkgbGlzdHMgb2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJseS5NZW1v
cnkgb2JqZWN0cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgpA
QCAtMTkwLDE1ICsxOTcsMjEgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAg
IGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3Nh
Z2UoaW1wb3J0LCAiaW1wb3J0IGZ1bmN0aW9uIiwgIm11c3QgYmUgY2FsbGFibGUiKSkpOwogCisg
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRy
eXBvaW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2Fz
dDxKU09iamVjdCo+KHZhbHVlKTsKKwogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhw
b3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIHdhc21GdW5jdGlvbjsKICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOwogICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlI
b3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rp
b24pKSB7CiAgICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMg
bm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJy
b3IuCiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1
cmVJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAg
ICAgIGlmICh3YXNtRnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWdu
YXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbGVlSW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAg
ICAgICAgICAgICAgICAgIHdhc21FbnRyeXBvaW50ID0gd2FzbUZ1bmN0aW9uLT53YXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbigpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21X
cmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8v
IGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCkBAIC0yMTUsNyArMjI4LDEwIEBAIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZt
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICAvLyBOb3RlOiBhZGRpbmcgdGhlIEpT
Q2VsbCB0byB0aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBjbG9zdXJlIHJlcXVpcmVtZW50cyBi
LiBhYm92ZSAodGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdpbCBiZSBrZXB0IGFsaXZlKSBhbmQg
di4gYmVsb3cgKHRoZSBKU0Z1bmN0aW9uKS4KIAogICAgICAgICAgICAgQVNTRVJUKG51bUltcG9y
dEZ1bmN0aW9ucyA9PSBpbXBvcnQua2luZEluZGV4KTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5p
bXBvcnRGdW5jdGlvbnMoKVtudW1JbXBvcnRGdW5jdGlvbnMrK10uc2V0KHZtLCBpbnN0YW5jZSwg
ZnVuY3Rpb24pOworICAgICAgICAgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbmZvID0ganNJbnN0
YW5jZS0+aW1wb3J0RnVuY3Rpb25JbmZvKG51bUltcG9ydEZ1bmN0aW9ucysrKTsKKyAgICAgICAg
ICAgIGluZm8tPnRhcmdldEluc3RhbmNlID0gY2FsbGVlSW5zdGFuY2U7CisgICAgICAgICAgICBp
bmZvLT53YXNtRW50cnlwb2ludCA9IHdhc21FbnRyeXBvaW50OworICAgICAgICAgICAgaW5mby0+
aW1wb3J0RnVuY3Rpb24uc2V0KHZtLCBqc0luc3RhbmNlLCBmdW5jdGlvbik7CiAgICAgICAgICAg
ICAvLyB2LiBBcHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTI0Myw3ICsyNTksOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAg
ICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gdGFibGVzLgogICAgICAgICAgICAgLy8gaWlp
LiBBcHBlbmQgdi5bW1RhYmxlXV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIGluc3RhbmNlLT5t
X3RhYmxlLnNldCh2bSwgaW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2Ut
Pm1fdGFibGUuc2V0KHZtLCBqc0luc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3Rh
bmNlLT5tX3dhc21UYWJsZSA9IHRhYmxlLT50YWJsZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIApAQCAtMjczLDggKzI5MCw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8v
IGlpaS4gQXBwZW5kIHYuW1tNZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgQVNTRVJU
KCFpbnN0YW5jZS0+bV9tZW1vcnkpOwotICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNl
dCh2bSwgaW5zdGFuY2UsIG1lbW9yeSk7CisgICAgICAgICAgICBBU1NFUlQoIWpzSW5zdGFuY2Ut
Pm1fbWVtb3J5KTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgbWVtb3J5
KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjkxLDEzICszMDgsMTMgQEAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRHbG9iYWxz
ID09IGltcG9ydC5raW5kSW5kZXgpOwogICAgICAgICAgICAgc3dpdGNoIChtb2R1bGVJbmZvcm1h
dGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2Ug
V2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0
R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBqc0luc3Rh
bmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIHZhbHVlLnRvSW50
MzIoZXhlYykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXYXNt
OjpGMzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9i
YWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChleGVjKSkpOworICAg
ICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEds
b2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAg
ICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAganNJ
bnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTMxNSwxNCArMzMyLDIxIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTCiAgICAgICAgIH0KIAogICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5ICYm
ICFoYXNNZW1vcnlJbXBvcnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUg
YSBtZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCi0gICAgICAgICAgICBSZWZQ
dHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1h
eGltdW0oKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24u
bWVtb3J5LmlzSW1wb3J0KCkpOworCisgICAgICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2Vi
QXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIFJlZlB0cjxX
YXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKG1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCks
CisgICAgICAgICAgICAgICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0
aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5j
b2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsm
dm0sIGpzTWVtb3J5XSAoV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNv
dW50IG5ld1BhZ2VDb3VudCkgeyBqc01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xk
UGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOyB9KTsKICAgICAgICAgICAgIGlmICghbWVtb3J5KQog
ICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihl
eGVjKSk7CiAKLSAgICAgICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNl
LAotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgp
LCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICAgICAganNNZW1vcnktPmFkb3B0
KG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1l
bW9yeSh2bSwganNNZW1vcnkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMzNiwxOSArMzYwLDI0IEBA
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlSW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgp
KTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRl
ZmluaXRpb24uCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJB
c3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgIG1vZHVsZUlu
Zm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50
YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6VGFi
bGU+IHdhc21UYWJsZSA9IFdhc206OlRhYmxlOjpjcmVhdGUobW9kdWxlSW5mb3JtYXRpb24udGFi
bGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24ubWF4aW11bSgpKTsKKyAgICAgICAgICAgIGlmICghd2FzbVRhYmxlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2
bSwgImNvdWxkbid0IGNyZWF0ZSBUYWJsZSIpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlU
YWJsZSogdGFibGUgPSBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21U
YWJsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMg
YmUgYWJsZSB0byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlUYWJsZSB3ZSd2ZSBkZWZpbmVkLgog
ICAgICAgICAgICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJlIHRvbyBsYXJnZSwgd2Ugc2hvdWxk
IGhhdmUgdGhyb3duIGEgdmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAgICAgIHRocm93U2NvcGUu
YXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7Ci0gICAgICAg
ICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAg
ICAgICBqc0luc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwgdGFibGUpOworICAg
ICAgICAgICAganNJbnN0YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFibGUoKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkgeworICAgIGlm
ICghanNJbnN0YW5jZS0+bWVtb3J5KCkpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUg
YSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2lu
ZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVy
cy4KLSAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwg
MCwgMCkucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2Vi
QXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAganNNZW1vcnktPmFk
b3B0KFdhc206Ok1lbW9yeTo6Y3JlYXRlKCkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGpz
SW5zdGFuY2UtPnNldE1lbW9yeSh2bSwganNNZW1vcnkpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIH0KICAgICAKQEAgLTM2MCwyMCArMzg5
LDEzIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVh
dGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFs
LmluaXRpYWxpemF0aW9uVHlwZSAhPSBXYXNtOjpHbG9iYWw6OklzSW1wb3J0KTsKICAgICAgICAg
ICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID09IFdhc206Okdsb2JhbDo6RnJvbUds
b2JhbEltcG9ydCkgewogICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHNP
ckltcG9ydE51bWJlciA8IG51bUltcG9ydEdsb2JhbHMpOwotICAgICAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGluc3RhbmNlLT5sb2FkSTY0R2xvYmFsKGdsb2Jh
bC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5j
ZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGpzSW5zdGFuY2UtPmluc3RhbmNl
KCkubG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOwogICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9i
YWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOworICAgICAgICAgICAg
ICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2JhbEluZGV4LCBnbG9iYWwu
aW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NF
UlQoIWluc3RhbmNlLT5jb2RlQmxvY2soKSk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0K
LXNpemVfdCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5z
aXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHJldHVybiBqc0luc3RhbmNlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggM2NmZTU0OS4uZDUyNTUwYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUlu
c3RhbmNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw3NSArNDEsOTQgQEAgY2xhc3Mg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xh
c3MgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlOwogCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDb2Rl
QmxvY2s7CitjbGFzcyBUYWJsZTsgLy8gRklYTUUgcmVtb3ZlIHRoaXMgYWZ0ZXIgcmVmYWN0b3Jp
bmcuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfQorCiBjbGFzcyBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5
cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUq
LCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiwgUmVmPFdhc206Okluc3Rh
bmNlPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUJsb2NrLmdldCgpOyB9CiAgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFZNJiwgRXhlY1N0YXRl
KiwgUmVmPFdhc206OkNvZGVCbG9jaz4mJik7Ci0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotCi0gICAgSlNPYmplY3Qq
IGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkgeyBSRUxFQVNFX0FTU0VSVChpZHggPCBtX251
bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVybiBpbXBvcnRGdW5jdGlvbnMoKVtpZHhdLmdldCgpOyB9
Ci0KKyAgICAKKyAgICBXYXNtOjpJbnN0YW5jZSYgaW5zdGFuY2UoKSB7IHJldHVybiBtX2luc3Rh
bmNlLmdldCgpOyB9CisgICAgV2FzbTo6Q29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
ICZtX3ZtLT53YXNtQ29udGV4dDsgfQogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1
bGVOYW1lc3BhY2VPYmplY3QoKSB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5nZXQo
KTsgfQorICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdl
dCgpOyB9CisgICAgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiB3ZWJBc3NlbWJseVRvSlNDYWxsZWUo
KSB7IHJldHVybiBtX2NhbGxlZS5nZXQoKTsgfQogCiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSog
bWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldE1lbW9yeShW
TSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBt
X21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgfQorICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2
bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogdmFsdWUpIHsgQVNTRVJUKCFtZW1vcnkoKSk7IG1fbWVt
b3J5LnNldCh2bSwgdGhpcywgdmFsdWUpOyBtX3dhc21NZW1vcnkgPSAmbWVtb3J5KCktPm1lbW9y
eSgpOyB9CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1vcnlNb2RlKCkgeyByZXR1cm4gbWVtb3J5
KCktPm1lbW9yeSgpLm1vZGUoKTsgfQogCi0gICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgp
IHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KLQotICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KLSAgICBpbnQ2
NF90IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdl
dCgpW2ldOyB9Ci0gICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KGxvYWRJMzJHbG9iYWwoaSkpOyB9Ci0gICAgZG91Ymxl
IGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGRv
dWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KLSAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25lZCBp
LCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0gYml0czsgfQotCi0gICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fbWVtb3J5KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5z
dGFuY2UsIG1fdGFibGUpOyB9CisgICAgLy8gVGFpbCBhY2Nlc3NvcnMuCisgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZlRhaWwoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6
ZW9mKHVpbnQ2NF90KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9CisgICAgc3Ry
dWN0IEltcG9ydEZ1bmN0aW9uSW5mbyB7CisgICAgICAgIC8vIFRhcmdldCBpbnN0YW5jZSBhbmQg
ZW50cnlwb2ludCBhcmUgb25seSBzZXQgZm9yIHdhc20tPndhc20gY2FsbHMsIGFuZCBhcmUgb3Ro
ZXJ3aXNlIG51bGxwdHIuIFRoZSBlbWJlZGRlci1zcGVjaWZpYyBsb2dpYyBvY2N1cnMgdGhyb3Vn
aCBpbXBvcnQgZnVuY3Rpb24uCisgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogdGFyZ2V0
SW5zdGFuY2UgeyBudWxscHRyIH07CisgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExv
Y2F0aW9uIHdhc21FbnRyeXBvaW50IHsgbnVsbHB0ciB9OworICAgICAgICBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+IGltcG9ydEZ1bmN0aW9uIHsgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpIH07Cisg
ICAgfTsKKyAgICBJbXBvcnRGdW5jdGlvbkluZm8qIGltcG9ydEZ1bmN0aW9uSW5mbyhzaXplX3Qg
aW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuICZiaXR3aXNlX2Nhc3Q8SW1wb3J0RnVuY3Rpb25J
bmZvKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mVGFpbCgpKVtpbXBvcnRG
dW5jdGlvbk51bV07IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mVGFyZ2V0SW5zdGFuY2Uo
c2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9y
dEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VU
T0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB0YXJnZXRJbnN0YW5jZSk7IH0KKyAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mV2FzbUVudHJ5cG9pbnQoc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJl
dHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1
bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNtRW50
cnlwb2ludCk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6
ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1
bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SW1wb3J0RnVuY3Rpb25JbmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBKU09iamVjdCogaW1w
b3J0RnVuY3Rpb24odW5zaWduZWQgaW1wb3J0RnVuY3Rpb25OdW0pIHsgUkVMRUFTRV9BU1NFUlQo
aW1wb3J0RnVuY3Rpb25OdW0gPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVybiBpbXBvcnRG
dW5jdGlvbkluZm8oaW1wb3J0RnVuY3Rpb25OdW0pLT5pbXBvcnRGdW5jdGlvbi5nZXQoKTsgfQor
ICAgIAorICAgIC8vIEZJWE1FIHJlbW92ZSB0aGVzZSBhZnRlciByZWZhY3RvcmluZyB0aGVtIG91
dC4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCisgICAgV2FzbTo6TWVtb3J5JiBpbnRlcm5h
bE1lbW9yeSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKTsgfQorICAgIFdhc206OkNvZGVC
bG9jayYgd2FzbUNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RhbmNlLT5jb2RlQmxv
Y2soKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtVGFibGUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21UYWJsZSk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jYWxsZWUpOyB9Ci0gICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJB
c3NlbWJseUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlZNKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwg
bV92bSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jb2RlQmxvY2spOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZldhc21Db2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21Db2RlQmxvY2spOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2NhY2hlZFN0YWNrTGltaXQpOyB9Ci0gICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJuIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pPihzaXplb2YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKSk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0
RnVuY3Rpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZkltcG9y
dEZ1bmN0aW9ucygpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2Yoc2l6ZW9mKFdyaXRlQmFy
cmllcjxKU0NlbGw+KSk7IH0KLQotICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogd2ViQXNzZW1i
bHlUb0pTQ2FsbGVlKCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KLQotICAgIHZvaWQqIGNh
Y2hlZFN0YWNrTGltaXQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7IH0KLSAg
ICB2b2lkIHNldENhY2hlZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9jYWNoZWRTdGFja0xp
bWl0ID0gbGltaXQ7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbU1lbW9yeSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fd2FzbU1l
bW9yeSk7IH0KKyAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyBSRUxFQVNFX0FT
U0VSVChtX2luc3RhbmNlLT5jYWNoZWRTdGFja0xpbWl0KCkgPT0gbV9jYWNoZWRTdGFja0xpbWl0
KTsgcmV0dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tM
aW1pdCh2b2lkKiBsaW1pdCkgeyBtX2luc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGxpbWl0
KTsgbV9jYWNoZWRTdGFja0xpbWl0ID0gbGltaXQ7IH0KKyAgICBXYXNtOjpNZW1vcnkqIHdhc21N
ZW1vcnkoKSB7IHJldHVybiBtX3dhc21NZW1vcnk7IH0KKyAgICBXYXNtOjpNb2R1bGUmIHdhc21N
b2R1bGUoKSB7IHJldHVybiBtX3dhc21Nb2R1bGU7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0
aW9ucyk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQgbnVtSW1wb3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5zdGFuY2U+JiYpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRp
YyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IG51bUltcG9ydEZ1bmN0aW9u
cykKICAgICB7Ci0gICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIHNp
emVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdl
dCgpOworICAgICAgICByZXR1cm4gKG9mZnNldE9mVGFpbCgpICsgc2l6ZW9mKEltcG9ydEZ1bmN0
aW9uSW5mbykgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdldCgpOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBWTSogbV92bTsKLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRG
dW5jdGlvbnMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsg
fQotICAgIHNpemVfdCBnbG9iYWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0OworICAgIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisK
KyAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAKKyAgICBWTSogbV92bTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFdyaXRlQmFy
cmllcjxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiAg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5VGFibGU+IG1fdGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPFdl
YkFzc2VtYmx5VG9KU0NhbGxlZT4gbV9jYWxsZWU7Ci0gICAgTWFsbG9jUHRyPHVpbnQ2NF90PiBt
X2dsb2JhbHM7CisgICAgCisgICAgLy8gRklYTUUgcmVtb3ZlIHRoZXNlIGFmdGVyIHJlZmFjdG9y
aW5nIHRoZW0gb3V0LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKICAgICB2b2lkKiBtX2Nh
Y2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludHB0cl90Pjo6bWF4KCkpIH07CisgICAgV2FzbTo6Q29kZUJsb2NrKiBtX3dhc21Db2RlQmxv
Y2sgeyBudWxscHRyIH07CisgICAgV2FzbTo6TW9kdWxlJiBtX3dhc21Nb2R1bGU7CisgICAgV2Fz
bTo6TWVtb3J5KiBtX3dhc21NZW1vcnkgeyBudWxscHRyIH07CisgICAgV2FzbTo6VGFibGUqIG1f
d2FzbVRhYmxlIHsgbnVsbHB0ciB9OworICAgIHVpbnQ2NF90KiBtX2dsb2JhbHMgeyBudWxscHRy
IH07CisKICAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAK
aW5kZXggMjIzYzU4Yi4uZDY0MGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2lu
Zm8gPSB7ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CiAKLUpTV2Vi
QXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVt
b3J5KQorSlNXZWJBc3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC01MCwxMCArNTAsMTYgQEAg
SlNXZWJBc3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3QKICAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGV4
ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CiAK
LSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNz
ZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUs
IFdURk1vdmUobWVtb3J5KSk7Ci0gICAgaW5zdGFuY2UtPm1fbWVtb3J5LT5jaGVjaygpOwotICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOworICAg
IGF1dG8qIG1lbW9yeSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlN
ZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAg
IG1lbW9yeS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBtZW1vcnk7Cit9CisgICAg
Cit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVt
b3J5KQoreworICAgIG1fbWVtb3J5LnN3YXAobWVtb3J5KTsKKyAgICBBU1NFUlQobV9tZW1vcnkt
PnJlZkNvdW50KCkgPT0gMSk7CisgICAgbV9tZW1vcnktPmNoZWNrKCk7CiB9CiAKIFN0cnVjdHVy
ZSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC02MSwxMyArNjcsMTAg
QEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1i
bHlNZW1vcnkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4m
JiBtZW1vcnkpCitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAg
LCBtX21lbW9yeShXVEZNb3ZlKG1lbW9yeSkpCisgICAgLCBtX21lbW9yeShXYXNtOjpNZW1vcnk6
OmNyZWF0ZSgpLnJlbGVhc2VOb25OdWxsKCkpCiB7Ci0gICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZD
b3VudCgpID09IDEpOwotICAgIG1fbWVtb3J5QmFzZSA9IG1fbWVtb3J5LT5tZW1vcnkoKTsKLSAg
ICBtX21lbW9yeVNpemUgPSBtX21lbW9yeS0+c2l6ZSgpOwogfQogCiBKU0FycmF5QnVmZmVyKiBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQpAQCAtODUsNTIgKzg4LDQ1IEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAg
cmV0dXJuIG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIH0KIAotV2FzbTo6UGFnZUNvdW50IEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRl
bHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKK1dhc206OlBhZ2VDb3Vu
dCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50
MzJfdCBkZWx0YSkKIHsKLSAgICAvLyBOb3RlOiBXZSBjYW4gb25seSB1c2UgZXhlYyBpZiBzaG91
bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgaXMgdHJ1ZS4KICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFdhc206OlBhZ2VDb3VudCBvbGRQYWdl
Q291bnQgPSBtZW1vcnkoKS5zaXplSW5QYWdlcygpOwotCi0gICAgaWYgKCFXYXNtOjpQYWdlQ291
bnQ6OmlzVmFsaWQoZGVsdGEpKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNP
bkZhaWx1cmUpCisgICAgYXV0byBncm93biA9IG1lbW9yeSgpLmdyb3coV2FzbTo6UGFnZUNvdW50
KGRlbHRhKSk7CisgICAgaWYgKCFncm93bikgeworICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9y
KCkpIHsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlk
RGVsdGE6CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cg
ZXhwZWN0cyB0aGUgZGVsdGEgdG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50IikpKTsKLSAgICAgICAg
cmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwotICAgIH0KLQotICAgIFdhc206OlBhZ2VDb3VudCBu
ZXdTaXplID0gb2xkUGFnZUNvdW50ICsgV2FzbTo6UGFnZUNvdW50KGRlbHRhKTsKLSAgICBpZiAo
IW5ld1NpemUpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246OkludmFsaWRHcm93U2l6ZToKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3Nl
bWJseS5NZW1vcnkuZ3JvdyBleHBlY3RzIHRoZSBncm93biBzaXplIHRvIGJlIGEgdmFsaWQgcGFn
ZSBjb3VudCIpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1v
cnk6Okdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgd291bGQgZXhjZWVkIHRoZSBtZW1vcnkn
cyBkZWNsYXJlZCBtYXhpbXVtIHNpemUiKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAgICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVy
biBXYXNtOjpQYWdlQ291bnQoKTsKICAgICB9CiAKLSAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAg
Ym9vbCBzdWNjZXNzID0gbWVtb3J5KCkuZ3Jvdyh2bSwgbmV3U2l6ZSk7Ci0gICAgICAgIGlmICgh
c3VjY2VzcykgewotICAgICAgICAgICAgQVNTRVJUKG1fbWVtb3J5QmFzZSA9PSBtZW1vcnkoKS5t
ZW1vcnkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplID09IG1lbW9yeSgpLnNp
emUoKSk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQot
ICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotICAgICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3Vu
dCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fbWVtb3J5QmFzZSA9IG1lbW9yeSgpLm1lbW9yeSgp
OwotICAgICAgICBtX21lbW9yeVNpemUgPSBtZW1vcnkoKS5zaXplKCk7Ci0gICAgfQorICAgIHJl
dHVybiBncm93bi52YWx1ZSgpOworfQogCi0gICAgLy8gV2UgbmVlZCB0byBjbGVhciBvdXQgdGhl
IG9sZCBhcnJheSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUgcG9pbnRpbmcKLSAgICAv
LyB0byBzdGFsZSBtZW1vcnkuCit2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3dTdWNjZXNz
Q2FsbGJhY2soVk0mIHZtLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdl
Q291bnQgbmV3UGFnZUNvdW50KQoreworICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBv
bGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nIHRvIHN0YWxl
IG1lbW9yeS4KICAgICAvLyBOZXV0ZXIgdGhlIG9sZCBhcnJheS4KICAgICBpZiAobV9idWZmZXIp
IHsKICAgICAgICAgbV9idWZmZXItPm5ldXRlcih2bSk7CiAgICAgICAgIG1fYnVmZmVyID0gbnVs
bHB0cjsKICAgICAgICAgbV9idWZmZXJXcmFwcGVyLmNsZWFyKCk7CiAgICAgfQotCisgICAgCiAg
ICAgbWVtb3J5KCkuY2hlY2soKTsKLQotICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxv
Y2F0ZWQoV2FzbTo6UGFnZUNvdW50KGRlbHRhKS5ieXRlcygpKTsKLSAgICByZXR1cm4gb2xkUGFn
ZUNvdW50OworICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3
UGFnZUNvdW50LmJ5dGVzKCkgLSBvbGRQYWdlQ291bnQuYnl0ZXMoKSk7CiB9CiAKIHZvaWQgSlNX
ZWJBc3NlbWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCmluZGV4IDFkMDZj
NGMuLjRiYmJjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgKQEAgLTQ4LDI2ICs0OCwyMyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAmdm0uZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CiAgICAgfQog
Ci0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYs
IFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNZW1vcnk+JiYpOworICAgIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAorICAgIHZvaWQgYWRvcHQoUmVmPFdh
c206Ok1lbW9yeT4mJik7CiAgICAgV2FzbTo6TWVtb3J5JiBtZW1vcnkoKSB7IHJldHVybiBtX21l
bW9yeS5nZXQoKTsgfQogICAgIEpTQXJyYXlCdWZmZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgV2FzbTo6UGFnZUNvdW50IGdyb3coVk0mLCBFeGVjU3RhdGUqLCB1aW50
MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwotCi0gICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1dlYkFzc2VtYmx5TWVtb3J5LCBtX21lbW9yeUJhc2UpOyB9Ci0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eU1lbW9yeSwgbV9tZW1vcnlTaXplKTsgfQorICAgIFdhc206OlBhZ2VDb3VudCBncm93KFZNJiwg
RXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEpOworICAgIHZvaWQgZ3Jvd1N1Y2Nlc3NDYWxsYmFj
ayhWTSYsIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQ
YWdlQ291bnQpOwogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1
Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5PiYmKTsKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZN
JiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCogbV9tZW1vcnlCYXNlOwotICAgIHNp
emVfdCBtX21lbW9yeVNpemU7CiAgICAgUmVmPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CiAgICAg
V3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYnVmZmVyV3JhcHBlcjsKICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IG1fYnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCBiYWIxMTgxLi40MGMxMDA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNp
bmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUg
Ildhc21Nb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTYxLDYg
KzYyLDcgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKKwogSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNX
ZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6
TW9kdWxlPiYmIG1vZHVsZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fbW9k
dWxlKFdURk1vdmUobW9kdWxlKSkKQEAgLTkxLDYgKzkzLDM2IEBAIHZvaWQgSlNXZWJBc3NlbWJs
eU1vZHVsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAgICAgV2FzbTo6U2lnbmF0dXJlSW5mb3Jt
YXRpb246OnRyeUNsZWFudXAoKTsKIH0KIAorY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24m
IEpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7Cit9CisKK1N5bWJvbFRhYmxlKiBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0KCk7Cit9CisKK1dhc206OlNpZ25hdHVyZUluZGV4
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9k
dWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNw
YWNlKTsKK30KKworV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
YWxsZWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhbGxlZS5nZXQoKTsKK30KKworSlNXZWJB
c3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y29kZUJsb2NrKFdhc206Ok1l
bW9yeU1vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNp
emVfdD4obW9kZSldLmdldCgpOworfQorCitXYXNtOjpNb2R1bGUmIEpTV2ViQXNzZW1ibHlNb2R1
bGU6Om1vZHVsZSgpCit7CisgICAgcmV0dXJuIG1fbW9kdWxlLmdldCgpOworfQorCiB2b2lkIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OnNldENvZGVCbG9jayhWTSYgdm0sIFdhc206Ok1lbW9yeU1vZGUg
bW9kZSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIG1fY29kZUJs
b2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmgKaW5kZXggM2RjNjdhMy4uMDFiNWQwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMzAsMTUgKzMwLDE5IEBA
CiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKLSNpbmNsdWRlICJXYXNtTW9k
dWxlLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVz
cGFjZSBXYXNtIHsKIGNsYXNzIE1vZHVsZTsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIGNs
YXNzIFBsYW47Cit1c2luZyBTaWduYXR1cmVJbmRleCA9IHVpbnQzMl90OwogfQogCiBjbGFzcyBT
eW1ib2xUYWJsZTsKQEAgLTUyLDIzICs1NiwyMCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIGNyZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpNb2R1
bGU6OlZhbGlkYXRpb25SZXN1bHQmJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZVN0dWIoVk0mLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBXVEY6OkV4cGVjdGVkPFJlZlB0cjxXYXNtOjpNb2R1bGU+LCBTdHJpbmc+JiYpOwogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSk7CiAKLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsgfQot
ICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhw
b3J0U3ltYm9sVGFibGUuZ2V0KCk7IH0KLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlLT5zaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICB9Ci0gICAgV2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlKiBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZS5nZXQo
KTsgfQorICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlv
bigpIGNvbnN0OworICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0Owor
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OworICAgIFdlYkFzc2VtYmx5
VG9KU0NhbGxlZSogY2FsbGVlKCkgY29uc3Q7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nb
c3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKTsKKyAgICB2b2lkIHNldENv
ZGVCbG9jayhWTSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsK
IAogICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlKCkgY29uc3Q7CiAKLSAgICBXYXNt
OjpNb2R1bGUmIG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0gICAgdm9pZCBz
ZXRDb2RlQmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKTsKIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9jazsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCmlu
ZGV4IGZmNDZkNGQuLmFkYWE3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcApAQCAtMjksMzAgKzI5LDIyIEBACiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUg
Ildhc21Gb3JtYXQuaCIKLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5VGFibGU6OnNfaW5m
byA9IHsgIldlYkFzc2VtYmx5LlRhYmxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5VGFibGUpIH07CiAKLUpTV2ViQXNz
ZW1ibHlUYWJsZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBtYXhpbXVtKQorSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5
VGFibGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFJlZjxXYXNtOjpUYWJsZT4mJiB0YWJsZSkKIHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKLSAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmpl
Y3QqIGVycm9yKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVy
cm9yKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFibGVkKCkpIHsKKyAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlRXZhbEVycm9yKGV4
ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH07Ci0KLSAgICBpZiAoIWdsb2JhbE9iamVjdC0+
d2ViQXNzZW1ibHlFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZh
bEVycm9yKGV4ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVzc2Fn
ZSgpKSk7Ci0KLSAgICBpZiAoIWlzVmFsaWRTaXplKGluaXRpYWwpKQotICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgIH0KIAotICAgIGF1
dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVRh
YmxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBzdHJ1Y3R1cmUsIGluaXRpYWws
IG1heGltdW0pOworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNXZWJBc3NlbWJseVRhYmxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseVRhYmxlKHZtLCBz
dHJ1Y3R1cmUsIFdURk1vdmUodGFibGUpKTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTYyLDIzICs1NCwxNSBAQCBTdHJ1Y3R1
cmUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iagogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gbWF4aW11bSkKK0pTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRh
YmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpUYWJsZT4mJiB0YWJs
ZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFibGUoV1RGTW92ZSh0YWJs
ZSkpCiB7Ci0gICAgbV9zaXplID0gaW5pdGlhbDsKLSAgICBBU1NFUlQoaXNWYWxpZFNpemUobV9z
aXplKSk7Ci0gICAgbV9tYXhpbXVtID0gbWF4aW11bTsKLSAgICBBU1NFUlQoIW1fbWF4aW11bSB8
fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7Ci0KICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29y
dGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVu
ZHMgZG9pbmcgc28uCiAgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0Lgot
ICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxs
b2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X3NpemUpKTsKLSAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09i
amVjdD4+OjptYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nh
c3Q8c2l6ZV90PihtX3NpemUpKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXpl
OyArK2kpIHsKLSAgICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxh
YmxlRnVuY3Rpb24oKTsKLSAgICAgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25h
dHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBv
biB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCisgICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IHNpemUoKTsgKytpKQogICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgp
W2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgfQogfQogCiB2b2lkIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtOTksNyArODMsNyBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3NpemU7
ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c2l6ZSgpOyAr
K2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNGdW5jdGlvbnMuZ2V0
KClbaV0pOwogfQogCkBAIC0xMDcsNDcgKzkxLDQ0IEBAIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxl
Ojpncm93KHVpbnQzMl90IGRlbHRhKQogewogICAgIGlmIChkZWx0YSA9PSAwKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gbmV3U2l6
ZUNoZWNrZWQgPSBtX3NpemU7Ci0gICAgbmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7Ci0gICAgdWlu
dDMyX3QgbmV3U2l6ZTsKLSAgICBpZiAobmV3U2l6ZUNoZWNrZWQuc2FmZUdldChuZXdTaXplKSA9
PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gKm1heGltdW0oKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisKKyAgICBzaXplX3Qgb2xkU2l6
ZSA9IHNpemUoKTsKKworICAgIGF1dG8gZ3JldyA9IG1fdGFibGUtPmdyb3coZGVsdGEpOworICAg
IGlmICghZ3JldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mdW5jdGlvbnMucmVh
bGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+
KG5ld1NpemUpKTsKLSAgICBtX2pzRnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmll
cjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CisgICAgc2l6ZV90
IG5ld1NpemUgPSBncmV3LnZhbHVlKCk7CisgICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIG5ld1NpemUpOwogCi0gICAgZm9yICh1aW50MzJf
dCBpID0gbV9zaXplOyBpIDwgbmV3U2l6ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rp
b25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IG9sZFNpemU7IGkgPCBuZXdTaXplOyArK2kpCiAgICAgICAgIG5ldyAoJm1fanNGdW5jdGlv
bnMuZ2V0KClbaV0pIFdyaXRlQmFycmllcjxKU09iamVjdD4oKTsKLSAgICB9Ci0gICAgbV9zaXpl
ID0gbmV3U2l6ZTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCitKU09iamVjdCogSlNXZWJBc3Nl
bWJseVRhYmxlOjpnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChpbmRleCA8IHNpemUoKSk7CisgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5k
ZXhdLmdldCgpOworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xlYXJGdW5jdGlvbih1
aW50MzJfdCBpbmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7Cisg
ICAgbV90YWJsZS0+Y2xlYXJGdW5jdGlvbihpbmRleCk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQo
KVtpbmRleF0gPSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0
KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwotICAgIEFTU0VSVChtX2Z1bmN0
aW9ucy5nZXQoKVtpbmRleF0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZh
bGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KIH0KIAogdm9p
ZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgs
IFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGlu
ZGV4IDwgbV9zaXplKTsKKyAgICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rpb24t
PmNhbGxhYmxlRnVuY3Rpb24oKSwgZnVuY3Rpb24tPmluc3RhbmNlKCkpOwogICAgIG1fanNGdW5j
dGlvbnMuZ2V0KClbaW5kZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwotICAgIG1fZnVuY3Rp
b25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIHZv
aWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4
LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogZnVuY3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgIG1fdGFibGUtPnNldEZ1bmN0aW9uKGluZGV4LCBm
dW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpLCBmdW5jdGlvbi0+aW5zdGFuY2UoKSk7CiAgICAg
bV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAg
bV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCmluZGV4IGRmODNlOTcuLjQ0ODc1MzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDU3ICsyOSw0MiBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldhc21MaW1pdHMuaCIKKyNpbmNsdWRlICJX
YXNtVGFibGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIgogI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1zdHJ1Y3QgQ2FsbGFibGVG
dW5jdGlvbjsKLX0KLQogY2xhc3MgSlNXZWJBc3NlbWJseVRhYmxlIDogcHVibGljIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRl
KiwgVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBtYXhpbXVtKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoRXhl
Y1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
YXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9Ci0gICAgdWludDMyX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRTaXplKHVp
bnQzMl90IHNpemUpIHsgcmV0dXJuIFdhc206OlRhYmxlOjppc1ZhbGlkU2l6ZShzaXplKTsgfQor
ICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX3Rh
YmxlLT5tYXhpbXVtKCk7IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90
YWJsZS0+c2l6ZSgpOyB9CiAgICAgYm9vbCBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQotICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgICAgICByZXR1
cm4gbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uZ2V0KCk7Ci0gICAgfQotICAgIHZvaWQgY2xl
YXJGdW5jdGlvbih1aW50MzJfdCBpbmRleCk7Ci0gICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVp
bnQzMl90IGluZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7Ci0gICAgdm9pZCBzZXRGdW5jdGlv
bihWTSYsIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiopOwotCi0g
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX3NpemUpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkZ1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5
VGFibGUsIG1fZnVuY3Rpb25zKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKU0Z1
bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1f
anNGdW5jdGlvbnMpOyB9CisgICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90KTsKKyAg
ICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QpOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0m
LCB1aW50MzJfdCwgV2ViQXNzZW1ibHlGdW5jdGlvbiopOworICAgIHZvaWQgc2V0RnVuY3Rpb24o
Vk0mLCB1aW50MzJfdCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsKIAotICAgIHN0YXRp
YyBib29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNpemUpCi0gICAgewotICAgICAgICAvLyBUaGlz
IHRvcHMgb3V0IGF0IH4zODQgTUIgd29ydGggb2YgZGF0YSBpbiB0aGlzIGNsYXNzLgotICAgICAg
ICByZXR1cm4gc2l6ZSA8ICgxIDw8IDI0KTsKLSAgICB9CisgICAgV2FzbTo6VGFibGUqIHRhYmxl
KCkgeyByZXR1cm4gbV90YWJsZS5wdHIoKTsgfQogCiBwcml2YXRlOgotICAgIEpTV2ViQXNzZW1i
bHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW0pOworICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVy
ZSosIFJlZjxXYXNtOjpUYWJsZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgTWFsbG9jUHRyPFdhc206OkNh
bGxhYmxlRnVuY3Rpb24+IG1fZnVuY3Rpb25zOworICAgIFJlZjxXYXNtOjpUYWJsZT4gbV90YWJs
ZTsKICAgICBNYWxsb2NQdHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj4gbV9qc0Z1bmN0aW9uczsK
LSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtX21heGltdW07Ci0gICAgdWludDMyX3QgbV9z
aXplOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XYXNtVG9KUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhh
ZDYyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dh
c21Ub0pTLmNwcApAQCAtMCwwICsxLDY1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldh
c21Ub0pTLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKKyNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKKyNpbmNsdWRlICJKSVRFeGNlcHRp
b25zLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKKyNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVu
dGlvbi5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlv
blR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwordXNpbmcgSklU
ID0gQ0NhbGxIZWxwZXJzOworCitzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChK
SVQmIGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgLy8g
V2UncmUgY2FsbGluZyBvdXQgb2YgdGhlIGN1cnJlbnQgV2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRo
YXQgSW5zdGFuY2UgaGFzIGEgbGlzdCBvZiBhbGwgaXRzIGltcG9ydCBmdW5jdGlvbnMuCisgICAg
aml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHJlc3VsdCk7CisgICAgaml0LmxvYWRQdHIoSklU
OjpBZGRyZXNzKHJlc3VsdCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1
bmN0aW9uKGltcG9ydEluZGV4KSksIHJlc3VsdCk7Cit9CisKK0V4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiB2bSwgQmFnPENhbGxMaW5r
SW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNp
Z25lZCBpbXBvcnRJbmRleCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0
IHByb3Blcmx5IGFic3RyYWN0IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KKyAgICAvLyBJ
dCdkIGJlIHN1cGVyIGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjk0MDEKKyAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21D
QyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOworICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50
aW9uJiBqc0NDID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwor
ICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBK
SVQgaml0OworCisgICAgLy8gTm90ZTogV2FzbUIzSVJHZW5lcmF0b3IgYXNzdW1lcyB0aGF0IHRo
aXMgc3R1YiB0cmVhdHMgU1AgYXMgYSBjYWxsZWUgc2F2ZS4KKyAgICAvLyBJZiB3ZSBldmVyIGNo
YW5nZSB0aGlzLCB3ZSB3aWxsIGFsc28gbmVlZCB0byBjaGFuZ2UgV2FzbUIzSVJHZW5lcmF0b3Iu
CisKKyAgICAvLyBCZWxvdywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlv
biBpcyBhbHdheXMgb24gdGhlIHN0YWNrLgorICAgIEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6
ZSgpKTsKKyAgICBBU1NFUlQoIWpzQ0MubV9mcHJBcmdzLnNpemUoKSk7CisKKyAgICBqaXQuZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigw
KSwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJ
WE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisKKyAgICB7CisgICAgICAgIGJvb2wgaGFzQmFkSTY0VXNl
ID0gZmFsc2U7CisgICAgICAgIGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgp
ID09IEk2NDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdD
b3VudCAmJiAhaGFzQmFkSTY0VXNlOyArK2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdU
eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFy
Z1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoK
KyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICBjYXNlIEk2NDogeworICAgICAgICAgICAg
ICAgIGhhc0JhZEk2NFVzZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7Cisg
ICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0tPnRvcEVudHJ5RnJhbWUpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICBqaXQu
bG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKworICAgICAg
ICAgICAgLy8gU3RvcmUgQ2FsbGVlLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworCisgICAgICAgICAgICBhdXRvIGNhbGwgPSBqaXQu
Y2FsbCgpOworICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKwor
ICAgICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UpIC0+IHZvaWQgeworICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8qIGVycm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMs
ICp2bSwgZ2xvYmFsT2JqZWN0LT50eXBlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVy
ZSgpLCBBU0NJSUxpdGVyYWwoImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1
bWVudCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAg
ICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZl
ci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGNhbGwsIHRocm93QmFkSTY0KTsKKyAgICAgICAgICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW52YWxpZCBpNjQg
dXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gSGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2FsbGluZyBjb252ZW50aW9uIHNhdmVz
IGF0IGxlYXN0IGFsbCB0aGUgd2FzbSBjYWxsZWUgc2F2ZWQuIFdlIHRoZXJlZm9yZSBkb24ndCBu
ZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgbW9yZSByZWdpc3RlcnMgc2luY2UgdGhlIHdhc20gY2Fs
bGVlIGFscmVhZHkgdG9vayBjYXJlIG9mIHRoaXMuCisgICAgUmVnaXN0ZXJTZXQgbWlzc2luZ0Nh
bGxlZVNhdmVzID0gd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBtaXNzaW5nQ2Fs
bGVlU2F2ZXMuZXhjbHVkZShqc0NDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgQVNTRVJU
KG1pc3NpbmdDYWxsZWVTYXZlcy5pc0VtcHR5KCkpOworCisgICAgaWYgKCFPcHRpb25zOjp1c2VD
YWxsSUNzRm9yV2ViQXNzZW1ibHlUb0pTQ2FsbHMoKSkgeworICAgICAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFyZ0NvdW50ICogc2l6
ZW9mKHVpbnQ2NF90KSk7CisgICAgICAgIGNoYXIqIGJ1ZmZlciA9IGFyZ0NvdW50ID8gc3RhdGlj
X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiBudWxscHRyOworICAg
ICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1hcnNo
YWxsZWRGUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgYnVmZmVyT2Zmc2V0ID0gMDsKKyAgICAg
ICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGNvbnN0IEdQUlJl
ZyBzY3JhdGNoR1BSID0gR1BSSW5mbzo6cmVnQ1MwOworICAgICAgICBqaXQuc3ViUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgc2l6ZW9mKFJlZ2lzdGVyKSkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsg
KythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVu
dChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICBj
YXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1
bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgY2FzZSBJMzI6IHsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgZ3ByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkR1BScyA8IHdh
c21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSB3YXNt
Q0MubV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1
bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAg
ICAgICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGZyT2Zmc2V0KSwgZ3ByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0g
c2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0
Lnplcm9FeHRlbmQzMlRvUHRyKGdwclJlZywgZ3ByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmU2NChncHJSZWcsIGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7CisgICAgICAgICAgICAgICAg
KyttYXJzaGFsbGVkR1BSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgRjMyOiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsK
KyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNp
emUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJz
aGFsbGVkRlBSc10uZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdp
c3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJS
ZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
RmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCks
IGZwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRU
b0RvdWJsZShmcHJSZWcsIGZwclJlZyk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVU
bzY0KGZwclJlZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2Ny
YXRjaEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICArK21hcnNo
YWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOworICAgICAg
ICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQor
ICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRG
UFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBh
cmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQ
UkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUo
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJl
Zyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJS
ZWcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIs
IGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBS
czsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYnVmZmVyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAg
IH0KKyAgICAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGlmIChh
cmdDb3VudCkgeworICAgICAgICAgICAgLy8gVGhlIEdDIHNob3VsZCBub3QgbG9vayBhdCB0aGlz
IGJ1ZmZlciBhdCBhbGwsIHRoZXNlIGFyZW4ndCBKU1ZhbHVlcy4KKyAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZB
Y3RpdmVMZW5ndGgoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICB9CisKKyAgICAgICAgdWludDY0X3QgKCpjYWxsRnVuYykoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBTaWduYXR1cmVJbmRleCwgdWludDY0X3QqKSA9CisgICAgICAgICAg
ICBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY2FsbGVlLCBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCwgdWludDY0X3QqIGJ1ZmZlcikgLT4gdWludDY0X3QgeyAKKyAgICAgICAg
ICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgICAgICAgICAgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKTsgKythcmdOdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgVHlwZSBh
cmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWUgYXJnOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEZ1
bmM6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBjYXNlIEkzMjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZyA9IGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGJ1ZmZlclthcmdO
dW1dKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBGMzI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRjY0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoYml0d2lzZV9jYXN0PGRvdWJsZT4oYnVmZmVyW2Fy
Z051bV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZyk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAgICAg
ICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBjYWxsZWUtPm1ldGhvZFRhYmxlKCp2bSktPmdldENh
bGxEYXRhKGNhbGxlZSwgY2FsbERhdGEpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGNhbGwoZXhlYywgY2FsbGVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVk
KCksIGFyZ3MpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgMCk7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCByZWFsUmVzdWx0OworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgRnVuYzoKKyAgICAgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICAg
ICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
Vm9pZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJ
MzI6IHsKKyAgICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmVzdWx0LnRvSW50MzIoZXhlYykpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNhc2UgRjY0OgorICAgICAgICAgICAgICAgIGNhc2UgRjMyOiB7CisgICAgICAgICAgICAgICAg
ICAgIHJlYWxSZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHJlc3VsdC50b051bWJlcihl
eGVjKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIDApOworICAgICAgICAgICAgICAgIHJldHVybiByZWFsUmVzdWx0OworICAgICAg
ICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBqaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICAgICAgCisgICAgICAgIG1hdGVyaWFsaXplSW1wb3J0SlND
ZWxsKGppdCwgaW1wb3J0SW5kZXgsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyA+PSA0LCAiV2Ug
cmVseSBvbiB0aGlzIHdpdGggdGhlIGNhbGwgYmVsb3cuIik7CisgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihzaWduYXR1cmVJbmRleCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihidWZmZXIpKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgYXV0
byBub0V4Y2VwdGlvbiA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBl
cnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworCisgICAgICAgIC8vIGV4Y2VwdGlvbiBoZXJl
LgorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0tPnRvcEVudHJ5RnJhbWUpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgdm9pZCAoKmRvVW53
aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0s
IGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAg
ICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAgICBub0V4Y2VwdGlv
bi5saW5rKCZqaXQpOworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsK
KyAgICAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgIGpp
dC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOworICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86
OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAg
aml0LnJldCgpOworCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0
aW9uQ2FsbCwgZG9VbndpbmRpbmcpOworCisgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9y
dEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOworICAgIH0KKwor
ICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUg
c2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKKyAgICAvLyB3aWxsIGRvIHRoZSBzdGFjayBjaGVjayBm
b3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMgdGhhdCBpdCBtaWdodCBtYWtlCisgICAgLy8gYSBj
YWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1ha2Ugc3VyZSBpdHMgc3RhY2sgY2hlY2sgaW5jbHVk
ZXMgc3BhY2UKKyAgICAvLyBmb3IgdXMgaGVyZS4KKworICAgIGNvbnN0IHVuc2lnbmVkIG51bWJl
ck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsgMTsgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1l
bnQuCisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworICAgIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVv
ZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgY29uc3QgdW5zaWdu
ZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRC
eXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAgaml0LnN1YlB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBKSVQ6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgIC8vIEZJ
WE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBh
cmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBm
b3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NTQ3CisgICAgCisgICAgLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUgaW50ZWdlciBwYXJh
bWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lzdGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4KKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKKyAgICAgICAgdW5zaWdu
ZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNl
dCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKyth
cmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChh
cmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICBjYXNl
IFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1bmM6
CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgICAgICAgICAgY2FzZSBJMzI6IHsK
KyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVnOworICAgICAgICAgICAgICAgIGlmIChtYXJz
aGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBz
cGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNj
cmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BS
MDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZ3ByUmVnKTsKKyAgICAgICAgICAgICAgICAg
ICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4
dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOyAvLyBDbGVhciBub24taW50MzIgYW5kIG5vbi10
YWcgYml0cy4KKyAgICAgICAgICAgICAgICBqaXQuYm94SW50MzIoZ3ByUmVnLCBKU1ZhbHVlUmVn
cyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkp
OworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IEYzMjoKKyAgICAgICAgICAgIGNhc2UgRjY0OgorICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6
IGhhbmRsZWQgYmVsb3cuCisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzID49IHdh
c21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB7CisgICAgICAgIC8vIEludGVnZXIgcmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNw
aWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxhYmxlLgorICAgICAgICBHUFJSZWcgZG91YmxlRW5j
b2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgYm9vbCBoYXNNYXRlcmlh
bGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBmYWxzZTsKKyAgICAgICAgYXV0byBtYXRlcmlhbGl6
ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0
LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKKyAgICAgICAgICAgIGlmICghaGFzTWF0ZXJpYWxpemVk
RG91YmxlRW5jb2RlT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChEb3Vi
bGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4LCAiY29kZWdlbiBhc3N1bWVzIHRoaXMgYmVsb3ci
KTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW0zMigxKSwgZGVzdCk7
CisgICAgICAgICAgICAgICAgaml0LmxzaGlmdDY0KEpJVDo6VHJ1c3RlZEltbTMyKDQ4KSwgZGVz
dCk7CisgICAgICAgICAgICAgICAgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkR1BScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKKyAg
ICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFy
Z3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgdW5z
aWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJn
TnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICBUeXBl
IGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBG
dW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgY2FzZSBJNjQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBh
Ym92ZS4KKyAgICAgICAgICAgIGNhc2UgSTMyOgorICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6
IGhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdh
c21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7CisgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRjMyOiB7CisgICAgICAgICAgICAg
ICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3
YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2Fz
bUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJn
dW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAg
ICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0
ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJSZWcsIGZwclJlZyk7CisgICAgICAgICAgICAg
ICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91Ymxl
VG82NChmcHJSZWcsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91Ymxl
RW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyk7CisgICAgICAgICAgICAgICAg
aml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVG
cmFtZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVv
ZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjY0OiB7Cisg
ICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hh
bGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3Bp
bGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3Jh
dGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7
CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAgICAgICAgICAg
ICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7CisgICAgICAgICAgICAgICAgaml0
Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgbWF0ZXJp
YWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJz
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNh
bGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKKworICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpyZWdUMDsg
Ly8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGggYmVsb3cuCisgICAg
QVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBvcnRKU0NlbGxHUFJS
ZWcpKTsKKworICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIGlt
cG9ydEpTQ2VsbEdQUlJlZyk7CisKKyAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcs
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3Rl
ZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkgKyBQYXlsb2FkT2Zmc2V0KSk7CisgICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQo
VmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRo
aXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAg
IC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBu
byByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NDg4CisKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxM
aW5rSW5mb3MuYWRkKCk7CisgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpDYWxsLCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7CisgICAgSklUOjpEYXRh
TGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJp
Z2h0VmFsdWUoMCk7CisgICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQ
YXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0
VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOworICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKKyAgICBzbG93
UGF0aC5saW5rKCZqaXQpOworICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJl
LgorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
byksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgor
ICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGRvbmUubGluaygm
aml0KTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOworCisg
ICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBWb2lkOgorICAg
ICAgICAvLyBEaXNjYXJkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmM6CisgICAgY2Fz
ZSBBbnlmdW5jOgorICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBv
cnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBXZWJB
c3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJNjQ6IHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICB9Cisg
ICAgY2FzZSBJMzI6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5j
aElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhh
dmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGRvbmUu
YXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25D
aGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGlu
dDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCisgICAgICAgICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsKKyAgICAgICAgfTsK
KyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0kzMik7CisgICAgICAg
IH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgRjMyOiB7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAg
ICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91
YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAvLyBXZSdyZSBhbiBpbnQz
MgorICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxv
YXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAg
ICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygm
aml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciks
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0Lm1v
dmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUik7CisgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFwcGVuZChq
aXQuanVtcCgpKTsKKworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3Mu
YXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGZsb2F0ICgq
Y29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1iZXIoZXhlYykpOwor
ICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjMy
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAg
IGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdl
J3JlIGFuIGludDMyCisgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVy
dEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNE
b3VibGUubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFn
VHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGppdC5hZGQ2
NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisg
ICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2Fs
bCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRK
dW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShF
eGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4g
ZG91YmxlIHsgCisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0
dXJuIHYudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOworICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxp
bmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBqaXQuZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBpZiAoIWV4Y2VwdGlvbkNo
ZWNrcy5lbXB0eSgpKSB7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOworICAg
ICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0t
PnRvcEVudHJ5RnJhbWUpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoKTsKKyAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAg
ICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykg
LT4gdm9pZCB7CisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2Vu
ZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOworICAgICAgICB9OworCisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxs
LCBkb1Vud2luZGluZyk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Cisg
ICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKwor
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhC
ZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKKyAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwoZmFzdENhbGwpOworICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0
dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9y
dFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpKTsKK30KKwordm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBXYXNt
OjpFeGNlcHRpb25UeXBlIHR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7
CisgICAgVk0qIHZtID0gaW5zdGFuY2UtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKworICAgICAgICBKU09iamVjdCogZXJy
b3I7CisgICAgICAgIGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCisg
ICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBnbG9iYWxP
YmplY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3I6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlS
dW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlw
ZSh0eXBlKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9y
KTsKKyAgICB9CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICBBU1NFUlQoISF2
bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgIEFTU0VSVCghIXZtLT50YXJnZXRNYWNoaW5lUENG
b3JUaHJvdyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAg
Ly8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5k
IGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBj
YWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJl
cXVpcmUKKyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBW
TSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8g
Zm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJh
bWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRs
ZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAg
ICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkp
OworICAgIHJldHVybiB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5mYzI0YWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNs
dWRlICJXYXNtQmluZGluZy5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgorI2luY2x1ZGUg
PHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIENhbGxMaW5rSW5mbzsKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisK
K0V4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pT
KFZNKiwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1
bnNpZ25lZCBpbXBvcnRJbmRleCk7CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0
ZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAppbmRleCAwZDI3NzY1Li5jNTg1ZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNjAsNyArNjAs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsK
IAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5n
IHRvIHJ1biB3aXRoIG1hdGNoZXMgdGhlIG9uZSB3ZSBleHBlY3QuCi0gICAgQVNTRVJUKHdhc21G
dW5jdGlvbi0+aW5zdGFuY2UoKS0+Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlv
bi0+aW5zdGFuY2UoKS0+bWVtb3J5KCkpKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0
YW5jZSgpLT5pbnN0YW5jZSgpLmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24t
Pmluc3RhbmNlKCktPm1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCkpKTsKICAgICB7CiAgICAgICAg
IC8vIENoZWNrIGlmIHdlIGhhdmUgYSBkaXNhbGxvd2VkIEk2NCB1c2UuCiAKQEAgLTgyLDExICs4
MiwxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1i
bHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKFdl
YkFzc2VtYmx5RXhlY3V0ZVN0YXJ0LCBXZWJBc3NlbWJseUV4ZWN1dGVFbmQpOwogCiAgICAgVmVj
dG9yPEpTVmFsdWU+IGJveGVkQXJnczsKLSAgICBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCA9
IHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKTsKLSAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0
IFRMUyB0byBzdG9yZSB0aGUgY29udGV4dCwgdGhlIGpzCi0gICAgLy8gZW50cnkgd3JhcHBlciBl
eHBlY3RzIHRoZSBXYXNtQ29udGV4dCogYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgotICAgIGlmICgh
V2FzbTo6dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgYm94ZWRBcmdzLmFwcGVuZCh3
YXNtQ29udGV4dCk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IHdhc21G
dW5jdGlvbi0+aW5zdGFuY2UoKTsKKyAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0
byBzdG9yZSB0aGUgY29udGV4dCwgdGhlIEpTCisgICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3Rz
IHRoZSBpbnN0YW5jZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgaWYgKCFXYXNtOjpDb250
ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIGJveGVkQXJncy5hcHBlbmQoaW5zdGFuY2UpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKTsgKythcmdJbmRleCkgewogICAgICAgICBKU1ZhbHVlIGFyZyA9IGV4ZWMt
PmFyZ3VtZW50KGFyZ0luZGV4KTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rpb24sIGZpcnN0
QXJndW1lbnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKIAogICAgIC8vIEZJWE1FIERvIGF3
YXkgd2l0aCB0aGlzIGVudGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50
IGdlbmVyYXRlZCBieSBCMy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NjQ4NgotICAgIFdhc206OkNvbnRleHQqIHByZXZXYXNtQ29udGV4dCA9IFdhc206OmxvYWRD
b250ZXh0KHZtKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHByZXZJbnN0YW5jZSA9IHZt
Lndhc21Db250ZXh0LmxvYWQoKTsKICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBzdGFjayBj
aGVjayBoZXJlIGZvciB0aGUgd3JhcHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0CiAgICAg
ICAgIC8vIHdhbnQgdG8gZW1pdCBhIHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFwcGVyIGZ1
bmN0aW9uLgpAQCAtMTM3LDIyICsxMzcsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICBpZiAoVU5MSUtFTFkoKHNwIDwgc3RhY2tTcGFjZVVzZWQpIHx8ICgoc3AgLSBzdGFja1NwYWNl
VXNlZCkgPCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZtLnNvZnRTdGFja0xpbWl0KCkpKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpKTsKICAgICB9Ci0gICAgV2FzbTo6
c3RvcmVDb250ZXh0KHZtLCB3YXNtQ29udGV4dCk7CisgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUo
aW5zdGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24t
Pmluc3RhbmNlKCkpOwotICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkgPT0gV2Fz
bTo6bG9hZENvbnRleHQodm0pKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgp
ID09IHZtLndhc21Db250ZXh0LmxvYWQoKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0
ID0gdm1FbnRyeVRvV2FzbSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludCgpLCAmdm0sICZwcm90
b0NhbGxGcmFtZSk7CiAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBpbiBhIHJl
Z2lzdGVyIG9yIG9uIHRoZSBzdGFjayBzaW5jZSBpdCdzIHN0b3JlZCBpbiBWZWN0b3I8SlNWYWx1
ZT4uCiAgICAgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIHNpbmNl
IHRoZSBXZWJBc3NlbWJseUZ1bmN0aW9uKiBzaG91bGQga2VlcCB0aGUgaW5zdGFuY2UKICAgICAv
LyBhbGl2ZS4gQnV0IGl0J3MgZ29vZCBoeWdpZW5lLgotICAgIHdhc21Db250ZXh0LT51c2UoKTsK
LSAgICBpZiAocHJldldhc21Db250ZXh0ICE9IHdhc21Db250ZXh0KSB7CisgICAgaW5zdGFuY2Ut
PnVzZSgpOworICAgIGlmIChwcmV2SW5zdGFuY2UgIT0gaW5zdGFuY2UpIHsKICAgICAgICAgLy8g
VGhpcyBpcyBqdXN0IGZvciBzb21lIGV4dHJhIHNhZmV0eSBpbnN0ZWFkIG9mIGxlYXZpbmcgYSBj
YWNoZWQKICAgICAgICAgLy8gdmFsdWUgaW4gdGhlcmUuIElmIHdlIGV2ZXIgZm9yZ2V0IHRvIHNl
dCB0aGUgdmFsdWUgdG8gYmUgYSByZWFsCiAgICAgICAgIC8vIGJvdW5kcywgdGhpcyB3aWxsIGZv
cmNlIGV2ZXJ5IHN0YWNrIG92ZXJmbG93IGNoZWNrIHRvIGltbWVkaWF0ZWx5CiAgICAgICAgIC8v
IGZpcmUuCi0gICAgICAgIHdhc21Db250ZXh0LT5zZXRDYWNoZWRTdGFja0xpbWl0KGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkpOworICAg
ICAgICBpbnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpKTsKICAgICB9Ci0gICAgV2FzbTo6
c3RvcmVDb250ZXh0KHZtLCBwcmV2V2FzbUNvbnRleHQpOworICAgIHZtLndhc21Db250ZXh0LnN0
b3JlKHByZXZJbnN0YW5jZSwgdm0uc29mdFN0YWNrTGltaXQoKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUo
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYTlkOGYwZC4uMmZkZDVh
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0zMiwxMiArMzIsMTQgQEAK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5o
IgogI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUb1dh
c20uaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eU1vZHVsZS5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIK
ICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgpAQCAtNzUsMTAg
Kzc3LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgU3RydWN0dXJlKiBpbnN0YW5j
ZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4
ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGlu
c3RhbmNlU3RydWN0dXJlKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0g
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2Jq
ZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2FzbTo6
TW9kdWxlPihtb2R1bGUtPm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKLSAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYywgbW9k
dWxlLT5tb2R1bGUoKS5jb21waWxlU3luYyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSk7CisgICAg
aW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29t
cGlsZVN5bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCAmV2FzbTo6
Y3JlYXRlSlNUb1dhc21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoaW5zdGFuY2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAppbmRleCA2NDk4OWI1
Li44NmY4MTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcApAQCAtOTYsMTMgKzk2LDE4
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQ
dHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlh
bFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCk7CisgICAgYXV0byoganNNZW1vcnkgPSBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIFJlZlB0cjxXYXNtOjpN
ZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKGluaXRpYWxQYWdlQ291bnQsIG1h
eGltdW1QYWdlQ291bnQsCisgICAgICAgIFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0QXN5bmMo
Q29sbGVjdGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAgWyZ2bV0gKCkgeyB2bS5oZWFwLmNv
bGxlY3RTeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgIFsmdm0sIGpzTWVt
b3J5XSAoV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1Bh
Z2VDb3VudCkgeyBqc01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNvdW50
LCBuZXdQYWdlQ291bnQpOyB9KTsKICAgICBpZiAoIW1lbW9yeSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpKSk7CiAKLSAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5X
ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigqbWVtb3J5LmxlYWtSZWYoKSkp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0KKyAgICBqc01lbW9yeS0+YWRvcHQobWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOworICAgIAog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNZW1vcnkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZS5jcHAKaW5kZXggZTk5NGRjOC4uNGZjYThjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNw
cApAQCAtNzcsOCArNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgdWludDMyX3QgZGVs
dGEgPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKLSAgICBib29sIHNob3VsZFRo
cm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IHRydWU7Ci0gICAgV2FzbTo6UGFnZUNvdW50IHJlc3Vs
dCA9IG1lbW9yeS0+Z3Jvdyh2bSwgZXhlYywgZGVsdGEsIHNob3VsZFRocm93RXhjZXB0aW9uc09u
RmFpbHVyZSk7CisgICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3Jvdyh2bSwg
ZXhlYywgZGVsdGEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
IAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0LnBhZ2VDb3VudCgp
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDk2MTAyNGQuLjE2NjEwNmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCkBAIC0xNjEsMTEgKzE2MSwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TW9kdWxlRXhwb3J0cyhFeGVjU3RhdGUq
IGV4ZWMpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dl
YkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IGF1dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
OjpjcmVhdGVNb2R1bGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIHN0cnVjdHVyZSkpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAKKyAgICBWZWN0b3I8
dWludDhfdD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
cjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIFdURk1vdmUoc291cmNlKSkpOwogfQogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3Rh
dGUqIGV4ZWMpCkBAIC0xNzUsMTYgKzE3NiwxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1
bmN0aW9uVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIikpOwogfQog
Ci1KU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYnVmZmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2Vi
QXNzZW1ibHlNb2R1bGUqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVs
ZShFeGVjU3RhdGUqIGV4ZWMsIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9t
VmFsdWUodm0sIGV4ZWMsIGJ1ZmZlcik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJl
LCBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlU3luYyh2bSwgV1RGTW92ZShzb3VyY2UpKSk7CisgICAg
cmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVy
ZSwgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKGJ1
ZmZlcikpKTsKIH0KIAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdl
YkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvci5oCmluZGV4IDYwMjVjOTguLjEzYWNhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgK
QEAgLTMwLDggKzMwLDExIEBACiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgV2ViQXNzZW1ibHlNb2R1
bGVQcm90b3R5cGU7CiAKIGNsYXNzIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IgOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbiB7CkBAIC00NCw3ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIERF
Q0xBUkVfSU5GTzsKIAotICAgIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZU1vZHVsZShFeGVjU3RhdGUq
LCBKU1ZhbHVlIGJ1ZmZlciwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIGNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIp
OwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5
TW9kdWxlUHJvdG90eXBlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggY2IxZmVjMS4uMGE4NjZl
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSog
bW9kdWxlLAogICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogY29kZUJsb2NrID0gaW5zdGFuY2UtPmNvZGVCbG9jaygpOworICAgIFdhc206OkNvZGVC
bG9jayogY29kZUJsb2NrID0gaW5zdGFuY2UtPmluc3RhbmNlKCkuY29kZUJsb2NrKCk7CiAgICAg
Y29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRh
YmxlID0gbW9kdWxlLT5leHBvcnRTeW1ib2xUYWJsZSgpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFz
c2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgICAgICAgICAvLyBSZXR1cm4gVG9KU1ZhbHVlKHYp
LgogICAgICAgICAgICAgc3dpdGNoIChnbG9iYWwudHlwZSkgewogICAgICAgICAgICAgY2FzZSBX
YXNtOjpJMzI6Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFu
Y2UtPmxvYWRJMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgICAgIGV4cG9y
dGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoZXhw
LmtpbmRJbmRleCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNl
IFdhc206Okk2NDoKQEAgLTE2MCwxMSArMTYwLDExIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUs
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoK
LSAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEYz
Mkdsb2JhbChleHAua2luZEluZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9
IEpTVmFsdWUoaW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEYzMkdsb2JhbChleHAua2luZEluZGV4
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0
OgotICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2Fk
RjY0R2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVl
ID0gSlNWYWx1ZShpbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkRjY0R2xvYmFsKGV4cC5raW5kSW5k
ZXgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAg
LTIxNywxMiArMjE3LDEyIEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1
bGUqIG1vZHVsZSA9IG1faW5zdGFuY2UtPm1vZHVsZSgpOwotICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1faW5zdGFuY2UtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxl
SW5mb3JtYXRpb24oKTsKKyAgICBXYXNtOjpNb2R1bGUmIG1vZHVsZSA9IG1faW5zdGFuY2UtPmlu
c3RhbmNlKCkubW9kdWxlKCk7CisgICAgV2FzbTo6Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lu
c3RhbmNlLT5pbnN0YW5jZSgpLmNvZGVCbG9jaygpOworICAgIGNvbnN0IFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS5tb2R1bGVJbmZvcm1hdGlvbigp
OwogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBtX2luc3RhbmNlLT50YWJsZSgpOwog
Ci0gICAgY29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4mIGRhdGEgPSBtX2luc3RhbmNl
LT5tb2R1bGUoKS0+bW9kdWxlSW5mb3JtYXRpb24oKS5kYXRhOworICAgIGNvbnN0IFZlY3RvcjxX
YXNtOjpTZWdtZW50OjpQdHI+JiBkYXRhID0gbW9kdWxlSW5mb3JtYXRpb24uZGF0YTsKICAgICBK
U1dlYkFzc2VtYmx5TWVtb3J5KiBqc01lbW9yeSA9IG1faW5zdGFuY2UtPm1lbW9yeSgpOwogCiAg
ICAgc3RkOjpvcHRpb25hbDxKU1ZhbHVlPiBleGNlcHRpb247CkBAIC0yMzksNyArMjM5LDcgQEAg
SlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVj
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICB1aW50MzJfdCB0YWJs
ZUluZGV4ID0gZWxlbWVudC5vZmZzZXQuaXNHbG9iYWxJbXBvcnQoKQotICAgICAgICAgICAgICAg
ID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmxvYWRJMzJHbG9iYWwoZWxlbWVu
dC5vZmZzZXQuZ2xvYmFsSW1wb3J0SW5kZXgoKSkpCisgICAgICAgICAgICAgICAgPyBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4obV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xvYmFsKGVsZW1l
bnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQogICAgICAgICAgICAgICAgIDogZWxlbWVu
dC5vZmZzZXQuY29uc3RWYWx1ZSgpOwogCiAgICAgICAgICAgICBmbihlbGVtZW50LCB0YWJsZUlu
ZGV4KTsKQEAgLTI1NSw3ICsyNTUsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpT
ZWdtZW50OjpQdHImIHNlZ21lbnQgOiBkYXRhKSB7CiAgICAgICAgICAgICB1aW50MzJfdCBvZmZz
ZXQgPSBzZWdtZW50LT5vZmZzZXQuaXNHbG9iYWxJbXBvcnQoKQotICAgICAgICAgICAgICAgID8g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+
b2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQorICAgICAgICAgICAgICAgID8gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChzZWdtZW50
LT5vZmZzZXQuZ2xvYmFsSW1wb3J0SW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgOiBzZWdtZW50
LT5vZmZzZXQuY29uc3RWYWx1ZSgpOwogCiAgICAgICAgICAgICBmbihtZW1vcnksIHNpemVJbkJ5
dGVzLCBzZWdtZW50LCBvZmZzZXQpOwpAQCAtMjkzLDcgKzI5Myw3IEBAIEpTVmFsdWUgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAg
IC8vIGZvciB0aGUgaW1wb3J0LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAogICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25J
bmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOwotICAgICAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbklu
ZGV4IDwgY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKICAgICAgICAgICAgICAg
ICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNl
LT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgICAgICAgICAgaWYgKGlz
V2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3Bw
CmluZGV4IGU5YTYzNGEuLjFmYjk0M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCkBAIC00MCw2ICs0
MSw3IEBACiAjaW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJTdHJv
bmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUJCUVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtVG9K
Uy5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5z
dGFuY2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3IuaCIKQEAgLTk0LDcgKzk2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9t
aXNlKTsKICAgICBlbHNlIHsKLSAgICAgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKHZt
LCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFj
a1R5cGU+KFtwcm9taXNlLCBnbG9iYWxPYmplY3RdIChWTSYgdm0sIFdhc206Ok1vZHVsZTo6VmFs
aWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIFdhc206Ok1vZHVsZTo6
dmFsaWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hh
cmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGdsb2JhbE9iamVj
dCwgJnZtXSAoV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxl
IHsKICAgICAgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29u
KHByb21pc2UsIFtwcm9taXNlLCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0
KSwgJnZtXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0xMzUsNyArMTM3LDcgQEAgc3RhdGljIHZvaWQg
aW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlLCBKU1cKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CiAgICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgcG90ZW50aWFsbHkgcmVjb21waWxpbmcgYSBtb2R1
bGUuIFdlIGZpcnN0IGdhdGhlciBhbGwgdGhlIGltcG9ydC9tZW1vcnkgaW5mb3JtYXRpb24gcHJp
b3IgdG8gY29tcGlsaW5nIGNvZGUuCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5j
ZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9y
dE9iamVjdCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNl
U3RydWN0dXJlKCkpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3Qs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVy
ZSgpLCBXYXNtOjpJbnN0YW5jZTo6Y3JlYXRlKFJlZjxXYXNtOjpNb2R1bGU+KG1vZHVsZS0+bW9k
dWxlKCkpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0KGV4ZWMsIHNj
b3BlLCBwcm9taXNlKSk7CiAKICAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2ll
czsKQEAgLTE0MywxMyArMTQ1LDEzIEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwg
RXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiAgICAgZGVw
ZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW5zdGFuY2UpKTsKICAgICB2bS5w
cm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2UocHJvbWlzZSwgV1RGTW92ZShk
ZXBlbmRlbmNpZXMpKTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbXBsZXRpb24gdGFzayBtYXkgb3Ig
bWF5IG5vdCBnZXQgY2FsbGVkIGltbWVkaWF0ZWx5LgotICAgIG1vZHVsZS0+bW9kdWxlKCkuY29t
cGlsZUFzeW5jKHZtLCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBjcmVhdGVTaGFyZWRUYXNrPFdh
c206OkNvZGVCbG9jazo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwg
cmVzb2x2ZUtpbmRdIChWTSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgcmVmQ29kZUJsb2Nr
KSBtdXRhYmxlIHsKKyAgICBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVBc3luYygmdm0ud2FzbUNv
bnRleHQsIGluc3RhbmNlLT5tZW1vcnlNb2RlKCksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q29k
ZUJsb2NrOjpDYWxsYmFja1R5cGU+KFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZl
S2luZCwgJnZtXSAoUmVmPFdhc206OkNvZGVCbG9jaz4mJiByZWZDb2RlQmxvY2spIG11dGFibGUg
ewogICAgICAgICBSZWZQdHI8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBXVEZNb3ZlKHJl
ZkNvZGVCbG9jayk7CiAgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdv
cmtTb29uKHByb21pc2UsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZCwg
JnZtLCBjb2RlQmxvY2sgPSBXVEZNb3ZlKGNvZGVCbG9jayldICgpIG11dGFibGUgewogICAgICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7CiAgICAgICAgICAgICByZXNvbHZlKHZtLCBleGVjLCBwcm9taXNlLCBpbnN0YW5jZSwg
bW9kdWxlLCBjb2RlQmxvY2sucmVsZWFzZU5vbk51bGwoKSwgcmVzb2x2ZUtpbmQpOwogICAgICAg
ICB9KTsKLSAgICB9KSk7CisgICAgfSksICZXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIsICZX
YXNtOjp3YXNtVG9KU0V4Y2VwdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0
YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21p
c2UsIEpTVmFsdWUgYnVmZmVyLCBKU09iamVjdCogaW1wb3J0T2JqZWN0KQpAQCAtMTY1LDcgKzE2
Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJj
ZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpKTsK
IAotICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyh2bSwgV1RGTW92ZShzb3VyY2UpLCBj
cmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW1w
b3J0T2JqZWN0LCBnbG9iYWxPYmplY3RdIChWTSYgdm0sIFdhc206Ok1vZHVsZTo6VmFsaWRhdGlv
blJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFz
eW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdh
c206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxP
YmplY3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0
YWJsZSB7CiAgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29u
KHByb21pc2UsIFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0ID0g
V1RGTW92ZShyZXN1bHQpLCAmdm1dICgpIG11dGFibGUgewogICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yMTMsNyArMjE1LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhl
Y1N0YXRlKiBleGVjKQogICAgIHNpemVfdCBieXRlU2l6ZTsKICAgICB1aW50OF90KiBiYXNlID0g
Z2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgYnl0ZU9mZnNl
dCwgYnl0ZVNpemUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIEJCUVBsYW4gcGxhbigmdm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6
ZSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOworICAgIEJCUVBs
YW4gcGxhbigmdm0ud2FzbUNvbnRleHQsIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSwgQkJR
UGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1FOiBX
ZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3Qg
dGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjAxNQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9y
LmNwcAppbmRleCAxMTg2NWY1Li4yYzViYzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAK
QEAgLTkwLDggKzkwLDE1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICBSZWZQdHI8V2FzbTo6VGFibGU+IHdhc21UYWJsZSA9IFdhc206OlRhYmxlOjpj
cmVhdGUoaW5pdGlhbCwgbWF4aW11bSk7CisgICAgaWYgKCF3YXNtVGFibGUpIHsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAor
ICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImNvdWxkbid0
IGNyZWF0ZSBUYWJsZSIpKSkpOworICAgIH0KKwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhl
Yywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVj
dHVyZSgpLCBpbml0aWFsLCBtYXhpbXVtKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgd2FzbVRhYmxlLnJlbGVhc2VO
b25OdWxsKCkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAKaW5kZXggMDIxYzYxOC4uNjhlOTU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAt
NjMsNyArNjMsNyBAQCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsTwogICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoIWZ1bmN0aW9uLT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246
OmluZm8oKSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9u
LiIpOwogICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24s
IE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFt
ZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCB7IHNpZ25hdHVyZUluZGV4LCBp
bnN0YW5jZS0+Y29kZUJsb2NrKCktPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5k
ZXgpIH0pOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkp
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgV2FzbTo6Q2FsbGFibGVG
dW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCBpbnN0YW5jZS0+d2FzbUNvZGVCbG9jaygpLndhc21U
b0pTQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpIH0gKTsKICAgICBjb25zdCBXYXNtOjpT
aWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUs
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0YW5jZSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvd2FzbS9XYXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NWIwYjlkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3dhc20vV2FzbU1vZHVsZS5oCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNlCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvV2FzbU1vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOTc1YzljOS4u
Nzg0MDNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCkBAIC03OSw2ICs3OSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNp
bmNsdWRlIDx3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaD4KKyNpbmNsdWRlIDx3YXNtL1dh
c21Nb2R1bGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLS0gCjIuOS4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322103</attachid>
            <date>2017-09-28 11:44:24 -0700</date>
            <delta_ts>2017-10-02 22:31:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-our-implementation.patch</filename>
            <type>text/plain</type>
            <size>433534</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBjMzAxNjFhNzI3Nzk1MDVhYmU1YjU3YzhmZTc1NDMwZjYxMDYwM2VmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDI1IEF1ZyAyMDE3IDExOjAwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBvdXIgaW1wbGVtZW50YXRpb24KClRoaXMgY2hh
bmdlIGVudGFpbHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hp
Y2ggd2UgaGFkCmludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKwppbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNw
ZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCmFsbG93aW5nIEpTQydz
IFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVkaW5n
CkpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mg
bm90ICp0aGUqIHRoaW5nCnlldCkuIEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3
IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQgdG8KY2hhbmdlLiBBIGZvbGxvdy11
cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgoKSSB3ZW50IGFib3V0IHRoaXMg
Y2hhbmdlIGluIHRoZSBzaW1wbGVzdCB3YXkgcG9zc2libGU6IGdyZXAgdGhlCkphdmFTY3JpcHRD
b3JlL3dhc20gZGlyZWN0b3J5IGZvciAiSlNbXkNfXSIgYXMgd2VsbCBhcyAiVk0iIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgKiBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgKiBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgKiBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogICogRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAqIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogICogSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAqIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAq
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgKiBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAqIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAqIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgKiBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAqIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgKiBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAqIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAq
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAqIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAqIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogICogU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAqIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgKiBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgKiBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NTggKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgICAgICAgICB8ICAyMSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaCAgICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
YWdlQ291bnQuaCAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCAgICAgICAgICAgfCAxMjIgKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAgICAgICAgfCAgNzYgKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCAgICAgICAgICB8ICA1OSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oICAgICAgICAgICAgfCAg
IDUgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCAgICAgICAg
fCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oICAgICAg
ICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAg
ICAgICAgICB8IDIyNyArKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oICAgICAgICAgICB8ICA0OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgfCAgIDAKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sgPT4g
anN9L0pTV2ViQXNzZW1ibHkuaCAgIHwgIDUwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAgICAgICAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTE4ICsrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDg1ICsrLQogLi4uL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAgfCAgNzYgKystCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggICB8ICAxMyAr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgfCAg
MzIgKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAg
fCAgMjUgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5j
cHAgIHwgIDc1ICstLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmggfCAgNDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCAgICAgICAgIHwgNjU2ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCAgICAgICAgICAgfCAgNDkgKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIHwgIDI2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAgICB8ICAgNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgMTMgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcCAgICAgICAgIHwgICAz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8
ICAxOSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAg
ICAgfCAgIDUgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAg
ICAgICAgIHwgIDIyICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgICB8ICAxNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVj
dG9yLmNwcCAgICAgICAgfCAgIDkgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAgICAgICAgIHwgICAyICstCiBTb3VyY2UvV1RGL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArCiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRy
YXMuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArCiBTb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaCB8ICAgMiArCiAuLi4vV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8ICAgMSArCiAxMTQgZmlsZXMgY2hh
bmdlZCwgMzExOCBpbnNlcnRpb25zKCspLCAxNzQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5j
ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeU1vZGUuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeU1vZGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAwJSkKIHJlbmFtZSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggKDYyJSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9K
Uy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvd2FzbS9XYXNtTW9kdWxlLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJhNzk4NDEuLmU3NGNjMjAgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTctMDktMjggIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAg
IFdlYkFzc2VtYmx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFu
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRXhj
ZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMg
cGVyCisgICAgICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdl
OiBpdCB1c2VkIHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRoZSBjb3JyZXNw
b25kaW5nIHRlc3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qczoKKyAg
ICAgICAgKGFzc2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAg
ICAgKGFzc2VydC50aHJvd3MpOgorCiAyMDE3LTA5LTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJv
ZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04oMjEwODM3KTogUmVnRXhwIGNvbnRh
aW5pbmcgZmFpbGVkIG5vbi16ZXJvIG1pbmltdW0gZ3JlZWR5IGdyb3VwcyBpbmNvcnJlY3RseSBt
YXRjaApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uN2ZlNmIxMyAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0
IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIq
NjQqMTAyNCk7CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5j
ZSBpdCBmYWlscy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVy
cm9yLCAiT3V0IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdy
b3coMTAwMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNl
ZWQgdGhlIG1lbW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOyAKICAgICBhc3NlcnRFcShi
dWZmZXIuYnl0ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnkuYnVmZmVy
LCBidWZmZXIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0ZCAxMDA2
NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFi
bGVJbXBvcnQodGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0
cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVy
IHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxp
bWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVh
dGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tp
bml0aWFsOiAyKiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBw
YWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUn
cyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJd
LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQg
LyAyNzogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmln
LCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBj
b3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCiAgICAgXTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGNjZDZiYzUuLjI2NDc1Y2UxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NjEgQEAKKzIwMTctMDktMjggIEpGIEJhc3RpZW4gIDxq
ZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBubyBWTSAvIEpTIHZl
cnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGVudGFpbHMgY2xlYW5pbmcgdXAg
YW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hpY2ggd2UgaGFkCisgICAgICAgIGludGVy
dHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50IEpTIG9iamVjdHMsIGFu
ZCBwdXJlIEMrKworICAgICAgICBpbXBsZW1lbnRhdGlvbiBvYmplY3RzLiBUaGlzIHNwZWNpZmlj
IGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCisgICAgICAgIGFsbG93aW5nIEpT
QydzIFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1cCB0byBidXQgZXhjbHVk
aW5nCisgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUncyBXYXNtOjpJbnN0YW5j
ZSwgYnV0IGl0J3Mgbm90ICp0aGUqIHRoaW5nCisgICAgICAgIHlldCkuIEJlY2F1c2Ugb2YgdGhp
cyB3ZSBzdGlsbCBoYXZlIGEgZmV3IEZJWE1FIGlkZW50aWZ5aW5nIHBsYWNlcyB0aGF0IG5lZWQg
dG8KKyAgICAgICAgY2hhbmdlLiBBIGZvbGxvdy11cCBjaGFuZ2Ugd2lsbCBnbyB0aGUgcmVzdCBv
ZiB0aGUgd2F5LgorCisgICAgICAgIEkgd2VudCBhYm91dCB0aGlzIGNoYW5nZSBpbiB0aGUgc2lt
cGxlc3Qgd2F5IHBvc3NpYmxlOiBncmVwIHRoZQorICAgICAgICBKYXZhU2NyaXB0Q29yZS93YXNt
IGRpcmVjdG9yeSBmb3IgIkpTW15DX10iIGFzIHdlbGwgYXMgIlZNIiBhbmQgZXhjbHVkZSB0aGUg
L2pzLworICAgICAgICBzdWItZGlyZWN0b3J5ICh3aGljaCBjb250YWlucyB0aGUgSlMgaW1wbGVt
ZW50YXRpb24gb2YgV2ViQXNzZW1ibHkpLgorCisgICAgICAgIE5vbmUgb2YgdGhpcyBjaGFuZ2Ug
cmVtb3ZlcyB0aGUgbmVlZCBmb3IgYSBKSVQgZW50aXRsZW1lbnQgdG8gYmUgYWJsZSB0byB1c2UK
KyAgICAgICAgV2ViQXNzZW1ibHkuIFdlIGRvbid0IGhhdmUgYW4gaW50ZXJwcmV0ZXIsIHRoZSBw
cm9jZXNzIHRoZXJlZm9yZSBzdGlsbCBuZWVkcyB0bworICAgICAgICBiZSBhbGxvd2VkIHRvIEpJ
VCB0byB1c2UgdGhlc2UgcHVyZS1DKysgQVBJcy4KKworICAgICAgICBJbnRlcmVzdGluZyB0aGlu
Z3MgdG8gbm90ZToKKworICAgICAgICAgICogUmVtb3ZlIFZNIGZyb20gUGxhbiBhbmQgYXNzb2Np
YXRlZCBwbGFjZXMuIEl0IGNhbiBqdXN0IGxpdmUgYXMgYSBjYXB0dXJlIGluCisgICAgICAgICAg
ICB0aGUgY2FsbGJhY2sgbGFtYmRhIGlmIGl0J3MgbmVlZGVkLgorICAgICAgICAgICogV2FzbTo6
TWVtb3J5IHNob3VsZG4ndCByZXF1aXJlIGEgVk0uIEl0IHdhcyBvbmx5IHVzZWQgdG8gYXNrIHRo
ZSBHQyB0bworICAgICAgICAgICAgY29sbGVjdC4gV2Ugbm93IGluc3RlYWQgcGFzcyB0d28gbGFt
YmRhcyBhdCBjb25zdHJ1Y3Rpb24gdGltZSBmb3IgdGhpcworICAgICAgICAgICAgcHVycG9zZTog
b25lIHRvIG5vdGlmeSBvZiBtZW1vcnkgcHJlc3N1cmUsIGFuZCB0aGUgb3RoZXIgdG8gYXNrIGZv
cgorICAgICAgICAgICAgc3luY3Job25vdXMgbWVtb3J5IHJlY2xhbWF0aW9uLiBUaGlzIGFsbG93
cyB3aG9ldmVyIGNyZWF0ZXMgdGhlIG1lbW9yeSB0bworICAgICAgICAgICAgZGljdGF0ZSBob3cg
dG8gcmVhY3QgdG8gYm90aCB0aGVzZSBjYXNlcywgYW5kIGZvciBhIEpTIGVtYmVkZGluZyB0aGF0
J3MgdG8KKyAgICAgICAgICAgIGNhbGwgdGhlIEdDIChhc3luYyBvciBzeW5jLCByZXNwZWN0aXZl
bHkpLgorICAgICAgICAgICogTW92ZSBncm93IGxvZ2ljIGZyb20gSlNXZWJBc3NlbWJseU1lbW9y
eSB0byBXYXNtOjpNZW1vcnk6Omdyb3cuIFVzZSBFeHBlY3RlZAorICAgICAgICAgICAgdGhlcmUs
IHdpdGggYW4gZW51bSBjbGFzcyBmb3IgZmFpbHVyZSB0eXBlcy4KKyAgICAgICAgICAqIEV4Y2Vl
ZGluZyBtYXggb24gbWVtb3J5IGdyb3d0aCBub3cgcmV0dXJucyBhIHJhbmdlIGVycm9yIGFzIHBl
ciBzcGVjLiBUaGlzCisgICAgICAgICAgICBpcyBhICh2ZXJ5IG1pbm9yKSBicmVha2luZyBjaGFu
Z2U6IGl0IHVzZWQgdG8gdGhyb3cgT09NIGVycm9yLiBVcGRhdGUgdGhlCisgICAgICAgICAgICBj
b3JyZXNwb25kaW5nIHRlc3QuCisgICAgICAgICAgKiBXaGVuIGdlbmVyYXRpbmcgdGhlIGdyb3df
bWVtb3J5IG9wY29kZSwgbm8gbmVlZCB0byBnZXQgdGhlIFZNLiBJbnN0ZWFkLAorICAgICAgICAg
ICAgcmVhY2ggZGlyZWN0bHkgZm9yIFdhc206Ok1lbW9yeSBhbmQgZ3JvdyBpdC4KKyAgICAgICAg
ICAqIEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cgY2FuIG5vdyBhbHdheXMgdGhyb3cgb24gZmFp
bHVyZSwgYmVjYXVzZSBpdCdzIG9ubHkKKyAgICAgICAgICAgIGV2ZXIgY2FsbGVkIGZyb20gSlMg
KG5vdCBmcm9tIGdyb3dfbWVtb3J5IGFzIGJlZm9yZSkuCisgICAgICAgICAgKiBXYXNtOjpNZW1v
cnkgbm93IHRha2VzIGEgY2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgZ3Jvd3RoLiBUaGlzIGFsbG93
cyBKUworICAgICAgICAgICAgd3JhcHBlcnMgdG8gcmVnaXN0ZXIgdGhlbXNlbHZlcyB3aGVuIGdy
b3d0aCBzdWNjZWVkcyB3aXRob3V0IFdhc206Ok1lbW9yeQorICAgICAgICAgICAga25vd25pbmcg
YW55dGhpbmcgYWJvdXQgSlMuIEl0J2xsIGFsc28gYWxsb3cgY3JlYXRpbmcgYSBsaXN0IG9mIGNh
bGxiYWNrcworICAgICAgICAgICAgZm9yIHdoZW4gd2UgYWRkIHRocmVhZCBzdXBwb3J0ICh3ZSds
bCB3YW50IHRvIG5vdGlmeSBtYW55IHdyYXBwZXJzLCBhbGwKKyAgICAgICAgICAgIHVuZGVyIGEg
bG9jaykuCisgICAgICAgICAgKiBXYXNtOjpNZW1vcnkgaXMgbm93IGJhY2sgdG8gYmVpbmcgdGhl
IHNvdXJjZSBvZiB0cnV0aCBhYm91dCBhZGRyZXNzIC8gc2l6ZSwKKyAgICAgICAgICAgIHVzZWQg
ZGlyZWN0bHkgYnkgZ2VuZXJhdGVkIGNvZGUgaW5zdGVhZCBvZiBKU1dlYkFzc2VtYmx5TWVtb3J5
LgorICAgICAgICAgICogTW92ZSB3YXNtVG9KUyBmcm9tIHRoZSBnZW5lcmFsIFdhc21CaW5kaW5n
IGhlYWRlciB0byBpdHMgb3duIGhlYWRlciB1bmRlcgorICAgICAgICAgICAgd2FzbS9qcy4gSXQn
cyBvbmx5IHVzZWQgYnkgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCwgYW5kIHVz
ZXMgVk0sCisgICAgICAgICAgICBhbmQgdGhlcmVmb3JlIGlzbid0IGdlbmVyYWwgV2ViQXNzZW1i
bHkuCisgICAgICAgICAgKiBNYWtlIFdhc206OkNvbnRleHQgYW4gYWN0dWFsIHR5cGUgKGp1c3Qg
YSBzdHJ1Y3QgaG9sZGluZyBhCisgICAgICAgICAgICBKU1dlYkFzc2VtbHlJbnN0YW5jZSBmb3Ig
bm93KSBpbnN0ZWFkIG9mIGFuIGFsaWFzIGZvciB0aGF0LiBOb3RhYmx5IHRoaXMKKyAgICAgICAg
ICAgIGRvZXNuJ3QgYWRkIGFueXRoaW5nIHRvIHRoZSBDb250ZXh0IGFuZCBkb2Vzbid0IGNoYW5n
ZSB3aGF0IGFjdHVhbGx5IGdldHMKKyAgICAgICAgICAgIHBhc3NlZCBhcm91bmQgaW4gSklUIGNv
ZGUgKGZhc3QgVExTIG9yIHJlZ2lzdGVycykgYmVjYXVzZSB0aGVzZSBjaGFuZ2VzCisgICAgICAg
ICAgICBwb3RlbnRpYWxseSBpbXBhY3QgcGVyZm9ybWFuY2UuIFRoZSBlbnRpcmUgcHVycG9zZSBv
ZiB0aGlzIGNoYW5nZSBpcyB0bworICAgICAgICAgICAgYWxsb3cgcGFzc2luZyBXYXNtOjpDb250
ZXh0IGFyb3VuZCB3aXRob3V0IGhhdmluZyB0byBrbm93IGFib3V0IFZNLiBTaW5jZSBWTQorICAg
ICAgICAgICAgY29udGFpbnMgYSBXYXNtOjpDb250ZXh0IHRoZSBKUyBlbWJlZGRpbmcgaXMgZWZm
ZWN0aXZlbHkgdGhlIHNhbWUsIGJ1dCB3aXRoCisgICAgICAgICAgICB0aGlzIHNldHVwIGEgbm9u
LUpTIGVtYmVkZGluZyBpcyBtdWNoIGJldHRlciBvZmYuCisgICAgICAgICAgKiBNb3ZlIEpTV2Vi
QXNzZW1ibHkgaW50byB0aGUgSlMgZm9sZGVyLgorICAgICAgICAgICogT01HUGxhbjogdXNlIFdh
c206OkNvZGVCbG9jayBkaXJlY3RseSBpbnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
CisgICAgICAgICAgKiB3YXNtLT5KUyBzdHVicyBhcmUgbm93IG9uIFdhc206OkNvZGVCbG9jaydz
IHRhaWwgYXMgcmF3IHBvaW50ZXJzLCBpbnN0ZWFkIG9mCisgICAgICAgICAgICBiZWluZyBvbiBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLCBhbmQgYXJlIG5vdyBjYWxsZWQgd2FzbS0+RW1iZWRkZXIK
KyAgICAgICAgICAgIHN0dWJzLiBUaGUgb3duZWQgcmVmZXJlbmNlIGlzIHN0aWxsIG9uIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBpcyBzdGlsbAorICAgICAgICAgICAgY2FsbGVkIHdhc20t
PkpTIHN0dWIuIFRoaXMgbW92ZSBtZWFucyB0aGF0IHRoZSBlbWJlZGRlciBtdXN0LCBhZnRlciBj
cmVhdGluZworICAgICAgICAgICAgYSBXYXNtOjpDb2RlQmxvY2ssIHNvbWVob3cgY3JlYXRlIHRo
ZSBzdHVicyB0byBjYWxsIGJhY2sgaW50byB0aGUKKyAgICAgICAgICAgIGVtYmVkZGVyLiBUaGlz
IGlzbid0IGFkZGluZyBhbnkgaW5kaXJlY3Rpb24gdG8gdGhlIGdlbmVyYXRlZCBjb2RlIGJlY2F1
c2UKKyAgICAgICAgICAgIHRoZSBCMyBJUiBnZW5lcmF0b3Igbm93IHJlYWNoZXMgZm9yIFdhc206
OkNvZGVCbG9jayBpbnN0ZWFkIG9mCisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LgorICAgICAgICAgICogTW92ZSBtb3JlIENvZGVCbG9jayB0aGluZ3MuIENvbXBpbGF0aW9uIGNv
bXBsZXRpb24gaXMgbm93IG1hcmtlZCBieSBpdHMgb3duCisgICAgICAgICAgICBhdG9taWM8Ym9v
bD4gZmxhZyBpbnN0ZWFkIG9mIGEgbnVsbHB0ciBwbGFuOiB0aGF0IHJlcXVpcmVkIHVzaW5nIGEg
bG9jaywgYW5kCisgICAgICAgICAgICB3YXMgY2F1c2luZyBhIGRlYWRsb2NrIGluIHN0YWNrLXRy
YWNlLmpzIGJlY2F1c2UgYmVmb3JlIG15IGNoYW5nZXMKKyAgICAgICAgICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sgZGlkIGl0cyBvd24gY29tcGxldGlvbiBjaGVja2luZyBzZXBhcmF0ZWx5IGZy
b20KKyAgICAgICAgICAgIFdhc206OkNvZGVCbG9jaywgd2l0aG91dCBnZXR0aW5nIHRoZSBsb2Nr
LiBOb3cgdGhhdCBldmVyeXRoaW5nIHBvaW50cyB0bworICAgICAgICAgICAgV2FzbTo6Q29kZUJs
b2NrIGFuZCB0aGVyZSdzIG5vIGNhY2hlZCBjb21wbGV0aW9uIG1hcmtlciwgdGhlIGxvY2sgd2Fz
IGJlaW5nCisgICAgICAgICAgICBhY3F1aXJlZCBpbiBhIHNhbml0eS1jaGVjayBhc3NlcnRpb24u
CisgICAgICAgICAgKiBFbWJlZGRlciAtPiBXYXNtIHdyYXBwZXJzIGFyZSBub3cgZ2VuZXJhdGVk
IHRocm91Z2ggYSBmdW5jdGlvbiB0aGF0J3MgcGFzc2VkCisgICAgICAgICAgICBpbiBhdCBjb21w
aWxhdGlvbiB0aW1lLCBpbnN0ZWFkIG9mIGJlaW5nIGhhcmQtY29kZWQgYXMgYSBKUyAtPiBXYXNt
IHdyYXBwZXIuCisgICAgICAgICAgKiBXYXNtTWVtb3J5IGRvZW5zJ3QgbmVlZCB0byBrbm93IGFi
b3V0IGZhdWx0IGhhbmRsaW5nIHRodW5rcy4gT25seSB0aGUgSVIKKyAgICAgICAgICAgIGdlbmVy
YXRvciBzaG91bGQga25vdywgYW5kIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgZXhjZXB0aW9u
IHRocm93aW5nCisgICAgICAgICAgICB0aHVuayBpcyBnZW5lcmF0ZWQgaWYgYW55IG1lbW9yeSBp
cyBwcmVzZW50IChub3RlOiB3aXRoIHNpZ25hbCBoYW5kbGluZyBub3QKKyAgICAgICAgICAgIGFs
bCBvZiB0aGVtIGdlbmVyYXRlIGFuIGV4Y2VwdGlvbiBjaGVjaykuCisgICAgICAgICAgKiBNYWtl
IGV4Y2VwdGlvbiB0aHJvd2luZyBwbHVnZ2FibGU6IGluc3RlYWQgb2YgaGF2aW5nIGEgaGFyZC1j
b2RlZAorICAgICAgICAgICAgSlMtc3BlY2lmaWMgbGFtYmRhIHdlIG5vdyBoYXZlIGEgcmVndWxh
ciBDKysgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20gSklUCisgICAgICAgICAgICBjb2RlIHdo
ZW4gYSBXZWJBc3NlbWJseSBleGNlcHRpb24gaXMgdGhyb3duLiBUaGlzIGFsbG93cyBhbnkgZW1i
ZWRkZXIgdG8gZ2V0CisgICAgICAgICAgICBjYWxsZWQgYXMgdGhleSB3aXNoLiBGb3Igbm93IGEg
cHJvY2VzcyBjYW4gb25seSBoYXZlIGEgc2luZ2xlIG9mIHRoZXNlCisgICAgICAgICAgICBmdW5j
dGlvbnMgKGkuZS4gb25seSBvbmUgZW1iZWRkZXIgcGVyIHByb2Nlc3MpIGJlY2F1c2UgdGhlIHRy
YXAgaGFuZGxlciBpcyBhCisgICAgICAgICAgICBzaW5nbGV0b24uIFRoYXQgY2FuIGJlIGZpeGVk
IGluIGluICMxNzc0NzUuCisgICAgICAgICAgKiBDcmVhdGUgV2FzbUVtYmVkZGVyLmggd2hlcmUg
YWxsIGVtYmVkZGVyIHBsdWdnaW5nIHdpbGwgbGl2ZS4KKyAgICAgICAgICAqIFNwbGl0IHVwIEpT
V2ViQXNzZW1ibHlUYWJsZSBpbnRvIFdhc206OlRhYmxlIHdoaWNoIGlzCisgICAgICAgICAgICBy
ZWZjb3VudGVkLiBKU1dlYkFzc2VtYmx5VGFibGUgbm93IG9ubHkgY29udGFpbnMgdGhlIEpTIGZ1
bmN0aW9ucyBpbiB0aGUKKyAgICAgICAgICAgIHRhYmxlLCBhbmQgV2FzbTo6VGFibGUgaXMgd2hh
dCdzIHVzZWQgYnkgdGhlIEpJVCBjb2RlIHRvIGxvb2t1cCB3aGVyZSB0bworICAgICAgICAgICAg
Y2FsbCBhbmQgZG8gdGhlIGluc3RhbmNlIGNoZWNrIChmb3IgY29udGV4dCBzd2l0Y2gpLiBOb3Rl
IHRoYXQgdGhpcyBjcmVhdGVzCisgICAgICAgICAgICBhbiBleHRyYSBhbGxvY2F0aW9uIGZvciBh
bGwgdGhlIGluc3RhbmNlcyBpbiBXYXNtOjpUYWJsZSwgYW5kIGluIGV4Y2hhbmdlCisgICAgICAg
ICAgICByZW1vdmVzIGFuIGluZGlyZWN0aW9uIGluIEpJVCBjb2RlIGJlY2F1c2UgdGhlIGluc3Rh
bmNlIHVzZWQgdG8gYmUgb2J0YWluZWQKKyAgICAgICAgICAgIG9mZiBvZiB0aGUgSlMgZnVuY3Rp
b24uIEFsc28gbm90ZSB0aGF0IGl0J3MgdGhlIGVtYmVkZGVyIHRoYW4ga2VlcHMgdGhlCisgICAg
ICAgICAgICBpbnN0YW5jZXMgYWxpdmUsIG5vdCBXYXNtOjpUYWJsZSAod2hpY2ggaG9sZHMgYSBk
dW1iIHBvaW50ZXIgdG8gdGhlCisgICAgICAgICAgICBpbnN0YW5jZSksIGJlY2F1c2UgZG9pbmcg
b3RoZXJ3aXNlIHdvdWxkIGNhdXNlIHJlZmVyZW5jZSBjeWNsZXMuCisgICAgICAgICAgKiBBZGQg
V2FzbUluc3RhbmNlLiBJdCBkb2Vzbid0IGRvIG11Y2ggZm9yIG5vdywgb3ducyBnbG9iYWxzLgor
ICAgICAgICAgICogSlNXZWJBc3NlbWJseSBpbnN0YW5jZSBub3cgZG9lc24ndCBqdXN0IGNvbnRh
aW4gdGhlIGltcG9ydGVkIGZ1bmN0aW9ucyBhcworICAgICAgICAgICAgSlNPYmplY3RzLCBpdCBh
bHNvIGhhcyB0aGUgY29ycmVzcG9uZGluZyBpbXBvcnQncyBpbnN0YW5jZSBhbmQgd2FzbQorICAg
ICAgICAgICAgZW50cnlwb2ludC4gVGhpcyB0cmlwbGVzIHRoZSBzcGFjZSBhbGxvY2F0ZWQgcGVy
IGluc3RhbmNlJ3MgaW1wb3J0ZWQKKyAgICAgICAgICAgIGZ1bmN0aW9uLCBidXQgdGhlcmUgc2hv
dWxkbid0IGJlIHRoYXQgbWFueSBpbXBvcnRzLiBUaGlzIGhhcyB0d28gdXBzaWRlczogaXQKKyAg
ICAgICAgICAgIGNyZWF0ZXMgc21hbGxlciBhbmQgZmFzdGVyIGNvZGUsIGFuZCBtYWtlcyBpcyBl
YXNpZXIgdG8gZGlzYXNzb2NpYXRlCisgICAgICAgICAgICBlbWJlZGRlci1zcGVjaWZpYyB0aGlu
Z3MgZnJvbSBlbWJlZGRlci1uZXV0cmFsIHRoaW5ncy4gVGhlIHNtYWxsIC8gZmFzdGVyCisgICAg
ICAgICAgICB3aW4gaXMgaW4gdHdvIHBsYWNlczogQjMgSVIgZ2VuZXJhdG9yIG9ubHkgbmVlZHMg
b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbiBmb3IKKyAgICAgICAgICAgIHRoZSBjYWxsIG9wY29kZSAo
d2hlbiB0aGUgY2FsbGVkIGluZGV4IGlzIGFuIGltcG9ydCkgdG8ga25vdyB3aGV0aGVyIHRoZQor
ICAgICAgICAgICAgaW1wb3J0IGlzIHdhc20tPndhc20gb3Igd2FzbS0+ZW1iZWRkZXIgKHRoaXMg
aXNuJ3Qga25vd24gYXQgY29tcGlsZS10aW1lCisgICAgICAgICAgICBiZWNhdXNlIGl0J3MgZGVw
ZW5kZW50IG9uIHRoZSBpbXBvcnQgb2JqZWN0KSwgdGhpcyBpcyBub3cgZG9uZSBieSBzZWVpbmcg
aWYKKyAgICAgICAgICAgIHRoYXQgaW1wb3J0IGZ1bmN0aW9uIGhhcyBhbiBhc3NvY2lhdGVkIHRh
cmdldCBpbnN0YW5jZSAob25seSB3YXNtLT53YXNtCisgICAgICAgICAgICBkb2VzKTsgdGhlIG90
aGVyIHBsYWNlIGlzIHdhc21CaW5kaW5nIHdoaWNoIHVzZXMgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlv
biB0bworICAgICAgICAgICAgZmlndXJlIG91dCB0aGUgd2FzbS0+d2FzbSB0YXJnZXQgaW5zdGFu
Y2UsIGFuZCB0aGVuIGdldHMKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNl
dE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gdG8gZG8gYSB0YWlsCisgICAgICAgICAgICBj
YWxsLiBUaGUgZGlzYXNzb2NpYXRpb24gY29tZXMgYmVjYXVzZSB0aGUgdGFyZ2V0IGluc3RhbmNl
IGNhbiBiZQorICAgICAgICAgICAgV2FzbTo6SW5zdGFuY2Ugb25jZSB3ZSBjaGFuZ2Ugd2hhdCB0
aGUgQ29udGV4dCBpcywgYW5kCisgICAgICAgICAgICBXYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
biBpcyBhbHJlYWR5IGVtYmVkZGVyLWluZGVwZW5kZW50LiBBcyBhIG5leHQgc3RlcCBJCisgICAg
ICAgICAgICBjYW4gbW92ZSB0aGlzIHRhaWwgYWxsb2NhdGlvbiBmcm9tIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSB0byBXYXNtOjpJbnN0YW5jZSwKKyAgICAgICAgICAgIGFuZCBsZWF2ZSBpbXBvcnRG
dW5jdGlvbiBpbiBhcyBhbiBvcGFxdWUgcG9pbnRlciB3aGljaCBpcyBlbWJlZGRlci1zcGVjaWZp
YywKKyAgICAgICAgICAgIGFuZCBpbiBKUyB3aWxsIHJlbWFpbiBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+LgorICAgICAgICAgICogUmVuYW1lIFZNRW50cnlGcmFtZSB0byBFbnRyeUZyYW1lLCBhbmQg
aW4gbWFueSBwbGFjZXMgcGFzcyBhIHBvaW50ZXIgdG8gaXQKKyAgICAgICAgICAgIGFyb3VuZCBp
bnN0ZWFkIG9mIFZNLiBUaGlzIGlzIGEgZmlyc3Qgc3RlcCBpbiBhbGxvd2luZyBlbnRyeSBmcmFt
ZXMgd2hpY2gKKyAgICAgICAgICAgIGFyZW4ndCBzdG9yZWQgb24gVk0sIGJ1dCB3aGljaCBhcmUg
aW5zdGVhZCBzdG9yZWQgaW4gYW4gZW1iZWRkZXItc3BlY2lmaWMKKyAgICAgICAgICAgIGxvY2F0
aW9uLiBUaGF0IGNoYW5nZSB3b24ndCByZWFsbHkgYWZmZWN0IEpTIGV4Y2VwdCB0aHJvdWdoIGNv
ZGUgY2h1cm4sIGJ1dAorICAgICAgICAgICAgd2lsbCBhbGxvdyBXZWJBc3NlbWJseSB0byB1c2Ug
c29tZSBtYWNoaW5lcnkgaW4gYSBnZW5lcmljIG1hbm5lciB3aXRob3V0CisgICAgICAgICAgICBo
YXZpbmcgYSBWTS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6
OmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVn
Z2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXI6OnJldHVybkV2ZW50KToKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OnVud2luZEV2ZW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRpZEV4ZWN1dGVQcm9n
cmFtKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToK
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6Y29tcGlsZU9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVF
eGl0KToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpv
c3JFbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6Y2FsbGVyRnJhbWUpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6
OnVuc2FmZUNhbGxlckZyYW1lKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjYWxsZXJGcmFtZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkV4ZWNTdGF0ZTo6Y2FsbGVyRnJhbWVPckVudHJ5RnJhbWUgY29uc3QpOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OnVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lIGNvbnN0KToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZl
Q2FsbEZyYW1lVHJhY2VyOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIpOgorICAgICAgICAoSlNDOjpO
YXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZTo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0
aFJlc3RvcmUpOgorICAgICAgICAoSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9y
ZTo6fk5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKToKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6Om9wZXJh
dG9yKCkgY29uc3QpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlciBjb25zdCk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjp1bndpbmQpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHA6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6U3RhY2tWaXNpdG9yKToKKyAgICAgICAg
KEpTQzo6U3RhY2tWaXNpdG9yOjpnb3RvTmV4dEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tW
aXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9y
OjpGcmFtZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
Lmg6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlcklzRW50cnlGcmFt
ZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oOgorICAgICAg
ICAoSlNDOjpWTUVudHJ5UmVjb3JkOjpwcmV2VG9wRW50cnlGcmFtZSk6CisgICAgICAgIChKU0M6
OlZNRW50cnlSZWNvcmQ6OnVuc2FmZVByZXZUb3BFbnRyeUZyYW1lKToKKyAgICAgICAgKEpTQzo6
RW50cnlGcmFtZTo6dm1FbnRyeVJlY29yZE9mZnNldCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250
ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
ckltcGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6Y29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUT3Bj
b2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
bG9vcF9oaW50KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Nh
dGNoKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZUZvckdlbmVyYXRvcik6Cisg
ICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRHVtcENhbGxGcmFtZSk6CisgICAg
ICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJ
TlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAg
ICAgICAgKEpTQzo6dm1FbnRyeVJlY29yZCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9w
dGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjpGcmFtZVdh
bGtlcik6CisgICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjphZHZhbmNlVG9QYXJlbnRGcmFtZSk6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tU
cmFjZXMpOgorICAgICAgICAqIHJ1bnRpbWUvVGhyb3dTY29wZS5jcHA6CisgICAgICAgIChKU0M6
OlRocm93U2NvcGU6On5UaHJvd1Njb3BlKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgICog
cnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6dG9wRW50cnlGcmFtZU9mZnNldCk6Cisg
ICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6aXNTYW5lRnJhbWUp
OgorICAgICAgICAoSlNDOjpWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKToKKyAg
ICAgICAgKEpTQzo6Vk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKToKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENv
bXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6QkJRUGxh
bik6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgICogd2FzbS9XYXNt
QkJRUGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmg6CisgICAgICAg
IChKU0M6Oldhc206OkJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNt
L1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvV2FzbSk6CisgICAg
ICAgICogd2FzbS9XYXNtQmluZGluZy5oOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2Rl
QmxvY2s6OmNvbXBpbGVBc3luYyk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6c2V0
Q29tcGlsYXRpb25GaW5pc2hlZCk6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRTdHVicyk6CisgICAg
ICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAoSlND
OjpXYXNtOjpDb2RlQmxvY2s6OmltcG9ydFdhc21Ub0VtYmVkZGVyU3R1Yik6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Ondhc21Ub0pTQ2FsbFN0dWJGb3JJbXBvcnQp
OgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmNvbXBpbGF0aW9uRmluaXNoZWQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Ondhc21FbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgICogd2FzbS9XYXNt
Q29udGV4dC5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb250ZXh0Ojpsb2FkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q29udGV4dDo6c3RvcmUpOgorICAgICAgICAqIHdhc20vV2FzbUNvbnRleHQuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21FbWJlZGRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29udGV4dC5oLgorICAgICAgICAqIHdhc20vV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmg6Cisg
ICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtSW5zdGFuY2Uu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmguCisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpJbnN0YW5jZSk6Cisg
ICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp+SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpX
YXNtOjpJbnN0YW5jZTo6ZXh0cmFNZW1vcnlBbGxvY2F0ZWQgY29uc3QpOgorICAgICAgICAqIHdh
c20vV2FzbUluc3RhbmNlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6bW9kdWxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SW5zdGFuY2U6OmNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
OjptZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6dGFibGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6bG9hZEkzMkdsb2JhbCBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjpsb2FkSTY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SW5zdGFuY2U6OmxvYWRGMzJHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6bG9hZEY2NEdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Oklu
c3RhbmNlOjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNhY2hl
ZFN0YWNrTGltaXQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6c2V0Q2Fj
aGVkU3RhY2tMaW1pdCk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5LmNwcDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6fk1lbW9yeSk6CisgICAgICAg
IChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5Lmg6
CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkpOgorICAgICAgICAo
SlNDOjpXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSk6CisgICAgICAgICogd2FzbS9XYXNtTWVt
b3J5SW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCk6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVk
UmVnaXN0ZXJJbmZvKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OnRvU2F2ZSBjb25zdCk6Cisg
ICAgICAgICogd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6bWFrZVN0cmluZyk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5TW9kZS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmguCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
bWFrZVZhbGlkYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6dmFs
aWRhdGVTeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y29tcGlsZVN5bmMpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGU6OmNvbXBpbGVBc3luYyk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6Cisg
ICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQ
bGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6T01HUGxhbik6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR1BsYW46OnJ1bkZvckluZGV4KToKKyAgICAgICAgKiB3YXNtL1dhc21P
TUdQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtUGFnZUNvdW50Lmg6CisgICAgICAgIChKU0M6
Oldhc206OlBhZ2VDb3VudDo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtUGxh
bi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlBsYW4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpQbGFuOjpydW5Db21wbGV0aW9uVGFza3MpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
OjphZGRDb21wbGV0aW9uVGFzayk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnRyeVJlbW92
ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZG9udEZpbmFsaXplKToKKyAgICAgICAgKiB3YXNtL1dh
c21TaWduYXR1cmUuY3BwOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5oOgorICAgICAg
ICAqIHdhc20vV2FzbVRhYmxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OlRhYmxl
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6flRhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VGFibGU6OlRhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Omdy
b3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Y2xlYXJGdW5jdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206OlRhYmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtVGFi
bGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhYmxlLmguCisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjptYXhpbXVtIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OnNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om9m
ZnNldE9mRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om9mZnNldE9mSW5z
dGFuY2VzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmlzVmFsaWRTaXplKToKKyAgICAg
ICAgKiB3YXNtL1dhc21UaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0aHJvd0V4Y2Vw
dGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmlnZ2Vy
T01HVGllclVwVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OnNl
dFRocm93V2FzbUV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6dGhyb3dX
YXNtRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVua3MuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21Xb3JrbGlzdC5jcHA6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpzdG9w
QWxsUGxhbnNGb3JDb250ZXh0KToKKyAgICAgICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5oOgorICAg
ICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
Y3JlYXRlSlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmguCisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwLgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseS5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNX
ZWJBc3NlbWJseS5oLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2sp
OgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW5zdGFu
Y2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3ZWJBc3NlbWJseVRvSlNDYWxsZWUpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldE1lbW9yeSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWlsKToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbUVudHJ5cG9pbnQpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbnRlcm5hbE1lbW9yeSk6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6d2FzbUNvZGVCbG9jayBjb25z
dCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtVGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbUNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNt
TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjYWNoZWRTdGFj
a0xpbWl0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRD
YWNoZWRTdGFja0xpbWl0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3
YXNtTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtTW9k
dWxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjphbGxvY2F0aW9uU2l6
ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bW9kdWxlIGNvbnN0KToK
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjphZG9wdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OkpT
V2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpn
cm93KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6Z3Jvd1N1Y2Nlc3NDYWxs
YmFjayk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5Lmg6CisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24gY29uc3QpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5TW9kdWxlOjpleHBvcnRTeW1ib2xUYWJsZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNhbGxlZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZSk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpncm93KToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseVRhYmxlOjpnZXRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlU
YWJsZTo6Y2xlYXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6
c2V0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmg6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6aXNWYWxpZFNpemUpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Om1heGltdW0gY29uc3QpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OnNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5VGFibGU6OnRhYmxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDogQ29waWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwLgorICAgICAg
ICAoSlNDOjpXYXNtOjptYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbCk6CisgICAgICAgIChKU0M6Oldh
c206Ondhc21Ub0pTKToKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pOgor
ICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbik6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlNZW1vcnlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU1lbW9yeVBy
b3RvRnVuY0dyb3cpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5Q29tcGlsZUZ1bmMpOgor
ICAgICAgICAoSlNDOjppbnN0YW50aWF0ZSk6CisgICAgICAgIChKU0M6OmNvbXBpbGVBbmRJbnN0
YW50aWF0ZSk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uOjpjcmVhdGUpOgorCiAyMDE3LTA5LTI4ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbWlzc2luZyBleGNlcHRpb24gY2hlY2tzIGFuZCBi
b29rLWtlZXBpbmcgZm9yIGV4Y2VwdGlvbiBjaGVjayB2YWxpZGF0aW9uLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBmZWI3NDAxLi5iOTA1MmRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTA4MCw3ICsxMDgwLDcgQEAKIAkJNzlDNEIxNUUxQkEyMTU4RjAwRkQ1
OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVDMUJBMjE1OEYwMEZE
NTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlDRkM2RjAxQzMzQjEw
MDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5Q0ZDNkVGMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFu
Z2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlENUNENUIxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU5MUMxMTA2QTkwMENF
Q0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlEQUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNl
cHRpb25UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OURBRTI3OTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLzsgfTsK
KwkJNzlEQUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURBRTI3OTFFMDNDODIy
MDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMgLyogSGFz
T3duUHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVF
MEMwMDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4NTAwMDM4
NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTE0NTgsNyArMTQ1OCw2IEBACiAJCUFEMkZDQzIwMURCNTlDQjIwMEIz
RTczNiAvKiBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MxNDFEQjU5QzU5MDBCM0U3MzYg
LyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1dC5oICovOyB9OwogCQlBRDJGQ0MyMTFE
QjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzE1MURCNTlDNTkw
MEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oICovOyB9OwogCQlBRDJG
Q0MyRDFEQjgzOEZEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzI3MURCODM4QzQwMEIz
RTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oICovOyB9OwotCQlBRDJGQ0MzMTFEQjgzRDQ5
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHkuaCAqLzsgfTsKIAkJQUQ0MTJCMzQxRTdCMkU5RTAwOEFGMTU3IC8qIFdhc21Db250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQxMkIzMjFF
N0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDQyNTI1MTFFNUQwRTE0MDA5RDJBOTcgLyogRnVs
bENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFENDI1MjUwMUU1RDBERUIwMDlEMkE5NyAvKiBGdWxsQ29kZU9yaWdpbi5oICovOyB9Owog
CQlBRDQ5MzdDNDFEREJFNjE0MDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkzN0MyMUREQkU2
MEEwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDY2LDYgKzE0NjUsMTMgQEAKIAkJQUQ0
OTM3RDQxREREMjdERTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkzN0NBMURERDI3MzQwMDc3
QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggKi87IH07CiAJCUFENEIxREZBMURGMjQ0RTIw
MDcxQUUzMiAvKiBXYXNtQmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQ0QjFERjgxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmgg
Ki87IH07CiAJCUFENUI0MTZGMUVCQUZCNzcwMDhFRkE0MyAvKiBXYXNtTmFtZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QjQxNkUxRUJBRkI2NTAw
OEVGQTQzIC8qIFdhc21OYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2REQxRjY4OEI2NTAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2REMx
RjY4OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBX
YXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFENUMzNkRGMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFNjFGNjlFQzkx
MDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUEx
Rjc1QUQ2QTAwMEJDQUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBRDhERDZDRjFGNjcwODlGMDAwNEVCNTIgLyogSlNUb1dhc20u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVD
MzZFQjFGNzVBRDczMDAwQkNBQUYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8q
IEpTV2ViQXNzZW1ibHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlBRDVDMzZFQzFGNzVBRDdDMDAwQkNBQUYgLyogV2FzbVRvSlMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUVFMUY1RjYyM0Yw
MDEzMTNDMiAvKiBXYXNtVG9KUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUFENUMzNkVGMUY3QTI2M0EwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2
RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJB
IC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ4NkE5M0Ux
QUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBX
ZWFrR0NNYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQUQ4RkYzOTgxRUI1QkRCMjAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4RkYzOTUx
RUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MTU1LDkgKzQxNjEsMjUgQEAKIAkJQUQy
RkNDMTUxREI1OUM1OTAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzI2MURCODM4QzQw
MEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVByb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJB
c3NlbWJseVByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZD
QzI3MURCODM4QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVByb3RvdHlwZS5oOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUQy
RkNDMkUxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJBc3NlbWJseS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViQXNzZW1ibHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMzIxREM0MDQ1MzAwQjNFNzM2IC8qIFdh
c21Gb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUZv
cm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTQ3MUY0QkE3ODYw
MDY2OTkxMiAvKiBXQUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FCYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTRBMUY0REU2OEMwMDY2OTkxMiAvKiBXQUluc3RhbmNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdBSW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUQzRjFFNEIxRjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0FUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0QzFGNERF
NjhDMDA2Njk5MTIgLyogV0FNZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FNZW1vcnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTIxRjRGNEFFNTAwNjY5OTEyIC8qIFdB
TWVtb3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTMxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTW9kdWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQUQzRjFFNTQxRjRGNEFFNTAwNjY5OTEyIC8qIFdBSW5zdGFuY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0FJbnN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUFEM0YxRTU1MUY0RjRBRTUwMDY2OTkxMiAvKiBXQVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdBVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2
NDFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FFeGNl
cHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNjUxRjUwRTU3RjAw
NjY5OTEyIC8qIFdBRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBRXhjZXB0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNjgxRjU0N0NCNjAwNjY5
OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1lbW9y
eURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2OTFG
NTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
TWVtb3J5RGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2
QTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FJ
bXBvcnRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkIxRjU0
N0NCODAwNjY5OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBVGFi
bGVEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZDMUY1
NDdDQjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
QUltcG9ydE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZE
MUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXQVRhYmxlRGVzY3JpcHRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUFEM0YxRTcwMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdBRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNzExRjU0
QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FGdW5j
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENDEyQjMxMUU3QjJFOEEw
MDhBRjE1NyAvKiBXYXNtQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
NDEyQjMyMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRDQxMkIzNTFFN0I1N0MwMDA4QUYxNTcgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlSWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlSWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQx
NzIsMTUgKzQxOTQsMjggQEAKIAkJQUQ0QjFERjcxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5k
aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21CaW5kaW5n
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0QjFERjgxREYyNDRENzAwNzFB
RTMyIC8qIFdhc21CaW5kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21CaW5kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENUI0MTZFMUVCQUZC
NjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZEQzFGNjg4
QjVGMDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21FbWJlZGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZERTFGNjk5RUI2MDAwQkNB
QUYgLyogV2FzbUluc3RhbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21JbnN0YW5jZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRGMUY2OTlFQjYwMDBCQ0FB
RiAvKiBXYXNtSW5zdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUluc3RhbmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVRhYmxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21NZW1vcnlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFE
NUMzNkYwMUY3QTI2QkYwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21TaWduYXR1cmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25h
dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtU2lnbmF0dXJlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAv
KiBXZWFrR0NNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YWtHQ01hcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ4REQ2Q0Yx
RjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9XYXNtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTVG9XYXNtLmg7
IHBhdGggPSBqcy9KU1RvV2FzbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDhE
RDZEMDFGNjcwOEEzMDAwNEVCNTIgLyogSlNUb1dhc20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
SlNUb1dhc20uY3BwOyBwYXRoID0ganMvSlNUb1dhc20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21JbmRleE9yTmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2Fz
bUluZGV4T3JOYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21JbmRleE9yTmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEOUU4NTJF
MUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDsgcGF0aCA9IGpz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBhZ2VDb3VudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFEQkM1NEQyMURGOEVBMDAwMDVCRjczOCAvKiBXZWJBc3NlbWJs
eVRvSlNDYWxsZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5VG9KU0NhbGxlZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEQkM1NEQzMURGOEVBMDAwMDVCRjcz
OCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRvSlND
YWxsZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRUUxRjVGNjIzRjAw
MTMxM0MyIC8qIFdhc21Ub0pTLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdhc21Ub0pTLmg7IHBhdGggPSBq
cy9XYXNtVG9KUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREQwOUFFRjFGNUY2
MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2FzbVRvSlMu
Y3BwOyBwYXRoID0ganMvV2FzbVRvSlMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBREQwOUFGMjFGNjI0ODI5MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5LmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREQwOUFGMzFGNjI0ODJFMDAxMzEzQzIg
LyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Lmg7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhG
QTQzMUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFt
ZVNlY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDE5MCw2ICs0MjI1LDggQEAKIAkJQURFODAyOTYxRTA4RjFDOTAwNThERTc4
IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmNwcDsgcGF0
aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQURFODAyOTcxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlu
a0Vycm9yUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFz
c2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJv
clByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5RDFFMDhG
MjI2MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0
cnVjdG9yLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREZDMzBGNzFGNDdBN0I4MDA2NDUxRDMg
LyogV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXNzZW1ibHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQURGQzMwRjkxRjQ3QThDMDAwNjQ1MUQzIC8qIFdBTW9kdWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdBTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUI1OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25T
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU5Rjg5MzgxODkxQURCNTAw
RDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29s
RXhlY3V0YWJsZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBUb29s
RXhlY3V0YWJsZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NDIs
NiArNTY3OSwyNiBAQAogCQkJCTg2RjNFRUI2MTY4NTVBNUIwMDc3QjkyQSAvKiBPYmpjUnVudGlt
ZUV4dHJhcy5oICovLAogCQkJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0
cmluZy5jcHAgKi8sCiAJCQkJRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmggKi8sCisJCQkJQUQzRjFFNDcxRjRCQTc4NjAwNjY5OTEyIC8qIFdBQmFzZS5oICovLAor
CQkJCUFEM0YxRTY1MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJ
QUQzRjFFNjQxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmggKi8sCisJCQkJQUQzRjFF
NzExRjU0QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uY3BwICovLAorCQkJCUFEM0YxRTcwMUY1
NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmggKi8sCisJCQkJQUQzRjFFNkMxRjU0N0NCODAw
NjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmNwcCAqLywKKwkJCQlBRDNGMUU2QTFGNTQ3Q0I2MDA2
Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuaCAqLywKKwkJCQlBRDNGMUU1NDFGNEY0QUU1MDA2Njk5
MTIgLyogV0FJbnN0YW5jZS5jcHAgKi8sCisJCQkJQUQzRjFFNEExRjRERTY4QzAwNjY5OTEyIC8q
IFdBSW5zdGFuY2UuaCAqLywKKwkJCQlBRDNGMUU1MjFGNEY0QUU1MDA2Njk5MTIgLyogV0FNZW1v
cnkuY3BwICovLAorCQkJCUFEM0YxRTRDMUY0REU2OEMwMDY2OTkxMiAvKiBXQU1lbW9yeS5oICov
LAorCQkJCUFEM0YxRTY4MUY1NDdDQjYwMDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuY3Bw
ICovLAorCQkJCUFEM0YxRTY5MUY1NDdDQjYwMDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3Iu
aCAqLywKKwkJCQlBRDNGMUU1MzFGNEY0QUU1MDA2Njk5MTIgLyogV0FNb2R1bGUuY3BwICovLAor
CQkJCUFERkMzMEY5MUY0N0E4QzAwMDY0NTFEMyAvKiBXQU1vZHVsZS5oICovLAorCQkJCUFEM0Yx
RTU1MUY0RjRBRTUwMDY2OTkxMiAvKiBXQVRhYmxlLmNwcCAqLywKKwkJCQlBRDNGMUU0QjFGNERF
NjhDMDA2Njk5MTIgLyogV0FUYWJsZS5oICovLAorCQkJCUFEM0YxRTZEMUY1NDdDQjgwMDY2OTkx
MiAvKiBXQVRhYmxlRGVzY3JpcHRvci5jcHAgKi8sCisJCQkJQUQzRjFFNkIxRjU0N0NCODAwNjY5
OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9yLmggKi8sCisJCQkJQURGQzMwRjcxRjQ3QTdCODAwNjQ1
MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8sCiAJCQkJNURFM0QwRjQwREQ4RERGQjAwNDY4NzE0IC8q
IFdlYktpdEF2YWlsYWJpbGl0eS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBBUEk7CkBAIC02MDAx
LDggKzYwNTgsNiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlB
RDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8sCi0JCQkJQUQyRkNDMkUxREI4MzlGNzAw
QjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuY3BwICovLAotCQkJCUFEMkZDQzJGMURCODM5RjcwMEIz
RTczNiAvKiBKU1dlYkFzc2VtYmx5LmggKi8sCiAJCQkJNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2
IC8qIFdhc21CM0lSR2VuZXJhdG9yLmNwcCAqLywKIAkJCQk1M0Y0MEU5MjFENUE0QUIzMDA5OUEx
QjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0
OUQgLyogV2FzbUJCUVBsYW4uY3BwICovLApAQCAtNjAxOCw2ICs2MDczLDcgQEAKIAkJCQk1MjZB
QzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICovLAogCQkJCUFENDEyQjMx
MUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5jcHAgKi8sCiAJCQkJQUQ0MTJCMzIxRTdC
MkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi8sCisJCQkJQUQ1QzM2REMxRjY4OEI1RjAw
MEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovLAogCQkJCTc5REFFMjc5MUUwM0M4MjIwMEI1MjZB
QSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovLAogCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5
NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLywKIAkJCQk1MzgxQjkzODFFNjBFOTdE
MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oICovLApAQCAtNjAyNiw2ICs2MDgy
LDggQEAKIAkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2Vy
LmggKi8sCiAJCQkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5j
cHAgKi8sCiAJCQkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5o
ICovLAorCQkJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuY3BwICov
LAorCQkJCUFENUMzNkRGMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAqLywKIAkJ
CQlBRDAwNjU5RDFFQ0FDN0ZFMDAwQ0E5MjYgLyogV2FzbUxpbWl0cy5oICovLAogCQkJCTUzRTlF
MEE5MUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuY3BwICovLAogCQkJCTUz
RTlFMEFBMUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuaCAqLywKQEAgLTYw
MzMsNiArNjA5MSw4IEBACiAJCQkJNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1v
cnkuaCAqLywKIAkJCQk3OUI3NTk3MTFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9y
bWF0aW9uLmNwcCAqLywKIAkJCQk3OUI3NTk3MjFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9y
eUluZm9ybWF0aW9uLmggKi8sCisJCQkJQUQ1QzM2RjAxRjdBMjZCRjAwMEJDQUFGIC8qIFdhc21N
ZW1vcnlNb2RlLmNwcCAqLywKKwkJCQlBRDVDMzZFRTFGN0EyNjI5MDAwQkNBQUYgLyogV2FzbU1l
bW9yeU1vZGUuaCAqLywKIAkJCQk3OTAwODEzNjFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVs
ZS5jcHAgKi8sCiAJCQkJNzkwMDgxMzcxRTk1QThFQzAwNTJEN0NEIC8qIFdhc21Nb2R1bGUuaCAq
LywKIAkJCQk1M0U3NzdFMTFFOTJFMjY1MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9u
LmNwcCAqLywKQEAgLTYwNTQsNiArNjExNCw4IEBACiAJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlB
MUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAv
KiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyog
V2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuY3BwICovLAorCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUu
aCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8s
CiAJCQkJNTI1MEQyRDAxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQk1
M0U5RTBBRTFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggKi8sCkBAIC03NjU2
LDYgKzc3MTgsMTAgQEAKIAkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBRDhERDZEMDFGNjcwOEEz
MDAwNEVCNTIgLyogSlNUb1dhc20uY3BwICovLAorCQkJCUFEOERENkNGMUY2NzA4OUYwMDA0RUI1
MiAvKiBKU1RvV2FzbS5oICovLAorCQkJCUFERDA5QUYyMUY2MjQ4MjkwMDEzMTNDMiAvKiBKU1dl
YkFzc2VtYmx5LmNwcCAqLywKKwkJCQlBREQwOUFGMzFGNjI0ODJFMDAxMzEzQzIgLyogSlNXZWJB
c3NlbWJseS5oICovLAogCQkJCTUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmNwcCAqLywKIAkJCQlBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oICovLAogCQkJCTc5RUZENDgxMUVCQzA0NUMwMEYzREZFQSAv
KiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwICovLApAQCAtNzY3NSw2ICs3NzQx
LDggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvci5oICovLAogCQkJCUFEMkZDQkFFMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5VGFibGUuY3BwICovLAogCQkJCUFEMkZDQkFGMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5VGFibGUuaCAqLywKKwkJCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRv
SlMuY3BwICovLAorCQkJCUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICov
LAogCQkJCUFEMkZDQkIwMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUFEMkZDQkIyMURCNThE
QTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAgKi8sCkBA
IC03OTUwLDYgKzgwMTgsNyBAQAogCQkJCTBGRUM4NUJCMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0lu
c2VydGlvblNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREY2N0QyMUQ5QzZEMjcw
MDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNkU1NDUzMUM0NjhFNzQw
MEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVtb3J5T2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdhc21Ub0pTLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjMzOEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9w
dGltaXphdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLApAQCAtODA0MCw2ICs4MTA5LDcgQEAK
IAkJCQlFMzI4REFFQjFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNl
RGVmLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFQjFGNzVBRDczMDAwQkNBQUYgLyogSlNX
ZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1
IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRF
ODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5
RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVycyAqLywKQEAgLTgyNDQs
NiArODMxNCw3IEBACiAJCQkJMEZBNTgxQkMxNTBFOTUzMDAwQjlBMkQ5IC8qIERGR05vZGVUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlEQ0VFMjIwRDFDRUJBRjc1MDAwQzIzOTYgLyogREZHTnVs
bEFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0U3MTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlBRDVDMzZERDFGNjg4QjY1MDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCOUNFOTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDAxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZGMUM5MEM1NUIw
MDQ4MDE1MSAvKiBERkdPcEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtODM1NCw4ICs4NDI1LDEw
IEBACiAJCQkJMEYzQUM3NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtpbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHByZXNzaW9u
UmFuZ2VJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFQTFGNzVBRDZBMDAwQkNBQUYg
LyogSlNUb1dhc20uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUMzQzU3MUYzM0E0NTMwMEY1OUI2
QyAvKiBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQUQ1QzM2RTIxRjY5OUVDMDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NDMxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUkluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzNEVEQkY3MURCNUZGQzkwMERDODdBNSAvKiBGcmFtZVRy
YWNlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtODc1Nyw3ICs4ODMwLDYgQEAKIAkJCQlBNzQ4MkI5
MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQu
aCBpbiBIZWFkZXJzICovLAotCQkJCUFEMkZDQzMxMURCODNENDkwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyog
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlFRkQ0ODQxRUJD
MDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUQyRkNCRTMxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3IuaCBpbiBIZWFkZXJzICovLApAQCAtODk1MCw2ICs5MDIyLDcgQEAKIAkJCQlCQ0Qy
MDJENjBFMTcwNzA4MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjdDMzlGQjFDOEY2MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RTYxRjY5RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUIwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4
cE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkQxQzhGNjU5NTAwNDgwMTUxIC8q
IFJlZ0V4cE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkM0MEUxNzA2
QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTExOSw2
ICs5MTkyLDcgQEAKIAkJCQkwRkUwNTAyRDFBQTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJl
Z2lzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyog
VmlzaXRpbmdUaW1lb3V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFRjFGN0EyNjNBMDAw
QkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUExMURG
Nzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJhY2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNBNTYx
OTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDQxNDU1ZGIuLmI0YTRiNDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQKQEAgLTkzNSw3ICs5MzUsNiBAQCB0b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKIHRvb2xzL1ZNSW5zcGVjdG9y
LmNwcAogCi13YXNtL0pTV2ViQXNzZW1ibHkuY3BwCiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAogd2FzbS9XYXNtQkJRUGxhbi5jcHAKIHdhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC05NDMsMTIg
Kzk0MiwxNiBAQCB3YXNtL1dhc21DYWxsZWUuY3BwCiB3YXNtL1dhc21DYWxsaW5nQ29udmVudGlv
bi5jcHAKIHdhc20vV2FzbUNvZGVCbG9jay5jcHAKIHdhc20vV2FzbUNvbnRleHQuY3BwCit3YXNt
L1dhc21FbWJlZGRlci5oCiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCiB3YXNtL1dh
c21Gb3JtYXQuY3BwCiB3YXNtL1dhc21JbmRleE9yTmFtZS5jcHAKK3dhc20vV2FzbUluc3RhbmNl
LmNwcAord2FzbS9XYXNtSW5zdGFuY2UuaAogd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCiB3
YXNtL1dhc21NZW1vcnkuY3BwCiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKK3dhc20v
V2FzbU1lbW9yeU1vZGUuY3BwCiB3YXNtL1dhc21Nb2R1bGUuY3BwCiB3YXNtL1dhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5jcHAKIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTk1OCwxMCArOTYx
LDE1IEBAIHdhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKIHdhc20vV2FzbVBhZ2VDb3VudC5jcHAK
IHdhc20vV2FzbVBsYW4uY3BwCiB3YXNtL1dhc21TaWduYXR1cmUuY3BwCit3YXNtL1dhc21UYWJs
ZS5jcHAKK3dhc20vV2FzbVRhYmxlLmgKIHdhc20vV2FzbVRodW5rcy5jcHAKIHdhc20vV2FzbVZh
bGlkYXRlLmNwcAogd2FzbS9XYXNtV29ya2xpc3QuY3BwCiAKK3dhc20vanMvSlNUb1dhc20uY3Bw
Cit3YXNtL2pzL0pTVG9XYXNtLmgKK3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKIHdhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcApAQCAt
OTcxLDYgKzk3OSw4IEBAIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKIHdhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ci5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAord2FzbS9qcy9XYXNtVG9KUy5j
cHAKK3dhc20vanMvV2FzbVRvSlMuaAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNv
bnN0cnVjdG9yLmNwcAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5j
cHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCmluZGV4IDQyMjgwYzUu
LmY4YTM5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIENhbGxTaXRlSW5kZXggQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjpvcmlnaW5hbENhbGxTaXRlSW5kZXgoKSBjb25zdCB7IHJldHVy
biBzdHViCiB2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9u
SGFuZGxlcigpCiB7CiAgICAgcmVzdG9yZVNjcmF0Y2goKTsKLSAgICBqaXQtPmNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIobV92bSk7CisgICAgaml0LT5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihtX3ZtLnRvcEVudHJ5RnJh
bWUpOwogICAgIGlmIChuZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgLy8gVG8gdGhlIEpJVCB0aGF0IHByb2R1Y2VzIHRoZSBvcmlnaW5hbCBleGNlcHRpb24g
aGFuZGxpbmcKICAgICAgICAgLy8gY2FsbCBzaXRlLCB0aGV5IHdpbGwgZXhwZWN0IHRoZSBPU1Ig
ZXhpdCB0byBiZSBhcnJpdmVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyLmNwcAppbmRleCAzNDhjNjhjLi43NzE2ZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAxMywgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCiAgKgpAQCAtNjUyLDggKzY1Miw4IEBAIHZvaWQgRGVidWdnZXI6OnN0ZXBPdXRPZkZ1bmN0
aW9uKCkKICAgICBpZiAoIW1faXNQYXVzZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZNRW50
cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gbV92bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgbV9w
YXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1l
LT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpIDogbnVsbHB0cjsKKyAgICBFbnRyeUZyYW1l
KiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOworICAgIG1fcGF1c2VPbkNhbGxG
cmFtZSA9IG1fY3VycmVudENhbGxGcmFtZSA/IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUodG9wRW50cnlGcmFtZSkgOiBudWxscHRyOwogICAgIG1fcGF1c2VPblN0ZXBPdXQgPSB0cnVl
OwogICAgIHNldFN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVFbmFibGVkKTsKICAgICBub3RpZnlE
b25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCk7CkBAIC04MzEsOCArODMxLDggQEAgdm9pZCBE
ZWJ1Z2dlcjo6cmV0dXJuRXZlbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKCFtX2N1
cnJlbnRDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZNRW50cnlGcmFtZSogdG9w
Vk1FbnRyeUZyYW1lID0gbV92bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1l
KTsKKyAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOwor
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZy
YW1lKHRvcEVudHJ5RnJhbWUpOwogCiAgICAgLy8gUmV0dXJuaW5nIGZyb20gYSBjYWxsLCB0aGVy
ZSB3YXMgYXQgbGVhc3Qgb25lIGV4cHJlc3Npb24gb24gdGhlIHN0YXRlbWVudCB3ZSBhcmUgcmV0
dXJuaW5nIHRvLgogICAgIG1fcGFzdEZpcnN0RXhwcmVzc2lvbkluU3RhdGVtZW50ID0gdHJ1ZTsK
QEAgLTg1Niw4ICs4NTYsOCBAQCB2b2lkIERlYnVnZ2VyOjp1bndpbmRFdmVudChDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlG
cmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJh
bWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1f
Y3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBU
cmVhdCBzdGVwcGluZyBvdmVyIGFuIGV4Y2VwdGlvbiBsb2NhdGlvbiBsaWtlIGEgc3RlcC1vdXQu
CiAgICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSA9PSBtX3BhdXNlT25DYWxsRnJhbWUpCkBAIC04
ODYsOCArODg2LDggQEAgdm9pZCBEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiAgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gbV92bS50b3BWTUVudHJ5
RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZy
YW1lID0gbV92bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBt
X2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwogCiAgICAgLy8g
UmV0dXJuaW5nIGZyb20gYSBwcm9ncmFtLCBjb3VsZCBiZSBldmFsKCksIHRoZXJlIHdhcyBhdCBs
ZWFzdCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdlIGFyZSByZXR1cm5pbmcgdG8u
CiAgICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQgPSB0cnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCBkMTlkZGI3Li41ZmE0
OGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApA
QCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5k
bGVycygpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5l
bXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNr
LmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVu
dHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpAQCAtMTYwLDcgKzE2
MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAg
aWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8v
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBh
bmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAppbmRleCA1ODNiZjk4Li4wMjFlYWFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNyw3ICszMTcsNyBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgdW5zaWduZWQgYnl0ZWNvZGVJbgogICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJz
ID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0
OjphbGxGUFJzKCkpOwogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVyU2F2
ZUxvY2F0aW9ucy0+c2l6ZSgpOwotICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlS
ZWNvcmQodm0tPnRvcFZNRW50cnlGcmFtZSk7CisgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0g
dm1FbnRyeVJlY29yZCh2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1
cnJlbnRFbnRyeSA9IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSk7CiAgICAgICAgIGlmIChk
b250U2F2ZVJlZ2lzdGVycy5nZXQoY3VycmVudEVudHJ5LnJlZygpKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDM0MzMwOGMuLmFiN2FjNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODUsNyArMTg1LDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhl
YykKICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpIHsKICAgICAgICAg
ICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJy
aXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCiAgICAgICAgICAgICAvLyBTbywgd2UgbXVz
dCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAg
aml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigq
dm0pOworICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgICAgICAgICAgaml0LmxvYWRQ
dHIodm0tPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICAgICAgfQogICAgICAgICBqaXQuYWRkUHRyKApAQCAtNTM3LDcgKzUzNyw3
IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwg
Y29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hl
Y2tSZWdpc3RlcnMoKTsKIAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAg
ICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSk7CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252
ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCBiNzMyN2YzLi5kMGM0ZjQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC0xMzUsNyArMTM1LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50cnlKdW1wRGVzdGluYXRp
b24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUp
OwogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAKaW5kZXggZmYyY2U1Ni4uZmYyNDY3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBz
dGF0ZSwgU2FmZXBvaW50OjpSZXN1bHQmIHNhZmVwb2ludFJlc3VsdCkKIAogICAgIC8vIEVtaXQg
dGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgogICAgICpzdGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0
LmxhYmVsKCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0pOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwog
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCmluZGV4IDdjMDE4MWQuLjJhMWViNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBsaW5rKFN0
YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlDaGVj
ayA9IGppdC5jYWxsKCk7CiAKICAgICAgICAgICAgIGF1dG8gbm9FeGNlcHRpb24gPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbk9yRXF1YWwsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgICAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CisgICAg
ICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0udG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBFeGNlcHRpb25IYW5k
bGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAwZjEyYTM3Li4zYzNkZDhkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yNjQsNyAr
MjY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJ
bmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCmluZGV4IDhlMDgxZDcuLjFjN2U2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODYsNyArMTg2LDcgQEAgc3RhdGlj
IHZvaWQgY29tcGlsZVN0dWIoCiAgICAgLy8gVGhlIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8g
aXMgcmVzdGFibGlzaCBvdXIgZnJhbWUgaW4gdGhlIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgogICAg
IGlmIChleGl0LmlzR2VuZXJpY1Vud2luZEhhbmRsZXIoKSkgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOyAvLyBUaGUgZmlyc3QgdGltZSB3ZSBoaXQgdGhp
cyBleGl0LCBsaWtlIGF0IGFsbCBvdGhlciB0aW1lcywgdGhpcyBmaWVsZCBzaG91bGQgYmUgbm9u
LW51bGwuCi0gICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgICAgICBq
aXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgTWFjcm9Bc3NlbWJs
ZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtNDEyLDggKzQx
Miw4IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiB2bUNhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
ICAgICBSZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCk7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAg
ICAgaml0LmxvYWRQdHIoJnZtLT50b3BWTUVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6
OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICAgICAgaml0LmxvYWRQdHIoJnZtLT50b3BFbnRyeUZyYW1lLCBHUFJJbmZvOjpyZWdUMSk7Cisg
ICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6
Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAg
IH0KIAogICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgp
OyByZWcgPSByZWcubmV4dCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuY3BwCmluZGV4IDlmYTI5ZDAuLmJlNjFhNGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMy0yMDE0LCAyMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgogI2luY2x1ZGUg
Ildhc21Db250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CkBAIC0y
MTcsNyArMjE4LDcgQEAgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6d2FzbUF3YXJlTGV4aWNh
bEdsb2JhbE9iamVjdChWTSYgdm0pCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIGlmICgh
Y2FsbGVlKCkuaXNXYXNtKCkpCiAgICAgICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7
Ci0gICAgcmV0dXJuIFdhc206OmxvYWRDb250ZXh0KHZtKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
cmV0dXJuIHZtLndhc21Db250ZXh0LmxvYWQoKS0+Z2xvYmFsT2JqZWN0KCk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgcmV0dXJuIGxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAg
LTIzNywyNCArMjM4LDI0IEBAIGJvb2wgQ2FsbEZyYW1lOjppc0FueVdhc21DYWxsZWUoKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKFZN
RW50cnlGcmFtZSomIGN1cnJWTUVudHJ5RnJhbWUpCitDYWxsRnJhbWUqIENhbGxGcmFtZTo6Y2Fs
bGVyRnJhbWUoRW50cnlGcmFtZSomIGN1cnJFbnRyeUZyYW1lKQogewotICAgIGlmIChjYWxsZXJG
cmFtZU9yVk1FbnRyeUZyYW1lKCkgPT0gY3VyclZNRW50cnlGcmFtZSkgewotICAgICAgICBWTUVu
dHJ5UmVjb3JkKiBjdXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyclZNRW50cnlG
cmFtZSk7Ci0gICAgICAgIGN1cnJWTUVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJl
dlRvcFZNRW50cnlGcmFtZSgpOworICAgIGlmIChjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpID09
IGN1cnJFbnRyeUZyYW1lKSB7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVj
b3JkID0gdm1FbnRyeVJlY29yZChjdXJyRW50cnlGcmFtZSk7CisgICAgICAgIGN1cnJFbnRyeUZy
YW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnByZXZUb3BFbnRyeUZyYW1lKCk7CiAgICAgICAgIHJl
dHVybiBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcENhbGxGcmFtZSgpOwogICAgIH0KLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPckVudHJ5
RnJhbWUoKSk7CiB9CiAKLVNVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2Fm
ZUNhbGxlckZyYW1lKFZNRW50cnlGcmFtZSomIGN1cnJWTUVudHJ5RnJhbWUpCitTVVBQUkVTU19B
U0FOIENhbGxGcmFtZSogQ2FsbEZyYW1lOjp1bnNhZmVDYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYg
Y3VyckVudHJ5RnJhbWUpCiB7Ci0gICAgaWYgKHVuc2FmZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJh
bWUoKSA9PSBjdXJyVk1FbnRyeUZyYW1lKSB7Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJW
TUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAg
Y3VyclZNRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wVk1FbnRy
eUZyYW1lKCk7CisgICAgaWYgKHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gY3Vy
ckVudHJ5RnJhbWUpIHsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQg
PSB2bUVudHJ5UmVjb3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAgICAgICAgY3VyckVudHJ5RnJhbWUg
PSBjdXJyVk1FbnRyeVJlY29yZC0+dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUoKTsKICAgICAgICAg
cmV0dXJuIGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wQ2FsbEZyYW1lKCk7CiAgICAg
fQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPih1bnNhZmVDYWxsZXJGcmFtZU9y
Vk1FbnRyeUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPih1bnNh
ZmVDYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsKIH0KIAogU291cmNlT3JpZ2luIENhbGxGcmFt
ZTo6Y2FsbGVyU291cmNlT3JpZ2luKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaAppbmRleCA2MjMwOWEwLi42ZDVkNzIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC0xNDEsMTIgKzE0MSwxMiBA
QCBuYW1lc3BhY2UgSlNDICB7CiAKICAgICAgICAgQ2FsbEZyYW1lJiBvcGVyYXRvcj0oY29uc3Qg
UmVnaXN0ZXImIHIpIHsgKnN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcykgPSByOyByZXR1cm4g
KnRoaXM7IH0KIAotICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpKTsg
fQotICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1
cm4gY2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9Ci0gICAgICAgIFNVUFBSRVNTX0FT
QU4gdm9pZCogdW5zYWZlQ2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IHVuc2FmZUNhbGxlckZyYW1lQW5kUEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4o
Y2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSk7IH0KKyAgICAgICAgdm9pZCogY2FsbGVyRnJhbWVP
ckVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJh
bWU7IH0KKyAgICAgICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yRW50
cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHVuc2FmZUNhbGxlckZyYW1lQW5kUEMoKS5jYWxsZXJG
cmFtZTsgfQogCi0gICAgICAgIENhbGxGcmFtZSogdW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZy
YW1lKiYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
KFZNRW50cnlGcmFtZSomKTsKKyAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxsZXJGcmFtZShF
bnRyeUZyYW1lKiYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lKEVudHJ5RnJhbWUqJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU291cmNl
T3JpZ2luIGNhbGxlclNvdXJjZU9yaWdpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmgKaW5kZXggYzViNmI4My4uNzZhY2Q2NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgVk1FbnRyeUZyYW1lOwor
c3RydWN0IEVudHJ5RnJhbWU7CiAKIGNsYXNzIFN1c3BlbmRFeGNlcHRpb25TY29wZSB7CiBwdWJs
aWM6CkBAIC03NCwzMyArNzQsMzMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKHZt
KTsKICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZSk7Ci0gICAgICAgIEFTU0VSVChyZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0tPnRv
cFZNRW50cnlGcmFtZSkpOworICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbEZyYW1lKSA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZtLT50b3BFbnRyeUZyYW1lKSk7
CiAgICAgICAgIHZtLT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgfQogfTsKIAogY2xh
c3MgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgewogcHVibGljOgotICAgIEFMV0FZ
U19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUoVk0qIHZtLCBWTUVudHJ5
RnJhbWUqIHZtRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAgQUxXQVlTX0lO
TElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZShWTSogdm0sIEVudHJ5RnJhbWUq
IEVudHJ5RnJhbWUsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICA6IG1fdm0odm0pCiAg
ICAgewogICAgICAgICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAg
ICAgICAgbV9zYXZlZFRvcFZNRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CisgICAg
ICAgIG1fc2F2ZWRUb3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1f
c2F2ZWRUb3BDYWxsRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwotICAgICAgICB2bS0+dG9wVk1F
bnRyeUZyYW1lID0gdm1FbnRyeUZyYW1lOworICAgICAgICB2bS0+dG9wRW50cnlGcmFtZSA9IEVu
dHJ5RnJhbWU7CiAgICAgICAgIHZtLT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgfQog
CiAgICAgQUxXQVlTX0lOTElORSB+TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUoKQog
ICAgIHsKLSAgICAgICAgbV92bS0+dG9wVk1FbnRyeUZyYW1lID0gbV9zYXZlZFRvcFZNRW50cnlG
cmFtZTsKKyAgICAgICAgbV92bS0+dG9wRW50cnlGcmFtZSA9IG1fc2F2ZWRUb3BFbnRyeUZyYW1l
OwogICAgICAgICBtX3ZtLT50b3BDYWxsRnJhbWUgPSBtX3NhdmVkVG9wQ2FsbEZyYW1lOwogICAg
IH0KIAogcHJpdmF0ZToKICAgICBWTSogbV92bTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fc2F2ZWRU
b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogbV9zYXZlZFRvcEVudHJ5RnJhbWU7CiAg
ICAgQ2FsbEZyYW1lKiBtX3NhdmVkVG9wQ2FsbEZyYW1lOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggYTIyMThiMy4u
ODJkYTI5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCkBAIC02NTMsOSArNjUzLDkgQEAgcHVibGljOgogCiAgICAgICAgIG5vdGlm
eURlYnVnZ2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCi0gICAgICAgIGNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRvcik7CisgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3Ip
OwogCi0gICAgICAgIGJvb2wgc2hvdWxkU3RvcFVud2luZGluZyA9IHZpc2l0b3ItPmNhbGxlcklz
Vk1FbnRyeUZyYW1lKCk7CisgICAgICAgIGJvb2wgc2hvdWxkU3RvcFVud2luZGluZyA9IHZpc2l0
b3ItPmNhbGxlcklzRW50cnlGcmFtZSgpOwogICAgICAgICBpZiAoc2hvdWxkU3RvcFVud2luZGlu
ZykKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKQEAgLTY2Myw3ICs2
NjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihTdGFja1Zpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcihTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiAgICAgewogI2lmIEVOQUJMRShKSVQp
ICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCogY3VycmVudENhbGxlZVNhdmVzID0gdmlzaXRvci0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOwpAQCAtNjc2LDcgKzY3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIGludHB0cl90
KiBmcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3QqPihtX2NhbGxGcmFtZS0+cmVnaXN0
ZXJzKCkpOwogCiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjdXJyZW50Q2FsbGVl
U2F2ZXMtPnNpemUoKTsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJl
Y29yZChtX3ZtLnRvcFZNRW50cnlGcmFtZSk7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIHJlY29y
ZCA9IHZtRW50cnlSZWNvcmQobV92bS50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewogICAgICAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCBjdXJyZW50RW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmF0KGkpOwogICAg
ICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpA
QCAtNzAyLDcgKzcwMiw3IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6
OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVu
d2luZEZyb21DYWxsZXJGcmFtZSkgewotICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZU9yVk1FbnRyeUZyYW1lKCkgPT0gdm0udG9wVk1FbnRyeUZyYW1lKQorICAgICAgICBpZiAoY2Fs
bEZyYW1lLT5jYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpID09IHZtLnRvcEVudHJ5RnJhbWUpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IDg1ZDE0N2EuLmQwODJiNjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDQsMTggKzQ0LDE4IEBAIFN0YWNrVmlzaXRvcjo6U3RhY2tWaXNpdG9yKENh
bGxGcmFtZSogc3RhcnRGcmFtZSwgVk0qIHZtKQogICAgIENhbGxGcmFtZSogdG9wRnJhbWU7CiAg
ICAgaWYgKHN0YXJ0RnJhbWUpIHsKICAgICAgICAgQVNTRVJUKHZtKTsKLSAgICAgICAgbV9mcmFt
ZS5tX1ZNRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIG1fZnJhbWUu
bV9lbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgICAgIHRvcEZyYW1lID0gdm0t
PnRvcENhbGxGcmFtZTsKICAgICAgICAgCi0gICAgICAgIGlmICh0b3BGcmFtZSAmJiBzdGF0aWNf
Y2FzdDx2b2lkKj4obV9mcmFtZS5tX1ZNRW50cnlGcmFtZSkgPT0gc3RhdGljX2Nhc3Q8dm9pZCo+
KHRvcEZyYW1lKSkgewotICAgICAgICAgICAgdG9wRnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJh
bWUubV9WTUVudHJ5RnJhbWUpLT5tX3ByZXZUb3BDYWxsRnJhbWU7Ci0gICAgICAgICAgICBtX2Zy
YW1lLm1fVk1FbnRyeUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1l
KS0+bV9wcmV2VG9wVk1FbnRyeUZyYW1lOworICAgICAgICBpZiAodG9wRnJhbWUgJiYgc3RhdGlj
X2Nhc3Q8dm9pZCo+KG1fZnJhbWUubV9lbnRyeUZyYW1lKSA9PSBzdGF0aWNfY2FzdDx2b2lkKj4o
dG9wRnJhbWUpKSB7CisgICAgICAgICAgICB0b3BGcmFtZSA9IHZtRW50cnlSZWNvcmQobV9mcmFt
ZS5tX2VudHJ5RnJhbWUpLT5tX3ByZXZUb3BDYWxsRnJhbWU7CisgICAgICAgICAgICBtX2ZyYW1l
Lm1fZW50cnlGcmFtZSA9IHZtRW50cnlSZWNvcmQobV9mcmFtZS5tX2VudHJ5RnJhbWUpLT5tX3By
ZXZUb3BFbnRyeUZyYW1lOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9mcmFt
ZS5tX1ZNRW50cnlGcmFtZSA9IDA7CisgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gMDsK
ICAgICAgICAgdG9wRnJhbWUgPSAwOwogICAgIH0KLSAgICBtX2ZyYW1lLm1fY2FsbGVySXNWTUVu
dHJ5RnJhbWUgPSBmYWxzZTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVySXNFbnRyeUZyYW1lID0gZmFs
c2U7CiAgICAgcmVhZEZyYW1lKHRvcEZyYW1lKTsKIAogICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRo
ZSBjYWxsZXIgd2FudHMgdG8gc3RhcnQgdW53aW5kaW5nIGZyb20uCkBAIC03NSwxNCArNzUsMTQg
QEAgdm9pZCBTdGFja1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUoKQogICAgICAgICAgICAgICAgIHJl
YWRJbmxpbmVkRnJhbWUobV9mcmFtZS5jYWxsRnJhbWUoKSwgJmlubGluZUNhbGxGcmFtZS0+ZGly
ZWN0Q2FsbGVyKTsKICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX2ZyYW1lLmlu
bGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9mcmFtZS5tX1ZN
RW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWU7CisgICAgICAgICAgICBt
X2ZyYW1lLm1fZW50cnlGcmFtZSA9IG1fZnJhbWUubV9jYWxsZXJFbnRyeUZyYW1lOwogICAgICAg
ICAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUoKSk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCBjYWxsZXJD
b2RlT3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKLSAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50
cnlGcmFtZTsKKyAgICBtX2ZyYW1lLm1fZW50cnlGcmFtZSA9IG1fZnJhbWUubV9jYWxsZXJFbnRy
eUZyYW1lOwogICAgIHJlYWRGcmFtZShtX2ZyYW1lLmNhbGxlckZyYW1lKCkpOwogfQogCkBAIC0x
NTIsOSArMTUyLDkgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmkKIHsKICAgICBtX2ZyYW1lLm1f
Y2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKLSAgICBt
X2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX1ZNRW50cnlGcmFtZTsKLSAg
ICBtX2ZyYW1lLm1fY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKG1fZnJhbWUu
bV9DYWxsZXJWTUVudHJ5RnJhbWUpOwotICAgIG1fZnJhbWUubV9jYWxsZXJJc1ZNRW50cnlGcmFt
ZSA9IG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWUgIT0gbV9mcmFtZS5tX1ZNRW50cnlGcmFt
ZTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVyRW50cnlGcmFtZSA9IG1fZnJhbWUubV9lbnRyeUZyYW1l
OworICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUobV9m
cmFtZS5tX2NhbGxlckVudHJ5RnJhbWUpOworICAgIG1fZnJhbWUubV9jYWxsZXJJc0VudHJ5RnJh
bWUgPSBtX2ZyYW1lLm1fY2FsbGVyRW50cnlGcmFtZSAhPSBtX2ZyYW1lLm1fZW50cnlGcmFtZTsK
ICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSBmYWxzZTsKIAogICAgIENhbGxlZUJpdHMgY2Fs
bGVlID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIFN0YWNr
VmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBz
dGQ6OmZ1bmN0aW9uPAogCiAgICAgICAgICAgICBpbmRlbnQtLTsKICAgICAgICAgfQotICAgICAg
ICBvdXQucHJpbnQoaW5kZW50LCAidm1FbnRyeUZyYW1lOiAiLCBSYXdQb2ludGVyKHZtRW50cnlG
cmFtZSgpKSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChpbmRlbnQsICJFbnRyeUZyYW1lOiAi
LCBSYXdQb2ludGVyKG1fZW50cnlGcmFtZSksICJcbiIpOwogICAgICAgICBpbmRlbnQtLTsKICAg
ICB9CiAgICAgb3V0LnByaW50KGluZGVudCwgIn1cbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCmluZGV4IDhhZDA5NDAuLmUyYTEzNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBzaXplX3QgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7IH0KLSAgICAgICAgYm9vbCBjYWxsZXJJc1ZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGVySXNWTUVudHJ5RnJhbWU7IH0KKyAgICAgICAgYm9vbCBjYWxsZXJJc0VudHJ5
RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlcklzRW50cnlGcmFtZTsgfQogICAgICAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJGcmFtZTsgfQog
ICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9CiAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7
IH0KQEAgLTk3LDcgKzk3LDYgQEAgcHVibGljOgogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgICAgIENsb25lZEFyZ3VtZW50cyogY3Jl
YXRlQXJndW1lbnRzKCk7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9WTUVudHJ5RnJhbWU7IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxGcmFtZTsgfQogICAgICAgICAKICAgICAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiwgSW5kZW50ZXIgPSBJbmRlbnRlcigpKSBjb25zdDsKQEAgLTEx
NCw4ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogbV9pbmxpbmVD
YWxsRnJhbWU7CiAjZW5kaWYKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKLSAgICAg
ICAgVk1FbnRyeUZyYW1lKiBtX1ZNRW50cnlGcmFtZTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiBt
X0NhbGxlclZNRW50cnlGcmFtZTsKKyAgICAgICAgRW50cnlGcmFtZSogbV9lbnRyeUZyYW1lOwor
ICAgICAgICBFbnRyeUZyYW1lKiBtX2NhbGxlckVudHJ5RnJhbWU7CiAgICAgICAgIENhbGxGcmFt
ZSogbV9jYWxsZXJGcmFtZTsKICAgICAgICAgQ2FsbGVlQml0cyBtX2NhbGxlZTsKICAgICAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKQEAgLTEyMyw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHNpemVfdCBtX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICB1bnNpZ25l
ZCBtX2J5dGVjb2RlT2Zmc2V0OwogICAgICAgICBXYXNtOjpJbmRleE9yTmFtZSBtX3dhc21GdW5j
dGlvbkluZGV4T3JOYW1lOwotICAgICAgICBib29sIG1fY2FsbGVySXNWTUVudHJ5RnJhbWUgOiAx
OworICAgICAgICBib29sIG1fY2FsbGVySXNFbnRyeUZyYW1lIDogMTsKICAgICAgICAgYm9vbCBt
X2lzV2FzbUZyYW1lIDogMTsKIAogICAgICAgICBmcmllbmQgY2xhc3MgU3RhY2tWaXNpdG9yOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNRW50cnlSZWNv
cmQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgK
aW5kZXggZjM2YzJiZS4uMDEwM2E3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1ZNRW50cnlSZWNvcmQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXN0cnVjdCBWTUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIGNs
YXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIFZNOwogCkBAIC00MCw3ICs0MCw3IEBAIHN0cnVjdCBWTUVu
dHJ5UmVjb3JkIHsKICAgICAgKi8KICAgICBWTSogbV92bTsKICAgICBFeGVjU3RhdGUqIG1fcHJl
dlRvcENhbGxGcmFtZTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fcHJldlRvcFZNRW50cnlGcmFtZTsK
KyAgICBFbnRyeUZyYW1lKiBtX3ByZXZUb3BFbnRyeUZyYW1lOwogCiAjaWYgRU5BQkxFKEpJVCkg
JiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaW50cHRyX3QgY2Fs
bGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcltOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSU107
CkBAIC00OSwyMCArNDksMjAgQEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgIEV4ZWNTdGF0
ZSogcHJldlRvcENhbGxGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcENhbGxGcmFtZTsgfQogICAg
IFNVUFBSRVNTX0FTQU4gRXhlY1N0YXRlKiB1bnNhZmVQcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1
cm4gbV9wcmV2VG9wQ2FsbEZyYW1lOyB9CiAKLSAgICBWTUVudHJ5RnJhbWUqIHByZXZUb3BWTUVu
dHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BWTUVudHJ5RnJhbWU7IH0KLSAgICBTVVBQUkVT
U19BU0FOIFZNRW50cnlGcmFtZSogdW5zYWZlUHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJu
IG1fcHJldlRvcFZNRW50cnlGcmFtZTsgfQorICAgIEVudHJ5RnJhbWUqIHByZXZUb3BFbnRyeUZy
YW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wRW50cnlGcmFtZTsgfQorICAgIFNVUFBSRVNTX0FTQU4g
RW50cnlGcmFtZSogdW5zYWZlUHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BF
bnRyeUZyYW1lOyB9CiB9OwogCi1leHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNv
cmQoVk1FbnRyeUZyYW1lKik7CitleHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNv
cmQoRW50cnlGcmFtZSopOwogCi1zdHJ1Y3QgVk1FbnRyeUZyYW1lIHsKK3N0cnVjdCBFbnRyeUZy
YW1lIHsKICNpZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICBzdGF0aWMgcHRyZGlmZl90IHZtRW50cnlSZWNvcmRPZmZzZXQoKQogICAgIHsK
LSAgICAgICAgVk1FbnRyeUZyYW1lKiBmYWtlVk1FbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2Fz
dDxWTUVudHJ5RnJhbWUqPigweDEwMDApOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQg
PSB2bUVudHJ5UmVjb3JkKGZha2VWTUVudHJ5RnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiBm
YWtlRW50cnlGcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RW50cnlGcmFtZSo+KDB4MTAwMCk7Cisg
ICAgICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZUVudHJ5RnJh
bWUpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKLSAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIq
PihmYWtlVk1FbnRyeUZyYW1lKSk7CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZWNvcmQpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFrZUVudHJ5RnJhbWUpKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZz
ZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmlu
ZGV4IDhkMzFmN2EuLmE0YTRjMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAKQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdFJhbmRvbVRodW5rKFZNJiB2bSwgR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRj
aDEsCiB9CiAjZW5kaWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0pCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NB
VkVTX1JFR0lTVEVSUyA+IDAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2
ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwpAQCAtNjA1LDggKzYw
NSw4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtCiAgICAgfQogICAgIEFTU0VSVChzY3JhdGNo
ICE9IEludmFsaWRHUFJSZWcpOwogCi0gICAgbG9hZFB0cigmdm0udG9wVk1FbnRyeUZyYW1lLCBz
Y3JhdGNoKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2
ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0cigmdG9wRW50
cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpj
YWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKIAogICAgIC8vIFJl
c3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBleGNlcHQgZm9yIHRoZSBzY3JhdGNoLgogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKQEAgLTYyNyw3ICs2Mjcs
NyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bQogICAgIEFTU0VSVChzY3JhdGNoID09IGVudHJ5
LnJlZygpLmdwcigpKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgZW50cnkub2Zmc2V0
KCkpLCBzY3JhdGNoKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURf
UEFSQU0odG9wRW50cnlGcmFtZSk7CiAjZW5kaWYKIH0KIApAQCAtNzc4LDQxICs3NzgsNDEgQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oVk0mIHZtLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmUKIH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLXZv
aWQgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRzdCkKK3ZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJSZWcgZHN0KQogewogI2lm
IEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0
KCkpIHsKKyAgICBpZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgIGxv
YWRGcm9tVExTUHRyKGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RGX1dBU01fQ09OVEVYVF9LRVkpLCBk
c3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShXYXNtOjpQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLndhc21Db250ZXh0UG9pbnRlciwgZHN0KTsKKyAgICBtb3Zl
KFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50
ZXIsIGRzdCk7CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0KEdQ
UlJlZyBzcmMpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNl
KEdQUlJlZyBzcmMpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6
dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0
VExTKCkpIHsKICAgICAgICAgc3RvcmVUb1RMU1B0cihzcmMsIGZhc3RUTFNPZmZzZXRGb3JLZXko
V1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgot
ICAgIG1vdmUoc3JjLCBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLndhc21Db250ZXh0
UG9pbnRlcik7CisgICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCku
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwogfQogCi1ib29sIEFzc2VtYmx5SGVscGVyczo6
bG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCitib29sIEFzc2VtYmx5
SGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVy
KCkKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExT
Rm9yQ29udGV4dCgpKQorICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAg
ICAgIHJldHVybiBsb2FkRnJvbVRMU1B0ck5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNl
bmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3Jl
V2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxw
ZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkK
IHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9y
Q29udGV4dCgpKQorICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAg
IHJldHVybiBzdG9yZVRvVExTUHRyTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlm
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODc1LDEwICs4NzUsMTAgQEAgdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmRlYnVnQ2FsbChWTSYgdm0sIFZfRGVidWdPcGVyYXRpb25fRVBQIGZ1bmN0aW9uLCB2
b2lkKiBhcmcKICAgICB9CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNC
dWZmZXIpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKIHsKICNpZiBO
VU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgY2Fs
bGVlU2F2ZXNCdWZmZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgY2FsbGVlU2F2ZXNCdWZmZXIpOwogCiAg
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxl
ZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVy
cyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggYTY4YzM2OS4uY2UwYWJkZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0zNjAsMjggKzM2MCwy
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKEdQUlJlZyB2bUdQUikKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyh2bUdQUiwgVk06OnRv
cFZNRW50cnlGcmFtZU9mZnNldCgpKSwgdm1HUFIpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNU
b1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh2bUdQUik7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyh2bUdQUiwgVk06OnRvcEVudHJ5RnJhbWVPZmZzZXQoKSksIHZtR1BSKTsKKyAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZt
R1BSKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh2bUdQUik7CiAjZW5kaWYKICAgICB9
CiAKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoVk0mIHZtLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQorICAgIHZvaWQgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5
RnJhbWUsIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1c2VkUmVn
aXN0ZXJzLmdldEZyZWVHUFIoMCk7Ci0gICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFt
ZSwgdGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRl
bXAxKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXJJbXBsKHRlbXAxKTsKICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgICAg
IFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHVzZWRS
ZWdpc3RlcnMpOwogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mKTsKKyAgICB2b2lkIHJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomKTsK
IAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQor
ICAgIHZvaWQgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lLCBjb25zdCBUZW1wUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSB9KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDAp
OwpAQCAtMzkyLDggKzM5Miw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygp
KTsKIAogICAgICAgICAvLyBDb3B5IHNhdmVkIGNhbGxlZVNhdmVzIG9uIHN0YWNrIG9yIHVuc2F2
ZWQgY2FsbGVlU2F2ZXMgaW4gcmVnaXN0ZXIgdG8gdm0gY2FsbGVlU2F2ZSBidWZmZXIKLSAgICAg
ICAgbG9hZFB0cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0
KCkpLCB0ZW1wMSk7CisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
QnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7CiAKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
ICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9IGNvZGVC
bG9jaygpLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC00MDEsMTIgKzQwMSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6
ZSgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBp
KyspIHsKLSAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgdm1FbnRyeSA9IGFsbENhbGxlZVNh
dmVzLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQodm1FbnRy
eS5yZWcoKSkpCisgICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVl
U2F2ZXMtPmF0KGkpOworICAgICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRy
eS5yZWcoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+ZmluZCh2
bUVudHJ5LnJlZygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGN1cnJlbnRGcmFt
ZUVudHJ5ID0gY3VycmVudENhbGxlZVNhdmVzLT5maW5kKGVudHJ5LnJlZygpKTsKIAotICAgICAg
ICAgICAgaWYgKHZtRW50cnkucmVnKCkuaXNHUFIoKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5
LnJlZygpLmlzR1BSKCkpIHsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVnVG9TdG9yZTsKICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gTG9hZCBjYWxsZWVTYXZlIGZyb20gc3RhY2sgaW50byB0ZW1wIHJlZ2lzdGVyCkBAIC00
MTQsOSArNDE0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIHJl
Z1RvU3RvcmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAv
LyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIHJl
Z1RvU3RvcmUgPSB2bUVudHJ5LnJlZygpLmdwcigpOworICAgICAgICAgICAgICAgICAgICByZWdU
b1N0b3JlID0gZW50cnkucmVnKCkuZ3ByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihy
ZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgICAg
ICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgZW50cnkub2Zmc2V0KCkp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwUmVnVG9T
dG9yZTsKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKQEAgLTQyNSwx
MyArNDI1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbG9hZERvdWJsZShBZGRy
ZXNzKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50RnJhbWVFbnRyeS0+b2Zmc2V0KCkpLCBm
cFJlZ1RvU3RvcmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICAvLyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAg
IGZwUmVnVG9TdG9yZSA9IHZtRW50cnkucmVnKCkuZnByKCk7CisgICAgICAgICAgICAgICAgICAg
IGZwUmVnVG9TdG9yZSA9IGVudHJ5LnJlZygpLmZwcigpOwogCi0gICAgICAgICAgICAgICAgc3Rv
cmVEb3VibGUoZnBSZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7
CisgICAgICAgICAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAx
LCBlbnRyeS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQotICAg
ICAgICBVTlVTRURfUEFSQU0odm0pOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFt
ZSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKICNlbmRpZgogICAgIH0K
QEAgLTE2NDQsMTQgKzE2NDQsMTQgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCi0gICAgdm9pZCBsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRzdCk7Ci0gICAgdm9p
ZCBzdG9yZVdhc21Db250ZXh0KEdQUlJlZyBzcmMpOwotICAgIHN0YXRpYyBib29sIGxvYWRXYXNt
Q29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdG9y
ZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOworICAgIHZvaWQgbG9hZFdh
c21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIGRzdCk7CisgICAgdm9pZCBzdG9yZVdhc21Db250ZXh0
SW5zdGFuY2UoR1BSUmVnIHNyYyk7CisgICAgc3RhdGljIGJvb2wgbG9hZFdhc21Db250ZXh0SW5z
dGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgc3RhdGljIGJvb2wgc3RvcmVX
YXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAK
IHByb3RlY3RlZDoKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxl
ZVNhdmVzQnVmZmVyKTsKIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJs
b2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IDRhNGJiOGQuLjZhZjQ1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTExMSw3
ICsxMTEsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9u
czo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJU
KCFtX2J5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBjb3B5Q2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGlt
aXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRl
c3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKQEAgLTg4OSw3ICs4ODksNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgaWYgKCFtX2V4Y2VwdGlv
bkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRv
cEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2Fs
bGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRo
ZSBDYWxsRnJhbWUqKS4KIApAQCAtOTA5LDcgKzkwOSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICAgICAgbV9leGNlcHRpb25IYW5kbGVyID0gbGFi
ZWwoKTsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+
dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBw
YXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSop
LgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRleCBj
YTJkYjhjLi5mMjAxOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Niw4ICs1Niw4IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSog
dm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKICAgICAK
ICAgICBFeGVjU3RhdGUqIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZTsKICAgICBp
ZiAodW53aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIFZNRW50
cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICAgICAg
c2hhZG93Q2hpY2tlblRvcEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5
RnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5
RnJhbWU7CisgICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgfQogICAgIHZtLT5zaGFkb3dDaGlja2VuKCkubG9n
KCp2bSwgc2hhZG93Q2hpY2tlblRvcEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93
UGFja2V0KCkpOwogICAgIApAQCAtODQsNyArODQsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0q
IHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAg
fSBlbHNlCiAgICAgICAgIGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRyKGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uKTsKICAgICAKLSAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BWTUVudHJ5RnJh
bWUpKTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAKICAgICB2bS0+Y2Fs
bEZyYW1lRm9yQ2F0Y2ggPSBjYWxsRnJhbWU7CiAgICAgdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRo
cm93ID0gY2F0Y2hSb3V0aW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKaW5kZXggOWI0MTY2YS4uOGI0YmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFTU0VSVChyZWdUMCA9PSBy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QwKTsKICAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KnZtKCkpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92
bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC05NTIsNyArOTUyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGkKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1l
T3JSZWdpc3RlclRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAg
ICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgICAgIEp1bXAgbm9PcHRp
bWl6ZWRFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGExMjI4ZDMu
LjBhZDc4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTc2NSw3ICs3NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJu
VmFsdWVHUFIpOwotICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKCkpOworICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0oKSk7CkBAIC04MjYsNyArODI2LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RvX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2UKIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5z
IHRoZSBjYWxsRnJhbWUgZm9yIHRoZSBoYW5kbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggNDhjYjZlZC4uMDY1NTAwNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xMDMsMTQgKzEwMywxNCBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IoRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqCiAgICAgVk0qIHZtID0gY29kZUJsb2NrLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5
RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50
cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICBpZiAoIWNh
bGxlckZyYW1lKSB7CiAgICAgICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRy
eUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKKyAgICAgICAgZW50cnlGcmFtZSA9IHZtLT50
b3BFbnRyeUZyYW1lOwogICAgIH0KIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0
b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFt
ZSk7CiAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKIH0K
IApAQCAtMTIwLDEwICsxMjAsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93
RGl2aWRlRXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5
RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50
cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxs
ZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZt
LCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9y
U2NvcGUoKnZtKTsKICAgICB0aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFtZSwgc2NvcGUsIGNyZWF0
ZUVycm9yKGNhbGxlckZyYW1lLCBBU0NJSUxpdGVyYWwoIkRpdmlzaW9uIGJ5IHplcm8gb3IgZGl2
aXNpb24gb3ZlcmZsb3cuIikpKTsKIH0KQEAgLTEzMywxMCArMTMzLDEwIEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25UaHJvd091dE9mQm91bmRzQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBl
eGVjKQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZt
LT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNh
bGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZt
LT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxs
ZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0
b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFt
ZSk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0aHJvd0V4
Y2VwdGlvbihjYWxsZXJGcmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1lLCBBU0NJ
SUxpdGVyYWwoIk91dC1vZi1ib3VuZHMgYWNjZXNzLiIpKSk7CiB9CkBAIC0xNDksOSArMTQ5LDkg
QEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKEV4ZWNTdGF0
ZSogZXhlYykKIAogICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhz
Ojphcml0eUNoZWNrRm9yKGV4ZWMsICp2bSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChtaXNzaW5n
QXJnQ291bnQgPCAwKSB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0t
PnRvcFZNRW50cnlGcmFtZTsKLSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMt
PmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAg
ICAgIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAg
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwor
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5
RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2Fs
bGVyRnJhbWUsIHNjb3BlKTsKICAgICB9CiAKQEAgLTE2NSw5ICsxNjUsOSBAQCBpbnQzMl90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMp
CiAKICAgICBpbnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlD
aGVja0ZvcihleGVjLCAqdm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGlmIChtaXNzaW5nQXJn
Q291bnQgPCAwKSB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRv
cFZNRW50cnlGcmFtZTsKLSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNh
bGxlckZyYW1lKHZtRW50cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldp
dGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAg
IEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2Fs
bEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJh
bWUsIGNhbGxlckZyYW1lKTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVy
RnJhbWUsIHNjb3BlKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAppbmRleCA5MmU0MmIxLi45MDNhMDVjYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtNjYsNyArNjYsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKFZNKiB2bSkKICAgICAvLyBldmVuIHRob3VnaCB3ZSB3b24ndCB1c2UgaXQuCiAgICAgaml0
LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIpOwogCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoKnZtKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgaml0LnNldHVwQXJndW1l
bnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lz
ZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwpAQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0
aXZlRm9yR2VuZXJhdG9yKFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBrCiAgICAgLy8g
SGFuZGxlIGFuIGV4Y2VwdGlvbgogICAgIGV4Y2VwdGlvbkhhbmRsZXIubGluaygmaml0KTsKIAot
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2
bSk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtLT50b3BFbnRyeUZyYW1lKTsKICAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNh
bGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2KSAmJiBV
U0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBlOWEwZDJhLi4zNTAzNWRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMTg3Miw4ICsxODcyLDggQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50U3RkRXJyKEV4ZWNTdGF0ZSogZXhlYykgeyBy
ZXR1cm4gcHJpbnQKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQ2Fs
bEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOwotICAg
IEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJh
bWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZyYW1lOwor
ICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZy
YW1lKTsKICAgICBpZiAoY2FsbGVyRnJhbWUpCiAgICAgICAgIHZtLmludGVycHJldGVyLT5kdW1w
Q2FsbEZyYW1lKGNhbGxlckZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAKaW5kZXggZjJkNDlhNi4uMjMxNWM4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC00ODEsMTMgKzQ4MSwxMyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgVk1FbnRy
eUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50
cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwogICAgIGlm
ICghY2FsbGVyRnJhbWUpIHsKICAgICAgICAgY2FsbGVyRnJhbWUgPSBleGVjOwotICAgICAgICB2
bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIHRvcEVudHJ5RnJhbWUg
PSB2bS50b3BFbnRyeUZyYW1lOwogICAgIH0KLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRo
UmVzdG9yZSB0cmFjZXIoJnZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIoJnZtLCB0b3BFbnRyeUZyYW1lLCBj
YWxsZXJGcmFtZSk7CiAKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCmluZGV4IDM2ZjY0ODYuLjUyOTY3
ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTExNiw3ICsxMTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSB2bUVudHJ5VG9OYXRpdmUodm9p
ZCogZXhlY3V0YWJsZUFkZHJlc3MsIFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1leHRlcm4gIkMiIFZNRW50cnlSZWNvcmQq
IHZtRW50cnlSZWNvcmQoVk1FbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQorZXh0ZXJuICJDIiBWTUVu
dHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUpCiB7CiAgICAg
Ly8gVGhlIEMgTG9vcCBkb2Vzbid0IGhhdmUgYW55IGNhbGxlZSBzYXZlIHJlZ2lzdGVycywgc28g
dGhlIFZNRW50cnlSZWNvcmQgaXMgYWxsb2NhdGVkIGF0IHRoZSBiYXNlIG9mIHRoZSBmcmFtZS4K
ICAgICBpbnRwdHJfdCBzdGFja0FsaWdubWVudCA9IHN0YWNrQWxpZ25tZW50Qnl0ZXMoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQppbmRleCBhYjg4OGQzLi41ZGFkMTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC02NTksNyArNjU5LDcgQEAgZW5k
CiAKIG1hY3JvIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0sIHRlbXApCiAgICAgaWYgQVJNNjQgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAg
bG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRv
cEVudHJ5RnJhbWVbdm1dLCB0ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkK
ICAgICAgICAgbGVhcCBWTUVudHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3Rl
bXBdLCB0ZW1wCiAgICAgICAgIGlmIEFSTTY0CkBAIC03MDEsNyArNzAxLDcgQEAgZW5kCiAKIG1h
Y3JvIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSwgdGVtcCkKICAgICBpZiBBUk02NCBvciBYODZfNjQgb3IgWDg2XzY0X1dJTgotICAgICAgICBs
b2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdGVtcAorICAgICAgICBsb2FkcCBWTTo6dG9w
RW50cnlGcmFtZVt2bV0sIHRlbXAKICAgICAgICAgdm1FbnRyeVJlY29yZCh0ZW1wLCB0ZW1wKQog
ICAgICAgICBsZWFwIFZNRW50cnlSZWNvcmQ6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJbdGVt
cF0sIHRlbXAKICAgICAgICAgaWYgQVJNNjQKQEAgLTExNDQsNyArMTE0NCw3IEBAIGlmIG5vdCBD
X0xPT1AKICAgICAgICAgc3RvcmVwIGFkZHJlc3MsIFZNOjptX2xhc3RTdGFja1RvcFt2bV0KICAg
ICAgICAgcmV0CiAgICAgCi0gICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0
IFZNRW50cnlGcmFtZSogZW50cnlGcmFtZSkKKyAgICAjIFZNRW50cnlSZWNvcmQqIHZtRW50cnlS
ZWNvcmQoY29uc3QgRW50cnlGcmFtZSogZW50cnlGcmFtZSkKICAgICBnbG9iYWwgX3ZtRW50cnlS
ZWNvcmQKICAgICBfdm1FbnRyeVJlY29yZDoKICAgICAgICAgaWYgWDg2IG9yIFg4Nl9XSU4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KaW5kZXggNGE0NzU4Mi4uMGU3MTJiNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAg
LTEyNSw4ICsxMjUsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgc3RvcmVwIHZt
LCBWTUVudHJ5UmVjb3JkOjptX3ZtW3NwXQogICAgIGxvYWRwIFZNOjp0b3BDYWxsRnJhbWVbdm1d
LCB0NAogICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3Nw
XQotICAgIGxvYWRwIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dLCB0NAotICAgIHN0b3JlcCB0NCwg
Vk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXQorICAgIGxvYWRwIFZNOjp0
b3BFbnRyeUZyYW1lW3ZtXSwgdDQKKyAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJl
dlRvcEVudHJ5RnJhbWVbc3BdCiAKICAgICAjIEFsaWduIHN0YWNrIHBvaW50ZXIKICAgICBpZiBY
ODZfV0lOIG9yIE1JUFMKQEAgLTE4OSw4ICsxODksOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNh
bGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQ1CiAgICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDQKICAgICBzdG9yZXAgdDQsIFZN
Ojp0b3BDYWxsRnJhbWVbdDVdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1F
bnRyeUZyYW1lW3NwXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDVd
CisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ0Cisg
ICAgc3RvcmVwIHQ0LCBWTTo6dG9wRW50cnlGcmFtZVt0NV0KIAogICAgIGlmIEFSTXY3CiAgICAg
ICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCB0NQpAQCAtMjQxLDcgKzI0MSw3
IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKIAogLmNvcHlBcmdzRG9uZToKICAgICBzdG9y
ZXAgc3AsIFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgc3RvcmVwIGNmciwgVk06OnRvcFZNRW50
cnlGcmFtZVt2bV0KKyAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAg
IG1ha2VDYWxsKGVudHJ5LCB0MywgdDQpCiAKQEAgLTI1NSw4ICsyNTUsOCBAQCBtYWNybyBkb1ZN
RW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQ1CiAg
ICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDQKICAgICBz
dG9yZXAgdDQsIFZNOjp0b3BDYWxsRnJhbWVbdDVdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6
bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNOjp0b3BWTUVu
dHJ5RnJhbWVbdDVdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFt
ZVtzcF0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTTo6dG9wRW50cnlGcmFtZVt0NV0KIAogICAgIGlm
IEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCB0NQpAQCAt
MzI0LDggKzMyNCw4IEBAIF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVu
dHJ5UmVjb3JkOjptX3ZtW3NwXSwgdDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZU
b3BDYWxsRnJhbWVbc3BdLCB0NQogICAgIHN0b3JlcCB0NSwgVk06OnRvcENhbGxGcmFtZVt0M10K
LSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdLCB0NQot
ICAgIHN0b3JlcCB0NSwgVk06OnRvcFZNRW50cnlGcmFtZVt0M10KKyAgICBsb2FkcCBWTUVudHJ5
UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3NwXSwgdDUKKyAgICBzdG9yZXAgdDUsIFZNOjp0
b3BFbnRyeUZyYW1lW3QzXQogCiAgICAgaWYgQVJNdjcKICAgICAgICAgc3VicCBjZnIsIENhbGxl
ZVJlZ2lzdGVyU2F2ZVNpemUsIHQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IDg1Yzc3ZDIuLjk3NzE0MDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCkBAIC0xMjksOCArMTI5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQog
ICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0KICAgICBsb2FkcCBWTTo6dG9w
Q2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRv
cENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdDQKLSAg
ICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0KKyAg
ICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0sIHQ0CisgICAgc3RvcmVwIHQ0LCBWTUVudHJ5
UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3NwXQogCiAgICAgbG9hZGkgUHJvdG9DYWxsRnJh
bWU6OnBhZGRlZEFyZ0NvdW50W3Byb3RvQ2FsbEZyYW1lXSwgdDQKICAgICBhZGRwIENhbGxGcmFt
ZUhlYWRlclNsb3RzLCB0NCwgdDQKQEAgLTE3MSw4ICsxNzEsOCBAQCBtYWNybyBkb1ZNRW50cnko
bWFrZUNhbGwpCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVt0NF0sIHZtCiAgICAgbG9h
ZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCiAg
ICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcENhbGxGcmFtZVt2bV0KLSAgICBsb2FkcCBW
TUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcKLSAg
ICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRw
IFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbdDRdLCBleHRyYVRlbXBSZWcKKyAg
ICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIHN1YnAg
Y2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCBzcAogCkBAIC0yMjAsNyArMjIwLDcgQEAgbWFj
cm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGVsc2UKICAgICAgICAgc3RvcmVwIHNwLCBWTTo6
dG9wQ2FsbEZyYW1lW3ZtXQogICAgIGVuZAotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5
RnJhbWVbdm1dCisgICAgc3RvcmVwIGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudChleHRyYVRlbXBSZWcsIDB4YmFkMGRjMDIpCiAKQEAg
LTIzNiw4ICsyMzYsOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV92bVt0NF0sIHZtCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2
VG9wQ2FsbEZyYW1lW3Q0XSwgdDIKICAgICBzdG9yZXAgdDIsIFZNOjp0b3BDYWxsRnJhbWVbdm1d
Ci0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3Q0XSwgdDIK
LSAgICBzdG9yZXAgdDIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAgbG9hZHAgVk1FbnRy
eVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0NF0sIHQyCisgICAgc3RvcmVwIHQyLCBWTTo6
dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXpl
LCBzcAogCkBAIC0yNzYsNyArMjc2LDYgQEAgbWFjcm8gbWFrZUhvc3RGdW5jdGlvbkNhbGwoZW50
cnksIHRlbXApCiAgICAgZW5kCiBlbmQKIAotCiBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAg
ICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCkBA
IC0yOTEsOCArMjkwLDggQEAgX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fdm1bdDJdLCB0MwogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJl
dlRvcENhbGxGcmFtZVt0Ml0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRyYVRlbXBSZWcs
IFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
Vk1FbnRyeUZyYW1lW3QyXSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJhVGVtcFJlZywg
Vk06OnRvcFZNRW50cnlGcmFtZVt0M10KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZU
b3BFbnRyeUZyYW1lW3QyXSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywg
Vk06OnRvcEVudHJ5RnJhbWVbdDNdCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZl
U2l6ZSwgc3AKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRl
eCBhNWE1M2M2Li4yYTJiYmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcApAQCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVu
dE9wdGlvbnMoKQogICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseSgpID0gZmFsc2U7CiAK
ICAgICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5KCkpCi0gICAgICAgIE9wdGlvbnM6OnVz
ZVdlYkFzc2VtYmx5RmFzdFRMUygpID0gZmFsc2U7CisgICAgICAgIE9wdGlvbnM6OnVzZUZhc3RU
TFNGb3JXYXNtQ29udGV4dCgpID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmR1bXBE
aXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggM2NlYzU1Mi4uODQ3NWMy
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDY3LDggKzQ2
Nyw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQs
IHdlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcywgMTI4LCBOb3JtYWwsICJXZWJBc3Nl
bWJseSBmYXN0IG1lbW9yaWVzIHVzZSA0R2lCIHZpcnR1YWwgYWxsb2NhdGlvbnMsIHBsdXMgYSBy
ZWR6b25lIChjb3VudGVkIGFzIG11bHRpcGxlIG9mIDY0S2lCIFdlYkFzc2VtYmx5IHBhZ2VzKSBh
dCB0aGUgZW5kIHRvIGNhdGNoIHJlZytpbW0gYWNjZXNzZXMgd2hpY2ggZXhjZWVkIDMyLWJpdCwg
YW55dGhpbmcgYmV5b25kIHRoZSByZWR6b25lIGlzIGV4cGxpY2l0bHkgYm91bmRzLWNoZWNrZWQi
KSBcCiAgICAgdihib29sLCBjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSwgZmFsc2Us
IE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgY3Jhc2ggaWYgd2UgY2FuJ3Qgb2J0YWluIGZhc3Qg
bWVtb3J5IGZvciB3YXNtLiIpIFwKICAgICB2KHVuc2lnbmVkLCBtYXhOdW1XZWJBc3NlbWJseUZh
c3RNZW1vcmllcywgNCwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCB1c2VXZWJBc3Nl
bWJseUZhc3RUTFMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdHJ5IHRvIHVzZSBm
YXN0IHRocmVhZC1sb2NhbCBzdG9yYWdlIGlmIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0
Zm9ybS4iKSBcCi0gICAgdihib29sLCB1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQsIHRydWUsIE5v
cm1hbCwgIklmIHRydWUgKGFuZCBmYXN0IFRMUyBpcyBlbmFibGVkKSwgd2Ugd2lsbCBzdG9yZSBj
b250ZXh0IGluIGZhc3QgVExTLiBJZiBmYWxzZSwgd2Ugd2lsbCBwaW4gaXQgdG8gYSByZWdpc3Rl
ci4iKSBcCisgICAgdihib29sLCB1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQsIHRydWUsIE5vcm1h
bCwgIklmIHRydWUsIHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0IFRMUy4gSWYgZmFsc2Us
IHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAogICAgIHYoYm9vbCwgdXNlQ2FsbElD
c0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxs
IHVzZSBDYWxsTGlua0luZm8gdG8gaW5saW5lIGNhY2hlIFdhc20gdG8gSlMgY2FsbHMuIikgXAog
ICAgIHYoYm9vbCwgdXNlT2JqZWN0UmVzdFNwcmVhZCwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwg
d2Ugd2lsbCBlbmFibGUgT2JqZWN0IFJlc3QvU3ByZWFkIGZlYXR1cmUuIikgXAogICAgIHYoYm9v
bCwgdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3
ZSB3aWxsIHVzZSBvdXIgbm9ybWFsIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsaW5nLiBJZiBmYWxz
ZSwgdGhlIGFsbG9jYXRpb24gcHJvZmlsZSB3aWxsIGFsd2F5cyBjbGFpbSB0byBiZSB1bmRlY2lk
ZWQuIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5jcHAKaW5kZXggYTRiZTk1Yi4uM2JjZjZjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAg
cHVibGljOgogICAgIEZyYW1lV2Fsa2VyKFZNJiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBjb2RlQmxvY2tTZXRMb2NrZXIsIGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBtYWNoaW5lVGhyZWFkc0xvY2tlcikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAs
IG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKLSAgICAgICAgLCBtX3ZtRW50cnlGcmFtZSh2bS50b3BW
TUVudHJ5RnJhbWUpCisgICAgICAgICwgbV9lbnRyeUZyYW1lKHZtLnRvcEVudHJ5RnJhbWUpCiAg
ICAgICAgICwgbV9jb2RlQmxvY2tTZXRMb2NrZXIoY29kZUJsb2NrU2V0TG9ja2VyKQogICAgICAg
ICAsIG1fbWFjaGluZVRocmVhZHNMb2NrZXIobWFjaGluZVRocmVhZHNMb2NrZXIpCiAgICAgewpA
QCAtMTMwLDcgKzEzMCw3IEBAIHByb3RlY3RlZDoKICAgICBTVVBQUkVTU19BU0FOCiAgICAgdm9p
ZCBhZHZhbmNlVG9QYXJlbnRGcmFtZSgpCiAgICAgewotICAgICAgICBtX2NhbGxGcmFtZSA9IG1f
Y2FsbEZyYW1lLT51bnNhZmVDYWxsZXJGcmFtZShtX3ZtRW50cnlGcmFtZSk7CisgICAgICAgIG1f
Y2FsbEZyYW1lID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxlckZyYW1lKG1fZW50cnlGcmFtZSk7
CiAgICAgfQogCiAgICAgYm9vbCBpc0F0VG9wKCkgY29uc3QKQEAgLTE4OCw3ICsxODgsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICBWTSYgbV92bTsKICAgICBFeGVjU3RhdGUqIG1fY2FsbEZyYW1lOwot
ICAgIFZNRW50cnlGcmFtZSogbV92bUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogbV9lbnRy
eUZyYW1lOwogICAgIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBtX2NvZGVCbG9ja1NldExvY2tlcjsK
ICAgICBjb25zdCBBYnN0cmFjdExvY2tlciYgbV9tYWNoaW5lVGhyZWFkc0xvY2tlcjsKICAgICBi
b29sIG1fYmFpbGluZ091dCB7IGZhbHNlIH07CkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBTYW1w
bGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKICAgICAgICAgICAg
ICAgICAvLyBXZSByZXVzZSBMTEludCBDb2RlQmxvY2tzIGZvciB0aGUgYmFzZWxpbmUgSklULCBz
byB3ZSBuZWVkIHRvIGNoZWNrIGZvciBib3RoIGppdCB0eXBlcy4KICAgICAgICAgICAgICAgICAv
LyBUaGlzIG1pZ2h0IGFsc28gYmUgZmFsc2UgZm9yIHZhcmlvdXMgcmVhc29ucyAoa25vd24gYW5k
IHVua25vd24pLCBldmVuIHRob3VnaAogICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3VwZXIgdW5s
aWtlbHkuIE9uZSByZWFzb24gdGhhdCB0aGlzIGNhbiBiZSBmYWxzZSBpcyB3aGVuIHdlIHRocm93
IGZyb20gYSBERkcgZnJhbWUsCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZp
bmcgdG8gdW53aW5kIHBhc3QgYSBWTUVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGlu
ZworICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0
IGFuIEVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZwogICAgICAgICAgICAgICAg
IC8vIGluc2lkZSB0aGUgTExJbnQncyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbi4gU28gd2UganVz
dCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0
LgogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAppbmRleCAwNmU5MzAzLi40YzY1
ZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3Bl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
NywxMyArNTcsMTMgQEAgVGhyb3dTY29wZTo6flRocm93U2NvcGUoKQogCiAgICAgYm9vbCB3aWxs
QmVIYW5kbGVCeUxMSW50T3JKSVQgPSBmYWxzZTsKICAgICB2b2lkKiBwcmV2aW91c1Njb3BlID0g
bV9wcmV2aW91c1Njb3BlOwotICAgIHZvaWQqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1F
bnRyeUZyYW1lOworICAgIHZvaWQqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7
CiAKLSAgICAvLyBJZiB0aGUgdG9wVk1FbnRyeUZyYW1lIHdhcyBwdXNoZWQgb24gdGhlIHN0YWNr
IGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBpbnN0YW50aWF0ZWQsCisgICAgLy8gSWYgdGhl
IHRvcEVudHJ5RnJhbWUgd2FzIHB1c2hlZCBvbiB0aGUgc3RhY2sgYWZ0ZXIgdGhlIHByZXZpb3Vz
U2NvcGUgd2FzIGluc3RhbnRpYXRlZCwKICAgICAvLyB0aGVuIHRoaXMgdGhyb3dTY29wZSB3aWxs
IGJlIHJldHVybmluZyB0byBMTElOVCBvciBKSVQgY29kZSB0aGF0IGFsd2F5cyBkbyBhbiBleGNl
cHRpb24KICAgICAvLyBjaGVjay4gSW4gdGhhdCBjYXNlLCBza2lwIHRoZSBzaW11bGF0ZWQgdGhy
b3cgYmVjYXVzZSB0aGUgTExJbnQgYW5kIEpJVCB3aWxsIGJlCiAgICAgLy8gY2hlY2tpbmcgZm9y
IHRoZSBleGNlcHRpb24gdGhlaXIgb3duIHdheSBpbnN0ZWFkIG9mIGNhbGxpbmcgVGhyb3dTY29w
ZTo6ZXhjZXB0aW9uKCkuCi0gICAgaWYgKHRvcFZNRW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3Bl
ID4gdG9wVk1FbnRyeUZyYW1lKQorICAgIGlmICh0b3BFbnRyeUZyYW1lICYmIHByZXZpb3VzU2Nv
cGUgPiB0b3BFbnRyeUZyYW1lKQogICAgICAgICB3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQgPSB0
cnVlOwogICAgIAogICAgIGlmICghd2lsbEJlSGFuZGxlQnlMTEludE9ySklUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDE4MWUzYjcuLjNlZTUxODIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTE4NCw3ICsxODQsNyBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAsIHZtVHlwZSh2bVR5cGUp
CiAgICAgLCBjbGllbnREYXRhKDApCi0gICAgLCB0b3BWTUVudHJ5RnJhbWUobnVsbHB0cikKKyAg
ICAsIHRvcEVudHJ5RnJhbWUobnVsbHB0cikKICAgICAsIHRvcENhbGxGcmFtZShDYWxsRnJhbWU6
Om5vQ2FsbGVyKCkpCiAgICAgLCBwcm9taXNlRGVmZXJyZWRUaW1lcihzdGQ6Om1ha2VfdW5pcXVl
PFByb21pc2VEZWZlcnJlZFRpbWVyPigqdGhpcykpCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxl
KHZtVHlwZSA9PSBEZWZhdWx0ID8gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUo
KSA6IG5ldyBBdG9taWNTdHJpbmdUYWJsZSkKQEAgLTM2OCw3ICszNjgsNyBAQCBWTTo6flZNKCkK
ICAgICBwcm9taXNlRGVmZXJyZWRUaW1lci0+c3RvcFJ1bm5pbmdUYXNrcygpOwogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKICAgICBpZiAoV2FzbTo6ZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpKQot
ICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLnN0b3BBbGxQbGFuc0ZvclZNKCp0aGlzKTsK
KyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JDb250ZXh0KHdh
c21Db250ZXh0KTsKICNlbmRpZgogICAgIGlmIChVTkxJS0VMWShtX3dhdGNoZG9nKSkKICAgICAg
ICAgbV93YXRjaGRvZy0+d2lsbERlc3Ryb3lWTSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCmluZGV4IDk1NTg1OTQuLmQyMGUzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJs
ZS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCisj
aW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVk
ZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+CkBAIC0zMjksMTQgKzMzMCwxNSBAQCBwdWJsaWM6CiAKICAgICBWTVR5cGUgdm1U
eXBlOwogICAgIENsaWVudERhdGEqIGNsaWVudERhdGE7Ci0gICAgVk1FbnRyeUZyYW1lKiB0b3BW
TUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZTsKICAgICAvLyBOT1RF
OiBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiB3aGlsZSByb2xsaW5nIGJhY2sgdGhlIGNhbGwg
ZnJhbWUsIHRoaXMgbWF5IGJlIGVxdWFsIHRvCi0gICAgLy8gdG9wVk1FbnRyeUZyYW1lLgorICAg
IC8vIHRvcEVudHJ5RnJhbWUuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgdm9pZCos
IGJlY2F1c2UgaXQgbWlnaHQgbm90IHBvaW50IHRvIGEgQ2FsbEZyYW1lLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA0NDEKICAgICBFeGVjU3RhdGUq
IHRvcENhbGxGcmFtZSB7IG51bGxwdHIgfTsKLSAgICAvLyBGSVhNRTogU2F2ZSB0aGlzIHN0YXRl
IGVsc2V3aGVyZSB0byBhbGxvdyBQSUMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjk3NzMKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0IHsg
bnVsbHB0ciB9OworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBXYXNtOjpDb250ZXh0IHdh
c21Db250ZXh0OworI2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsK
QEAgLTUwMSw5ICs1MDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoVk0sIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRy
ZGlmZl90IHRvcFZNRW50cnlGcmFtZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BF
bnRyeUZyYW1lT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Vk0sIHRvcFZNRW50cnlGcmFtZSk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0s
IHRvcEVudHJ5RnJhbWUpOwogICAgIH0KIAogICAgIHZvaWQgcmVzdG9yZVByZXZpb3VzRXhjZXB0
aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IHNldEV4Y2VwdGlvbihleGNlcHRpb24pOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGRlYWE0NDkuLjg3
M2QzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC04
OSw3ICs4OSw3IEBAIGlubGluZSBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxs
RnJhbWUqIHRvcENhbGxGcmFtZSkKICAgICByZXR1cm4gdG9wQ2FsbEZyYW1lOwogfQogCi1zdGF0
aWMgYm9vbCBpc1NhbmVGcmFtZShDYWxsRnJhbWUqIGZyYW1lLCBDYWxsRnJhbWUqIGNhbGxlZUZy
YW1lLCBWTUVudHJ5RnJhbWUqIGVudHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzKQor
c3RhdGljIGJvb2wgaXNTYW5lRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBjYWxs
ZWVGcmFtZSwgRW50cnlGcmFtZSogZW50cnlGcmFtZSwgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMp
CiB7CiAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZyYW1lKSA+PSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihlbnRyeUZyYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIx
LDE4ICsxMjEsMTggQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNp
Z25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMKICAgICB9CiAKICAgICBDb2Rl
QmxvY2sqIGZvdW5kQ29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50
cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1l
ID0gdm0udG9wRW50cnlGcmFtZTsKIAogICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjYWxsZWUgdG8g
c3RhcnQgd2l0aC4gU28sIHVzZSB0aGUgZW5kIG9mIHRoZSBzdGFjayB0byBrZWVwIHRoZQogICAg
IC8vIGlzU2FuZUZyYW1lKCkgY2hlY2tlciBiZWxvdyBoYXBweSBmb3IgdGhlIGZpcnN0IGl0ZXJh
dGlvbi4gSXQgd2lsbCBzdGlsbCBjaGVjawogICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBhZGRy
ZXNzIGlzIGluIHRoZSBzdGFja0JvdW5kcy4KICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0g
cmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihzdGFja0JvdW5kcy5lbmQoKSk7CiAKLSAgICBp
ZiAoIXZtRW50cnlGcmFtZSB8fCAhY2FsbEZyYW1lKQorICAgIGlmICghZW50cnlGcmFtZSB8fCAh
Y2FsbEZyYW1lKQogICAgICAgICByZXR1cm47IC8vIE5vdCBydW5uaW5nIEpTIGNvZGUuIExldCB0
aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAogICAgIGRvIHsKLSAgICAgICAgaWYg
KCFpc1NhbmVGcmFtZShjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCB2bUVudHJ5RnJhbWUsIHN0YWNr
Qm91bmRzKSkKKyAgICAgICAgaWYgKCFpc1NhbmVGcmFtZShjYWxsRnJhbWUsIGNhbGxlZUZyYW1l
LCBlbnRyeUZyYW1lLCBzdGFja0JvdW5kcykpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0
aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KIAogICAgICAgICBDb2RlQmxvY2sqIGNh
bmRpZGF0ZUNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC0xNDIsOSArMTQy
LDkgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRl
eHQmIGNvbnRleHQsIFN0YWNrQm91bmRzIHN0YWMKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxl
ZUZyYW1lID0gY2FsbEZyYW1lOwotICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUoZW50cnlGcmFtZSk7CiAKLSAgICB9IHdoaWxlIChjYWxsRnJhbWUgJiYgdm1FbnRy
eUZyYW1lKTsKKyAgICB9IHdoaWxlIChjYWxsRnJhbWUgJiYgZW50cnlGcmFtZSk7CiAKICAgICBp
ZiAoIWZvdW5kQ29kZUJsb2NrKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIGp1c3QgZW50ZXJl
ZCB0aGUgZnJhbWUgYW5kIHRoZSBjb2RlQmxvY2sgcG9pbnRlciBpcyBub3QKQEAgLTE4MSwxNyAr
MTgxLDE3IEBAIHZvaWQgVk1UcmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKExvY2tl
cjxMb2NrPiYsIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lCiAKICAgICBtX25lZWRUb0ludmFsaWRh
dGVkQ29kZUJsb2NrcyA9IGZhbHNlOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUg
PSB2bSgpLnRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0o
KS50b3BFbnRyeUZyYW1lOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdG9wQ2FsbEZyYW1l
OwogCi0gICAgaWYgKCF2bUVudHJ5RnJhbWUpCisgICAgaWYgKCFlbnRyeUZyYW1lKQogICAgICAg
ICByZXR1cm47IC8vIE5vdCBydW5uaW5nIEpTIGNvZGUuIE5vdGhpbmcgdG8gaW52YWxpZGF0ZS4K
IAogICAgIHdoaWxlIChjYWxsRnJhbWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBj
b2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7Ci0gICAg
ICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAg
ICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAppbmRleCBhZDdkNjIxLi5hZjZjZmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC00OSw4ICs0OSw2IEBACiAjaW5j
bHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TW9kdWxlLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgpAQCAtMTc4LDcgKzE3
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAg
ICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRp
b24pOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRz
KGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTI0Nyw3ICsyNDUsNyBAQCBwcml2YXRlOgog
CiAgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChF
eHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKIAotICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0
KFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOworICAgIHZvaWQgcmVzdG9yZVdhc21D
b250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayosIFZhbHVlKik7CiAgICAgdm9p
ZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYs
IFZhbHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOwogCiAgICAgT3JpZ2lu
IG9yaWdpbigpOwpAQCAtMjY3LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgSW5zZXJ0aW9uU2V0
IG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXM7CiAgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7
IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OwotICAgIEdQUlJlZyBtX3dhc21Db250ZXh0R1BSIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAg
ICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OwogCiAgICAgVmFsdWUqIG1faW5zdGFuY2VW
YWx1ZSB7IG51bGxwdHIgfTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5z
dXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2VkLgpAQCAtMjkx
LDM3ICsyODksMzcgQEAgaW50MzJfdCBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zm
c2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnMKICAgICByZXR1cm4gb2Zmc2V0
OwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUm
IHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJnKQordm9pZCBCM0lSR2VuZXJhdG9y
OjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sq
IGJsb2NrLCBWYWx1ZSogYXJnKQogewotICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7
CisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywg
QjM6OlZvaWQsIE9yaWdpbigpKTsKLSAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNt
Q29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAgICAgaWYgKENDYWxsSGVs
cGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rlcigp
KQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3Jh
dGNoUmVnaXN0ZXJzKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZShhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBl
cnM6OnN0b3JlV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAg
ICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGpp
dCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFu
Y2UocGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdh
c21Db250ZXh0IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJl
c3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21U
b1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2Vz
IG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRl
LgogICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlz
IChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCiAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2Ms
IEIzOjpWb2lkLCBPcmlnaW4oKSk7CiAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9u
ZSgpOwogICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICBlZmZlY3RzLnJlYWRz
ID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVj
dHM7Ci0gICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4
dEdQUikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNv
bnRleHRJbnN0YW5jZUdQUikpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVl
KCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAgIEdQUlJlZyB3YXNtQ29udGV4dEdQUiA9
IG1fd2FzbUNvbnRleHRHUFI7CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBt
X3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW0pIHsKLSAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0R1BSKTsK
KyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIp
OwogICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlv
biogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0
aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKK0Iz
SVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8s
IFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVt
b3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkK
ICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKQEAgLTMzOSw5ICszMzcs
OSBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5l
ZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5
QmFzZUdQUik7CiAKLSAgICBtX3dhc21Db250ZXh0R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4
dFBvaW50ZXI7Ci0gICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICBtX3By
b2MucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEdQUik7CisgICAgbV93YXNtQ29udGV4dEluc3Rh
bmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKyAgICBpZiAo
IUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUik7CiAKICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcpIHsKICAgICAgICAgQVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6
ZU9mZnNldCk7CkBAIC0zNTAsNiArMzQ4LDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAg
ICAgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAgICAg
fQogCisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICAgICAgVGh1bmtzOjpzaW5nbGV0
b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKKwogICAgIGlm
IChpbmZvLm1lbW9yeSkgewogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIpIHsKICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKQEAg
LTM2Myw2ICszNjQsMTYgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6
Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNo
IChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAg
ICAgICAgLy8gTW9zdCBtZW1vcnkgYWNjZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUgZG9uJ3QgZG8g
YW4gZXhwbGljaXQgZXhjZXB0aW9uIGNoZWNrIGJlY2F1c2UgdGhleSBjYW4gcmVseSBvbiBmYXVs
dCBoYW5kbGluZyB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxI
YW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZSB0aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNh
biBqdW1wIHRvIHRoYXQgdGh1bmsuCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6
c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1
ZSgmY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9j
dXJyZW50QmxvY2spOwpAQCAtMzczLDEyICszODQsMTIgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUKICAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gc3RhY2tPdmVyZmxvd0NoZWNrOwogICAgICAg
ICBzdGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVSZWdpc3RlcihmcmFtZVBvaW50ZXIpOwog
ICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2Ny
YXRjaFJlZ2lzdGVycygpKTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMg
d2FzbUNvbnRleHQgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8g
cmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgICAgIGlmICghQ29udGV4dDo6dXNl
RmFzdFRMUygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNh
bGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVz
dG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAg
ICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlz
IChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCiAgICAgICAgICAgICBzdGFj
a092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7CiAgICAgICAgICAg
ICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwotICAgICAg
ICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJl
ZyhtX3dhc21Db250ZXh0R1BSKTsKKyAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVz
dWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsK
ICAgICAgICAgfQogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPm51bUdQU2NyYXRjaFJlZ2lz
dGVycyA9IDI7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgewpAQCAtNDAxLDcgKzQxMiw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAg
ICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dDaGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
aGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpOwogICAgICAgICAgICAgYm9v
bCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBt
aW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKIAotICAgICAgICAg
ICAgR1BSUmVnIGNvbnRleHQgPSB1c2VGYXN0VExTRm9yQ29udGV4dCgpID8gcGFyYW1zWzBdLmdw
cigpIDogbV93YXNtQ29udGV4dEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBjb250ZXh0SW5zdGFu
Y2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyBwYXJhbXNbMF0uZ3ByKCkgOiBtX3dhc21Db250
ZXh0SW5zdGFuY2VHUFI7CiAKICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGxlYWYgZnVuY3Rp
b25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJhbWUgc2l6ZSBpcyB3aXRoaW4K
ICAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRoZWlyIGNhbGxlciB3b3VsZCBo
YXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCkBAIC00MTEsMTAgKzQyMiwxMCBAQCBCM0lSR2Vu
ZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9j
ZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHBhcmFt
cy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcGFyYW1z
LmdwU2NyYXRjaCgxKTsKIAotICAgICAgICAgICAgICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4
dCgpKQotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgICAgICAg
ICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwogCi0g
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHQs
IENvbnRleHQ6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFu
Y2UsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBz
Y3JhdGNoMik7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCkBAIC00MjMsMTAgKzQzNCwxMCBAQCBCM0lSR2VuZXJh
dG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3dd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5z
dHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwog
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5j
ZVZhbHVlICYmIHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFu
Y2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3QuCi0gICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxw
ZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAg
ICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxI
ZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIo
KSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJ
bnN0YW5jZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFdlIHNh
aWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1
c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRjaHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQg
aXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFjayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBm
cm9tIGdldHRpbmcgcmVtb3ZlZC4KICAgICAgICAgICAgIH0KQEAgLTQzOCw3ICs0NDksNyBAQCBC
M0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBQcm9jZWR1cmUmIHByb2NlZHVyZQogCiB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJB
c3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVl
KiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKLSAgICBy
ZXN0b3JlV2FzbUNvbnRleHQocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKyAgICByZXN0b3JlV2Fz
bUNvbnRleHRJbnN0YW5jZShwcm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAgaWYgKCEhbWVt
b3J5KSB7CiAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVncyA9ICZQ
aW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNDU4LDEyICs0NjksMTIgQEAgdm9pZCBCM0lS
R2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZv
cm1hdGlvbiYgbWVtb3IKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5l
ZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBjb25zdCBh
dXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAgICBB
U1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVn
c1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQg
YXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0
byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwg
YmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBd
LnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
LCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwogICAgICAgICB9KTsKQEAgLTU0MSwyNCArNTUy
LDIyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVz
dWx0CiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBk
ZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGlu
dDMyX3QgKCpncm93TWVtb3J5KSAoQ29udGV4dCosIGludDMyX3QpID0gW10gKENvbnRleHQqIHdh
c21Db250ZXh0LCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsKLSAgICAgICAgVk0mIHZtID0g
Kndhc21Db250ZXh0LT52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogd2FzbU1lbW9yeSA9IHdh
c21Db250ZXh0LT5tZW1vcnkoKTsKLQorICAgIGludDMyX3QgKCpncm93TWVtb3J5KShKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqLCBpbnQzMl90KSA9IFtdIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsKICAgICAgICAgaWYgKGRlbHRhIDwg
MCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICBib29sIHNob3VsZFRocm93RXhj
ZXB0aW9uc09uRmFpbHVyZSA9IGZhbHNlOwotICAgICAgICAvLyBncm93KCkgZG9lcyBub3QgcmVx
dWlyZSBFeGVjU3RhdGUqIGlmIGl0IGRvZXNuJ3QgdGhyb3cgZXhjZXB0aW9ucy4KLSAgICAgICAg
RXhlY1N0YXRlKiBleGVjID0gbnVsbHB0cjsKLSAgICAgICAgUGFnZUNvdW50IHJlc3VsdCA9IHdh
c21NZW1vcnktPmdyb3codm0sIGV4ZWMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihkZWx0YSksIHNo
b3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbigpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgYXV0byBncm93biA9IGluc3RhbmNlLT5pbnRlcm5hbE1lbW9yeSgpLmdy
b3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dG
YWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0Zh
aWxSZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93
RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6
Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gcmVzdWx0LnBhZ2VD
b3VudCgpOworICAgICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKICAgICB9
OwogCiAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPiht
X3Byb2MsIEludDMyLCBvcmlnaW4oKSwKQEAgLTU3MiwxMyArNTgxLDEzIEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogbWVtb3J5
T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpKTsKKyAgICBW
YWx1ZSogbWVtb3J5T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgp
LCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1l
bW9yeSgpKSk7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2Fz
dDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPihudWxscHRyKS0+bWVtb3J5KCktPm1lbW9yeSgpLnNp
emUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUi
KTsKLSAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0
PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7CisgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8V2FzbTo6TWVtb3J5Kj4obnVs
bHB0ciktPnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0
aGlzIHNpemUiKTsKKyAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3Qs
IHNhZmVDYXN0PGludDMyX3Q+KFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsKICAgICAK
ICAgICBjb25zdGV4cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OwotICAgIHN0YXRpY19hc3Nl
cnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAxIDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9s
ZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhv
bGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CiAgICAgVmFsdWUqIG51bVBh
Z2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBvcmln
aW4oKSwKICAgICAgICAgc2l6ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHNoaWZ0VmFsdWUpKTsKIApAQCAtMTA2OSwxNCArMTA3OCwx
MyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1l
bnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhcmdzLnNpemUoKSkpOwogCiAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxp
bmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFs
bCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRz
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAg
IFZhbHVlKiBmdW5jdGlvbkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFs
dWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZklt
cG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKSk7Ci0gICAgICAgIFZhbHVlKiBqc1R5cGVPZklt
cG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZDhaLCBvcmlnaW4oKSwgZnVuY3Rpb25JbXBvcnQsIHNhZmVDYXN0PGludDMyX3Q+KEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpKTsKLSAgICAgICAgVmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwganNU
eXBlT2ZJbXBvcnQsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSkpOworICAgICAgICBWYWx1ZSog
dGFyZ2V0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNh
ZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0
YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAgICAgICBWYWx1ZSogaXNXYXNtQ2FsbCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9yaWdpbigpLCB0
YXJnZXRJbnN0YW5jZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIDApKTsKIAogICAgICAgICBCYXNpY0Jsb2NrKiBpc1dhc21CbG9jayA9
IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBCYXNpY0Jsb2NrKiBpc0pTQmxvY2sgPSBtX3By
b2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogaXNFbWJlZGRlckJsb2NrID0gbV9w
cm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJv
Yy5hZGRCbG9jaygpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGlzV2FzbUNhbGwsIEZyZXF1ZW50ZWRC
bG9jayhpc1dhc21CbG9jayksIEZyZXF1ZW50ZWRCbG9jayhpc0pTQmxvY2spKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gs
IG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVx
dWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2NrKSk7CiAKICAgICAgICAgVmFsdWUqIHdhc21DYWxs
UmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNt
QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAg
IFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CkBAIC0xMDk3LDE1ICsxMTA1LDE1
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgVXBzaWxvblZhbHVlKiB3YXNtQ2Fs
bFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZvaWQgPyBudWxscHRyIDogaXNXYXNtQmxv
Y2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHdhc21DYWxsUmVz
dWx0KTsKICAgICAgICAgaXNXYXNtQmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2Ms
IEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24pOwogCi0gICAgICAgIC8vIEZJWE1FOiBMZXRz
IHJlbW92ZSB0aGlzIGluZGlyZWN0aW9uIGJ5IGNyZWF0aW5nIGEgUElDIGZyaWVuZGx5IElDCisg
ICAgICAgIC8vIEZJWE1FOiBMZXQncyByZW1vdmUgdGhpcyBpbmRpcmVjdGlvbiBieSBjcmVhdGlu
ZyBhIFBJQyBmcmllbmRseSBJQwogICAgICAgICAvLyBmb3IgY2FsbHMgb3V0IHRvIEpTLiBUaGlz
IHNob3VsZG4ndCBiZSB0aGF0IGhhcmQgdG8gZG8uIFdlIGNvdWxkIHByb2JhYmx5CiAgICAgICAg
IC8vIGltcGxlbWVudCB0aGUgSUMgdG8gYmUgb3ZlciBXYXNtOjpDb250ZXh0Ki4KICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM3NQotICAgICAg
ICBWYWx1ZSogY29kZUJsb2NrID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywKLSAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5j
ZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZDb2RlQmxvY2soKSkpOwotICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9uID0gaXNKU0Js
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKLSAgICAgICAgICAgIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIHNhZmVDYXN0PGludDMyX3Q+KEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6Om9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKGZ1bmN0aW9uSW5k
ZXgpKSk7Ci0gICAgICAgIFZhbHVlKiBqc0NhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5zZXR1cENhbGwobV9wcm9jLCBpc0pTQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlw
ZShyZXR1cm5UeXBlKSwKKyAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzRW1iZWRkZXJCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCisgICAgICAgICAgICBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbUNvZGVCbG9jaygpKSk7CisgICAgICAg
IFZhbHVlKiBqdW1wRGVzdGluYXRpb24gPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KCksIGNvZGVCbG9jaywgc2FmZUNhc3Q8aW50MzJfdD4oQ29kZUJsb2NrOjpvZmZzZXRPZkltcG9y
dFdhc21Ub0VtYmVkZGVyU3R1YihmdW5jdGlvbkluZGV4KSkpOworICAgICAgICBWYWx1ZSogZW1i
ZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJv
YywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSks
CiAgICAgICAgICAgICBbJl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTEx
MTksOCArMTEyNyw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAg
ICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSk7CiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgVXBzaWxvblZhbHVl
KiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlz
SlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwganNDYWxs
UmVzdWx0KTsKLSAgICAgICAgaXNKU0Jsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVXBzaWxvblZhbHVlKiBl
bWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6
IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgZW1iZWRkZXJDYWxsUmVzdWx0KTsKKyAgICAgICAgaXNFbWJlZGRlckJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIAog
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKIApAQCAtMTEyOSw3ICsxMTM3
LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IHJlc3VsdCA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFBoaSwgdG9C
M1R5cGUocmV0dXJuVHlwZSksIG9yaWdpbigpKTsKICAgICAgICAgICAgIHdhc21DYWxsUmVzdWx0
VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7Ci0gICAgICAgICAgICBqc0NhbGxSZXN1bHRVcHNpbG9u
LT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAgICAgIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24t
PnNldFBoaShyZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIGNhbGwgY291bGQg
aGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxk
IGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KQEAgLTExNjUsMTcgKzExNzMsMTcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW8KICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4
KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXpl
KCkpKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXI7Ci0gICAg
RXhwcmVzc2lvblR5cGUganNGdW5jdGlvbkJ1ZmZlcjsKKyAgICBFeHByZXNzaW9uVHlwZSBpbnN0
YW5jZXNCdWZmZXI7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNp
emU7CiAgICAgewogICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWJsZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksCi0gICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKSk7CisgICAgICAgICAgICBpbnN0
YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZXYXNtVGFibGUoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihK
U1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsKLSAgICAgICAganNGdW5j
dGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2Fm
ZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkpTRnVuY3Rpb25zKCkp
KTsKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zm
c2V0T2ZGdW5jdGlvbnMoKSkpOworICAgICAgICBpbnN0YW5jZXNCdWZmZXIgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFdhc206OlRh
YmxlOjpvZmZzZXRPZkluc3RhbmNlcygpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZm
ZXJTaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBJbnQzMiwgb3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJf
dD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZlNpemUoKSkpOworICAgICAgICAgICAgdGFi
bGUsIHNhZmVDYXN0PGludDMyX3Q+KFdhc206OlRhYmxlOjpvZmZzZXRPZlNpemUoKSkpOwogICAg
IH0KIAogICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQu
CkBAIC0xMTk1LDYgKzEyMDMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgIEV4cHJl
c3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIG9mZnNl
dCk7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxp
emVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5k
aWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgorICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUg
dHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWdu
YXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3MjEwCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2FsbGFibGVGdW5jdGlv
bjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50MzJfdCksICJMb2FkIGNvZGVnZW4gYXNz
dW1lcyBpMzIiKTsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIs
IG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihPQkpFQ1RfT0ZG
U0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKSk7CiAgICAgewpAQCAtMTIy
MywxOSArMTIzMiwxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgIHsKICAgICAgICAg
VmFsdWUqIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
TXVsLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAotICAgICAgICAgICAg
Y29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pKSk7
Ci0gICAgICAgIFZhbHVlKiBqc09iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2lu
KCksIGpzRnVuY3Rpb25CdWZmZXIsIG9mZnNldCkpOworICAgICAgICAgICAgY29uc3RhbnQocG9p
bnRlclR5cGUoKSwgc2l6ZW9mKFdhc206Okluc3RhbmNlKikpKTsKKyAgICAgICAgVmFsdWUqIG5l
d0NvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGluc3Rh
bmNlc0J1ZmZlciwgb2Zmc2V0KSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGRvQ29udGV4dFN3aXRj
aCA9IG1fcHJvYy5hZGRCbG9jaygpOwogCi0gICAgICAgIFZhbHVlKiBuZXdDb250ZXh0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIGpzT2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90
PihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSk7Ci0gICAgICAg
IFZhbHVlKiBpc1NhbWVDb250ZXh0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCi0gICAgICAgICAgICBuZXdDb250ZXh0LCBpbnN0YW5j
ZVZhbHVlKCkpOworICAgICAgICBWYWx1ZSogaXNTYW1lQ29udGV4dEluc3RhbmNlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCisgICAg
ICAgICAgICBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNlVmFsdWUoKSk7CiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBv
cmlnaW4oKSwKLSAgICAgICAgICAgIGlzU2FtZUNvbnRleHQsIEZyZXF1ZW50ZWRCbG9jayhjb250
aW51YXRpb24pLCBGcmVxdWVudGVkQmxvY2soZG9Db250ZXh0U3dpdGNoKSk7CisgICAgICAgICAg
ICBpc1NhbWVDb250ZXh0SW5zdGFuY2UsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBG
cmVxdWVudGVkQmxvY2soZG9Db250ZXh0U3dpdGNoKSk7CiAKICAgICAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAgLTEyNDMsMjYgKzEyNTAsMjYgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRv
IGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEK
ICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRv
U2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwogICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIHBh
dGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG5ld0NvbnRleHRJbnN0YW5jZSwgVmFsdWVSZXA6OlNv
bWVSZWdpc3Rlcik7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCks
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dCA9IHBh
cmFtc1swXS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0ID0gcGFyYW1zWzFd
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1sw
XS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNb
MV0uZ3ByKCk7CiAgICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJl
Z3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwogICAgICAgICAgICAgY29uc3QgYXV0byYg
c2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAgICBHUFJSZWcg
YmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgICAgICAgICBB
U1NFUlQobmV3Q29udGV4dCAhPSBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hl
ZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJh
c2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0LCBDb250ZXh0OjpvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwotICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRl
eHQobmV3Q29udGV4dCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MobmV3Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OyAvLyBKU1dlYkFzc2VtYmx5TWVtb3J5Ki4KKyAgICAgICAgICAgIEFTU0VSVChuZXdDb250ZXh0
SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJ
bnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQo
KSkpOworICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0
SW5zdGFuY2UpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG5ld0NvbnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21N
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnkqLgogICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJl
Z3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUKHNp
emVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwogICAgICAgICAg
ICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBz
aXplLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5
KTsgLy8gV2FzbU1lbW9yeTo6dm9pZCouCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSks
IHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9y
eTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6OnZvaWQq
LgogICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIApAQCAtMTMzOSwx
OTQgKzEzNDYsNiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRy
b2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzcwogICAgIGRhdGFMb2dMbigpOwog
fQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFw
cGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUg
bW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkKLXsKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCA9
ICpjb21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBvaW50SklUOwotCi0gICAgYXV0byByZXN1bHQg
PSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7Ci0gICAgaml0LmVtaXRGdW5j
dGlvblByb2xvZ3VlKCk7Ci0KLSAgICAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nr
cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQotICAgIGpp
dC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNo
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSkpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciogbGlua2VkQ2FsbGVl
TW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsKLSAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICpsaW5rZWRDYWxsZWVNb3Zl
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxlZU1vdmVMb2NhdGlvbik7Ci0gICAgfSk7Ci0K
LSAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3Rl
ckluZm86OmdldCgpOwotICAgIFJlZ2lzdGVyU2V0IHRvU2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZl
KG1vZGUpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHVuc2lnbmVkIHRvU2F2ZVNpemUg
PSB0b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCk7Ci0gICAgLy8gVGhleSBzaG91bGQgYWxsIGJlIGNh
bGxlZSBzYXZlcy4KLSAgICB0b1NhdmUuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOwotICAgIEFTU0VSVCh0b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCkgPT0gdG9TYXZl
U2l6ZSk7Ci0jZW5kaWYKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3Bp
bGwodG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9p
bnRlckJhc2VkKTsKLSAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9
IHJlZ2lzdGVyc1RvU3BpbGw7Ci0KLSAgICB1bnNpZ25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lz
dGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsKLSAgICB0b3RhbEZyYW1lU2l6ZSAr
PSBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzKCk7Ci0gICAgdG90YWxG
cmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotICAgIHVuc2lnbmVkIG51bUdQ
UnMgPSAwOwotICAgIHVuc2lnbmVkIG51bUZQUnMgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNo
IChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKLSAgICAgICAgY2FzZSBXYXNtOjpJNjQ6Ci0gICAg
ICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICB0b3RhbEZy
YW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgKytudW1HUFJzOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICBjYXNlIFdhc206
OkY2NDoKLSAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigp
Lm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6
ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVtRlBSczsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRvdGFsRnJhbWVTaXplID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgdG90YWxGcmFtZVNpemUpOwotICAg
IGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSks
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBXZSBzYXZl
IGFsbCB0aGVzZSByZWdpc3RlcnMgcmVnYXJkbGVzcyBvZiBoYXZpbmcgYSBtZW1vcnkgb3Igbm90
LgotICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCB3ZSB1c2Ugb25lIG9mIHRoZXNlIGFzIGEgc2Ny
YXRjaC4gVGhhdCBzYWlkLAotICAgIC8vIGFsbW9zdCBhbGwgcmVhbCB3YXNtIHByb2dyYW1zIHVz
ZSBtZW1vcnksIHNvIGl0J3Mgbm90IHJlYWxseQotICAgIC8vIHdvcnRoIG9wdGltaXppbmcgZm9y
IHRoZSBjYXNlIHRoYXQgdGhleSBkb24ndC4KLSAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewotICAgICAgICBHUFJSZWcgcmVn
ID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0gICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBy
ZWdBdE9mZnNldC5vZmZzZXQoKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpKTsKLSAgICB9
Ci0KLSAgICBHUFJSZWcgd2FzbUNvbnRleHRHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0UG9p
bnRlcjsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1l
ID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7
Ci0gICAgICAgIG51bUdQUnMgPSAwOwotICAgICAgICBudW1GUFJzID0gMDsKLSAgICAgICAgLy8g
V2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCi0g
ICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBz
YXZlZCBpdCBhYm92ZS4KLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdzLmJh
c2VNZW1vcnlQb2ludGVyOwotCi0gICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFt
ZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICAgICAg
Ly8gdm1FbnRyeVRvV2FzbSBwYXNzZXMgV2FzbTo6Q29udGV4dCogYXMgdGhlIGZpcnN0IEpTIGFy
Z3VtZW50IHdoZW4gd2UncmUKLSAgICAgICAgLy8gbm90IHVzaW5nIGZhc3QgVExTIHRvIGhvbGQg
dGhlIFdhc206OkNvbnRleHQqLgotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkp
IHsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ29udGV4dEdQUik7Ci0gICAgICAg
ICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVycyAqIHNpemVvZih2b2lkKik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc2ln
bmF0dXJlLmFyZ3VtZW50KGkpKSB7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAg
ICAgICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
d2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206Okkz
MikKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5n
Q29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICsrbnVtR1BSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9m
cHJBcmdzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3Vt
ZW50KGkpID09IFdhc206OkYzMikgewotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zm
c2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihz
Y3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNl
dCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2Ny
YXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9p
ZCopOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
aWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKQotICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251
bUZQUnNdLmZwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnBy
QXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICsrbnVtRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghIWluZm8ubWVtb3J5KSB7Ci0gICAgICAgIEdQ
UlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKLQotICAgICAg
ICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNvbnRleHRHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKLSAgICAgICAgICAgIGNv
bnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOwotICAgICAgICAg
ICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKLSAgICAgICAgICAgIEFTU0VSVCghc2l6
ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0
YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRp
dmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdz
WzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
c2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICB9Ci0K
LSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVh
ckNhbGwoKTsKLSAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4
ICsgaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA8IGluZm8uZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKLSAgICBqaXQuYWRkTGlua1Rh
c2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4U3BhY2VdIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjYWxsKSwgZnVuY3Rpb25J
bmRleFNwYWNlIH0pOwotICAgIH0pOwotCi0KLSAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewotICAgICAgICBHUFJSZWcgcmVn
ID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0gICAgICAgIEFTU0VSVChyZWcgIT0gR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZz
ZXQub2Zmc2V0KCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwgcmVnKTsKLSAgICB9Ci0KLSAgICBz
d2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAgICBjYXNlIFdhc206OkYzMjoKLSAg
ICAgICAgaml0Lm1vdmVGbG9hdFRvMzIoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXYXNtOjpGNjQ6Ci0g
ICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBq
aXQucmV0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBhdXRvIEIzSVJHZW5lcmF0b3I6
Om9yaWdpbigpIC0+IE9yaWdpbgogewogICAgIE9wY29kZU9yaWdpbiBvcmlnaW4obV9wYXJzZXIt
PmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgp
KTsKQEAgLTE1MzQsNyArMTM1Myw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4g
T3JpZ2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KG9yaWdpbik7CiB9CiAKLUV4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2Rl
IG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4
dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXpl
X3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29t
cGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVw
LCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewogICAgIGF1dG8gcmVz
dWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogCkBAIC0xNTU4LDEx
ICsxMzc3LDExIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAgICAgICAgID8gT3B0aW9uczo6
d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2Vi
QXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgY29u
dGV4dChpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKLSAgICBG
dW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgQjNJUkdlbmVyYXRvciBp
ckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0
aHJvd1dhc21FeGNlcHRpb24pOworICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBh
cnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7
CiAKLSAgICBjb250ZXh0Lmluc2VydENvbnN0YW50cygpOworICAgIGlyR2VuZXJhdG9yLmluc2Vy
dENvbnN0YW50cygpOwogCiAgICAgcHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaAppbmRleCBlMmM2YWRiLi42OWJlNDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3Rz
LmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgi
CiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlv
bi5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgpAQCAtNTQsOSArNTUsNyBAQCBzdHJ1
Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5
cHJvZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlwcm9kdWN0czsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29t
cGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxs
cHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IDIyZWRkMTYuLmQwZWFmYTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTI5LDggKzI5LDYgQEAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0j
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2lu
Y2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTUzLDIxICs1MSwyMSBAQCBuYW1lc3BhY2UgV2FzbUJC
UVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAK
LUJCUVBsYW46OkJCUVBsYW4oVk0qIHZtLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFz
eW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKHZtLCBXVEZN
b3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250
ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0
aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3Jh
cHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICA6IEJhc2Uo
Y29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJl
ZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgLCBtX3N0YXRlKFN0YXRlOjpW
YWxpZGF0ZWQpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewogfQogCi1CQlFQbGFuOjpCQlFQ
bGFuKFZNKiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29t
cGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQkJRUGxhbih2bSwgYWRvcHRSZWYoKm5ldyBNb2R1
bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkpKSwgd29yaywgV1RGTW92ZSh0YXNrKSkKK0JC
UVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNl
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldy
YXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dh
c21FeGNlcHRpb24pCisgICAgOiBCQlFQbGFuKGNvbnRleHQsIGFkb3B0UmVmKCpuZXcgTW9kdWxl
SW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFzayksIFdURk1v
dmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQogewogICAgIG1f
c3RhdGUgPSBTdGF0ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihWTSogdm0sIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmss
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2Uodm0sIHNvdXJjZSwgc291cmNlTGVu
Z3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBj
b25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3Jr
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291
cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkK
ICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC0yNjksNyArMjY3LDcgQEAgdm9pZCBCQlFQ
bGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIAogICAgICAg
ICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+KCk7CiAgICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRp
b25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25T
dGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21w
aWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CisgICAgICAgIGF1
dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25D
b250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNp
Z25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1
bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgICAgIGlm
IChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjg1LDcgKzI4Myw3IEBAIHZvaWQgQkJRUGxh
bjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAKICAgICAgICAg
aWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsK
ICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbklu
ZGV4LCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9u
SW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5k
ZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rp
b25zLmFkZChmdW5jdGlvbkluZGV4LCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihtX2NvbXBpbGF0
aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9k
ZSwgZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJl
c3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgfQogCkBAIC0zMTQsMTQgKzMxMiwxNCBAQCB2b2lk
IEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAg
ICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGF1dG8ganNUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlvbkluZGV4KSkg
eworICAgICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0g
bV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlvbkluZGV4KSkgewog
ICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC5qc0VudHJ5cG9p
bnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgQmFzZTo6ZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRh
YmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBlbnRyeXBvaW50IGF0IGluZGV4ICIsIFN0cmluZzo6bnVt
YmVyKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBqc1RvV2FzbUludGVybmFsRnVuY3Rpb24t
PmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlv
bj4oCisgICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAog
ICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlw
dC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0
YSgpKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRC
eXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaAppbmRleCAzNTlmMTNiLi5jNmVhNDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKQEAgLTI4LDEyICsyOCwxMiBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJV
cENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDEsOCArNDEsNiBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxMaW5rSW5mbzsKLWNsYXNzIEpTR2xvYmFsT2Jq
ZWN0OwotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIApAQCAt
NTAsMTIgKzQ4LDEzIEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CiBwdWJs
aWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47CiAgICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90
IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKKwogICAgIC8vIE5vdGU6IENvbXBsZXRpb25U
YXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhl
cmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBCQlFQbGFuKFZNKiwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBCQlFQbGFuKFZNKiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29t
cGxldGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0
aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXIm
JiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKENv
bnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBD
cmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICAvLyBOb3Rl
OiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0
dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCiAg
ICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJpZCBvZiBmdW5jdGlvbiB0ZXN0cyB3ZSBzaG91bGQg
cmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMgY29uc3RydWN0b3IuCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgQkJRUGxhbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29t
cGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0Kiwg
Y29uc3QgdWludDhfdCosIHNpemVfdCwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIAog
ICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogCkBAIC0xNDEsNyArMTQwLDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21F
eGl0U3R1YnM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4g
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgSGFzaFNldDx1aW50MzJfdCwgdHlwZW5hbWUg
RGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlczsKLSAgICBIYXNoTWFw
PHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERl
ZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50MzJfdD4+IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBIYXNoTWFw
PHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERl
ZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBW
ZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CiAgICAgVmVj
dG9yPFRpZXJVcENvdW50PiBtX3RpZXJVcENvdW50czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaAppbmRleCAxYjhiNTZmLi40NDQ3OTBiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaApA
QCAtMzksMTAgKzM5LDEwIEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3Qg
RnVuY3RvciYgY2FsbGJhY2spCiAgICAgQVNTRVJUKCFmYWlsZWQoKSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBt
X3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7
CiAKLSAgICAgICAgUmVmUHRyPFdhc206OkNhbGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlOwotICAg
ICAgICBpZiAoYXV0byBqc1RvV2FzbUZ1bmN0aW9uID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rp
b25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICBqc0VudHJ5cG9p
bnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGpzVG9XYXNtRnVuY3Rpb24t
PmVudHJ5cG9pbnQpKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRl
cihqc1RvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdh
c20oanNFbnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7CisgICAgICAgIFJlZlB0cjxXYXNtOjpDYWxs
ZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKKyAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJU
b1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50
ZXJuYWxGdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRlclRvV2FzbUZ1bmN0aW9u
LT5lbnRyeXBvaW50KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRz
Ojpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwogICAgICAgICB9CiAK
ICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lk
IEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogICAg
ICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxl
ZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3Bh
Y2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxs
ZWUucHRyKCkpKTsKIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdU
Rk1vdmUoanNFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkp
OworICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRp
bmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4
IDY3Y2NmNWUuLjQ5MTBjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmlu
ZGluZy5jcHAKQEAgLTI5LDU5NiArMjksMTQgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
ICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKLSNp
bmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNp
bmNsdWRlICJOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0
b3JzLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCi0jaW5jbHVkZSAiV2Fz
bUNvbnRleHQuaCIKLSNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiB1c2luZyBKSVQgPSBDQ2FsbEhlbHBlcnM7CiAKLXN0
YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKEpJVCYgaml0LCB1bnNpZ25lZCBpbXBv
cnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKLXsKLSAgICAvLyBXZSdyZSBjYWxsaW5nIG91dCBvZiB0
aGUgY3VycmVudCBXZWJBc3NlbWJseS5JbnN0YW5jZS4gVGhhdCBJbnN0YW5jZSBoYXMgYSBsaXN0
IG9mIGFsbCBpdHMgaW1wb3J0IGZ1bmN0aW9ucy4KLSAgICBqaXQubG9hZFdhc21Db250ZXh0KHJl
c3VsdCk7Ci0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHJlc3VsdCwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSksIHJlc3VsdCk7
Ci19Ci0KLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdh
c21Ub0pzKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5IGFic3RyYWN0IGF3YXkgdGhlIGNh
bGxpbmcgY29udmVudGlvbi4KLSAgICAvLyBJdCdkIGJlIHN1cGVyIGVhc3kgdG8gZG8gc286IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDEKLSAgICBjb25zdCBX
YXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwot
ICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc0NDID0ganNjQ2FsbGluZ0NvbnZlbnRp
b24oKTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBKSVQgaml0OwotCi0gICAgLy8gTm90ZTogV2FzbUIz
SVJHZW5lcmF0b3IgYXNzdW1lcyB0aGF0IHRoaXMgc3R1YiB0cmVhdHMgU1AgYXMgYSBjYWxsZWUg
c2F2ZS4KLSAgICAvLyBJZiB3ZSBldmVyIGNoYW5nZSB0aGlzLCB3ZSB3aWxsIGFsc28gbmVlZCB0
byBjaGFuZ2UgV2FzbUIzSVJHZW5lcmF0b3IuCi0KLSAgICAvLyBCZWxvdywgd2UgYXNzdW1lIHRo
YXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBpcyBhbHdheXMgb24gdGhlIHN0YWNrLgotICAg
IEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6ZSgpKTsKLSAgICBBU1NFUlQoIWpzQ0MubV9mcHJB
cmdzLnNpemUoKSk7Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBqaXQu
c3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigwKSwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tz
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCi0KLSAgICB7
Ci0gICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7Ci0gICAgICAgIGhhc0JhZEk2NFVz
ZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpID09IEk2NDsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudCAmJiAhaGFzQmFkSTY0VXNlOyArK2FyZ051
bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051
bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9p
ZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgICAgICAg
ICBjYXNlIEk2NDogewotICAgICAgICAgICAgICAgIGhhc0JhZEk2NFVzZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7Ci0gICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0g
ICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0K
LSAgICAgICAgICAgIC8vIFN0b3JlIENhbGxlZS4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgICAgICAgICAgYXV0byBjYWxs
ID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2
bSk7Ci0KLSAgICAgICAgICAgIHZvaWQgKCp0aHJvd0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIHdhc21Db250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9i
amVjdCgpOwotICAgICAgICAgICAgICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+
ZXJyb3JTdHJ1Y3R1cmUoKSwgQVNDSUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJu
IHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7Ci0KLSAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0
IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29u
dmVudGlvbiBzYXZlcyBhdCBsZWFzdCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVy
ZWZvcmUgZG9uJ3QgbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNl
IHRoZSB3YXNtIGNhbGxlZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiB0aGlzLgotICAgIFJlZ2lzdGVy
U2V0IG1pc3NpbmdDYWxsZWVTYXZlcyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0g
ICAgbWlzc2luZ0NhbGxlZVNhdmVzLmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMp
OwotICAgIEFTU0VSVChtaXNzaW5nQ2FsbGVlU2F2ZXMuaXNFbXB0eSgpKTsKLQotICAgIGlmICgh
T3B0aW9uczo6dXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzKCkpIHsKLSAgICAgICAg
U2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShh
cmdDb3VudCAqIHNpemVvZih1aW50NjRfdCkpOwotICAgICAgICBjaGFyKiBidWZmZXIgPSBhcmdD
b3VudCA/IHN0YXRpY19jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDog
bnVsbHB0cjsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwotICAgICAgICB1
bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGJ1ZmZlck9mZnNl
dCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAg
ICBjb25zdCBHUFJSZWcgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ0NTMDsKLSAgICAgICAgaml0
LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNpemVvZihSZWdpc3RlcikpKSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlcikpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVt
IDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWdu
YXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewot
ICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAg
ICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNhc2UgSTMyOiB7Ci0g
ICAgICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hh
bGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAg
Z3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3Bp
bGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3Jh
dGNoLgotICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAg
IGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7Ci0gICAgICAg
ICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAg
ICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUND
Lm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5t
X2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50
cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAg
ICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQu
Y29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVnLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgIGpp
dC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZw
clJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJB
cmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJn
c1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVz
ZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAg
ICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJP
ZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2Yo
UmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQubW92ZURv
dWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2
NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAgICAgICAgICAgICAgICsr
bWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1ZmZlck9mZnNldCArPSBzaXplb2YoUmVnaXN0
ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICBpZiAoYXJnQ291bnQpIHsKLSAgICAgICAgICAgIC8vIFRoZSBHQyBzaG91bGQgbm90
IGxvb2sgYXQgdGhpcyBidWZmZXIgYXQgYWxsLCB0aGVzZSBhcmVuJ3QgSlNWYWx1ZXMuCi0gICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZl
ci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVpbnQ2NF90ICgqY2Fs
bEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90Kikg
PQotICAgICAgICAgICAgW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNhbGxlZSwgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KiBidWZmZXIpIC0+IHVpbnQ2NF90
IHsgCi0gICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgICAgICAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAg
ICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051
bSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGFyZzsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChh
cmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJMzI6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90
PihidWZmZXJbYXJnTnVtXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgRjMyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEY2NDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3Vi
bGU+KGJ1ZmZlclthcmdOdW1dKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRh
OwotICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJs
ZSgqdm0pLT5nZXRDYWxsRGF0YShjYWxsZWUsIGNhbGxEYXRhKTsKLSAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGNhbGxlZSwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIDApOwotCi0gICAgICAgICAgICAgICAgdWludDY0X3QgcmVhbFJlc3Vs
dDsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgot
ICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWxSZXN1bHQgPSBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlc3VsdC50b0ludDMyKGV4
ZWMpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAgICAgICAgICAgICBjYXNlIEYzMjogewotICAg
ICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihyZXN1
bHQudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVhbFJl
c3VsdDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBqaXQubG9hZFdhc21Db250
ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgICAgICAKLSAgICAgICAgbWF0ZXJpYWxpemVJbXBv
cnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzID49IDQs
ICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxvdy4iKTsKLSAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJ1ZmZlcikpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAg
ICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5
SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0KLSAgICAgICAgLy8gZXhjZXB0aW9u
IGhlcmUuCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKCp2bSk7Ci0gICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcp
KEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7Ci0gICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7
Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9
OwotICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBqaXQu
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwotCi0gICAgICAgIG5vRXhjZXB0aW9uLmxpbmso
JmppdCk7Ci0gICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewotICAgICAg
ICBjYXNlIEY2NDogewotICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAgaml0Lm1vdmU2
NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
Uik7Ci0gICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgICAgICBqaXQucmV0
KCk7Ci0KLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZl
ci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwotCi0gICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCBjYWxsRnVuYyk7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25DYWxs
LCBkb1Vud2luZGluZyk7Ci0KLSAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZl
ciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgs
IHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Ci0gICAgfQotCi0gICAgLy8g
Tm90ZTogV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBX
YXNtQjNJUkdlbmVyYXRvcgotICAgIC8vIHdpbGwgZG8gdGhlIHN0YWNrIGNoZWNrIGZvciB1cy4g
V2hlbmV2ZXIgaXQgZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IG1ha2UKLSAgICAvLyBhIGNhbGwgdG8g
dGhpcyB0aHVuaywgaXQnbGwgbWFrZSBzdXJlIGl0cyBzdGFjayBjaGVjayBpbmNsdWRlcyBzcGFj
ZQotICAgIC8vIGZvciB1cyBoZXJlLgotCi0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZQYXJh
bWV0ZXJzID0gYXJnQ291bnQgKyAxOyAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KLSAg
ICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7Ci0gICAgY29uc3QgdW5zaWduZWQg
bnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lz
dGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICBjb25zdCB1bnNpZ25lZCBzdGFj
a09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCks
IG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKLSAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRk
cmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotCi0gICAgLy8gRklYTUUgbWFr
ZSB0aGVzZSBsb29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55
IGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdl
IHNpZ25hdHVyZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1
NDcKLSAgICAKLSAgICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRoZSBpbnRlZ2VyIHBhcmFtZXRlcnMs
IGZyZWVpbmcgdXAgdGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBhZnRlcndhcmRzLgotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkRlBScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2Fs
bEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSk7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkg
ewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoK
LSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAg
ICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAgICAgICAgICBjYXNlIEkzMjogewotICAgICAg
ICAgICAgICAgIEdQUlJlZyBncHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRH
UFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGdwclJl
ZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOwotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQg
YWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4K
LSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAg
ICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9m
ZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJU
b1B0cihncHJSZWcsIGdwclJlZyk7IC8vIENsZWFyIG5vbi1pbnQzMiBhbmQgbm9uLXRhZyBiaXRz
LgotICAgICAgICAgICAgICAgIGppdC5ib3hJbnQzMihncHJSZWcsIEpTVmFsdWVSZWdzKGdwclJl
ZyksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
Z3ByUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjMyOgot
ICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxl
ZCBiZWxvdy4KLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPj0gd2FzbUNDLm1f
ZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihS
ZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAg
ICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHsK
LSAgICAgICAgLy8gSW50ZWdlciByZWdpc3RlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc3BpbGxlZCwg
dGhlc2UgYXJlIG5vdyBhdmFpbGFibGUuCi0gICAgICAgIEdQUlJlZyBkb3VibGVFbmNvZGVPZmZz
ZXRHUFJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwotICAgICAgICBib29sIGhhc01hdGVyaWFsaXplZERv
dWJsZUVuY29kZU9mZnNldCA9IGZhbHNlOwotICAgICAgICBhdXRvIG1hdGVyaWFsaXplRG91Ymxl
RW5jb2RlT2Zmc2V0ID0gWyZoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQsICZqaXRd
IChHUFJSZWcgZGVzdCkgewotICAgICAgICAgICAgaWYgKCFoYXNNYXRlcmlhbGl6ZWREb3VibGVF
bmNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KERvdWJsZUVuY29k
ZU9mZnNldCA9PSAxbGwgPDwgNDgsICJjb2RlZ2VuIGFzc3VtZXMgdGhpcyBiZWxvdyIpOwotICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKDEpLCBkZXN0KTsKLSAgICAg
ICAgICAgICAgICBqaXQubHNoaWZ0NjQoSklUOjpUcnVzdGVkSW1tMzIoNDgpLCBkZXN0KTsKLSAg
ICAgICAgICAgICAgICBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRH
UFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1
bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICB1bnNpZ25lZCBm
ck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAw
OyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlw
ZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdU
eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0g
ICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgot
ICAgICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxl
ZCBhYm92ZS4KLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPj0gd2FzbUNDLm1f
Z3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihS
ZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKLSAgICAgICAgICAg
ICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgICAgICBGUFJS
ZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5t
X2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9m
cHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMs
IHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAg
ICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6
ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0LmNv
bnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQu
cHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZw
clJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVP
ZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRk
NjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBq
aXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lz
dGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAg
ICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBS
cyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcg
PSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFs
bCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0g
ICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZy
T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZURv
dWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZURv
dWJsZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcpOwotICAgICAgICAgICAg
ICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcsIHNjcmF0Y2gpOwotICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2Fs
bGVlRnJhbWVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgIEdQ
UlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpyZWdUMDsgLy8gQ2FsbGVlIG5lZWRz
IHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGggYmVsb3cuCi0gICAgQVNTRVJUKCF3YXNtQ0Mu
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBvcnRKU0NlbGxHUFJSZWcpKTsKLQotICAgIG1h
dGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJl
Zyk7Ci0KLSAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSkpOwotICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMyKG51bWJlck9m
UGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zm
c2V0KSk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQp
LCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgIC8vIEZJWE1FIFRhaWwg
Y2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2Vy
ZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4
Ci0KLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKCk7
Ci0gICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3Jp
Z2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0gICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0
VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUoMCk7Ci0g
ICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlh
bFJpZ2h0VmFsdWUpOwotICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwot
ICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLSAgICBzbG93UGF0aC5saW5rKCZqaXQp
OwotICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgotICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJl
Z1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgotICAgIEpJVDo6Q2FsbCBz
bG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgIGRvbmUubGluaygmaml0KTsKLQotICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOwotCi0gICAgc3dpdGNoIChzaWdu
YXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBWb2lkOgotICAgICAgICAvLyBEaXNjYXJk
LgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmM6Ci0gICAgY2FzZSBBbnlmdW5jOgotICAg
ICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2Ug
dHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUg
dmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KLSAgICB9Ci0gICAgY2FzZSBJMzI6IHsK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJh
bmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lz
dGVycykpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIoSlNW
YWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMp
KTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOwotCi0gICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBh
dXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGpp
dC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGludDMyX3QgKCpjb252ZXJ0
VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2KSAtPiBpbnQzMl90IHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAg
ICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsKLSAgICAgICAgfTsKLSAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0kzMik7Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRjMyOiB7
Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgYXV0byBub3RB
TnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBE
b05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5j
aElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhh
dmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgotICAgICAgICBqaXQu
c2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBl
bmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKLSAgICAgICAg
aml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAg
IGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQot
ICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNh
bGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0
SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShF
eGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4g
ZmxvYXQgeyAKLSAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICB9OwotICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjMyKTsKLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBGNjQ6IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAgICAg
ICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgIGF1dG8gaXNEb3VibGUg
PSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCi0g
ICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAg
ICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgaXNEb3VibGUubGluaygmaml0
KTsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0Lm1vdmU2
NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
Uik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIG5vdEFOdW1i
ZXIubGluaygmaml0KTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7
Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24o
KnZtKSk7Ci0KLSAgICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1Zh
bHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91YmxlIHsgCi0gICAg
ICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252
ZXJ0VG9GNjQpOwotICAgICAgICB9KTsKLQotICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBpZiAoIWV4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7
Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOwotICAgICAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgaml0Lmp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNT
dGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAg
ICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9OwotCi0g
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vud2luZGluZyk7Ci0gICAgICAgIH0p
OwotICAgIH0KLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmlu
ZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
bGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJl
dHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
KHRhcmdldFRvQ2hlY2spKTsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIg
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOwotICAgIGNhbGxMaW5r
SW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwg
aG90UGF0aE90aGVyKTsKLQotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAo
IldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2ln
bmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKLX0KLQogRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBv
cnRJbmRleCkKIHsKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQ
aW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNjMzLDI0ICs1MSwyMyBAQCBFeHBlY3RlZDxN
YWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVk
IGltcG9ydEluZGV4KQogICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gc2Ny
YXRjaCk7CiAgICAgR1BSUmVnIHNpemVSZWdBc1NjcmF0Y2ggPSBzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXI7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxDb250ZXh0LCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U+Ojp2YWx1ZSwgIlRoaXMgaXMgYXNzdW1lZCBpbiB0aGUgY29kZSBiZWxv
dy4iKTsKICAgICAvLyBCMydzIGNhbGwgY29kZWdlbiBlbnN1cmVzIHRoYXQgdGhlIEpTQ2VsbCBp
cyBhIFdlYkFzc2VtYmx5RnVuY3Rpb24uCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChzaXplUmVn
QXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVz
cyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0
RnVuY3Rpb24oaW1wb3J0SW5kZXgpKSwgc2NyYXRjaCk7Ci0KLSAgICAvLyBHZXQgdGhlIGNhbGxl
ZSdzIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGFuZCBzZXQgaXQgYXMgV2FzbUNvbnRleHQuIFRoZSBj
YWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCi0gICAg
aml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9m
ZnNldE9mSW5zdGFuY2UoKSksIGJhc2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCi0gICAgaml0LnN0
b3JlV2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7CisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3Rh
bmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQgSW5zdGFuY2UqCisgICAgLy8gR2V0IHRoZSBj
YWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0J3Mg
aW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24g
SW5zdGFuY2UuCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShpbXBvcnRJbmRl
eCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseUluc3RhbmNlKi4KKyAgICAvLyBXaGls
ZSB3ZSdyZSBhY2Nlc3NpbmcgdGhhdCBjYWNoZWxpbmUsIGFsc28gZ2V0IHRoZSB3YXNtIGVudHJ5
cG9pbnQgc28gd2UgY2FuIHRhaWwgY2FsbCB0byBpdCBiZWxvdy4KKyAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZldhc21FbnRyeXBvaW50KGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOyAvLyBXYXNtOjpXYXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbi4KKyAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNl
KGJhc2VNZW1vcnkpOwogCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1Nj
cmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkp
LCBzaXplUmVnQXNTY3JhdGNoKTsKICAgICBqaXQuc3RvcmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwg
SklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRTdGFja0xpbWl0KCkpKTsKIAogICAgIC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgY29kZSBh
c3N1bWVzIHRoYXQgYWxsIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGhhdmUgdGhlIHNhbWUgcGlubmVk
IHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1
MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9yeSByZWdpc3RlciBhcyB3ZWxs
IGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSks
IGJhc2VNZW1vcnkpOyAvLyBKU1dlYkFzc2VtYmx5TWVtb3J5Ki4KKyAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldh
c21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnkqLgogICAgIEFTU0VSVCgh
c2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdl
IHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVs
YXRpdmUgdG8gMC4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNX
ZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OyAvLyBXYXNtTWVtb3J5Ojp2b2lkKi4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFz
ZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVS
ZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhi
YXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsg
Ly8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6
ZVJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdp
c3RlciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdp
c3RlciAhPSBzY3JhdGNoKTsKQEAgLTY1OCw3ICs3NSw2IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5k
ZXgpCiAgICAgfQogCiAgICAgLy8gVGFpbCBjYWxsIGludG8gdGhlIGNhbGxlZSBXZWJBc3NlbWJs
eSBmdW5jdGlvbi4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2NyYXRjaCwgV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgc2Ny
YXRjaCk7CiAgICAgaml0LmxvYWRQdHIoc2NyYXRjaCwgc2NyYXRjaCk7CiAgICAgaml0Lmp1bXAo
c2NyYXRjaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oCmluZGV4
IDRlMjYyYmEuLmZlYzZiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRp
bmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw5ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAi
QjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5o
IgotI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC00NCw3ICs0Miw2IEBAIGVudW0gY2xhc3MgQmluZGluZ0ZhaWx1cmUg
ewogfTsKIAogRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4g
d2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCk7Ci1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KcyhWTSosIEJhZzxDYWxsTGlua0luZm8+
JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Db2RlQmxvY2suY3BwCmluZGV4IDcwZmVmYjAuLmU1MTM2N2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCkBAIC0zMSwyMCArMzEsMzEg
QEAKIAogI2luY2x1ZGUgIldhc21CQlFQbGFuSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYWxs
ZWUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0Lmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLUNvZGVCbG9jazo6Q29kZUJs
b2NrKE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
KQorUmVmPENvZGVCbG9jaz4gQ29kZUJsb2NrOjpjcmVhdGUoQ29udGV4dCogY29udGV4dCwgTWVt
b3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0
ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0
aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBzaXplX3QgaW1wb3J0RnVuY3Rpb25Db3Vu
dCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICBhdXRvKiBy
ZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemUoaW1wb3J0RnVu
Y3Rpb25Db3VudCkpKSBDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24s
IFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcG9ydEZ1bmN0aW9uQ291bnQ7ICsraSkKKyAgICAg
ICAgcmVzdWx0LT5pbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaSkgPSBudWxscHRyOworICAgIHJl
dHVybiBhZG9wdFJlZigqcmVzdWx0KTsKK30KKworQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29udGV4
dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5m
b3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwg
VGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IG1fY2FsbGVlQ291
bnQobW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkpCiAgICAgLCBtX21v
ZGUobW9kZSkKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsK
LSAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4obnVsbHB0ciwgbWFrZVJlZihtb2R1
bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRUYXNrPFBs
YW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3Rl
ZFRoaXMpXSAoVk0qLCBQbGFuJikgeworCisgICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQ
bGFuKGNvbnRleHQsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29t
cGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CiAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkp
IHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5lcnJvck1lc3NhZ2UoKTsK
LSAgICAgICAgICAgIG1fcGxhbiA9IG51bGxwdHI7CisgICAgICAgICAgICBzZXRDb21waWxhdGlv
bkZpbmlzaGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNjYsMTAg
Kzc3LDEwIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQogICAgICAgICBtX3dhc21Ub1dhc21DYWxsc2l0
ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7CiAgICAgICAgIG1fdGllclVw
Q291bnRzID0gbV9wbGFuLT50YWtlVGllclVwQ291bnRzKCk7CiAKLSAgICAgICAgbV9wbGFuID0g
bnVsbHB0cjsKLSAgICB9KSkpOwotCisgICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsK
KyAgICB9KSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRp
b24pKTsKICAgICBtX3BsYW4tPnNldE1vZGUobW9kZSk7CisKICAgICBhdXRvJiB3b3JrbGlzdCA9
IFdhc206OmVuc3VyZVdvcmtsaXN0KCk7CiAgICAgLy8gTm90ZSwgaW1tZWRpYXRlbHkgYWZ0ZXIg
d2UgZW5xdWV1ZSB0aGUgcGxhbiwgdGhlcmUgaXMgYSBjaGFuY2UgdGhlIGFib3ZlIGNhbGxiYWNr
IHdpbGwgYmUgY2FsbGVkLgogICAgIHdvcmtsaXN0LmVucXVldWUobWFrZVJlZigqbV9wbGFuLmdl
dCgpKSk7CkBAIC05Miw3ICsxMDMsNyBAQCB2b2lkIENvZGVCbG9jazo6d2FpdFVudGlsRmluaXNo
ZWQoKQogICAgIC8vIGVsc2UsIGlmIHdlIGRvbid0IGhhdmUgYSBwbGFuLCB3ZSdyZSBhbHJlYWR5
IGNvbXBpbGVkLgogfQogCi12b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgQXN5
bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKK3ZvaWQgQ29kZUJsb2NrOjpjb21waWxlQXN5
bmMoQ29udGV4dCogY29udGV4dCwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKIHsK
ICAgICBSZWZQdHI8UGxhbj4gcGxhbjsKICAgICB7CkBAIC0xMDQsMTIgKzExNSwxMSBAQCB2b2lk
IENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKFZNJiB2bSwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNr
JiYgdGFzaykKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBrZWVwIGEgUmVmUHRyIG9uIHRo
ZSBQbGFuIGJlY2F1c2UgdGhlIHdvcmtsaXN0IHdpbGwga2VlcAogICAgICAgICAvLyBhIFJlZlB0
ciBvbiB0aGUgUGxhbiB1bnRpbCB0aGUgcGxhbiBmaW5pc2hlcyBub3RpZnlpbmcgYWxsIG9mIGl0
cyBjYWxsYmFja3MuCiAgICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb3RlY3RlZFRoaXMgPSB0
aGlzOwotICAgICAgICBwbGFuLT5hZGRDb21wbGV0aW9uVGFzayh2bSwgY3JlYXRlU2hhcmVkVGFz
azxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92ZSh0YXNrKSwgcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChWTSogdm0sIFBsYW4mKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQodm0pOwotICAgICAgICAgICAgdGFzay0+cnVuKCp2bSwgbWFrZVJlZigq
dGhpcykpOworICAgICAgICBwbGFuLT5hZGRDb21wbGV0aW9uVGFzayhjb250ZXh0LCBjcmVhdGVT
aGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHRhc2sgPSBXVEZNb3ZlKHRhc2sp
LCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAg
ICAgICAgICB0YXNrLT5ydW4obWFrZVJlZigqdGhpcykpOwogICAgICAgICB9KSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIHRhc2stPnJ1bih2bSwgbWFrZVJlZigqdGhpcykpOworICAgICAgICB0YXNr
LT5ydW4obWFrZVJlZigqdGhpcykpOwogfQogCiBib29sIENvZGVCbG9jazo6aXNTYWZlVG9SdW4o
TWVtb3J5TW9kZSBtZW1vcnlNb2RlKQpAQCAtMTMwLDYgKzE0MCwxMyBAQCBib29sIENvZGVCbG9j
azo6aXNTYWZlVG9SdW4oTWVtb3J5TW9kZSBtZW1vcnlNb2RlKQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorCit2b2lkIENvZGVCbG9jazo6c2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpCit7CisgICAg
bV9wbGFuID0gbnVsbHB0cjsKKyAgICBtX2NvbXBpbGF0aW9uRmluaXNoZWQuc3RvcmUodHJ1ZSk7
Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29k
ZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKaW5k
ZXggMmRiZjdlNC4uMDIwMTAyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
b2RlQmxvY2suaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRl
ci5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMzcsMTEgKzM4LDEwIEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBDYWxsZWU7
CitzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIEJCUVBsYW47CiBjbGFzcyBPTUdQbGFuOwogc3RydWN0
IE1vZHVsZUluZm9ybWF0aW9uOwpAQCAtNTEsMjAgKzUxLDQyIEBAIGVudW0gY2xhc3MgTWVtb3J5
TW9kZSA6IHVpbnQ4X3Q7CiAgICAgCiBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkIENhbGxi
YWNrVHlwZShWTSYsIFJlZjxDb2RlQmxvY2s+JiYpOworICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFj
a1R5cGUoUmVmPENvZGVCbG9jaz4mJik7CiAgICAgdXNpbmcgQXN5bmNDb21waWxhdGlvbkNhbGxi
YWNrID0gUmVmUHRyPFdURjo6U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMg
UmVmPENvZGVCbG9jaz4gY3JlYXRlKE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24m
IG1vZHVsZUluZm9ybWF0aW9uKQorICAgIHN0YXRpYyBSZWY8Q29kZUJsb2NrPiBjcmVhdGUoQ29u
dGV4dCosIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiwgQ3JlYXRlRW1iZWRkZXJXcmFw
cGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9m
SW1wb3J0U3R1YnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxzaXplb2Yodm9pZCopPihzaXplb2YoQ29kZUJsb2NrKSk7CisgICAgfQorCisgICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBvcnRD
b3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6
ZW9mKHZvaWQqKSAqIGZ1bmN0aW9uSW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOworICAgIH0KKwor
ICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb2RlQmxvY2sobW9kZSwgbW9k
dWxlSW5mb3JtYXRpb24pKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0
dWIoaW1wb3J0SW5kZXgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBpbXBv
cnRJbmRleDsKKyAgICB9CisKKyAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3
YXNtVG9KU0NhbGxTdHViRm9ySW1wb3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOworICAgICAgICByZXR1cm4gJmltcG9ydFdhc21Ub0Vt
YmVkZGVyU3R1YihpbXBvcnRJbmRleCk7CiAgICAgfQogCiAgICAgdm9pZCB3YWl0VW50aWxGaW5p
c2hlZCgpOwotICAgIHZvaWQgY29tcGlsZUFzeW5jKFZNJiwgQXN5bmNDb21waWxhdGlvbkNhbGxi
YWNrJiYpOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBBc3luY0NvbXBpbGF0aW9u
Q2FsbGJhY2smJik7CiAKICAgICBib29sIGNvbXBpbGF0aW9uRmluaXNoZWQoKQogICAgIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICByZXR1cm4gIW1f
cGxhbjsKKyAgICAgICAgcmV0dXJuIG1fY29tcGlsYXRpb25GaW5pc2hlZC5sb2FkKCk7CiAgICAg
fQogICAgIGJvb2wgcnVubmFibGUoKSB7IHJldHVybiBjb21waWxhdGlvbkZpbmlzaGVkKCkgJiYg
IW1fZXJyb3JNZXNzYWdlOyB9CiAKQEAgLTc4LDkgKzEwMCwxMiBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2Fz
bVRvV2FzbUV4aXRTdHVicy5zaXplKCk7IH0KKyAgICAKKyAgICAvLyBUaGVzZSB0d28gY2FsbGVl
IGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25jZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxh
dGVkLgogCiAgICAgQ2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChy
dW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49
IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0g
ZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogCkBAIC05MCw2ICsx
MTUsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIENhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7
CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVu
Y3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2ln
bmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3Vu
dCgpOwogICAgICAgICBpZiAobV9vcHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4XSkKQEAgLTEx
Nyw3ICsxNDMsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPTUdQbGFu
OwogCi0gICAgQ29kZUJsb2NrKE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJik7CisgICAg
Q29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0
ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgc2V0Q29t
cGlsYXRpb25GaW5pc2hlZCgpOwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVt
b3J5TW9kZSBtX21vZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7CkBA
IC0xMjgsNiArMTU1LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+PiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFu
PiBtX3BsYW47CisgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsg
ZmFsc2UgfTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgTG9jayBtX2xvY2s7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwCmluZGV4IGZlYTE2
ZGUuLmUwNTlmYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5j
cHAKQEAgLTI4LDMwICsyOCw0MSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5j
bHVkZSAiVk0uaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRl
ICJPcHRpb25zLmgiCisKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1Db250ZXh0KiBsb2FkQ29u
dGV4dChWTSYgdm0pCitib29sIENvbnRleHQ6OnVzZUZhc3RUTFMoKQoreworI2lmIEVOQUJMRShG
QVNUX1RMU19KSVQpCisgICAgcmV0dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4
dCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBDb250ZXh0Ojpsb2FkKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNf
SklUKQotICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PENvbnRleHQqPihfcHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01f
Q09OVEVYVF9LRVkpKTsKKyAgICBpZiAodXNlRmFzdFRMUygpKQorICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2Rp
cmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSkpOwogI2VuZGlmCi0gICAgcmV0dXJuIHZtLndhc21D
b250ZXh0OworICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotdm9pZCBzdG9yZUNvbnRleHQoVk0m
IHZtLCBDb250ZXh0KiBjb250ZXh0KQordm9pZCBDb250ZXh0OjpzdG9yZShKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGksIHZvaWQqIHNvZnRTdGFja0xpbWl0KQogewogI2lmIEVOQUJMRShGQVNUX1RM
U19KSVQpCi0gICAgaWYgKHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIF9wdGhyZWFk
X3NldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9jYXN0PHZv
aWQqPihjb250ZXh0KSk7CisgICAgaWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgX3B0aHJlYWRf
c2V0c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZLCBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KGkpKTsKICNlbmRpZgotICAgIHZtLndhc21Db250ZXh0ID0gY29udGV4dDsKLSAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgY29udGV4dC0+c2V0Q2FjaGVkU3RhY2tMaW1pdCh2bS5zb2Z0U3Rh
Y2tMaW1pdCgpKTsKKyAgICBpbnN0YW5jZSA9IGk7CisgICAgaWYgKGluc3RhbmNlKQorICAgICAg
ICBpbnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChzb2Z0U3RhY2tMaW1pdCk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
bnRleHQuaAppbmRleCAzY2Y2NWZiLi5jMmI1MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Db250ZXh0LmgKQEAgLTI3LDM3ICsyNywyMCBAQAogCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAi
T3B0aW9ucy5oIgotCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07CitjbGFzcyBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIG1pZ2h0
IHdhbnQgdGhpcyB0byBiZSBzb21ldGhpbmcgZWxzZSBhdCBzb21lIHBvaW50OgotLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDI2MAotdXNpbmcgQ29udGV4dCA9
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKLQotaW5saW5lIGJvb2wgdXNlRmFzdFRMUygpCi17Ci0j
aWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICByZXR1cm4gT3B0aW9uczo6dXNlV2ViQXNzZW1i
bHlGYXN0VExTKCk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQorc3RydWN0
IENvbnRleHQgeworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgeyBudWxscHRy
IH07CiAKLWlubGluZSBib29sIHVzZUZhc3RUTFNGb3JDb250ZXh0KCkKLXsKLSAgICBpZiAodXNl
RmFzdFRMUygpKQotICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250
ZXh0KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
bG9hZCgpIGNvbnN0OworICAgIHZvaWQgc3RvcmUoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdm9p
ZCogc29mdFN0YWNrTGltaXQpOwogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYpOwotdm9pZCBz
dG9yZUNvbnRleHQoVk0mLCBDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgdXNlRmFzdFRMUygp
OworfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRW1iZWRkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4yMjg3OTRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUVtYmVkZGVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNtTWVt
b3J5LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNT
dGF0ZTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsgLy8gRklYTUUgdGhpcyBzaG91bGQg
YmUgV2FzbTo6SW5zdGFuY2UsIHNvIHNob3VsZCB1c2UgYmVsb3cuIGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzE3NzQ3MgorCituYW1lc3BhY2UgV2FzbSB7CisKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRl
eHQ7CitzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbjsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsK
K2NsYXNzIFNpZ25hdHVyZTsKK3N0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOworCisvLyBD
cmVhdGUgd3JhcHBlciBjb2RlIHRvIGNhbGwgZnJvbSBlbWJlZGRlciAtPiBXZWJBc3NlbWJseS4K
K3VzaW5nIENyZWF0ZUVtYmVkZGVyV3JhcHBlciA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVy
ZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QpPjsKKworLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW4g
ZXhjZXB0aW9uIGlzIGRldGVjdGVkLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBQQyB0byBjb250
aW51ZSBhdC4KK3VzaW5nIFRocm93V2FzbUV4Y2VwdGlvbiA9IHZvaWQqICgqKShFeGVjU3RhdGUq
LCBXYXNtOjpFeGNlcHRpb25UeXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5jcHAKaW5kZXggMmIxZDgyOC4uY2MxZTdkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTMwLDExICszMCwx
MSBAQAogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIk1hY2hp
bmVDb250ZXh0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlw
ZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCiAK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5oCmluZGV4IDM4MTI4MzYuLmU1ZTA3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKQEAgLTI3LDggKzI3LDYgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIHZv
aWQgcmVnaXN0ZXJDb2RlKHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IGIyMjIyMTcuLmU3YjNkZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTQ0LDE0ICs0NCwxNSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgSlNGdW5jdGlvbjsKLQogbmFtZXNwYWNlIEIzIHsKIGNsYXNz
IENvbXBpbGF0aW9uOwogfQogCiBuYW1lc3BhY2UgV2FzbSB7CiAKK3N0cnVjdCBDb21waWxhdGlv
bkNvbnRleHQ7CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CisKIGlubGluZSBib29sIGlzVmFs
dWVUeXBlKFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjM0YmUwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2FzbUluc3RhbmNlLmgiCisKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUg
Ildhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCituYW1lc3BhY2Ugeworc2l6ZV90IGds
b2JhbE1lbW9yeUJ5dGVTaXplKE1vZHVsZSYgbW9kdWxlKQoreworICAgIHJldHVybiBtb2R1bGUu
bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3Rlcik7Cit9
Cit9CisKK0luc3RhbmNlOjpJbnN0YW5jZShSZWY8TW9kdWxlPiYmIG1vZHVsZSkKKyAgICA6IG1f
bW9kdWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAsIG1fZ2xvYmFscyhNYWxsb2NQdHI8dWludDY0
X3Q+OjptYWxsb2MoZ2xvYmFsTWVtb3J5Qnl0ZVNpemUobV9tb2R1bGUuZ2V0KCkpKSkKK3sKK30K
KworSW5zdGFuY2U6On5JbnN0YW5jZSgpIHsgfQorCitzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVt
b3J5QWxsb2NhdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUo
bV9tb2R1bGUuZ2V0KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzc4YTc0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNl
LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJX
YXNtTW9kdWxlLmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKworY2xhc3MgSW5zdGFuY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8SW5zdGFuY2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEluc3RhbmNlPiBjcmVh
dGUoUmVmPE1vZHVsZT4mJiBtb2R1bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJbnN0YW5jZShXVEZNb3ZlKG1vZHVsZSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBm
aW5hbGl6ZUNyZWF0aW9uKFJlZjxDb2RlQmxvY2s+JiYgY29kZUJsb2NrKQorICAgIHsKKyAgICAg
ICAgbV9jb2RlQmxvY2sgPSBXVEZNb3ZlKGNvZGVCbG9jayk7CisgICAgfQorCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgfkluc3RhbmNlKCk7CisKKyAgICBzaXplX3QgZXh0cmFNZW1vcnlBbGxvY2F0
ZWQoKSBjb25zdDsKKworICAgIE1vZHVsZSYgbW9kdWxlKCkgeyByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdl
dCgpOyB9CisgICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQor
ICAgIFRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KKworICAgIGludDMy
X3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0
KClbaV07IH0KKyAgICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CisgICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KGxvYWRJMzJHbG9iYWwo
aSkpOyB9CisgICAgZG91YmxlIGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KKyAgICB2b2lkIHNl
dEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ldID0g
Yml0czsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkU3RhY2tMaW1pdCk7
IH0KKyAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRT
dGFja0xpbWl0OyB9CisgICAgdm9pZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZvaWQqIGxpbWl0KSB7
IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9CisKKyAgICBmcmllbmQgY2xhc3MgSlNDOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHJlbW92ZSB0aGlzIG9uY2UgcmVmYWN0b3Jl
ZCBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIuCisKK3ByaXZhdGU6CisgICAgSW5zdGFuY2Uo
UmVmPE1vZHVsZT4mJik7CisgICAgCisgICAgUmVmPE1vZHVsZT4gbV9tb2R1bGU7CisgICAgUmVm
UHRyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CisgICAgUmVmUHRyPE1lbW9yeT4gbV9tZW1vcnk7
CisgICAgUmVmUHRyPFRhYmxlPiBtX3RhYmxlOworICAgIE1hbGxvY1B0cjx1aW50NjRfdD4gbV9n
bG9iYWxzOworICAgIHZvaWQqIG1fY2FjaGVkU3RhY2tMaW1pdCB7IGJpdHdpc2VfY2FzdDx2b2lk
Kj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkgfTsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGM1ZjQ4ZTkuLjBk
Yzc3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBAIC0y
OCwxMyArMjgsMTkgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZN
LmgiCi0jaW5jbHVkZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNs
dWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09TQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L1BhZ2VCbG9jay5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxtdXRleD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTEsMTkgKzU3LDE5IEBAIE5FVkVSX0lO
TElORSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0RmFz
dE1lbW9yeSgpIHsgQ1JBCiBzdHJ1Y3QgTWVtb3J5UmVzdWx0IHsKICAgICBlbnVtIEtpbmQgewog
ICAgICAgICBTdWNjZXNzLAotICAgICAgICBTdWNjZXNzQW5kQXN5bmNHQywKLSAgICAgICAgU3lu
Y0dDQW5kUmV0cnkKKyAgICAgICAgU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlLAorICAg
ICAgICBTeW5jVHJ5VG9SZWNsYWltTWVtb3J5CiAgICAgfTsKLSAgICAKKwogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiB0b1N0cmluZyhLaW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtp
bmQpIHsKICAgICAgICAgY2FzZSBTdWNjZXNzOgogICAgICAgICAgICAgcmV0dXJuICJTdWNjZXNz
IjsKLSAgICAgICAgY2FzZSBTdWNjZXNzQW5kQXN5bmNHQzoKLSAgICAgICAgICAgIHJldHVybiAi
U3VjY2Vzc0FuZEFzeW5jR0MiOwotICAgICAgICBjYXNlIFN5bmNHQ0FuZFJldHJ5OgotICAgICAg
ICAgICAgcmV0dXJuICJTeW5jR0NBbmRSZXRyeSI7CisgICAgICAgIGNhc2UgU3VjY2Vzc0FuZE5v
dGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAgICAgcmV0dXJuICJTdWNjZXNzQW5kTm90aWZ5
TWVtb3J5UHJlc3N1cmUiOworICAgICAgICBjYXNlIFN5bmNUcnlUb1JlY2xhaW1NZW1vcnk6Cisg
ICAgICAgICAgICByZXR1cm4gIlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkiOwogICAgICAgICB9CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtOTgsMTcgKzEwNCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdCBy
ZXN1bHQgPSBbJl0gewogICAgICAgICAgICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xvY2sp
OwogICAgICAgICAgICAgaWYgKG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5
bmNHQ0FuZFJldHJ5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KG51bGxw
dHIsIE1lbW9yeVJlc3VsdDo6U3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IEdpZ2FjYWdlOjp0cnlBbGxvY2F0ZVZpcnR1YWxQ
YWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsKICAg
ICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1
bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1Jl
Y2xhaW1NZW1vcnkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX21lbW9yaWVzLmFwcGVu
ZChyZXN1bHQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0
KAogICAgICAgICAgICAgICAgIHJlc3VsdCwKLSAgICAgICAgICAgICAgICBtX21lbW9yaWVzLnNp
emUoKSA+PSBtX21heENvdW50IC8gMiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0Mg
OiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3MpOworICAgICAgICAgICAgICAgIG1fbWVtb3JpZXMuc2l6
ZSgpID49IG1fbWF4Q291bnQgLyAyID8gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVt
b3J5UHJlc3N1cmUgOiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3MpOwogICAgICAgICB9KCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bG9nV2ViQXNzZW1ibHlNZW1vcnkoKSkKQEAgLTE1
MywxMiArMTU5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgTWVtb3J5UmVzdWx0OjpLaW5kIHJlc3Vs
dCA9IFsmXSB7CiAgICAgICAgICAgICBhdXRvIGhvbGRlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAg
ICAgICAgICAgICBpZiAobV9waHlzaWNhbEJ5dGVzICsgYnl0ZXMgPiBtZW1vcnlMaW1pdCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5OworICAg
ICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fcGh5c2ljYWxCeXRlcyArPSBieXRlczsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fcGh5c2ljYWxCeXRlcyA+PSBtZW1vcnlMaW1p
dCgpIC8gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5k
QXN5bmNHQzsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5k
Tm90aWZ5TWVtb3J5UHJlc3N1cmU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBN
ZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M7CiAgICAgICAgIH0oKTsKQEAgLTIwNSw3ICsyMTEsNyBAQCBz
dGF0aWMgTWVtb3J5TWFuYWdlciYgbWVtb3J5TWFuYWdlcigpCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci1ib29sIHRyeUFuZEdDKFZNJiB2bSwgY29uc3QgRnVuYyYgYWxsb2NhdGUpCiti
b29sIHRyeUFsbG9jYXRlKGNvbnN0IEZ1bmMmIGFsbG9jYXRlLCBjb25zdCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpCiB7CiAgICAgdW5zaWduZWQgbnVtVHJpZXMgPSAy
OwogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwpAQCAtMjE0LDE0ICsyMjAsMTYgQEAgYm9vbCB0cnlB
bmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9jYXRlKQogICAgICAgICBjYXNlIE1lbW9yeVJl
c3VsdDo6U3VjY2VzczoKICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kQXN5bmNHQzoKLSAgICAg
ICAgICAgIHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CisgICAg
ICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU6Cisg
ICAgICAgICAgICBpZiAobm90aWZ5TWVtb3J5UHJlc3N1cmUpCisgICAgICAgICAgICAgICAgbm90
aWZ5TWVtb3J5UHJlc3N1cmUoKTsKICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeToKKyAg
ICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnk6CiAgICAgICAg
ICAgICBpZiAoaSArIDEgPT0gbnVtVHJpZXMpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB2bS5oZWFwLmNvbGxlY3RTeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CisgICAg
ICAgICAgICBpZiAoc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkKKyAgICAgICAgICAgICAgICBzeW5j
VHJ5VG9SZWNsYWltTWVtb3J5KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
IH0KQEAgLTIzMCwzMiArMjM4LDMyIEBAIGJvb2wgdHJ5QW5kR0MoVk0mIHZtLCBjb25zdCBGdW5j
JiBhbGxvY2F0ZSkKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWNvbnN0IGNoYXIqIG1h
a2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQorTWVtb3J5OjpNZW1vcnkoKQogewotICAgIHN3aXRj
aCAobW9kZSkgewotICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAi
Qm91bmRzQ2hlY2tpbmciOwotICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4g
IlNpZ25hbGluZyI7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuICIiOwogfQogCi1NZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0pCitNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNv
dW50IG1heGltdW0sIEZ1bmN0aW9uPHZvaWQoKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgRnVu
Y3Rpb248dm9pZCgpPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9p
ZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1f
aW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgLCBtX25vdGlm
eU1lbW9yeVByZXNzdXJlKHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlm
eU1lbW9yeVByZXNzdXJlKSkKKyAgICAsIG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeShzdGQ6OmZv
cndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAg
ICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lk
KFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKQogewogICAgIEFT
U0VSVCghaW5pdGlhbC5ieXRlcygpKTsKICAgICBBU1NFUlQobV9tb2RlID09IE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nKTsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1v
cnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CiAKLU1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9y
eSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2Fw
YWNpdHksIE1lbW9yeU1vZGUgbW9kZSkKK01lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHks
IE1lbW9yeU1vZGUgbW9kZSwgRnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJl
LCBGdW5jdGlvbjx2b2lkKCk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlv
bjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKQogICAg
IDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkKICAgICAs
IG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAgLCBtX21h
cHBlZENhcGFjaXR5KG1hcHBlZENhcGFjaXR5KQogICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBt
X25vdGlmeU1lbW9yeVByZXNzdXJlKHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+
KG5vdGlmeU1lbW9yeVByZXNzdXJlKSkKKyAgICAsIG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeShz
dGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5
KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlv
bjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dTdWNjZXNzQ2FsbGJhY2spKQogewog
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Ok1lbW9yeSBhbGxvY2F0aW5nICIsICp0
aGlzKTsKIH0KQEAgLTI3NSw3ICsyODMsMTIgQEAgc3RhdGljIHZvaWQgY29tbWl0WmVyb1BhZ2Vz
KHZvaWQqIHN0YXJ0QWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQogI2VuZGlmCiB9CiAKLVJl
ZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBh
Z2VDb3VudCBtYXhpbXVtKQorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KCkpOworfQorICAgIAorUmVmUHRyPE1lbW9yeT4g
TWVtb3J5OjpjcmVhdGUoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBGdW5j
dGlvbjx2b2lkKCk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBz
eW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdl
Q291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGluaXRpYWwpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRo
aXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIGNhbGxlci4KQEAgLTI4MywzMyArMjk2LDI3
IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgIGNvbnN0IHNpemVfdCBpbml0aWFsQnl0ZXMgPSBp
bml0aWFsLmJ5dGVzKCk7CiAgICAgY29uc3Qgc2l6ZV90IG1heGltdW1CeXRlcyA9IG1heGltdW0g
PyBtYXhpbXVtLmJ5dGVzKCkgOiAwOwogCi0gICAgLy8gV2UgbmVlZCB0byBiZSBzdXJlIHdlIGhh
dmUgYSBzdHViIHByaW9yIHRvIHJ1bm5pbmcgY29kZS4KLSAgICBpZiAoVU5MSUtFTFkoIVRodW5r
czo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3Ip
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBpZiAobWF4aW11bSAmJiAhbWF4aW11
bUJ5dGVzKSB7CiAgICAgICAgIC8vIFVzZXIgc3BlY2lmaWVkIGEgemVybyBtYXhpbXVtLCBpbml0
aWFsIHNpemUgbXVzdCBhbHNvIGJlIHplcm8uCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbml0
aWFsQnl0ZXMpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBt
YXhpbXVtKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1h
eGltdW0sIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KG5vdGlmeU1lbW9yeVBy
ZXNzdXJlKSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4oc3luY1RyeVRvUmVj
bGFpbU1lbW9yeSksIHN0ZDo6Zm9yd2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQ
YWdlQ291bnQpPj4oZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBkb25lID0gdHJ5QW5kR0MoCi0gICAgICAgIHZtLAorICAgIGJvb2wgZG9uZSA9IHRyeUFsbG9j
YXRlKAogICAgICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0OjpLaW5kIHsKICAgICAgICAgICAg
IHJldHVybiBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQaHlzaWNhbEJ5dGVzKGluaXRpYWxC
eXRlcyk7Ci0gICAgICAgIH0pOworICAgICAgICB9LCBub3RpZnlNZW1vcnlQcmVzc3VyZSwgc3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgaWYgKCFkb25lKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgCiAgICAgY2hhciogZmFzdE1lbW9yeSA9IG51bGxwdHI7CiAgICAgaWYg
KE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpKSB7Ci0gICAgICAgIHRyeUFuZEdD
KAotICAgICAgICAgICAgdm0sCisgICAgICAgIHRyeUFsbG9jYXRlKAogICAgICAgICAgICAgWyZd
ICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoKTsKICAgICAgICAgICAg
ICAgICBmYXN0TWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihyZXN1bHQuYmFzZVB0cik7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5raW5kOwotICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9LCBub3RpZnlNZW1vcnlQcmVzc3VyZSwgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7
CiAgICAgfQogICAgIAogICAgIGlmIChmYXN0TWVtb3J5KSB7CkBAIC0zMjAsMTUgKzMyNywxNSBA
QCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11bSkKICAgICAgICAgfQogCiAgICAgICAgIGNvbW1pdFplcm9QYWdl
cyhmYXN0TWVtb3J5LCBpbml0aWFsQnl0ZXMpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZW1vcnkoZmFzdE1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5Ojpm
YXN0TWFwcGVkQnl0ZXMoKSwgTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSk7CisKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoZmFzdE1lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgTWVt
b3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgTWVtb3J5TW9kZTo6U2lnbmFsaW5nLCBzdGQ6OmZvcndh
cmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+Pihub3RpZnlNZW1vcnlQcmVzc3VyZSksIHN0ZDo6Zm9y
d2FyZDxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+KHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBzdGQ6
OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKFBhZ2VDb3VudCwgUGFnZUNvdW50KT4+KGdyb3dT
dWNjZXNzQ2FsbGJhY2spKSk7CiAgICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25z
OjpjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKICAgICAgICAgd2ViQXNzZW1i
bHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpOwogCiAgICAgaWYgKCFpbml0aWFsQnl0ZXMpCi0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSwgc3RkOjpmb3J3
YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4obm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZv
cndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3Rk
Ojpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93
U3VjY2Vzc0NhbGxiYWNrKSkpOwogICAgIAogICAgIHZvaWQqIHNsb3dNZW1vcnkgPSBHaWdhY2Fn
ZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCks
IGluaXRpYWxCeXRlcyk7CiAgICAgaWYgKCFzbG93TWVtb3J5KSB7CkBAIC0zMzYsNyArMzQzLDcg
QEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlh
bCwgUGFnZUNvdW50IG1heGltdW0pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAg
ICBtZW1zZXQoc2xvd01lbW9yeSwgMCwgaW5pdGlhbEJ5dGVzKTsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lbW9yeShzbG93TWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBpbml0aWFsQnl0ZXMs
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
ZW1vcnkoc2xvd01lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgaW5pdGlhbEJ5dGVzLCBNZW1vcnlN
b2RlOjpCb3VuZHNDaGVja2luZywgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9pZCgpPj4o
bm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBzdGQ6OmZvcndhcmQ8V1RGOjpGdW5jdGlvbjx2b2lkKCk+
PihzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgc3RkOjpmb3J3YXJkPFdURjo6RnVuY3Rpb248dm9p
ZChQYWdlQ291bnQsIFBhZ2VDb3VudCk+Pihncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogfQogCiBN
ZW1vcnk6On5NZW1vcnkoKQpAQCAtMzQ1LDcgKzM1MiwxMCBAQCBNZW1vcnk6On5NZW1vcnkoKQog
ICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZVBoeXNpY2FsQnl0ZXMobV9zaXplKTsKICAgICAg
ICAgc3dpdGNoIChtX21vZGUpIHsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6
Ci0gICAgICAgICAgICBtcHJvdGVjdChtX21lbW9yeSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMo
KSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgICAgICAgICAgICBpZiAobXByb3RlY3QobV9t
ZW1vcnksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUp
KSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygibXByb3RlY3QgZmFpbGVkOiAiLCBzdHJlcnJv
cihlcnJubyksICJcbiIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZVZp
cnR1YWxQYWdlcyhtX21lbW9yeSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBN
ZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKQEAgLTM3MSwzNCArMzgxLDUwIEBAIGJvb2wgTWVt
b3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkodm9pZCogYWRkcmVzcykKICAgICByZXR1
cm4gbWVtb3J5TWFuYWdlcigpLmNvbnRhaW5zQWRkcmVzcyhhZGRyZXNzKTsKIH0KIAotYm9vbCBN
ZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291bnQgbmV3U2l6ZSkKK0V4cGVjdGVkPFBhZ2VDb3Vu
dCwgTWVtb3J5OjpHcm93RmFpbFJlYXNvbj4gTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBkZWx0YSkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXplID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9z
aXplKSk7CisgICAgY29uc3QgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCA9IHNpemVJblBh
Z2VzKCk7CiAKLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IHRvICIsIG5l
d1NpemUsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgaWYgKCFkZWx0YS5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhKTsK
KyAgICAKKyAgICBjb25zdCBXYXNtOjpQYWdlQ291bnQgbmV3UGFnZUNvdW50ID0gb2xkUGFnZUNv
dW50ICsgZGVsdGE7CisgICAgaWYgKCFuZXdQYWdlQ291bnQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6SW52YWxpZEdyb3dTaXplKTsKIAotICAgIGlmICht
YXhpbXVtKCkgJiYgbmV3U2l6ZSA+IG1heGltdW0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGF1dG8gc3VjY2VzcyA9IFsmXSAoKSB7CisgICAgICAgIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFj
ayhvbGRQYWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7CisgICAgICAgIHJldHVybiBvbGRQYWdlQ291
bnQ7CisgICAgfTsKIAotICAgIHNpemVfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsK
KyAgICBpZiAoZGVsdGEucGFnZUNvdW50KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3Mo
KTsKKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3coIiwgZGVsdGEsICIp
IHRvICIsIG5ld1BhZ2VDb3VudCwgIiBmcm9tICIsICp0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChuZXdQYWdlQ291bnQgPiBQYWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpKTsKKworICAgIGlm
IChtYXhpbXVtKCkgJiYgbmV3UGFnZUNvdW50ID4gbWF4aW11bSgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bSk7CisKKyAg
ICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdQYWdlQ291bnQuYnl0ZXMoKTsKICAgICBSRUxFQVNF
X0FTU0VSVChkZXNpcmVkU2l6ZSA+IG1fc2l6ZSk7CiAgICAgc2l6ZV90IGV4dHJhQnl0ZXMgPSBk
ZXNpcmVkU2l6ZSAtIG1fc2l6ZTsKICAgICBSRUxFQVNFX0FTU0VSVChleHRyYUJ5dGVzKTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSB0cnlBbmRHQygKLSAgICAgICAgdm0sCisgICAgYm9vbCBhbGxvY2F0
aW9uU3VjY2VzcyA9IHRyeUFsbG9jYXRlKAogICAgICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0
OjpLaW5kIHsKICAgICAgICAgICAgIHJldHVybiBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQ
aHlzaWNhbEJ5dGVzKGV4dHJhQnl0ZXMpOwotICAgICAgICB9KTsKLSAgICBpZiAoIXN1Y2Nlc3Mp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisgICAgICAgIH0sIG1fbm90aWZ5TWVt
b3J5UHJlc3N1cmUsIG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CisgICAgaWYgKCFhbGxvY2F0
aW9uU3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29u
OjpPdXRPZk1lbW9yeSk7CisKICAgICBzd2l0Y2ggKG1vZGUoKSkgewogICAgIGNhc2UgTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWF4aW11bSgp
LmJ5dGVzKCkgIT0gMCk7Ci0gICAgICAgIAorCiAgICAgICAgIHZvaWQqIG5ld01lbW9yeSA9IEdp
Z2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIFdURjo6cGFnZVNp
emUoKSwgZGVzaXJlZFNpemUpOwogICAgICAgICBpZiAoIW5ld01lbW9yeSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFp
bFJlYXNvbjo6T3V0T2ZNZW1vcnkpOworCiAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVt
b3J5LCBtX3NpemUpOwogICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld01lbW9y
eSkgKyBtX3NpemUsIDAsIGRlc2lyZWRTaXplIC0gbV9zaXplKTsKICAgICAgICAgaWYgKG1fbWVt
b3J5KQpAQCAtNDA2LDcgKzQzMiw3IEBAIGJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNv
dW50IG5ld1NpemUpCiAgICAgICAgIG1fbWVtb3J5ID0gbmV3TWVtb3J5OwogICAgICAgICBtX21h
cHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXpl
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKICAgICB9
CiAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9tZW1vcnkpOwpAQCAtNDE1LDE2ICs0NDEsMTcgQEAgYm9vbCBNZW1vcnk6Omdyb3coVk0m
IHZtLCBQYWdlQ291bnQgbmV3U2l6ZSkKICAgICAgICAgCiAgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJNYXJraW5nIFdlYkFzc2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobV9tZW1v
cnkpLCAiIGFzIHJlYWQrd3JpdGUgaW4gcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNz
KSwgIiwgIiwgUmF3UG9pbnRlcihzdGFydEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKICAg
ICAgICAgaWYgKG1wcm90ZWN0KHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRlcywgUFJPVF9SRUFEIHwg
UFJPVF9XUklURSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6
Omdyb3cgaW4tcGxhY2UgZmFpbGVkICIsICp0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGRhdGFMb2coIm1wcm90ZWN0IGZhaWxlZDogIiwgc3RyZXJyb3IoZXJy
bm8pLCAiXG4iKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIH0KICAgICAgICAgY29tbWl0WmVyb1BhZ2VzKHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRl
cyk7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9IH0KLSAgICAKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKyAgICB9CisgICAgfQor
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKIH0KIAogdm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRl
eCA2MGE5YmI3Li4zZjE4YzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eS5oCkBAIC0yNyw4ICsyNywxMSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5j
bHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAKKyNp
bmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzgs
MTggKzQxLDggQEAgY2xhc3MgUHJpbnRTdHJlYW07CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFz
cyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCi0vLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQg
b3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MjY5MwotZW51bSBjbGFzcyBNZW1vcnlNb2RlIDogdWludDhfdCB7Ci0gICAgQm91bmRzQ2hl
Y2tpbmcsCi0gICAgU2lnbmFsaW5nCi19Owotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVy
T2ZNZW1vcnlNb2RlcyA9IDI7Ci1KU19FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3Ry
aW5nKE1lbW9yeU1vZGUpOwotCiBjbGFzcyBNZW1vcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZW1v
cnk+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwpAQCAtNTcsOCArNTAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFdU
Rjo6UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9Ci0gICAgCi0gICAgc3RhdGljIFJlZlB0cjxNZW1v
cnk+IGNyZWF0ZShWTSYsIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSk7CisK
KyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxN
ZW1vcnk+IGNyZWF0ZShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6
RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNv
dW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCiAgICAgfk1lbW9yeSgp
OwogCkBAIC03NSwyMiArNjksMzQgQEAgcHVibGljOgogCiAgICAgTWVtb3J5TW9kZSBtb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAKLSAgICAvLyBncm93KCkgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGZyb20gdGhlIEpTV2ViQXNzZW1ibHlNZW1vcnkgb2JqZWN0IHNpbmNlIHRoYXQgb2Jq
ZWN0IG5lZWRzIHRvIHVwZGF0ZSBpbnRlcm5hbAotICAgIC8vIHBvaW50ZXJzIHdpdGggdGhlIGN1
cnJlbnQgYmFzZSBhbmQgc2l6ZS4KLSAgICBib29sIGdyb3coVk0mLCBQYWdlQ291bnQpOworICAg
IGVudW0gY2xhc3MgR3Jvd0ZhaWxSZWFzb24geworICAgICAgICBJbnZhbGlkRGVsdGEsCisgICAg
ICAgIEludmFsaWRHcm93U2l6ZSwKKyAgICAgICAgV291bGRFeGNlZWRNYXhpbXVtLAorICAgICAg
ICBPdXRPZk1lbW9yeSwKKyAgICB9OworICAgIEV4cGVjdGVkPFBhZ2VDb3VudCwgR3Jvd0ZhaWxS
ZWFzb24+IGdyb3coUGFnZUNvdW50KTsKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRl
bGV0aW9uSGFzQmVndW4oKSk7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1v
cnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX21lbW9yeSk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihN
ZW1vcnksIG1fc2l6ZSk7IH0KKwogcHJpdmF0ZToKLSAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQ
YWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0
eSwgTWVtb3J5TW9kZSk7Ci0gICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQg
bWF4aW11bSk7CisgICAgTWVtb3J5KCk7CisgICAgTWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1l
bW9yeU1vZGUsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0
aW9uPHZvaWQoUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwor
ICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50
LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCi0gICAgLy8gRklYTUU6IHdl
IHNob3VsZCBtb3ZlIHRoZXNlIHRvIHRoZSBpbnN0YW5jZSB0byBhdm9pZCBhIGxvYWQgb24gaW5z
dGFuY2UtPmluc3RhbmNlIGNhbGxzLgorICAgIC8vIEZJWE1FOiB3ZSBjYWNoZSB0aGVzZSBvbiB0
aGUgaW5zdGFuY2VzIHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5zdGFuY2UgY2FsbHMu
IFRoaXMgd2lsbCByZXF1aXJlIHVwZGF0aW5nIGFsbCB0aGUgaW5zdGFuY2VzIHdoZW4gZ3JvdyBp
cyBjYWxsZWQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUK
ICAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9
OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKICAg
ICBzaXplX3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IG1fbm90aWZ5TWVtb3J5UHJlc3N1cmU7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fc3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeTsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoUGFnZUNvdW50LCBQ
YWdlQ291bnQpPiBtX2dyb3dTdWNjZXNzQ2FsbGJhY2s7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHAKaW5kZXggYmY1NjVmMC4uYjVjMzRiZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCkBAIC01
Nyw3ICs1Nyw3IEBAIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mb0ZsYWcs
IFtdICgpIHsKICAgICAgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdp
c3RlcnM7CiAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciA9IEludmFsaWRHUFJSZWc7
Ci0gICAgICAgIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwog
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9y
eSBzaXplIHJlZ2lzdGVyLCBhbmQgd2Ugc2hvdWxkIGFsbG93IGRpZmZlcmVudAogICAgICAgICAv
LyAgICAgICAgV2ViQXNzZW1ibHkuSW5zdGFuY2UgdG8gaGF2ZSBkaWZmZXJlbnQgcGlucy4gUmln
aHQgbm93IHdlIHRha2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9uZSBlbnRyeS4KQEAgLTY1LDI3ICs2
NSwyNyBAQCBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCkKICAgICAgICAgLy8gICAgICAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjk1MgogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0g
eyAwIH07CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGlubmVkUmVnaXN0ZXJzID0gcGlubmVk
U2l6ZXMuc2l6ZSgpICsgMTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQor
ICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgICAgICsrbnVtYmVy
T2ZQaW5uZWRSZWdpc3RlcnM7CiAgICAgICAgIFZlY3RvcjxHUFJSZWc+IHBpbm5lZFJlZ3MgPSBn
ZXRQaW5uZWRSZWdpc3RlcnMobnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnMpOwogCiAgICAgICAgIGJh
c2VNZW1vcnlQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOwotICAgICAgICBpZiAoIXVz
ZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgICAgICB3YXNtQ29udGV4dFBvaW50ZXIgPSBw
aW5uZWRSZWdzLnRha2VMYXN0KCk7CisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygp
KQorICAgICAgICAgICAgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRh
a2VMYXN0KCk7CiAKICAgICAgICAgQVNTRVJUKHBpbm5lZFNpemVzLnNpemUoKSA9PSBwaW5uZWRS
ZWdzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaW5uZWRTaXpl
cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIHNpemVSZWdpc3RlcnMuYXBwZW5kKHsgcGlubmVk
UmVnc1tpXSwgcGlubmVkU2l6ZXNbaV0gfSk7Ci0gICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVy
SW5mby5jb25zdHJ1Y3QoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIs
IHdhc21Db250ZXh0UG9pbnRlcik7CisgICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5j
b25zdHJ1Y3QoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21D
b250ZXh0SW5zdGFuY2VQb2ludGVyKTsKICAgICB9KTsKIAogICAgIHJldHVybiBzdGF0aWNQaW5u
ZWRSZWdpc3RlckluZm8uZ2V0KCk7CiB9CiAKLVBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVn
aXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMs
IEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRlcikKK1Bp
bm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3RvcjxQaW5uZWRTaXplUmVn
aXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BS
UmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKQogICAgIDogc2l6ZVJlZ2lzdGVycyhXVEZN
b3ZlKHNpemVSZWdpc3RlcnMpKQogICAgICwgYmFzZU1lbW9yeVBvaW50ZXIoYmFzZU1lbW9yeVBv
aW50ZXIpCi0gICAgLCB3YXNtQ29udGV4dFBvaW50ZXIod2FzbUNvbnRleHRQb2ludGVyKQorICAg
ICwgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIp
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmgKaW5kZXggNDIzN2JhYy4uMjMzMjllYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBz
dHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7CiBzdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJbmZv
IHsKICAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKICAg
ICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRl
cjsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CiAgICAgc3RhdGljIGNv
bnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgZ2V0KCk7CiAgICAgUGlubmVkUmVnaXN0ZXJJbmZvKFZl
Y3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmLCBHUFJSZWcsIEdQUlJlZyk7CiAKQEAgLTUy
LDggKzUyLDggQEAgc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7CiAgICAgewogICAgICAgICBS
ZWdpc3RlclNldCByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5zZXQoYmFzZU1lbW9yeVBvaW50ZXIp
OwotICAgICAgICBpZiAod2FzbUNvbnRleHRQb2ludGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAg
ICAgICAgICByZXN1bHQuc2V0KHdhc21Db250ZXh0UG9pbnRlcik7CisgICAgICAgIGlmICh3YXNt
Q29udGV4dEluc3RhbmNlUG9pbnRlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmVz
dWx0LnNldCh3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgICAgIGlmIChtb2RlICE9
IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBp
bmZvIDogc2l6ZVJlZ2lzdGVycykKICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGluZm8uc2l6
ZVJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnlNb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2Rl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWJjOTg1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3Bw
CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5TW9k
ZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY29uc3QgY2hhciog
bWFrZVN0cmluZyhNZW1vcnlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAg
Y2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogcmV0dXJuICJCb3VuZHNDaGVja2luZyI7
CisgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHJldHVybiAiU2lnbmFsaW5nIjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
TW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGZjODk2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuaApAQCAtMCwwICsx
LDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0V4cG9y
dE1hY3Jvcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCisvLyBG
SVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MworZW51bSBjbGFzcyBNZW1vcnlNb2RlIDog
dWludDhfdCB7CisgICAgQm91bmRzQ2hlY2tpbmcsCisgICAgU2lnbmFsaW5nCit9OworCitzdGF0
aWMgY29uc3RleHByIHNpemVfdCBOdW1iZXJPZk1lbW9yeU1vZGVzID0gMjsKK0pTX0VYUE9SVF9Q
UklWQVRFIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSk7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1MWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKaW5kZXggOGUzNjZmNC4uOTkyZTNkNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKQEAgLTU2LDI3ICs1
NiwyNiBAQCBzdGF0aWMgTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IG1ha2VWYWxpZGF0aW9uUmVz
dWx0KEJCUVBsYW4mIHBsYW4pCiAKIHN0YXRpYyBQbGFuOjpDb21wbGV0aW9uVGFzayBtYWtlVmFs
aWRhdGlvbkNhbGxiYWNrKE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFj
aykKIHsKLSAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFtj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoVk0qIHZtLCBQbGFuJiBwbGFuKSB7CisgICAg
cmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0gKFBsYW4mIHBsYW4pIHsKICAgICAgICAgQVNTRVJUKCFwbGFuLmhh
c1dvcmsoKSk7Ci0gICAgICAgIEFTU0VSVCh2bSk7Ci0gICAgICAgIGNhbGxiYWNrLT5ydW4oKnZt
LCBtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxCQlFQbGFuJj4ocGxhbikpKTsKKyAg
ICAgICAgY2FsbGJhY2stPnJ1bihtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxCQlFQ
bGFuJj4ocGxhbikpKTsKICAgICB9KTsKIH0KIAotTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1v
ZHVsZTo6dmFsaWRhdGVTeW5jKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKQorTW9k
dWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKENvbnRleHQqIGNvbnRl
eHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKIHsKLSAgICBSZWY8QkJRUGxhbj4gcGxhbiA9
IGFkb3B0UmVmKCpuZXcgQkJRUGxhbigmdm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFs
aWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBSZWY8QkJRUGxhbj4gcGxhbiA9
IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46
OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpLCBudWxscHRyLCBudWxscHRyKSk7CiAg
ICAgcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogICAgIHJldHVybiBtYWtlVmFsaWRh
dGlvblJlc3VsdChwbGFuLmdldCgpKTsKIH0KIAotdm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMo
Vk0mIHZtLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9u
Q2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgTW9kdWxlOjp2YWxpZGF0ZUFzeW5jKENvbnRleHQq
IGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRp
b25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYo
Km5ldyBCQlFQbGFuKCZ2bSwgV1RGTW92ZShzb3VyY2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBt
YWtlVmFsaWRhdGlvbkNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKSkpOworICAgIFJlZjxQbGFu
PiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIFdURk1vdmUoc291cmNlKSwg
QkJRUGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxi
YWNrKSksIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVu
cXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAKLVJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JD
cmVhdGVDb2RlQmxvY2soTWVtb3J5TW9kZSBtb2RlKQorUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpn
ZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2Rl
QmxvY2s7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtODcsMjMgKzg2
LDIzIEBAIFJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5
TW9kZSBtb2RlKQogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIGJhY2sgb2ZmIHJldHJ5
aW5nIGF0IHNvbWUgcG9pbnQ6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDYwNwogICAgIGlmICghY29kZUJsb2NrIHx8IChjb2RlQmxvY2stPmNvbXBp
bGF0aW9uRmluaXNoZWQoKSAmJiAhY29kZUJsb2NrLT5ydW5uYWJsZSgpKSkgewotICAgICAgICBj
b2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZShtb2RlLCBjb25zdF9jYXN0PE1vZHVsZUluZm9y
bWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24oKSkpOworICAgICAgICBjb2RlQmxvY2sgPSBDb2Rl
QmxvY2s6OmNyZWF0ZShjb250ZXh0LCBtb2RlLCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9u
Jj4obW9kdWxlSW5mb3JtYXRpb24oKSksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwg
dGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVp
bnQ4X3Q+KG1vZGUpXSA9IGNvZGVCbG9jazsKICAgICB9CiAgICAgcmV0dXJuIGNvZGVCbG9jay5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5j
KE1lbW9yeU1vZGUgbW9kZSkKK1JlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Y29tcGlsZVN5bmMoQ29u
dGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBj
cmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRp
b24pCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxv
Y2sobW9kZSk7CisgICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2Rl
QmxvY2soY29udGV4dCwgbW9kZSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJv
d1dhc21FeGNlcHRpb24pOwogICAgIGNvZGVCbG9jay0+d2FpdFVudGlsRmluaXNoZWQoKTsKICAg
ICByZXR1cm4gY29kZUJsb2NrOwogfQogCi12b2lkIE1vZHVsZTo6Y29tcGlsZUFzeW5jKFZNJiB2
bSwgTWVtb3J5TW9kZSBtb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYm
IHRhc2spCit2b2lkIE1vZHVsZTo6Y29tcGlsZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9y
eU1vZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrLCBD
cmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4
Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJs
b2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2sobW9kZSk7Ci0gICAgY29kZUJsb2NrLT5jb21waWxl
QXN5bmModm0sIFdURk1vdmUodGFzaykpOworICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9
IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBjb2RlQmxvY2stPmNvbXBpbGVB
c3luYyhjb250ZXh0LCBXVEZNb3ZlKHRhc2spKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaAppbmRleCBhMWFmNzU4
Li5hNmFlMjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCkBAIC0y
OCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1v
cnkuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpA
QCAtMzYsMTkgKzM3LDIwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAK
K3N0cnVjdCBDb250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogY2xhc3MgUGxhbjsK
IAogdXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1aW50MzJfdDsKLSAgICAKKwogY2xhc3MgTW9kdWxl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZT4gewogcHVibGljOgogICAgIHVz
aW5nIFZhbGlkYXRpb25SZXN1bHQgPSBXVEY6OkV4cGVjdGVkPFJlZlB0cjxNb2R1bGU+LCBTdHJp
bmc+OwotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0mLCBWYWxpZGF0aW9uUmVzdWx0
JiYpOworICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVmFsaWRhdGlvblJlc3VsdCYmKTsK
ICAgICB1c2luZyBBc3luY1ZhbGlkYXRpb25DYWxsYmFjayA9IFJlZlB0cjxTaGFyZWRUYXNrPENh
bGxiYWNrVHlwZT4+OwogCi0gICAgc3RhdGljIFZhbGlkYXRpb25SZXN1bHQgdmFsaWRhdGVTeW5j
KFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKTsKLSAgICBzdGF0aWMgdm9pZCB2YWxpZGF0
ZUFzeW5jKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRh
dGlvbkNhbGxiYWNrJiYpOworICAgIHN0YXRpYyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlU3lu
YyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKTsKKyAgICBzdGF0aWMgdm9pZCB2
YWxpZGF0ZUFzeW5jKENvbnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6
QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJik7CiAKICAgICBzdGF0aWMgUmVmPE1vZHVsZT4gY3Jl
YXRlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJiBtb2R1bGVJbmZvcm1hdGlvbikKICAgICB7CkBA
IC01OCwxNCArNjAsMTQgQEAgcHVibGljOgogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3Bh
Y2UpIGNvbnN0OwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZv
cm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KIAot
ICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKE1lbW9yeU1vZGUpOwotICAgIHZvaWQgY29t
cGlsZUFzeW5jKFZNJiwgTWVtb3J5TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2Fs
bGJhY2smJik7CisgICAgUmVmPENvZGVCbG9jaz4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9y
eU1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAg
IHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDb2RlQmxvY2s6OkFzeW5j
Q29tcGlsYXRpb25DYWxsYmFjayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNt
RXhjZXB0aW9uKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Nb2R1bGUoKTsKIAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrRm9yKE1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxv
Y2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXS5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBS
ZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVCbG9jayhNZW1vcnlNb2RlKTsKKyAgICBSZWY8
Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ3Jl
YXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBNb2R1bGUo
UmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmKTsKICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1f
bW9kdWxlSW5mb3JtYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwCmluZGV4IDZjOTQ4YjUuLjZkNDRhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0yOSw3ICsyOSw2IEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMu
aCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5
SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKICNpbmNs
dWRlICJXYXNtT3BzLmgiCkBAIC0yNjUsNyArMjY0LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBh
cnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFBhcnRp
YWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7
CiAgICAgaWYgKFVOTElLRUxZKCFsaW1pdHMpKQogICAgICAgICByZXR1cm4gbGltaXRzLmdldFVu
ZXhwZWN0ZWQoKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFKU1dlYkFzc2VtYmx5VGFibGU6
OmlzVmFsaWRTaXplKGluaXRpYWwpLCAiVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwg
aW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFs
ID4gbWF4VGFibGVFbnRyaWVzLCAiVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5p
dGlhbCwgIiBpcyB0b28gYmlnLCBtYXhpbXVtICIsIG1heFRhYmxlRW50cmllcyk7CiAKICAgICBB
U1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA3NGNmNjUzLi5jY2RmNzJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0zMSw5ICszMSwx
MCBAQAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJv
ZHVjdHMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eU1vZHVsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUg
Ildhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21N
YWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKQEAgLTUxLDEwICs1Miwx
MCBAQCBuYW1lc3BhY2UgV2FzbU9NR1BsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiB9CiAKLU9NR1BsYW46Ok9NR1BsYW4oUmVmPE1vZHVsZT4gbW9kdWxl
LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNr
JiYgdGFzaykKLSAgICA6IEJhc2UobnVsbHB0ciwgbWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUlu
Zm9ybWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSksIFdURk1vdmUodGFzaykp
Ci0gICAgLCBtX21vZHVsZShtb2R1bGUuY29weVJlZigpKQotICAgICwgbV9jb2RlQmxvY2soKm1v
ZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQorT01HUGxhbjo6T01HUGxhbihDb250ZXh0KiBjb250
ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5
TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKGNvbnRleHQsIG1h
a2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQorICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUp
KQorICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCiAgICAg
LCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKICAgICBzZXRNb2RlKG1vZGUpOwpA
QCAtMTYyLDEzICsxNjMsMTMgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0
KQogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwogfQogCi12b2lkIHJ1bk9NR1BsYW5G
b3JJbmRleChDb250ZXh0KiBjb250ZXh0LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQordm9pZCBP
TUdQbGFuOjpydW5Gb3JJbmRleChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4KQogewotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNvbnRleHQtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb250ZXh0LT5tZW1vcnlN
b2RlKCkgPT0gY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+bW9kZSgpKTsKKyAgICBXYXNtOjpDb2Rl
QmxvY2smIGNvZGVCbG9jayA9IGluc3RhbmNlLT53YXNtQ29kZUJsb2NrKCk7CisgICAgQVNTRVJU
KGluc3RhbmNlLT53YXNtTWVtb3J5KCktPm1vZGUoKSA9PSBjb2RlQmxvY2subW9kZSgpKTsKIAot
ICAgIGlmIChjb2RlQmxvY2stPm1fY29kZUJsb2NrLT50aWVyVXBDb3VudChmdW5jdGlvbkluZGV4
KS5zaG91bGRTdGFydFRpZXJVcCgpKSB7Ci0gICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRS
ZWYoKm5ldyBPTUdQbGFuKGNvbnRleHQtPm1vZHVsZSgpLT5tb2R1bGUoKSwgZnVuY3Rpb25JbmRl
eCwgY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+bW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkp
OworICAgIGlmIChjb2RlQmxvY2sudGllclVwQ291bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3Rh
cnRUaWVyVXAoKSkgeworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01H
UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+d2Fz
bU1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZp
bmFsaXplKCkpKTsKICAgICAgICAgZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJl
ZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkp
KQogICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCmluZGV4IDcxNjRhOWUuLmI4MDgyNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaApAQCAtMjcsNyArMjcsNiBAQAogCiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNt
Q29udGV4dC5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5o
IgpAQCAtNDEsMTcgKzQwLDIwIEBAIG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIE9NR1BsYW4gZmlu
YWwgOiBwdWJsaWMgUGxhbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47Ci0gICAg
Ly8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRo
ZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9N
R1BsYW4oUmVmPE1vZHVsZT4sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENv
bXBsZXRpb25UYXNrJiYpOwogCiAgICAgYm9vbCBoYXNXb3JrKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gIW1fY29tcGxldGVkOyB9CiAgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBv
dmVycmlkZTsKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQogCisgICAgc3RhdGljIHZvaWQgcnVuRm9ySW5kZXgoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisKIHByaXZhdGU6CiAgICAgLy8gRm9y
IHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMu
Li4KICAgICB1c2luZyBCYXNlOjptX2xvY2s7CiAKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFz
ayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJl
IHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1v
ZHVsZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRh
c2smJik7CisKICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2NvbXBsZXRlZDsgfQogICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlcikgb3ZlcnJpZGUKICAgICB7CkBAIC02NSw4ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgdWlu
dDMyX3QgbV9mdW5jdGlvbkluZGV4OwogfTsKIAotdm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29u
dGV4dCosIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCmluZGV4IGU0Mzg0N2MuLmVmMDVmMzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNiArNTcsMTEgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CiAg
ICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNWYWxpZChtX3BhZ2VDb3VudCk7CisgICAgfQogCiAgICAgc3RhdGljIFBhZ2VDb3VudCBm
cm9tQnl0ZXModWludDY0X3QgYnl0ZXMpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uY3BwCmluZGV4IGJhMjdjZjkuLmQwNjNjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOCArMjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpA
QCAtNTEsMjAgKzQ5LDI3IEBAIG5hbWVzcGFjZSBXYXNtUGxhbkludGVybmFsIHsKIHN0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIFJlZjxN
b2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxh
bihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRp
b25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFw
cGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9tb2R1
bGVJbmZvcm1hdGlvbihXVEZNb3ZlKGluZm8pKQorICAgICwgbV9jcmVhdGVFbWJlZGRlcldyYXBw
ZXIoV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpKQorICAgICwgbV90aHJvd1dhc21FeGNl
cHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9zb3VyY2UobV9tb2R1bGVJbmZvcm1h
dGlvbi0+c291cmNlLmRhdGEoKSkKICAgICAsIG1fc291cmNlTGVuZ3RoKG1fbW9kdWxlSW5mb3Jt
YXRpb24tPnNvdXJjZS5zaXplKCkpCiB7Ci0gICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHZtLCBXVEZNb3ZlKHRhc2spKSk7CisgICAgbV9jb21wbGV0aW9uVGFza3Mu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKIH0KIAotUGxh
bjo6UGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0
aCwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBS
ZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6
IFBsYW4oY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgbnVsbHB0ciwgbnVs
bHB0cikKK3sKK30KKworUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAg
ICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihW
ZWN0b3I8dWludDhfdD4oKSkpKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV9zb3Vy
Y2VMZW5ndGgoc291cmNlTGVuZ3RoKQogewotICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcih2bSwgV1RGTW92ZSh0YXNrKSkpOworICAgIG1fY29tcGxldGlvblRhc2tz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKIHZv
aWQgUGxhbjo6cnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKQEAgLTcy
LDE4ICs3NywxOCBAQCB2b2lkIFBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFj
dExvY2tlciYpCiAgICAgQVNTRVJUKGlzQ29tcGxldGUoKSAmJiAhaGFzV29yaygpKTsKIAogICAg
IGZvciAoYXV0byYgdGFzayA6IG1fY29tcGxldGlvblRhc2tzKQotICAgICAgICB0YXNrLnNlY29u
ZC0+cnVuKHRhc2suZmlyc3QsICp0aGlzKTsKKyAgICAgICAgdGFzay5zZWNvbmQtPnJ1bigqdGhp
cyk7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuY2xlYXIoKTsKICAgICBtX2NvbXBsZXRlZC5ub3Rp
ZnlBbGwoKTsKIH0KIAotdm9pZCBQbGFuOjphZGRDb21wbGV0aW9uVGFzayhWTSYgdm0sIENvbXBs
ZXRpb25UYXNrJiYgdGFzaykKK3ZvaWQgUGxhbjo6YWRkQ29tcGxldGlvblRhc2soQ29udGV4dCog
Y29udGV4dCwgQ29tcGxldGlvblRhc2smJiB0YXNrKQogewogICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CiAgICAgaWYgKCFpc0NvbXBsZXRlKCkpCi0gICAgICAgIG1fY29tcGxldGlvblRh
c2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdm0sIFdURk1vdmUodGFzaykpKTsKKyAgICAgICAg
bV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUo
dGFzaykpKTsKICAgICBlbHNlCi0gICAgICAgIHRhc2stPnJ1bigmdm0sICp0aGlzKTsKKyAgICAg
ICAgdGFzay0+cnVuKCp0aGlzKTsKIH0KIAogdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigp
CkBAIC05NCwxOSArOTksMTkgQEAgdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCiAgICAg
fQogfQogCi1ib29sIFBsYW46OnRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJiB2bSkKK2Jv
b2wgUGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChDb250ZXh0JiBjb250ZXh0
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAKICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgewotICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNr
IHRvIG5vdCBoYXZlIGEgdm0uCisgICAgICAgIC8vIFdlIGFsbG93IHRoZSBmaXJzdCBjb21wbGV0
aW9uIHRhc2sgdG8gbm90IGhhdmUgYSBDb250ZXh0LgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgbV9jb21wbGV0aW9uVGFza3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBBU1NF
UlQobV9jb21wbGV0aW9uVGFza3NbaV0uZmlyc3QpOwogICAgIH0KIAogICAgIGJvb2wgcmVtb3Zl
ZEFueVRhc2tzID0gZmFsc2U7Ci0gICAgbV9jb21wbGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hp
bmcoWyZdIChjb25zdCBzdGQ6OnBhaXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4mIHBhaXIpIHsKLSAg
ICAgICAgYm9vbCBzaG91bGRSZW1vdmUgPSBwYWlyLmZpcnN0ID09ICZ2bTsKKyAgICBtX2NvbXBs
ZXRpb25UYXNrcy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNvbnN0IHN0ZDo6cGFpcjxDb250ZXh0
KiwgQ29tcGxldGlvblRhc2s+JiBwYWlyKSB7CisgICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0g
cGFpci5maXJzdCA9PSAmY29udGV4dDsKICAgICAgICAgcmVtb3ZlZEFueVRhc2tzIHw9IHNob3Vs
ZFJlbW92ZTsKICAgICAgICAgcmV0dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IDEwZjhhMWIuLjdhMDdiZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApAQCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVk
ZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21F
bWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUg
PHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgpAQCAtMzksMjUgKzM5LDI3
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbExpbmtJbmZvOwotY2xhc3MgSlNHbG9i
YWxPYmplY3Q7Ci1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKIAogbmFtZXNwYWNlIFdhc20gewog
CitzdHJ1Y3QgQ29udGV4dDsKKwogY2xhc3MgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxQbGFuPiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSos
IFBsYW4mKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFBsYW4mKTsKICAgICB1c2lu
ZyBDb21wbGV0aW9uVGFzayA9IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwotICAg
IHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFy
ZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oVk0qLCBQbGFuJikgeyB9KTsgfQotICAgIFBsYW4oVk0q
LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKKworICAgIHN0YXRp
YyBDb21wbGV0aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNr
PENhbGxiYWNrVHlwZT4oW10oUGxhbiYpIHsgfSk7IH0KKyAgICBQbGFuKENvbnRleHQqLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBw
ZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIC8vIE5vdGU6IFRoaXMgY29u
c3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWls
ZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBQbGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRh
c2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihDb250ZXh0KiwgY29uc3QgdWludDhf
dCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7CiAgICAgdmlydHVhbCBKU19FWFBPUlRfUFJJ
VkFURSB+UGxhbigpOwogCiAgICAgLy8gSWYgeW91IGd1YXJhbnRlZSB0aGUgb3JkZXJpbmcgaGVy
ZSwgeW91IGNhbiByZWx5IG9uIEZJRk8gb2YgdGhlCiAgICAgLy8gY29tcGxldGlvbiB0YXNrcyBi
ZWluZyBjYWxsZWQuCi0gICAgdm9pZCBhZGRDb21wbGV0aW9uVGFzayhWTSYsIENvbXBsZXRpb25U
YXNrJiYpOworICAgIHZvaWQgYWRkQ29tcGxldGlvblRhc2soQ29udGV4dCosIENvbXBsZXRpb25U
YXNrJiYpOwogCiAgICAgdm9pZCBzZXRNb2RlKE1lbW9yeU1vZGUgbW9kZSkgeyBtX21vZGUgPSBt
b2RlOyB9CiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkBA
IC03Miw3ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY2FuY2VsbGVkIHRoZSBwbGFuLgotICAgIGJvb2wg
dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3QoVk0mKTsKKyAgICBib29sIHRyeVJlbW92ZUNvbnRl
eHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBydW5D
b21wbGV0aW9uVGFza3MoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKQEAgLTgzLDcgKzg1LDEwIEBA
IHByb3RlY3RlZDoKIAogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1h
dGlvbjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1f
Y29tcGxldGlvblRhc2tzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRp
b25UYXNrPiwgMT4gbV9jb21wbGV0aW9uVGFza3M7CisKKyAgICBDcmVhdGVFbWJlZGRlcldyYXBw
ZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhy
b3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogCiAgICAgY29uc3QgdWludDhfdCogbV9zb3Vy
Y2U7CiAgICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAppbmRleCA4YjYwMGVkLi42YTQyZDUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgs
MTAgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgog
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKaW5kZXggZTQxM2IyNS4uYWFjZWQ1ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw4ICs0Myw2IEBA
IGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5h
bWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgU2lnbmF0dXJlQXJnQ291bnQgPSB1aW50MzJfdDsKQEAg
LTE1Niw3ICsxNTQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2FzbTo6
U2lnbmF0dXJlSGFzaD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCi0vLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBn
bG9iYWxseSBhbmQgc2hhcmVkIGJ5IFZNcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1
bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0
YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRp
cGxlIFZNcy4KKy8vIFNpZ25hdHVyZSBpbmZvcm1hdGlvbiBpcyBoZWxkIGdsb2JhbGx5IGFuZCBz
aGFyZWQgYnkgdGhlIGVudGlyZSBwcm9jZXNzIHRvIGFsbG93IGFsbCBzaWduYXR1cmVzIHRvIGJl
IHVuaXF1ZS4gVGhpcyBpcyByZXF1aXJlZCB3aGVuIHdhc20gY2FsbHMgYW5vdGhlciB3YXNtIGlu
c3RhbmNlLCBhbmQgbXVzdCB3b3JrIHdoZW4gbW9kdWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVs
dGlwbGUgVk1zLgogLy8gTm90ZTogc2lnbmF0dXJlcyBhcmUgbmV2ZXIgcmVtb3ZlZCBiZWNhdXNl
IHRoYXQgd291bGQgcmVxdWlyZSBhY2NvdW50aW5nIGZvciBhbGwgV2ViQXNzZW1ibHkuTW9kdWxl
IGFuZCB3aGljaCBzaWduYXR1cmVzIHRoZXkgdXNlLiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2ln
bmF0dXJlcyBpcyBib3VuZGVkLCBhbmQgaXNuJ3Qgd29ydGggdGhlIGNvdW50aW5nIG92ZXJoZWFk
LiBXZSBjb3VsZCBjbGVhciBldmVyeXRoaW5nIHdoZW4gd2UgcmVhY2ggemVybyBvdXRzdGFuZGlu
ZyBXZWJBc3NlbWJseS5Nb2R1bGUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjYwMzcKIGNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTaWduYXR1cmVJbmZvcm1hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzAx
YTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRh
YmxlLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUu
aCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJp
dGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx0eXBl
X3RyYWl0cz4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworUmVmUHRyPFRh
YmxlPiBUYWJsZTo6Y3JlYXRlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMy
X3Q+IG1heGltdW0pCit7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgZmFzdE1h
bGxvYyhzaXplb2YoVGFibGUpKSkgVGFibGUoaW5pdGlhbCwgbWF4aW11bSkpOworfQorCitUYWJs
ZTo6flRhYmxlKCkKK3sKK30KKworVGFibGU6OlRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgbV9zaXplID0gaW5pdGlhbDsKKyAg
ICBtX21heGltdW0gPSBtYXhpbXVtOworICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3NpemUpKTsK
KyAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7CisKKyAgICAv
LyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVt
IGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCisgICAgLy8gQnV0IGZvciBub3cs
IHdlJ3JlIG5vdCBkb2luZyB0aGF0LgorICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206
OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24p
ICogc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICBtX2luc3RhbmNlcyA9IE1hbGxv
Y1B0cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPjo6bWFsbG9jKHNpemVvZihKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGRlZmF1bHRfY29uc3RydWN0
X2F0KCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSk7CisgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5n
ZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7
IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBtX2luc3RhbmNl
cy5nZXQoKVtpXSA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKK3sKKyAgICBpZiAoZGVsdGEgPT0gMCkKKyAg
ICAgICAgcmV0dXJuIHNpemUoKTsKKworICAgIHVzaW5nIENoZWNrZWQgPSBDaGVja2VkPHVpbnQz
Ml90LCBSZWNvcmRPdmVyZmxvdz47CisgICAgQ2hlY2tlZCBuZXdTaXplQ2hlY2tlZCA9IHNpemUo
KTsKKyAgICBuZXdTaXplQ2hlY2tlZCArPSBkZWx0YTsKKyAgICB1aW50MzJfdCBuZXdTaXplOwor
ICAgIGlmIChuZXdTaXplQ2hlY2tlZC5zYWZlR2V0KG5ld1NpemUpID09IENoZWNrZWRTdGF0ZTo6
RGlkT3ZlcmZsb3cpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAobWF4
aW11bSgpICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBhdXRvIGNoZWNrZWRHcm93ID0gWyZdIChhdXRvJiBjb250YWluZXIp
IHsKKyAgICAgICAgQ2hlY2tlZCByZWFsbG9jU2l6ZUNoZWNrZWQgPSBuZXdTaXplQ2hlY2tlZDsK
KyAgICAgICAgcmVhbGxvY1NpemVDaGVja2VkICo9IHNpemVvZigqY29udGFpbmVyLmdldCgpKTsK
KyAgICAgICAgdWludDMyX3QgcmVhbGxvY1NpemU7CisgICAgICAgIGlmIChyZWFsbG9jU2l6ZUNo
ZWNrZWQuc2FmZUdldChyZWFsbG9jU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29udGFpbmVyLnJlYWxsb2MocmVh
bGxvY1NpemUpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXpl
OyArK2kpCisgICAgICAgICAgICBkZWZhdWx0X2NvbnN0cnVjdF9hdCgmY29udGFpbmVyLmdldCgp
W2ldKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIGlmICghY2hlY2tlZEdy
b3cobV9mdW5jdGlvbnMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICgh
Y2hlY2tlZEdyb3cobV9pbnN0YW5jZXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgbV9zaXplID0gbmV3U2l6ZTsKKworICAgIHJldHVybiBuZXdTaXplOworfQorCit2b2lk
IFRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4
XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdl
IHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1faW5zdGFuY2VzLmdldCgpW2lu
ZGV4XSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgVGFibGU6OnNldEZ1bmN0aW9uKHVpbnQzMl90IGlu
ZGV4LCBDYWxsYWJsZUZ1bmN0aW9uIGZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBtX2Z1
bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbjsKKyAgICBtX2luc3RhbmNlcy5nZXQoKVtp
bmRleF0gPSBpbnN0YW5jZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OlRhYmxlCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDhlYzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaApAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbUxpbWl0cy5oIgorI2luY2x1ZGUgPHd0Zi9NYWxs
b2NQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hvdWxkIGJl
IFdhc206Okluc3RhbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorCituYW1lc3BhY2Ug
V2FzbSB7CisKK2NsYXNzIFRhYmxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRhYmxl
PiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDcmVhdGVGYWlsIHsKKyAgICAgICAgSW52YWxp
ZFNpemUsCisgICAgfTsKKyAgICBzdGF0aWMgUmVmUHRyPFRhYmxlPiBjcmVhdGUodWludDMyX3Qg
aW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB+VGFibGUoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZ3Jvdyh1
aW50MzJfdCBkZWx0YSkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZvaWQgY2xlYXJGdW5jdGlv
bih1aW50MzJfdCk7CisgICAgdm9pZCBzZXRGdW5jdGlvbih1aW50MzJfdCwgQ2FsbGFibGVGdW5j
dGlvbiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7IC8vIEZJWE1FIG1ha2UgdGhpcyBXYXNtOjpJ
bnN0YW5jZS4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCisKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9zaXpl
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1fZnVuY3Rpb25zKTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZJbnN0YW5jZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1f
aW5zdGFuY2VzKTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6
ZSkgeyByZXR1cm4gc2l6ZSA8IG1heFRhYmxlRW50cmllczsgfQorCitwcml2YXRlOgorICAgIFRh
YmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOwor
CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOworICAgIHVpbnQzMl90IG1f
c2l6ZTsKKyAgICBNYWxsb2NQdHI8Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7CisgICAg
Ly8gY2FsbF9pbmRpcmVjdCBuZWVkcyB0byBkbyBhbiBJbnN0YW5jZSBjaGVjayB0byBwb3RlbnRp
YWxseSBjb250ZXh0IHN3aXRjaCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0byBhbm90aGVyIGlu
c3RhbmNlLiBXZSBjYW4gaG9sZCByYXcgcG9pbnRlcnMgdG8gSW5zdGFuY2UgaGVyZSBiZWNhdXNl
IHRoZSBlbWJlZGRlciBlbnN1cmVzIHRoYXQgVGFibGUga2VlcHMgYWxsIHRoZSBpbnN0YW5jZXMg
YWxpdmUuIFdlIGNvdWxkbid0IGhvbGQgYSBSZWYgaGVyZSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNl
IGN5Y2xlcy4KKyAgICBNYWxsb2NQdHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4gbV9pbnN0YW5j
ZXM7IC8vIEZJWE1FIG1ha2UgdGhpcyBhIFdhc206Okluc3RhbmNlLiBodHRwczovL3dlYmtpdC5v
cmcvYi8xNzc0NzIKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVu
a3MuY3BwCmluZGV4IDk3N2IwMWIuLmMyMzU5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UaHVua3MuY3BwCkBAIC0yOSwxMSArMjksOSBAQAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkZyYW1lVHJhY2Vy
cy5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVEV4Y2VwdGlv
bnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1
ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0Lmgi
CkBAIC00OCw0NiArNDYsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9u
RnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYKIAogICAgIC8vIFRo
ZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVzdCBtb3ZlIEV4Y2VwdGlvblR5cGUgaW50byB0aGUg
YXJndW1lbnRHUFIxIGJlZm9yZSBqdW1waW5nIGhlcmUuCiAgICAgLy8gV2UncmUgYWxsb3dlZCB0
byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZS4gV2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSBjYWxs
ZWUgc2F2ZXMuCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjIp
OwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjIsIENvbnRleHQ6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMik7Cisg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwogICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKICAgICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbm90IHJlYWNoIHRo
aXMuCiAKLSAgICB2b2lkKiAoKnRocm93V2FzbUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwgV2FzbTo6
RXhjZXB0aW9uVHlwZSwgV2FzbTo6Q29udGV4dCopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgV2Fz
bTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCkgLT4gdm9p
ZCogewotICAgICAgICBWTSogdm0gPSB3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmpl
Y3QoKTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yOyAKLSAgICAgICAgICAgIGlmICh0
eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAgZXJy
b3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3I6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1l
RXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBl
KSk7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7
Ci0gICAgICAgIH0KLQotICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAg
QVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPnRh
cmdldE1hY2hpbmVQQ0ZvclRocm93KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2Ug
dGhpcyBiZXR0ZXI6Ci0gICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxs
aW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKLSAgICAgICAg
Ly8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRo
ZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQotICAgICAgICAvLyB0aGlzIHNpbmNlIGl0
IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0
aGUgY2FsbGluZyBjb252ZW50aW9uCi0gICAgICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxv
YWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1w
aW5nCi0gICAgICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMs
IHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCi0gICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICAgICAgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4od2FzbUNvbnRleHQtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKLSAgICAg
ICAgcmV0dXJuIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKLSAgICB9OwotCisgICAgVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCku
dGhyb3dXYXNtRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0
aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwot
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cih0aHJvd1dhc21FeGNlcHRpb24pKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdh
c20iKSk7CiB9CiAKQEAgLTExOSw4ICs4OSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJp
Z2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKICNlbmRp
ZgogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZh
dGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNr
Rm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsKIAotICAg
IGppdC5sb2FkV2FzbUNvbnRleHQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihy
dW5PTUdQbGFuRm9ySW5kZXgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9h
ZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB0eXBlZGVm
IHZvaWQgKCpSdW4pKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90KTsKKyAgICBSdW4g
cnVuID0gT01HUGxhbjo6cnVuRm9ySW5kZXg7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocnVuKSksIEdQUkluZm86OmFy
Z3VtZW50R1BSMik7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKIAogICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNh
bGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0
ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKQEAgLTE0
Miw2ICsxMTQsMTkgQEAgVGh1bmtzJiBUaHVua3M6OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuICp0
aHVua3M7CiB9CiAKK3ZvaWQgVGh1bmtzOjpzZXRUaHJvd1dhc21FeGNlcHRpb24oVGhyb3dXYXNt
RXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CisgICAgLy8gVGhlIHRodW5rcyBhcmUgdW5pcXVlIGZvciB0aGUgZW50aXJl
IHByb2Nlc3MsIHRoZXJlZm9yZSBjaGFuZ2luZyB0aGUgdGhyb3dpbmcgZnVuY3Rpb24gY2hhbmdl
cyBpdCBmb3IgYWxsIHVzZXMgb2YgV2ViQXNzZW1ibHkuCisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
dGhyb3dXYXNtRXhjZXB0aW9uIHx8IG1fdGhyb3dXYXNtRXhjZXB0aW9uID09IHRocm93V2FzbUV4
Y2VwdGlvbik7CisgICAgbV90aHJvd1dhc21FeGNlcHRpb24gPSB0aHJvd1dhc21FeGNlcHRpb247
Cit9CisKK1Rocm93V2FzbUV4Y2VwdGlvbiBUaHVua3M6OnRocm93V2FzbUV4Y2VwdGlvbigpCit7
CisgICAgcmV0dXJuIG1fdGhyb3dXYXNtRXhjZXB0aW9uOworfQorCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgVGh1bmtzOjpzdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGh1bmtzLmgKaW5kZXggZGYxNGNhMi4uNTI5NzY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UaHVua3MuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21F
bWJlZGRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC00Miw2
ICs0Myw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAgICAgc3Rh
dGljIFRodW5rcyYgc2luZ2xldG9uKCk7CiAKKyAgICB2b2lkIHNldFRocm93V2FzbUV4Y2VwdGlv
bihUaHJvd1dhc21FeGNlcHRpb24pOworICAgIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21F
eGNlcHRpb24oKTsKKwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViKFRodW5rR2VuZXJh
dG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1Yihjb25zdCBBYnN0cmFjdExvY2tl
ciYsIFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhpc3RpbmdT
dHViKFRodW5rR2VuZXJhdG9yKTsKQEAgLTUwLDYgKzU0LDcgQEAgcHJpdmF0ZToKICAgICBUaHVu
a3MoKSA9IGRlZmF1bHQ7CiAKICAgICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY+IG1fc3R1YnM7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNt
RXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2NrOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggOWM1YjY4NC4uMmZlMTMy
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC0y
Miw2ICsyMiw3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBAIC0xNzIsMTMg
KzE3MywxMyBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4m
IHBsYW4pCiAgICAgcGxhbi53YWl0Rm9yQ29tcGxldGlvbigpOwogfQogCi12b2lkIFdvcmtsaXN0
OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNG
b3JDb250ZXh0KENvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1f
bG9jayk7CiAgICAgVmVjdG9yPFF1ZXVlRWxlbWVudD4gZWxlbWVudHM7CiAgICAgd2hpbGUgKCFt
X3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVl
dWUuZGVxdWV1ZSgpOwotICAgICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5
UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAgICBib29sIGRpZENhbmNlbCA9IGVs
ZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsKICAg
ICAgICAgaWYgKCFkaWRDYW5jZWwpCiAgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoV1RGTW92
ZShlbGVtZW50KSk7CiAgICAgfQpAQCAtMTg4LDcgKzE4OSw3IEBAIHZvaWQgV29ya2xpc3Q6OnN0
b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKIAogICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV90aHJl
YWRzKSB7CiAgICAgICAgIGlmICh0aHJlYWQtPmVsZW1lbnQucGxhbikgewotICAgICAgICAgICAg
Ym9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRDYW5j
ZWxJZkxhc3Qodm0pOworICAgICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1l
bnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsKICAgICAg
ICAgICAgIGlmIChkaWRDYW5jZWwpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZl
IHRvIHdvcnJ5IGFib3V0IHRoZSBkZWFkbG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNhbid0IGJs
b2NrIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGEgbmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0aGUgbG9j
ayB0byBkbyBzby4KICAgICAgICAgICAgICAgICB0aHJlYWQtPnN5bmNocm9uaXplLndhaXQoKm1f
bG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xp
c3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCmluZGV4IDZi
NjkzNTIuLjc0OGE5ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Xb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlz
dC5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNs
dWRlICJWTS5oIgotCiAjaW5jbHVkZSA8cXVldWU+CiAKICNpbmNsdWRlIDx3dGYvQXV0b21hdGlj
VGhyZWFkLmg+CkBAIC0zNywxMCArMzUsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
SlNQcm9taXNlRGVmZXJyZWQ7Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENvbnRleHQ7
CiBjbGFzcyBQbGFuOwogCiBjbGFzcyBXb3JrbGlzdCB7CkBAIC01MCwxMyArNDcsMTAgQEAgcHVi
bGljOgogICAgIH5Xb3JrbGlzdCgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbnF1
ZXVlKFJlZjxQbGFuPik7Ci0gICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JWTShWTSYpOworICAgIHZv
aWQgc3RvcEFsbFBsYW5zRm9yQ29udGV4dChDb250ZXh0Jik7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYpOwogCi0gICAgdm9pZCBh
Y3RpdmF0ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7Ci0gICAgdm9pZCBkZWFjdGl2
ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7Ci0KICAgICBlbnVtIGNsYXNzIFByaW9y
aXR5IHsKICAgICAgICAgU2h1dGRvd24sCiAgICAgICAgIFN5bmNocm9ub3VzLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmMyYjcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBj
cmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRl
eHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQoreworICAgIEND
YWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRKSVQ7CisK
KyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsK
KyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgIC8vIEZJWE1FIFN0b3AgdXNp
bmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1MzIxCisgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uID0g
aml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciks
IEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVs
UHRyKiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9uOworICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
KmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92ZUxvY2F0
aW9uKTsKKyAgICB9KTsKKworICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVn
cyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0g
cGlubmVkUmVncy50b1NhdmUobW9kZSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5z
aWduZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKTsKKyAgICAvLyBUaGV5
IHNob3VsZCBhbGwgYmUgY2FsbGVlIHNhdmVzLgorICAgIHRvU2F2ZS5maWx0ZXIoUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgQVNTRVJUKHRvU2F2ZS5udW1iZXJPZlNl
dEdQUnMoKSA9PSB0b1NhdmVTaXplKTsKKyNlbmRpZgorCisgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgcmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRC
YXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQpOworICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9TcGlsbDsKKworICAgIHVuc2lnbmVkIHRvdGFs
RnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yodm9pZCopOworICAg
IHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0
ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Cisg
ICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykg
eworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICBjYXNl
IFdhc206Okk2NDoKKyAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBpZiAobnVt
R1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAr
K251bUdQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpGMzI6Cisg
ICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNh
bGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICB0b3Rh
bEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgKytudW1GUFJzOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdG90YWxGcmFtZVNp
emUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCB0b3Rh
bEZyYW1lU2l6ZSk7CisgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHRvdGFsRnJhbWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KworICAgIC8vIFdlIHNhdmUgYWxsIHRoZXNlIHJlZ2lzdGVycyByZWdhcmRsZXNzIG9mIGhhdmlu
ZyBhIG1lbW9yeSBvciBub3QuCisgICAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHdlIHVzZSBvbmUg
b2YgdGhlc2UgYXMgYSBzY3JhdGNoLiBUaGF0IHNhaWQsCisgICAgLy8gYWxtb3N0IGFsbCByZWFs
IHdhc20gcHJvZ3JhbXMgdXNlIG1lbW9yeSwgc28gaXQncyBub3QgcmVhbGx5CisgICAgLy8gd29y
dGggb3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhhdCB0aGV5IGRvbid0LgorICAgIGZvciAoY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7Cisg
ICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgcHRy
ZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBqaXQuc3RvcmVQ
dHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IG9mZnNldCkpOworICAgIH0KKworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0g
cGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKworICAgIHsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMgPSAwOwor
ICAgICAgICBudW1GUFJzID0gMDsKKyAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBw
aW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCisgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhp
cyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAg
ICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSk7CisKKyAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBwYXNzZXMg
V2FzbTo6Q29udGV4dConcyBpbnN0YW5jZSBhcyB0aGUgZmlyc3QgSlMgYXJndW1lbnQgd2hlbiB3
ZSdyZQorICAgICAgICAvLyBub3QgdXNpbmcgZmFzdCBUTFMgdG8gaG9sZCB0aGUgV2FzbTo6Q29u
dGV4dConcyBpbnN0YW5jZS4KKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAg
ICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0K
KworICAgICAgICBwdHJkaWZmX3Qgd2FzbU9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgc3dpdGNo
IChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgor
ICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51bUdQUnMg
Pj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkkzMikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2Fz
bTo6STMyKQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNh
bGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgKytudW1HUFJzOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdhc206OkY2
NDoKKyAgICAgICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2ZwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUu
YXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmxv
YWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpz
T2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2
NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVv
Zih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpCisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFy
Z3NbbnVtRlBSc10uZnByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCku
bV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsKKyAgICAg
ICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisg
ICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1l
bW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJh
c2VNZW1vcnkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6
U2lnbmFsaW5nKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0g
MSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUg
Zm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJz
ZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZz
ZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXpl
T2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOworICAgIH0KKworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNh
ZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9
IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICBBU1NFUlQo
ZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAg
IGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9u
SW5kZXhTcGFjZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNh
bGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7CisgICAgfSk7CisKKworICAgIGZvciAoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAg
ICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJU
KHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZz
ZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOwor
ICAgIH0KKworICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgIGNhc2Ug
V2FzbTo6RjMyOgorICAgICAgICBqaXQubW92ZUZsb2F0VG8zMihGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdhc206OkY2NDoKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJldHVyblZh
bHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iNGI5OGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
KyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9u
LmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNt
IHsKKworc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3Jh
cHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUs
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKcmVuYW1lIHRv
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKc2ltaWxhcml0eSBpbmRleCA2
MiUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5o
CnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgK
aW5kZXggMGZhZjk3Ny4uYzU3OGRmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vSlNXZWJBc3NlbWJseS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHkuaApAQCAtMjgsMzEgKzI4LDMxIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0j
aW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgotI2luY2x1ZGUgImpzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0j
aW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgotI2luY2x1ZGUgImpzL0pT
V2ViQXNzZW1ibHlUYWJsZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3Rv
dHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNsdWRlICJq
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3Nl
bWJseUluc3RhbmNlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlMaW5rRXJy
b3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90
eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgotI2lu
Y2x1ZGUgImpzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TW9k
dWxlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIK
LSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFz
c2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVD
b25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIK
LSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlU
YWJsZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUg
IldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgiCisj
aW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNZW1v
cnlDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgi
CisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIKKyNpbmNs
dWRlICJXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5jcHAKaW5kZXggZjkxZTZjNy4uMDgyNTE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKQEAgLTMy
LDggKzMyLDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUu
aCIKLSNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1h
dGlvbi5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KIApAQCAtNDQsNyArNDQsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscAogSlNXZWJB
c3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKFZNJiB2bSwg
UmVmPFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1
bGUpCiB7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0
aW9uID0gbW9kdWxlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpOwotICAgIGF1dG8qIHJl
c3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+
KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9u
Q291bnQoKSkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVCbG9jayks
IG1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayh2bSwgV1RGTW92ZShjb2RlQmxvY2spLCBtb2R1bGVJbmZvcm1hdGlvbik7CiAg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgbW9kdWxlKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtNTgsNyArNTgsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAgIG1fd2Fz
bVRvSlNFeGl0U3R1YnMucmVzZXJ2ZUNhcGFjaXR5KG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9y
dENvdW50KCkpOwogICAgIGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBvcnRJbmRl
eCA8IG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7ICsraW1wb3J0SW5kZXgpIHsK
ICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZv
cm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuYXQoaW1wb3J0SW5kZXgpOwot
ICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9Kcygmdm0sIG1fY2FsbExpbmtJbmZv
cywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKKyAgICAgICAgYXV0byBiaW5kaW5nID0g
V2FzbTo6d2FzbVRvSlMoJnZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBv
cnRJbmRleCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghYmluZGluZykpIHsKICAgICAgICAgICAg
IHN3aXRjaCAoYmluZGluZy5lcnJvcigpKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkJpbmRp
bmdGYWlsdXJlOjpPdXRPZk1lbW9yeToKQEAgLTY4LDcgKzY4LDcgQEAgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxv
Y2s+JiYgY28KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIH0KICAgICAgICAgbV93YXNtVG9KU0V4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQoYmluZGlu
Zy52YWx1ZSgpKTsKLSAgICAgICAgaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KSA9IG1f
d2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgICAgICBtX2NvZGVCbG9jay0+aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGltcG9ydElu
ZGV4KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOwogICAgIH0KIH0KIApAQCAtODMsMTEgKzgzLDYgQEAgdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2FzdDxKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6On5KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKCk7CiB9CiAKLWJvb2wgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
aXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAotewotICAgIHJl
dHVybiBtX2NvZGVCbG9jay0+aXNTYWZlVG9SdW4obWVtb3J5LT5tZW1vcnkoKS5tb2RlKCkpOwot
fQotCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsSUNzKFZNJiB2bSkK
IHsKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAhIWl0ZXI7
ICsraXRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaAppbmRleCA1MjcwM2Y4Li5hYmI4YzY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
CkBAIC02NCwzOSArNjQsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLndlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3BhY2U7CiAgICAgfQogCi0gICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7
IH0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21v
ZHVsZS5nZXQoKTsgfQorICAgIFdhc206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyByZXR1cm4g
bV9jb2RlQmxvY2suZ2V0KCk7IH0KIAotICAgIGJvb2wgaXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJs
eU1lbW9yeSopIGNvbnN0OworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNXZWJBc3NlbWJseU1vZHVsZSopOwogCi0gICAgLy8gVGhlc2UgdHdvIGNhbGxlZSBnZXR0
ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVsYXRlZC4K
LQotICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQo
cnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAgIH0KLSAg
ICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2Nh
dGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4U3BhY2UpOwotICAgIH0KLQotICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgp
Ci0gICAgewotICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiAmaW1w
b3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikg
KiBpbXBvcnRJbmRleDsKLSAgICB9Ci0KLSAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVCbG9jaygp
IHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9Ci0KICAgICB2b2lkIGNsZWFySlNDYWxsSUNz
KFZNJik7CiAKICAgICBib29sIHJ1bm5hYmxlKCkgY29uc3QgeyByZXR1cm4gIW1fZXJyb3JNZXNz
YWdlOyB9CkBAIC0xMTQsMjEgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRTdHVicygpCi0g
ICAgewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lk
Kik+KHNpemVvZihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBvcnRDb3Vu
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9m
KHZvaWQqKSAqIGZ1bmN0aW9uSW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOwotICAgIH0KLQotICAg
IHZvaWQqJiBpbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewot
ICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDx2b2lkKio+KGJpdHdpc2VfY2FzdDxjaGFyKj4o
dGhpcykgKyBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCkpOwotICAgIH0K
LQogICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRp
dGlvbmFsRmluYWxpemVyIHsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgp
IG92ZXJyaWRlOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCBjNzdmYTA1Li5jNTJlZWM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5jcHAKQEAgLTQ5LDEyICs0OSwxNyBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAot
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQorSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5zdGFuY2U+
JiYgaW5zdGFuY2UpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2luc3RhbmNl
KFdURk1vdmUoaW5zdGFuY2UpKQogICAgICwgbV92bSgmdm0pCisgICAgLCBtX3dhc21Nb2R1bGUo
bV9pbnN0YW5jZS0+bW9kdWxlKCkpCisgICAgLCBtX3dhc21UYWJsZShtX2luc3RhbmNlLT5tX3Rh
YmxlLmdldCgpKQorICAgICwgbV9nbG9iYWxzKG1faW5zdGFuY2UtPm1fZ2xvYmFscy5nZXQoKSkK
ICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsKLSAgICBt
ZW1zZXQoaW1wb3J0RnVuY3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICogc2l6ZW9m
KFdyaXRlQmFycmllcjxKU09iamVjdD4pKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKKyAgICAgICAgbmV3IChpbXBvcnRGdW5jdGlvbklu
Zm8oaSkpIEltcG9ydEZ1bmN0aW9uSW5mbygpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUs
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QpCkBAIC02Mywx
MiArNjgsMTAgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7CiAKICAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG1vZHVsZSk7Ci0gICAg
Y29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IGdsb2JhbE1lbW9yeUJ5dGVTaXplKCk7Ci0g
ICAgbV9nbG9iYWxzID0gTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVtb3J5U2l6
ZSk7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1lbW9yeVNp
emUpOwotCiAgICAgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVO
YW1lc3BhY2VPYmplY3QpOwogICAgIG1fY2FsbGVlLnNldCh2bSwgdGhpcywgbW9kdWxlLT5jYWxs
ZWUoKSk7CisgICAgCisgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX2lu
c3RhbmNlLT5leHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtODgsNDAgKzkxLDQ0IEBAIHZvaWQg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1vcnkp
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5nbG9iYWxNZW1vcnlCeXRlU2l6ZSgpKTsKKyAgICB2aXNp
dG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlLT5leHRy
YU1lbW9yeUFsbG9jYXRlZCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09i
amVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0pOworICAgICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbkluZm8oaSktPmltcG9ydEZ1bmN0aW9uKTsgLy8g
VGhpcyBhbHNvIGtlZXBzIHRoZSBmdW5jdGlvbnMnIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSBhbGl2
ZS4KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9j
aykKIHsKKyAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHdhc21Db2RlQmxvY2suY29w
eVJlZigpKTsKKyAgICBtX3dhc21Db2RlQmxvY2sgPSB3YXNtQ29kZUJsb2NrLnB0cigpOworCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF3YXNt
Q29kZUJsb2NrLT5ydW5uYWJsZSgpKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVj
dCgpLT5XZWJBc3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCB3YXNtQ29kZUJsb2NrLT5lcnJv
ck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NF
UlQod2FzbUNvZGVCbG9jay0+aXNTYWZlVG9SdW4obWVtb3J5TW9kZSgpKSk7Ci0gICAgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gbW9kdWxlKCktPmNvZGVCbG9jayhtZW1vcnlN
b2RlKCkpOwotICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBqc0NvZGVCbG9jayA9IG1fbW9kdWxlLT5jb2RlQmxvY2sobWVtb3J5TW9kZSgpKTsKKyAgICBp
ZiAoanNDb2RlQmxvY2spIHsKICAgICAgICAgLy8gQSBDb2RlQmxvY2sgbWlnaHQgaGF2ZSBhbHJl
YWR5IGJlZW4gY29tcGlsZWQuIElmIHNvLCBpdCBtZWFucwogICAgICAgICAvLyB0aGF0IHRoZSBD
b2RlQmxvY2sgd2UgYXJlIHRyeWluZyB0byBjb21waWxlIG11c3QgYmUgdGhlIHNhbWUKICAgICAg
ICAgLy8gYmVjYXVzZSB3ZSB3aWxsIG5ldmVyIGNvbXBpbGUgYSBDb2RlQmxvY2sgYWdhaW4gb25j
ZSBpdCdzCiAgICAgICAgIC8vIHJ1bm5hYmxlLgotICAgICAgICBBU1NFUlQoJmNvZGVCbG9jay0+
Y29kZUJsb2NrKCkgPT0gd2FzbUNvZGVCbG9jay5wdHIoKSk7Ci0gICAgICAgIG1fY29kZUJsb2Nr
LnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICAgICAgQVNTRVJUKCZqc0NvZGVCbG9jay0+
Y29kZUJsb2NrKCkgPT0gd2FzbUNvZGVCbG9jay5wdHIoKSk7CisgICAgICAgIG1fY29kZUJsb2Nr
LnNldCh2bSwgdGhpcywganNDb2RlQmxvY2spOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvZGVC
bG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgd2FzbUNvZGVCbG9jay5j
b3B5UmVmKCksIG1fbW9kdWxlLmdldCgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFjb2RlQmxv
Y2stPnJ1bm5hYmxlKCkpKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLT5lcnJvck1lc3Nh
Z2UoKSkpOworICAgICAgICBqc0NvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNy
ZWF0ZSh2bSwgV1RGTW92ZSh3YXNtQ29kZUJsb2NrKSwgbV9tb2R1bGUuZ2V0KCkpOworICAgICAg
ICBpZiAoVU5MSUtFTFkoIWpzQ29kZUJsb2NrLT5ydW5uYWJsZSgpKSkgeworICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNyZWF0
ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJl
KCksIGpzQ29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsK
LSAgICAgICAgbW9kdWxlKCktPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBjb2RlQmxv
Y2spOworICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGpzQ29kZUJsb2NrKTsKKyAg
ICAgICAgbV9tb2R1bGUtPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBqc0NvZGVCbG9j
ayk7CiAgICAgfQogCiAgICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNDYXN0PFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkKj4obV9tb2R1bGVOYW1lc3BhY2VPYmplY3QtPm1vZHVsZVJlY29yZCgpKTsK
LSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbW9kdWxlKCksIHRoaXMpOworICAgIG1vZHVs
ZVJlY29yZC0+bGluayhleGVjLCBtX21vZHVsZS5nZXQoKSwgdGhpcyk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBt
b2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwpAQCAtMTI5LDcgKzEzNiw3IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBSZWY8V2FzbTo6CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
IH0KIAotSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0
ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUs
IEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUpCitK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmpl
Y3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSwgUmVmPFdhc206
Okluc3RhbmNlPiYmIGluc3RhbmNlKQogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKQEAgLTE1OCw4ICsxNjUsOCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBK
UwogCiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9IG1vZHVs
ZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpOwogICAgIC8vIEZJWE1FOiBUaGVzZSBv
YmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBPT00gaGVy
ZS4KLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5mb3JtYXRp
b24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgaW5z
dGFuY2VTdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSk7
Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxlTmFtZXNw
YWNlKTsKKyAgICBhdXRvKiBqc0luc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGVJbmZv
cm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpKSkgSlNXZWJBc3NlbWJseUluc3RhbmNlKHZt
LCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3Vu
dCgpLCBXVEZNb3ZlKGluc3RhbmNlKSk7CisgICAganNJbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgbnVsbHB0cik7CiAKICAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0
YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2Jq
ZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9i
amVjdHMsIHJlc3BlY3RpdmVseS4KQEAgLTE5MCwxNSArMTk3LDIxIEBAIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTCiAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydCBmdW5jdGlvbiIsICJtdXN0
IGJlIGNhbGxhYmxlIikpKTsKIAorICAgICAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBj
YWxsZWVJbnN0YW5jZSA9IG51bGxwdHI7CisgICAgICAgICAgICBXYXNtOjpXYXNtRW50cnlwb2lu
dExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCA9IG51bGxwdHI7CiAgICAgICAgICAgICBKU09i
amVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisKICAgICAgICAgICAg
IC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CiAgICAg
ICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CiAgICAgICAgICAgICBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKICAgICAgICAg
ICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0
aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGEuIElmIHRo
ZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93
IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVy
ZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc21G
dW5jdGlvbikKKyAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVy
ZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUluc3RhbmNlID0gd2FzbUZ1bmN0
aW9uLT5pbnN0YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB3YXNtRW50cnlwb2ludCA9IHdh
c21GdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydGVk
U2lnbmF0dXJlSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwog
ICAgICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgpA
QCAtMjE1LDcgKzIyOCwxMCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAg
Ly8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVsZmlsbHMg
Y2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3
aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCiAKICAgICAg
ICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7Ci0g
ICAgICAgICAgICBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25zKClbbnVtSW1wb3J0RnVuY3Rpb25z
KytdLnNldCh2bSwgaW5zdGFuY2UsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEltcG9ydEZ1bmN0
aW9uSW5mbyogaW5mbyA9IGpzSW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhudW1JbXBvcnRG
dW5jdGlvbnMrKyk7CisgICAgICAgICAgICBpbmZvLT50YXJnZXRJbnN0YW5jZSA9IGNhbGxlZUlu
c3RhbmNlOworICAgICAgICAgICAgaW5mby0+d2FzbUVudHJ5cG9pbnQgPSB3YXNtRW50cnlwb2lu
dDsKKyAgICAgICAgICAgIGluZm8tPmltcG9ydEZ1bmN0aW9uLnNldCh2bSwganNJbnN0YW5jZSwg
ZnVuY3Rpb24pOwogICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNDMsNyArMjU5LDggQEAgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIHRhYmxl
cy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9ydHMuCi0g
ICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7Cisg
ICAgICAgICAgICBqc0luc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwgdGFibGUp
OworICAgICAgICAgICAganNJbnN0YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFibGUoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTI3Myw4ICsyOTAsOCBAQCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwg
RXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVt
b3JpZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8gaW1wb3J0
cy4KLSAgICAgICAgICAgIEFTU0VSVCghaW5zdGFuY2UtPm1fbWVtb3J5KTsKLSAgICAgICAgICAg
IGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLCBtZW1vcnkpOworICAgICAgICAg
ICAgQVNTRVJUKCFqc0luc3RhbmNlLT5tX21lbW9yeSk7CisgICAgICAgICAgICBqc0luc3RhbmNl
LT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTI5MSwxMyArMzA4LDEzIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBB
U1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsKICAgICAgICAgICAg
IHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBl
KSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgICAgICBpbnN0YW5j
ZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVjKSk7Cisg
ICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0
R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5z
ZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVl
LnRvRmxvYXQoZXhlYykpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0YW5jZSgp
LnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFs
dWUudG9GbG9hdChleGVjKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1J
bXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkp
OworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKG51bUlt
cG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTUsMTQgKzMzMiwyMSBA
QCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkpOwogICAg
ICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0
aW9uLgotICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVt
b3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKworICAgICAgICAgICAg
YXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwor
CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6
OmNyZWF0ZShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpLAorICAgICAgICAgICAgICAgIFsmdm1dICgpIHsgdm0uaGVh
cC5jb2xsZWN0QXN5bmMoQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAgICAgICAg
ICBbJnZtXSAoKSB7IHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsg
fSwKKyAgICAgICAgICAgICAgICBbJnZtLCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3VudCBvbGRQ
YWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dT
dWNjZXNzQ2FsbGJhY2sodm0sIG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAg
ICAgICAgICBpZiAoIW1lbW9yeSkKICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwogCi0gICAgICAgICAgICBpbnN0YW5jZS0+bV9t
ZW1vcnkuc2V0KHZtLCBpbnN0YW5jZSwKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVt
b3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgbWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAg
ICAgICAgIGpzTWVtb3J5LT5hZG9wdChtZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAg
ICAgICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIGpzTWVtb3J5KTsKICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9
CkBAIC0zMzYsMTkgKzM2MCwyNCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICBp
ZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9y
dCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxl
SW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJs
ZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJs
eVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwKLSAg
ICAgICAgICAgICAgICBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwo
KSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOworICAgICAg
ICAgICAgUmVmUHRyPFdhc206OlRhYmxlPiB3YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6Y3JlYXRl
KG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBtb2R1bGVJbmZv
cm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAgICAgICBpZiAoIXdh
c21UYWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sICJjb3VsZG4ndCBjcmVhdGUgVGFibGUiKSk7CisgICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRhYmxlOjpj
cmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlU
YWJsZVN0cnVjdHVyZSgpLCB3YXNtVGFibGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAg
ICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFzc2VtYmx5
VGFibGUgd2UndmUgZGVmaW5lZC4KICAgICAgICAgICAgIC8vIElmIGl0J3MgZGVmaW5lZCB0byBi
ZSB0b28gbGFyZ2UsIHdlIHNob3VsZCBoYXZlIHRocm93biBhIHZhbGlkYXRpb24gZXJyb3IuCiAg
ICAgICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBB
U1NFUlQodGFibGUpOwotICAgICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUuc2V0KHZtLCBpbnN0
YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGpz
SW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPm1fd2FzbVRhYmxlID0g
dGFibGUtPnRhYmxlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKCFpbnN0YW5j
ZS0+bWVtb3J5KCkpIHsKKyAgICBpZiAoIWpzSW5zdGFuY2UtPm1lbW9yeSgpKSB7CiAgICAgICAg
IC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZHVtbXkgbWVtb3J5LCBzbyB0aGF0IHdhc20gLT4gd2Fz
bSB0aHVua3MgYXZvaWQgY2hlY2tpbmcgZm9yIGEgbnVsbHB0ciBNZW1vcnkgd2hlbiB0cnlpbmcg
dG8gc2V0IHBpbm5lZCByZWdpc3RlcnMuCi0gICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQo
dm0sIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV2Fz
bTo6TWVtb3J5OjpjcmVhdGUodm0sIDAsIDApLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAg
YXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7
CisgICAgICAgIGpzTWVtb3J5LT5hZG9wdChXYXNtOjpNZW1vcnk6OmNyZWF0ZSgpLnJlbGVhc2VO
b25OdWxsKCkpOworICAgICAgICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIGpzTWVtb3J5KTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICB9
CiAgICAgCkBAIC0zNjAsMjAgKzM4OSwxMyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAg
ICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgIT0gV2FzbTo6R2xvYmFs
OjpJc0ltcG9ydCk7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9
PSBXYXNtOjpHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQoZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBudW1JbXBvcnRHbG9iYWxzKTsK
LSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBpbnN0YW5j
ZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcikpOworICAg
ICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2JhbEluZGV4
LCBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJNjRHbG9iYWwoZ2xvYmFsLmluaXRpYWxCaXRz
T3JJbXBvcnROdW1iZXIpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGlu
c3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0
TnVtYmVyKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2Jh
bChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgQVNTRVJUKCFpbnN0YW5jZS0+Y29kZUJsb2NrKCkpOwotCi0gICAg
cmV0dXJuIGluc3RhbmNlOwotfQotCi1zaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpnbG9i
YWxNZW1vcnlCeXRlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICByZXR1
cm4ganNJbnN0YW5jZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCmluZGV4IDNj
ZmU1NDkuLmQ1MjU1MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnku
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFibGUuaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4
dC5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
MzksNzUgKzQxLDk0IEBAIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNX
ZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5VG9KU0NhbGxlZTsKIAorbmFtZXNw
YWNlIFdhc20geworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgVGFibGU7IC8vIEZJWE1FIHJlbW92
ZSB0aGlzIGFmdGVyIHJlZmFjdG9yaW5nLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKK30K
KwogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAK
LSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUq
LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJl
Kik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0
YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVj
dHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2so
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogICAgIHZvaWQgZmluYWxpemVD
cmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSosIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYpOwotCi0gICAg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7IH0KLQotICAgIEpTT2JqZWN0KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpIHsgUkVM
RUFTRV9BU1NFUlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4gaW1wb3J0RnVu
Y3Rpb25zKClbaWR4XS5nZXQoKTsgfQotCisgICAgCisgICAgV2FzbTo6SW5zdGFuY2UmIGluc3Rh
bmNlKCkgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQorICAgIFdhc206OkNvbnRleHQqIGNv
bnRleHQoKSBjb25zdCB7IHJldHVybiAmbV92bS0+d2FzbUNvbnRleHQ7IH0KICAgICBKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KCkgeyByZXR1cm4gbV9tb2R1
bGVOYW1lc3BhY2VPYmplY3QuZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxl
KCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQorICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSog
d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KIAogICAg
IEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9
Ci0gICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2YWx1ZSkg
eyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7IH0KKyAg
ICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7IEFT
U0VSVCghbWVtb3J5KCkpOyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgbV93YXNtTWVt
b3J5ID0gJm1lbW9yeSgpLT5tZW1vcnkoKTsgfQogICAgIFdhc206Ok1lbW9yeU1vZGUgbWVtb3J5
TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAotICAgIEpTV2Vi
QXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9Ci0KLSAgICBp
bnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxz
LmdldCgpW2ldOyB9Ci0gICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQotICAgIGZsb2F0IGxvYWRGMzJHbG9iYWwo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMyR2xv
YmFsKGkpKTsgfQotICAgIGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9Ci0gICAgdm9p
ZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQoKVtp
XSA9IGJpdHM7IH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX21lbW9yeSk7IH0K
LSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsgfQorICAgIC8vIFRhaWwgYWNj
ZXNzb3JzLgorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZUYWlsKCkgeyByZXR1cm4gV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1aW50NjRfdCk+KHNpemVvZihKU1dlYkFzc2VtYmx5
SW5zdGFuY2UpKTsgfQorICAgIHN0cnVjdCBJbXBvcnRGdW5jdGlvbkluZm8geworICAgICAgICAv
LyBUYXJnZXQgaW5zdGFuY2UgYW5kIGVudHJ5cG9pbnQgYXJlIG9ubHkgc2V0IGZvciB3YXNtLT53
YXNtIGNhbGxzLCBhbmQgYXJlIG90aGVyd2lzZSBudWxscHRyLiBUaGUgZW1iZWRkZXItc3BlY2lm
aWMgbG9naWMgb2NjdXJzIHRocm91Z2ggaW1wb3J0IGZ1bmN0aW9uLgorICAgICAgICBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIHRhcmdldEluc3RhbmNlIHsgbnVsbHB0ciB9OworICAgICAgICBXYXNt
OjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCB7IG51bGxwdHIgfTsK
KyAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBpbXBvcnRGdW5jdGlvbiB7IFdyaXRlQmFy
cmllcjxKU09iamVjdD4oKSB9OworICAgIH07CisgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbXBv
cnRGdW5jdGlvbkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiAmYml0d2lz
ZV9jYXN0PEltcG9ydEZ1bmN0aW9uSW5mbyo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBv
ZmZzZXRPZlRhaWwoKSlbaW1wb3J0RnVuY3Rpb25OdW1dOyB9CisgICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZlRhcmdldEluc3RhbmNlKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4g
b2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlv
bkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgdGFyZ2V0SW5zdGFu
Y2UpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50KHNpemVfdCBp
bXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlv
bk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9y
dEZ1bmN0aW9uSW5mbywgd2FzbUVudHJ5cG9pbnQpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zm
c2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbklu
Zm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVuY3Rpb24p
OyB9CisgICAgSlNPYmplY3QqIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9u
TnVtKSB7IFJFTEVBU0VfQVNTRVJUKGltcG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1JbXBvcnRGdW5j
dGlvbnMpOyByZXR1cm4gaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKS0+aW1w
b3J0RnVuY3Rpb24uZ2V0KCk7IH0KKyAgICAKKyAgICAvLyBGSVhNRSByZW1vdmUgdGhlc2UgYWZ0
ZXIgcmVmYWN0b3JpbmcgdGhlbSBvdXQuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorICAg
IFdhc206Ok1lbW9yeSYgaW50ZXJuYWxNZW1vcnkoKSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5
KCk7IH0KKyAgICBXYXNtOjpDb2RlQmxvY2smIHdhc21Db2RlQmxvY2soKSBjb25zdCB7IHJldHVy
biAqbV9pbnN0YW5jZS0+Y29kZUJsb2NrKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mV2FzbVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSwgbV93YXNtVGFibGUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhbGxl
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fY2Fs
bGVlKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWTSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdm0pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3Rh
bmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9j
aygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fY29k
ZUJsb2NrKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtQ29kZUJsb2NrKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93YXNtQ29k
ZUJsb2NrKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9jYWNo
ZWRTdGFja0xpbWl0KTsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlv
bnMoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmll
cjxKU0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9Ci0gICAgc3RhdGlj
IHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkg
eyByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1bmN0aW9uTnVtICog
c2l6ZW9mKHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikpOyB9Ci0KLSAgICBXZWJBc3NlbWJs
eVRvSlNDYWxsZWUqIHdlYkFzc2VtYmx5VG9KU0NhbGxlZSgpIHsgcmV0dXJuIG1fY2FsbGVlLmdl
dCgpOyB9Ci0KLSAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWRTdGFja0xpbWl0OyB9Ci0gICAgdm9pZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZvaWQqIGxp
bWl0KSB7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZldhc21NZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3Nl
bWJseUluc3RhbmNlLCBtX3dhc21NZW1vcnkpOyB9CisgICAgdm9pZCogY2FjaGVkU3RhY2tMaW1p
dCgpIGNvbnN0IHsgUkVMRUFTRV9BU1NFUlQobV9pbnN0YW5jZS0+Y2FjaGVkU3RhY2tMaW1pdCgp
ID09IG1fY2FjaGVkU3RhY2tMaW1pdCk7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7IH0KKyAg
ICB2b2lkIHNldENhY2hlZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9pbnN0YW5jZS0+c2V0
Q2FjaGVkU3RhY2tMaW1pdChsaW1pdCk7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9Cisg
ICAgV2FzbTo6TWVtb3J5KiB3YXNtTWVtb3J5KCkgeyByZXR1cm4gbV93YXNtTWVtb3J5OyB9Cisg
ICAgV2FzbTo6TW9kdWxlJiB3YXNtTW9kdWxlKCkgeyByZXR1cm4gbV93YXNtTW9kdWxlOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCB1
bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShW
TSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucywgUmVmPFdhc206Oklu
c3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1v
ZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6
ZV90PiBudW1JbXBvcnRGdW5jdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gKG9mZnNldE9m
SW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogbnVtSW1w
b3J0RnVuY3Rpb25zKS51bnNhZmVHZXQoKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXRPZlRhaWwo
KSArIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICogbnVtSW1wb3J0RnVuY3Rpb25zKS51bnNh
ZmVHZXQoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVk0qIG1fdm07Ci0gICAgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdy
aXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0
T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KLSAgICBzaXplX3QgZ2xvYmFsTWVtb3J5Qnl0ZVNpemUo
KSBjb25zdDsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVy
biBtX21vZHVsZS5nZXQoKTsgfQorCisgICAgUmVmPFdhc206Okluc3RhbmNlPiBtX2luc3RhbmNl
OwogCisgICAgVk0qIG1fdm07CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+
IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2Nv
ZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+IG1fbW9k
dWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TWVtb3J5
PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRhYmxlPiBtX3RhYmxl
OwogICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseVRvSlNDYWxsZWU+IG1fY2FsbGVlOwotICAg
IE1hbGxvY1B0cjx1aW50NjRfdD4gbV9nbG9iYWxzOworICAgIAorICAgIC8vIEZJWE1FIHJlbW92
ZSB0aGVzZSBhZnRlciByZWZhY3RvcmluZyB0aGVtIG91dC4gaHR0cHM6Ly93ZWJraXQub3JnL2Iv
MTc3NDcyCiAgICAgdm9pZCogbV9jYWNoZWRTdGFja0xpbWl0IHsgYml0d2lzZV9jYXN0PHZvaWQq
PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSB9OworICAgIFdhc206OkNv
ZGVCbG9jayogbV93YXNtQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgIFdhc206Ok1vZHVsZSYg
bV93YXNtTW9kdWxlOworICAgIFdhc206Ok1lbW9yeSogbV93YXNtTWVtb3J5IHsgbnVsbHB0ciB9
OworICAgIFdhc206OlRhYmxlKiBtX3dhc21UYWJsZSB7IG51bGxwdHIgfTsKKyAgICB1aW50NjRf
dCogbV9nbG9iYWxzIHsgbnVsbHB0ciB9OworCiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5j
dGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuY3BwCmluZGV4IDIyM2M1OGIuLmQ2NDBhNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
CkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTWVtb3J5IiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2Vt
Ymx5TWVtb3J5KSB9OwogCi1KU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBS
ZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwpAQCAtNTAsMTAgKzUwLDE2IEBAIEpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0CiAgICAgaWYgKCFn
bG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJs
ZWRFcnJvck1lc3NhZ2UoKSkpOwogCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJs
eU1lbW9yeSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKG1lbW9yeSkpOwotICAgIGluc3RhbmNlLT5t
X21lbW9yeS0+Y2hlY2soKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
IHJldHVybiBpbnN0YW5jZTsKKyAgICBhdXRvKiBtZW1vcnkgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1lbW9y
eSh2bSwgc3RydWN0dXJlKTsKKyAgICBtZW1vcnktPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gbWVtb3J5OworfQorICAgIAordm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjphZG9wdChS
ZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKK3sKKyAgICBtX21lbW9yeS5zd2FwKG1lbW9yeSk7
CisgICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgpID09IDEpOworICAgIG1fbWVtb3J5LT5j
aGVjaygpOwogfQogCiBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQpAQCAtNjEsMTMgKzY3LDEwIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1lbW9yeTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQorSlNXZWJBc3NlbWJseU1lbW9yeTo6SlNX
ZWJBc3NlbWJseU1lbW9yeShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQotICAgICwgbV9tZW1vcnkoV1RGTW92ZShtZW1vcnkpKQorICAgICwg
bV9tZW1vcnkoV2FzbTo6TWVtb3J5OjpjcmVhdGUoKS5yZWxlYXNlTm9uTnVsbCgpKQogewotICAg
IEFTU0VSVChtX21lbW9yeS0+cmVmQ291bnQoKSA9PSAxKTsKLSAgICBtX21lbW9yeUJhc2UgPSBt
X21lbW9yeS0+bWVtb3J5KCk7Ci0gICAgbV9tZW1vcnlTaXplID0gbV9tZW1vcnktPnNpemUoKTsK
IH0KIAogSlNBcnJheUJ1ZmZlciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZmVyKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTg1LDUyICs4OCw0NSBAQCBKU0FycmF5
QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogICAgIHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7CiB9CiAK
LVdhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZh
aWx1cmUpCitXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVsdGEpCiB7Ci0gICAgLy8gTm90ZTogV2UgY2Fu
IG9ubHkgdXNlIGV4ZWMgaWYgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlIGlzIHRydWUu
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBX
YXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCkuc2l6ZUluUGFnZXMoKTsKLQot
ICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkgewotICAgICAgICBpZiAo
c2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorICAgIGF1dG8gZ3Jvd24gPSBtZW1vcnko
KS5ncm93KFdhc206OlBhZ2VDb3VudChkZWx0YSkpOworICAgIGlmICghZ3Jvd24pIHsKKyAgICAg
ICAgc3dpdGNoIChncm93bi5lcnJvcigpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpH
cm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGRlbHRhIHRvIGJlIGEgdmFsaWQgcGFn
ZSBjb3VudCIpKSk7Ci0gICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKLSAgICB9Ci0K
LSAgICBXYXNtOjpQYWdlQ291bnQgbmV3U2l6ZSA9IG9sZFBhZ2VDb3VudCArIFdhc206OlBhZ2VD
b3VudChkZWx0YSk7Ci0gICAgaWYgKCFuZXdTaXplKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJv
d0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
YXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CiAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUgZ3Jvd24g
c2l6ZSB0byBiZSBhIHZhbGlkIHBhZ2UgY291bnQiKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhp
bXVtOgorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IHdv
dWxkIGV4Y2VlZCB0aGUgbWVtb3J5J3MgZGVjbGFyZWQgbWF4aW11bSBzaXplIikpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246
Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7CiAgICAgfQogCi0gICAg
aWYgKGRlbHRhKSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1lbW9yeSgpLmdyb3codm0sIG5l
d1NpemUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX21l
bW9yeUJhc2UgPT0gbWVtb3J5KCkubWVtb3J5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fbWVt
b3J5U2l6ZSA9PSBtZW1vcnkoKS5zaXplKCkpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93
RXhjZXB0aW9uc09uRmFpbHVyZSkKLSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLSAgICAgICAgICAg
IHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKLSAgICAgICAgfQotICAgICAgICBtX21lbW9yeUJh
c2UgPSBtZW1vcnkoKS5tZW1vcnkoKTsKLSAgICAgICAgbV9tZW1vcnlTaXplID0gbWVtb3J5KCku
c2l6ZSgpOwotICAgIH0KKyAgICByZXR1cm4gZ3Jvd24udmFsdWUoKTsKK30KIAotICAgIC8vIFdl
IG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgYXJyYXkgYnVmZmVyIGJlY2F1c2UgaXQgbWlnaHQg
bm93IGJlIHBvaW50aW5nCi0gICAgLy8gdG8gc3RhbGUgbWVtb3J5Lgordm9pZCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKFZNJiB2bSwgV2FzbTo6UGFnZUNvdW50IG9s
ZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkKK3sKKyAgICAvLyBXZSBu
ZWVkIHRvIGNsZWFyIG91dCB0aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1pZ2h0IG5v
dyBiZSBwb2ludGluZyB0byBzdGFsZSBtZW1vcnkuCiAgICAgLy8gTmV1dGVyIHRoZSBvbGQgYXJy
YXkuCiAgICAgaWYgKG1fYnVmZmVyKSB7CiAgICAgICAgIG1fYnVmZmVyLT5uZXV0ZXIodm0pOwog
ICAgICAgICBtX2J1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIG1fYnVmZmVyV3JhcHBlci5jbGVh
cigpOwogICAgIH0KLQorICAgIAogICAgIG1lbW9yeSgpLmNoZWNrKCk7Ci0KLSAgICB2bS5oZWFw
LnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKFdhc206OlBhZ2VDb3VudChkZWx0YSkuYnl0ZXMo
KSk7Ci0gICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4
dHJhTWVtb3J5QWxsb2NhdGVkKG5ld1BhZ2VDb3VudC5ieXRlcygpIC0gb2xkUGFnZUNvdW50LmJ5
dGVzKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuaAppbmRleCAxZDA2YzRjLi40YmJiY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCkBAIC00OCwyNiArNDgs
MjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLmVhZ2VybHlTd2VwdERlc3RydWN0aWJs
ZU9iamVjdFNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBj
cmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6TWVtb3J5PiYmKTsK
KyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1lbW9yeSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwg
U3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
KyAgICB2b2lkIGFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYpOwogICAgIFdhc206Ok1lbW9yeSYg
bWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBi
dWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOwotICAgIFdhc206OlBhZ2VDb3VudCBncm93
KFZNJiwgRXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRp
b25zT25GYWlsdXJlKTsKLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1vcnlCYXNl
KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5U2l6ZSk7IH0KKyAgICBXYXNt
OjpQYWdlQ291bnQgZ3JvdyhWTSYsIEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhKTsKKyAgICB2
b2lkIGdyb3dTdWNjZXNzQ2FsbGJhY2soVk0mLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50
LCBXYXNtOjpQYWdlQ291bnQgbmV3UGFnZUNvdW50KTsKIAogcHJpdmF0ZToKLSAgICBKU1dlYkFz
c2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4mJik7CisgICAg
SlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQq
IG1fbWVtb3J5QmFzZTsKLSAgICBzaXplX3QgbV9tZW1vcnlTaXplOwogICAgIFJlZjxXYXNtOjpN
ZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZl
cldyYXBwZXI7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5k
ZXggYmFiMTE4MS4uNDBjMTAwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldh
c21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4u
aCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CkBAIC02MSw2ICs2Miw3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCisKIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUmVmPFdhc206Ok1vZHVsZT4mJiBtb2R1bGUpCiAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCiAgICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCkBAIC05MSw2ICs5Mywz
NiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAg
IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKCk7CiB9CiAKK2NvbnN0IFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uJiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJbmZvcm1h
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
OworfQorCitTeW1ib2xUYWJsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6ZXhwb3J0U3ltYm9sVGFi
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOworfQor
CitXYXNtOjpTaWduYXR1cmVJbmRleCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzaWduYXR1cmVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25z
dAoreworICAgIHJldHVybiBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Cit9CisKK1dlYkFzc2VtYmx5VG9KU0NhbGxlZSog
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y2FsbGVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWxs
ZWUuZ2V0KCk7Cit9CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1fY29k
ZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsKK30KKworV2FzbTo6TW9k
dWxlJiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGUoKQoreworICAgIHJldHVybiBtX21vZHVs
ZS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzZXRDb2RlQmxvY2soVk0m
IHZtLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uc2V0
KHZtLCB0aGlzLCBjb2RlQmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDNkYzY3YTMuLjAxYjVkMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmgKQEAgLTMwLDE1ICszMCwxOSBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVy
LmgiCi0jaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlNb2RlLmgi
CiAjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBNb2R1bGU7CitzdHJ1Y3Qg
TW9kdWxlSW5mb3JtYXRpb247CiBjbGFzcyBQbGFuOwordXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1
aW50MzJfdDsKIH0KIAogY2xhc3MgU3ltYm9sVGFibGU7CkBAIC01MiwyMyArNTYsMjAgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwg
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgV1RGOjpFeHBlY3RlZDxSZWZQdHI8V2FzbTo6TW9kdWxl
PiwgU3RyaW5nPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCk7IH0KLSAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUo
KSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9Ci0gICAgV2FzbTo6
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX21v
ZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhT
cGFjZSk7Ci0gICAgfQotICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSogY2FsbGVlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1h
dGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdDsKKyAgICBTeW1ib2xUYWJsZSogZXhwb3J0
U3ltYm9sVGFibGUoKSBjb25zdDsKKyAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBj
b25zdDsKKyAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIGNhbGxlZSgpIGNvbnN0OwogCi0gICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSkg
eyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLmdldCgpOyB9
CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUg
bW9kZSk7CisgICAgdm9pZCBzZXRDb2RlQmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKik7CiAKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJj
ZSgpIGNvbnN0OwogCi0gICAgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKSB7IHJldHVybiBtX21vZHVs
ZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgV2FzbTo6TWVtb3J5TW9kZSwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhc206Ok1v
ZHVsZSYgbW9kdWxlKCk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseVRhYmxlLmNwcAppbmRleCBmZjQ2ZDRkLi5hZGFhNzQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKQEAg
LTI5LDMwICsyOSwyMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseVRhYmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5UYWJsZSIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJs
eVRhYmxlKSB9OwogCi1KU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMy
X3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSkKK0pTV2ViQXNzZW1i
bHlUYWJsZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYgdGFibGUpCiB7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCi0gICAgYXV0byBl
eGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBlcnJvcikgewotICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFz
c2VtYmx5RW5hYmxlZCgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RGlzYWJs
ZWRFcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotCi0g
ICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKQotICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwotCi0gICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0
aWFsKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKKyAgICB9CiAKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2
bSwgc3RydWN0dXJlLCBpbml0aWFsLCBtYXhpbXVtKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpT
V2ViQXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHRhYmxlKSk7CiAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC02
MiwyMyArNTQsMTUgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlUYWJsZTo6
SlNXZWJBc3NlbWJseVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90
IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCitKU1dlYkFzc2VtYmx5
VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBS
ZWY8V2FzbTo6VGFibGU+JiYgdGFibGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAg
LCBtX3RhYmxlKFdURk1vdmUodGFibGUpKQogewotICAgIG1fc2l6ZSA9IGluaXRpYWw7Ci0gICAg
QVNTRVJUKGlzVmFsaWRTaXplKG1fc2l6ZSkpOwotICAgIG1fbWF4aW11bSA9IG1heGltdW07Ci0g
ICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3NpemUpOwotCiAgICAgLy8g
RklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBo
ZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgogICAgIC8vIEJ1dCBmb3Igbm93LCB3
ZSdyZSBub3QgZG9pbmcgdGhhdC4KLSAgICBtX2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpD
YWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAq
IHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxv
Y1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKSB7Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rpb25z
LmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChtX2Z1
bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFs
aWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1fanNG
dW5jdGlvbnMgPSBNYWxsb2NQdHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkp
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKICAgICAgICAgbmV3
ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAg
IH0KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
QEAgLTk5LDcgKzgzLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIAogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdGhpc09iamVjdC0+bV9zaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRoaXNPYmplY3QtPnNpemUoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2pzRnVuY3Rpb25zLmdldCgpW2ldKTsKIH0KIApAQCAtMTA3LDQ3ICs5MSw0NCBAQCBi
b29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKIHsKICAgICBpZiAo
ZGVsdGEgPT0gMCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwg
UmVjb3JkT3ZlcmZsb3c+IG5ld1NpemVDaGVja2VkID0gbV9zaXplOwotICAgIG5ld1NpemVDaGVj
a2VkICs9IGRlbHRhOwotICAgIHVpbnQzMl90IG5ld1NpemU7Ci0gICAgaWYgKG5ld1NpemVDaGVj
a2VkLnNhZmVHZXQobmV3U2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+ICptYXhpbXVt
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzVmFsaWRTaXplKG5ld1NpemUp
KQorCisgICAgc2l6ZV90IG9sZFNpemUgPSBzaXplKCk7CisKKyAgICBhdXRvIGdyZXcgPSBtX3Rh
YmxlLT5ncm93KGRlbHRhKTsKKyAgICBpZiAoIWdyZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIG1fZnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24p
ICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5yZWFs
bG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4o
bmV3U2l6ZSkpOworICAgIHNpemVfdCBuZXdTaXplID0gZ3Jldy52YWx1ZSgpOworICAgIG1fanNG
dW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBuZXdTaXpl
KTsKIAotICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsraSkgewot
ICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlv
bigpOworICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQogICAg
ICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
KCk7Ci0gICAgfQotICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorSlNPYmplY3QqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24odWludDMyX3QgaW5k
ZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIHJldHVybiBt
X2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5
VGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoaW5kZXggPCBtX3NpemUpOworICAgIG1fdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5kZXgpOwog
ICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pigp
OwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24o
KTsKLSAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09
IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNv
bXBpbGVkIGNvZGUuCiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihW
TSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbikKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+c2V0RnVu
Y3Rpb24oaW5kZXgsIGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCksIGZ1bmN0aW9uLT5pbnN0
YW5jZSgpKTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1
bmN0aW9uKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbi0+Y2FsbGFi
bGVGdW5jdGlvbigpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24o
Vk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGZ1bmN0
aW9uKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX3RhYmxl
LT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgZnVuY3Rp
b24tPmluc3RhbmNlKCkpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNldCh2bSwg
dGhpcywgZnVuY3Rpb24pOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9u
LT5jYWxsYWJsZUZ1bmN0aW9uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAppbmRleCBk
ZjgzZTk3Li40NDg3NTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw1NyArMjksNDIgQEAKIAogI2luY2x1ZGUgIkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXYXNt
TGltaXRzLmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSA8d3RmL01hbGxvY1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFdh
c20gewotc3RydWN0IENhbGxhYmxlRnVuY3Rpb247Ci19Ci0KIGNsYXNzIEpTV2ViQXNzZW1ibHlU
YWJsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlU
YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlh
bCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisgICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlUYWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206
OlRhYmxlPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsg
fQotICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBXYXNtOjpUYWJsZTo6
aXNWYWxpZFNpemUoc2l6ZSk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVt
KCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+bWF4aW11bSgpOyB9CisgICAgdWludDMyX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUtPnNpemUoKTsgfQogICAgIGJvb2wgZ3Jvdyh1aW50
MzJfdCBkZWx0YSkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIEpTT2JqZWN0KiBnZXRGdW5jdGlv
bih1aW50MzJfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwg
bV9zaXplKTsKLSAgICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgp
OwotICAgIH0KLSAgICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpOwotICAgIHZv
aWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiop
OwotICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24qKTsKLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9zaXplKTsgfQot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KLSAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSlNGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNXZWJBc3NlbWJseVRhYmxlLCBtX2pzRnVuY3Rpb25zKTsgfQorICAgIEpTT2JqZWN0KiBnZXRG
dW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAg
ICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsK
KyAgICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QsIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKik7CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKQot
ICAgIHsKLSAgICAgICAgLy8gVGhpcyB0b3BzIG91dCBhdCB+Mzg0IE1CIHdvcnRoIG9mIGRhdGEg
aW4gdGhpcyBjbGFzcy4KLSAgICAgICAgcmV0dXJuIHNpemUgPCAoMSA8PCAyNCk7Ci0gICAgfQor
ICAgIFdhc206OlRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUucHRyKCk7IH0KIAogcHJp
dmF0ZToKLSAgICBKU1dlYkFzc2VtYmx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBp
bml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKKyAgICBKU1dlYkFzc2Vt
Ymx5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6VGFibGU+JiYpOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwog
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAot
ICAgIE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICBS
ZWY8V2FzbTo6VGFibGU+IG1fdGFibGU7CiAgICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09i
amVjdD4+IG1fanNGdW5jdGlvbnM7Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhp
bXVtOwotICAgIHVpbnQzMl90IG1fc2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA4YWQ2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgi
CisjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5hdGl2
ZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNs
dWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgor
I2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CisKK3VzaW5nIEpJVCA9IENDYWxsSGVscGVyczsKKworc3RhdGljIHZvaWQgbWF0
ZXJpYWxpemVJbXBvcnRKU0NlbGwoSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIC8vIFdlJ3JlIGNhbGxpbmcgb3V0IG9mIHRoZSBjdXJyZW50IFdl
YkFzc2VtYmx5Lkluc3RhbmNlLiBUaGF0IEluc3RhbmNlIGhhcyBhIGxpc3Qgb2YgYWxsIGl0cyBp
bXBvcnQgZnVuY3Rpb25zLgorICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShyZXN1bHQp
OworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOworfQor
CitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCit7CisgICAgLy8gRklYTUU6
IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5n
IGNvbnZlbnRpb24uCisgICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCisgICAgY29uc3QgV2FzbUNh
bGxpbmdDb252ZW50aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBj
b25zdCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7
CisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7CisgICAgSklUIGppdDsKKworICAgIC8vIE5vdGU6IFdhc21CM0lSR2Vu
ZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVlIHNhdmUu
CisgICAgLy8gSWYgd2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gY2hh
bmdlIFdhc21CM0lSR2VuZXJhdG9yLgorCisgICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0aGF0IHRo
ZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KKyAgICBBU1NF
UlQoIWpzQ0MubV9ncHJBcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKCFqc0NDLm1fZnByQXJncy5z
aXplKCkpOworCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LnN0b3Jl
NjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQorCisgICAgeworICAg
ICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRVc2UgfD0g
c2lnbmF0dXJlLnJldHVyblR5cGUoKSA9PSBJNjQ7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJn
TnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdOdW0pIHsK
KyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwor
ICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFZvaWQ6Cisg
ICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAgY2Fz
ZSBJNjQ6IHsKKyAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGhhc0JhZEk2NFVzZSkgeworICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CisKKyAgICAgICAgICAgIC8vIFN0b3JlIENhbGxlZS4KKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIy
LCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgICAg
ICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCp2bSk7CisKKyAgICAgICAgICAgIHZvaWQgKCp0aHJvd0JhZEk2NCkoRXhl
Y1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKSAtPiB2b2lkIHsKKyAgICAgICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAg
ICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2Ut
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3Ry
dWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVNDSUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQg
YXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9y
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZt
LCBleGVjKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gp
OworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7
CisKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7CisgICAg
ICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5K
YXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNh
bGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBsZWFzdCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVk
LiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0
ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiB0aGlzLgorICAg
IFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVTYXZlcyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdp
c3RlcnM7CisgICAgbWlzc2luZ0NhbGxlZVNhdmVzLmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVS
ZWdpc3RlcnMpOworICAgIEFTU0VSVChtaXNzaW5nQ2FsbGVlU2F2ZXMuaXNFbXB0eSgpKTsKKwor
ICAgIGlmICghT3B0aW9uczo6dXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzKCkpIHsK
KyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShhcmdDb3VudCAqIHNpemVvZih1aW50NjRfdCkpOworICAgICAgICBjaGFyKiBidWZm
ZXIgPSBhcmdDb3VudCA/IHN0YXRpY19jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVm
ZmVyKCkpIDogbnVsbHB0cjsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOwor
ICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGJ1
ZmZlck9mZnNldCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
OworICAgICAgICBjb25zdCBHUFJSZWcgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ0NTMDsKKyAg
ICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNpemVvZihSZWdpc3RlcikpKSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnN0b3Jl
UHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlcikpOworCisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0g
MDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5
cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJn
VHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgor
ICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNhc2Ug
STMyOiB7CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsKKyAgICAgICAgICAgICAgICBp
ZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFs
cmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJs
ZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSBHUFJJbmZvOjphcmd1
bWVudEdQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdwclJlZyk7CisgICAgICAgICAg
ICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBidWZmZXIgKyBidWZmZXJPZmZz
ZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAg
ICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJz
IDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9
IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxs
IGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAg
ICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9m
ZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVnLCBmcHJSZWcpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7Cisg
ICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjY0OiB7CisgICAgICAgICAgICAgICAg
RlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNt
Q0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUND
Lm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1l
bnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAg
ICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCAr
PSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBq
aXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAg
ICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1ZmZlck9mZnNldCArPSBzaXpl
b2YoUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksIHNjcmF0
Y2hHUFIpOworICAgICAgICBpZiAoYXJnQ291bnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBHQyBz
aG91bGQgbm90IGxvb2sgYXQgdGhpcyBidWZmZXIgYXQgYWxsLCB0aGVzZSBhcmVuJ3QgSlNWYWx1
ZXMuCisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2Ny
YXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ2
NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU2lnbmF0dXJlSW5kZXgsIHVp
bnQ2NF90KikgPQorICAgICAgICAgICAgW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNh
bGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KiBidWZmZXIpIC0+
IHVpbnQ2NF90IHsgCisgICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
ICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
ICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwor
ICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9
IDA7IGFyZ051bSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnTnVtKSB7CisgICAg
ICAgICAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0p
OworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGFyZzsKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFueWZ1
bmM6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJMzI6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihzdGF0aWNfY2Fz
dDxpbnQzMl90PihidWZmZXJbYXJnTnVtXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRjMyOgorICAgICAgICAgICAgICAgICAgICBj
YXNlIEY2NDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGpzTnVtYmVyKGJpdHdpc2Vf
Y2FzdDxkb3VibGU+KGJ1ZmZlclthcmdOdW1dKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhcmdzLmFw
cGVuZChhcmcpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIENhbGxEYXRh
IGNhbGxEYXRhOworICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5t
ZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShjYWxsZWUsIGNhbGxEYXRhKTsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGNhbGxlZSwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOworCisgICAgICAgICAgICAgICAgdWludDY0X3Qg
cmVhbFJlc3VsdDsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBl
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICAgICAgY2FzZSBB
bnlmdW5jOgorICAgICAgICAgICAgICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAgICAgICAgICAgICAgIHJlYWxSZXN1
bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlc3VsdC50
b0ludDMyKGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAgICAgICAgICAgICBjYXNlIEYz
MjogeworICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gYml0d2lzZV9jYXN0PHVpbnQ2
NF90PihyZXN1bHQudG9OdW1iZXIoZXhlYykpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVhbFJlc3VsdDsKKyAgICAgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBqaXQubG9h
ZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgICAgIAorICAgICAg
ICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQsIGltcG9ydEluZGV4LCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQUkluZm86Om51bWJlck9mQXJndW1l
bnRSZWdpc3RlcnMgPj0gNCwgIldlIHJlbHkgb24gdGhpcyB3aXRoIHRoZSBjYWxsIGJlbG93LiIp
OworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2lnbmF0dXJlSW5kZXgpLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYnVmZmVyKSk7CisgICAgICAgIGF1dG8gY2FsbCA9IGpp
dC5jYWxsKCk7CisgICAgICAgIGF1dG8gbm9FeGNlcHRpb24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNo
ZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKworICAg
ICAgICAvLyBleGNlcHRpb24gaGVyZS4KKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRl
KiBleGVjKSAtPiB2b2lkIHsKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAg
ICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVCghIXZtLT5j
YWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgIH07CisgICAgICAgIGF1dG8gZXhjZXB0aW9uQ2Fs
bCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7
CisKKyAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsKKyAgICAgICAgc3dpdGNoIChzaWdu
YXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRjY0OiB7CisgICAgICAgICAgICBq
aXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVy
blZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RjMyOiB7CisgICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0
RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaml0LmVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CisgICAgICAgIGppdC5yZXQoKTsKKworICAgICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9y
eSk7CisKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNhbGxGdW5jKTsKKyAgICAgICAg
bGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkNhbGwsIGRvVW53aW5kaW5nKTsKKworICAgICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0
IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpKTsKKyAgICB9CisKKyAgICAvLyBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIHBlcmZv
cm0gYSBzdGFjayBjaGVjayBoZXJlIHNpbmNlIFdhc21CM0lSR2VuZXJhdG9yCisgICAgLy8gd2ls
bCBkbyB0aGUgc3RhY2sgY2hlY2sgZm9yIHVzLiBXaGVuZXZlciBpdCBkZXRlY3RzIHRoYXQgaXQg
bWlnaHQgbWFrZQorICAgIC8vIGEgY2FsbCB0byB0aGlzIHRodW5rLCBpdCdsbCBtYWtlIHN1cmUg
aXRzIHN0YWNrIGNoZWNrIGluY2x1ZGVzIHNwYWNlCisgICAgLy8gZm9yIHVzIGhlcmUuCisKKyAg
ICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSBhcmdDb3VudCArIDE7IC8vIFRo
ZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgorICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVn
c0ZvckNhbGwgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIG51bWJlck9mUGFy
YW1ldGVyczsKKyAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJl
ck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpOworICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworICAg
IGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja09mZnNldCksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgSklUOjpBZGRyZXNzIGNh
bGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSk7CisKKyAgICAvLyBGSVhNRSBtYWtlIHRoZXNlIGxvb3BzIHdoaWNoIHN3aXRjaCBv
biBTaWduYXR1cmUgaWYgdGhlcmUgYXJlIG1hbnkgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4gSXQn
bGwgb3RoZXJ3aXNlIGJlIGh1Z2UgZm9yIGh1Z2Ugc2lnbmF0dXJlcy4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTU0NworICAgIAorICAgIC8vIEZpcnN0IGdvIHRo
cm91Z2ggdGhlIGludGVnZXIgcGFyYW1ldGVycywgZnJlZWluZyB1cCB0aGVpciByZWdpc3RlciBm
b3IgdXNlIGFmdGVyd2FyZHMuCisgICAgeworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BS
cyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKKyAgICAgICAgdW5z
aWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgdW5zaWduZWQgZnJP
ZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsg
YXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUg
PSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlw
ZSkgeworICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAg
ICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAg
ICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsKKyAg
ICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNpemUo
KSkKKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJzaGFs
bGVkR1BSc10uZ3ByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3Rl
cnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBncHJSZWcg
PSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQo
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdwclJl
Zyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7CisgICAg
ICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwclJlZywgZ3ByUmVnKTsgLy8gQ2xl
YXIgbm9uLWludDMyIGFuZCBub24tdGFnIGJpdHMuCisgICAgICAgICAgICAgICAgaml0LmJveElu
dDMyKGdwclJlZywgSlNWYWx1ZVJlZ3MoZ3ByUmVnKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChncHJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZz
ZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNl
dCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBGMzI6CisgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAg
ICAgICAgICAgICAvLyBTa2lwcGVkOiBoYW5kbGVkIGJlbG93LgorICAgICAgICAgICAgICAgIGlm
IChtYXJzaGFsbGVkRlBScyA+PSB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAr
K21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNp
emVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgeworICAgICAgICAvLyBJbnRlZ2VyIHJlZ2lzdGVy
cyBoYXZlIGFscmVhZHkgYmVlbiBzcGlsbGVkLCB0aGVzZSBhcmUgbm93IGF2YWlsYWJsZS4KKyAg
ICAgICAgR1BSUmVnIGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7Cisg
ICAgICAgIGJvb2wgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0gZmFsc2U7Cisg
ICAgICAgIGF1dG8gbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQgPSBbJmhhc01hdGVyaWFs
aXplZERvdWJsZUVuY29kZU9mZnNldCwgJmppdF0gKEdQUlJlZyBkZXN0KSB7CisgICAgICAgICAg
ICBpZiAoIWhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCkgeworICAgICAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoRG91YmxlRW5jb2RlT2Zmc2V0ID09IDFsbCA8PCA0OCwgImNvZGVn
ZW4gYXNzdW1lcyB0aGlzIGJlbG93Iik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoSklUOjpU
cnVzdGVkSW1tMzIoMSksIGRlc3QpOworICAgICAgICAgICAgICAgIGppdC5sc2hpZnQ2NChKSVQ6
OlRydXN0ZWRJbW0zMig0OCksIGRlc3QpOworICAgICAgICAgICAgICAgIGhhc01hdGVyaWFsaXpl
ZERvdWJsZUVuY29kZU9mZnNldCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisK
KyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBt
YXJzaGFsbGVkRlBScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0g
Q2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSk7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051
bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051
bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9p
ZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAg
ICAgICAgICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICBjYXNlIEkzMjoKKyAgICAg
ICAgICAgICAgICAvLyBTa2lwcGVkOiBoYW5kbGVkIGFib3ZlLgorICAgICAgICAgICAgICAgIGlm
IChtYXJzaGFsbGVkR1BScyA+PSB3YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAr
K21hcnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNp
emVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEYzMjogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAgICAgICAg
aWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigp
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBh
bHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFi
bGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJn
dW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAg
ICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVnLCBm
cHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAg
ICAgICBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVPZmZzZXRHUFJS
ZWcpOworICAgICAgICAgICAgICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcs
IHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZy
YW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBjYWxs
ZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICsrbWFy
c2hhbGxlZEZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEY2NDogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAg
ICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkp
CisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxl
ZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJz
IGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0g
RlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJs
ZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnBy
UmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcp
OworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29k
ZU9mZnNldEdQUlJlZyk7CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJsZUVuY29kZU9m
ZnNldEdQUlJlZywgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRj
aCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOworICAgICAgICAg
ICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGppdC5sb2FkV2Fz
bUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAgICBHUFJSZWcgaW1wb3J0SlNDZWxsR1BS
UmVnID0gR1BSSW5mbzo6cmVnVDA7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBmb3Ig
c2xvdyBwYXRoIGJlbG93LgorICAgIEFTU0VSVCghd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVy
cy5nZXQoaW1wb3J0SlNDZWxsR1BSUmVnKSk7CisKKyAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2Vs
bChqaXQsIGltcG9ydEluZGV4LCBpbXBvcnRKU0NlbGxHUFJSZWcpOworCisgICAgaml0LnN0b3Jl
NjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBq
aXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLCBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOworICAgIGppdC5zdG9y
ZTY0KEpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpKSk7CisKKyAgICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0
dXJuIHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4OAorCisgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9zLmFkZCgpOworICAgIGNhbGxMaW5rSW5mby0+
c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdpbigpLCBpbXBvcnRKU0NlbGxH
UFJSZWcpOworICAgIEpJVDo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAgSklUOjpU
cnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlKDApOworICAgIEpJVDo6SnVtcCBzbG93UGF0
aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBpbXBv
cnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ssIGluaXRpYWxSaWdodFZhbHVlKTsKKyAgICBK
SVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBKSVQ6Okp1bXAgZG9uZSA9
IGppdC5qdW1wKCk7CisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAvLyBDYWxsZWUgbmVl
ZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBu
ZWVkcyB0byBiZSBpbiByZWdUMi4KKyAgICBKSVQ6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNh
bGwoKTsKKyAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGV4Y2VwdGlvbkNoZWNrczsKKworICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkg
eworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgLy8gRGlzY2FyZC4KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGdW5jOgorICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgLy8gRm9yIHRoZSBKYXZh
U2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5cGVzIGluIHRoZWlyIHNpZ25h
dHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZhbGlkYXRpb24gZXJyb3IuCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSTY0OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhh
bmRsZWQgYWJvdmUuCisgICAgfQorICAgIGNhc2UgSTMyOiB7CisgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKKworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIGppdC56ZXJv
RXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBzbG93
UGF0aC5saW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwo
KTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlv
bigqdm0pKTsKKworICAgICAgICBpbnQzMl90ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBK
U1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAor
ICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIHJldHVybiB2LnRvSW50
MzIoZXhlYyk7CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBj
b252ZXJ0VG9JMzIpOworICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEYzMjogeworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJ
Zk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJz
KTsKKyAgICAgICAgYXV0byBpc0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVS
ZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAg
ICAgICAgLy8gV2UncmUgYW4gaW50MzIKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisg
ICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3Rl
ZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgICAg
ICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBqaXQuY29udmVydERvdWJsZVRv
RmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsK
KyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90QU51bWJlci5s
aW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAg
ICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0p
KTsKKworICAgICAgICBmbG9hdCAoKmNvbnZlcnRUb0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkg
PSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGZsb2F0IHsgCisgICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
Pih2LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGlu
aygmaml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRjY0OiB7CisgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0g
aml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVU
YWdSZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50
MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdp
c3RlcnMpOworICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4dGVu
ZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5q
dW1wKCkpOworCisgICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5tb3Zl
KEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UjIpOworICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFw
cGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25D
aGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGRv
dWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7IAorICAgICAgICAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICAgICAgICAgIHJldHVybiB2LnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9Owor
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjY0KTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgfQorCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgpOwor
CisgICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1wdHkoKSkgeworICAgICAgICBleGNlcHRpb25D
aGVja3MubGluaygmaml0KTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSk7CisKKyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9
IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAg
QVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKworICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOworICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWls
dXJlOjpPdXRPZk1lbW9yeSk7CisKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5j
dGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2Nh
dGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRU
b0NoZWNrKSk7CisgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKKyAgICBjYWxsTGlua0luZm8tPnNl
dENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhP
dGhlcik7CisKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3Nl
bWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50
b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlKQoreworICAgIFZNKiB2bSA9IGluc3RhbmNlLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgeworICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisK
KyAgICAgICAgSlNPYmplY3QqIGVycm9yOworICAgICAgICBpZiAodHlwZSA9PSBFeGNlcHRpb25U
eXBlOjpTdGFja092ZXJmbG93KQorICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9i
YWxPYmplY3QtPldlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksIFdhc206OmVycm9y
TWVzc2FnZUZvckV4Y2VwdGlvblR5cGUodHlwZSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgfQorCisgICAgZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYyk7CisgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICBBU1NFUlQo
ISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBt
YWtlIHRoaXMgYmV0dGVyOgorICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxs
aW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKKyAgICAvLyBy
ZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJh
c2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAgLy8gdGhpcyBzaW5jZSBpdCBpcyBjb21w
aWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4pIFdlIGNvdWxkIG1ha2UgdGhlIGNhbGxp
bmcgY29udmVudGlvbgorICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1l
Rm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCisgICAgLy8g
dG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3Zl
IHRoaXMgdGVycmlibGUgaGFjay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNDQwCisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPndl
YkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKKyAgICByZXR1cm4gdm0tPnRhcmdldE1hY2hpbmVQQ0Zv
clRocm93OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2FzbVRvSlMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyNGFhMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJC
M0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJXYXNt
RW1iZWRkZXIuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDYWxsTGlua0luZm87CitjbGFzcyBWTTsK
KworbmFtZXNwYWNlIFdhc20geworCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0lu
Zm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOworCit2b2lkKiB3YXNt
VG9KU0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggMGQyNzc2NS4uYzU4NWYwOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIGNvbnN0
IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5
IHdlIHRoaW5rIHdlIGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2UgZXhw
ZWN0LgotICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVCbG9jaygpLT5p
c1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7CisgICAgQVNT
RVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKS0+aXNT
YWZlVG9SdW4od2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5tZW1vcnkoKS0+bWVtb3J5KCkubW9k
ZSgpKSk7CiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZGlzYWxsb3dlZCBJ
NjQgdXNlLgogCkBAIC04MiwxMSArODIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIFRy
YWNlU2NvcGUgdHJhY2VTY29wZShXZWJBc3NlbWJseUV4ZWN1dGVTdGFydCwgV2ViQXNzZW1ibHlF
eGVjdXRlRW5kKTsKIAogICAgIFZlY3RvcjxKU1ZhbHVlPiBib3hlZEFyZ3M7Ci0gICAgV2FzbTo6
Q29udGV4dCogd2FzbUNvbnRleHQgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7Ci0gICAgLy8g
V2hlbiB3ZSBkb24ndCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBqcwot
ICAgIC8vIGVudHJ5IHdyYXBwZXIgZXhwZWN0cyB0aGUgV2FzbUNvbnRleHQqIGFzIHRoZSBmaXJz
dCBhcmd1bWVudC4KLSAgICBpZiAoIVdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAg
ICAgIGJveGVkQXJncy5hcHBlbmQod2FzbUNvbnRleHQpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAgLy8gV2hlbiB3
ZSBkb24ndCB1c2UgZmFzdCBUTFMgdG8gc3RvcmUgdGhlIGNvbnRleHQsIHRoZSBKUworICAgIC8v
IGVudHJ5IHdyYXBwZXIgZXhwZWN0cyB0aGUgaW5zdGFuY2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50
LgorICAgIGlmICghV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBib3hlZEFy
Z3MuYXBwZW5kKGluc3RhbmNlKTsKIAogICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAwOyBh
cmdJbmRleCA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnSW5kZXgpIHsKICAgICAg
ICAgSlNWYWx1ZSBhcmcgPSBleGVjLT5hcmd1bWVudChhcmdJbmRleCk7CkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0
ciwgd2FzbUZ1bmN0aW9uLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJncyk7
CiAKICAgICAvLyBGSVhNRSBEbyBhd2F5IHdpdGggdGhpcyBlbnRpcmUgZnVuY3Rpb24sIGFuZCBv
bmx5IHVzZSB0aGUgZW50cnlwb2ludCBnZW5lcmF0ZWQgYnkgQjMuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0ODYKLSAgICBXYXNtOjpDb250ZXh0KiBwcmV2V2Fz
bUNvbnRleHQgPSBXYXNtOjpsb2FkQ29udGV4dCh2bSk7CisgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBwcmV2SW5zdGFuY2UgPSB2bS53YXNtQ29udGV4dC5sb2FkKCk7CiAgICAgewogICAgICAg
ICAvLyBXZSBkbyB0aGUgc3RhY2sgY2hlY2sgaGVyZSBmb3IgdGhlIHdyYXBwZXIgZnVuY3Rpb24g
YmVjYXVzZSB3ZSBkb24ndAogICAgICAgICAvLyB3YW50IHRvIGVtaXQgYSBzdGFjayBjaGVjayBp
bnNpZGUgZXZlcnkgd3JhcHBlciBmdW5jdGlvbi4KQEAgLTEzNywyMiArMTM3LDIyIEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKICAgICAgICAgaWYgKFVOTElLRUxZKChzcCA8IHN0YWNrU3BhY2VVc2Vk
KSB8fCAoKHNwIC0gc3RhY2tTcGFjZVVzZWQpIDwgYml0d2lzZV9jYXN0PGludHB0cl90Pih2bS5z
b2Z0U3RhY2tMaW1pdCgpKSkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMp
KSk7CiAgICAgfQotICAgIFdhc206OnN0b3JlQ29udGV4dCh2bSwgd2FzbUNvbnRleHQpOworICAg
IHZtLndhc21Db250ZXh0LnN0b3JlKGluc3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAg
ICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKLSAgICBBU1NFUlQod2FzbUZ1bmN0
aW9uLT5pbnN0YW5jZSgpID09IFdhc206OmxvYWRDb250ZXh0KHZtKSk7CisgICAgQVNTRVJUKHdh
c21GdW5jdGlvbi0+aW5zdGFuY2UoKSA9PSB2bS53YXNtQ29udGV4dC5sb2FkKCkpOwogICAgIEVu
Y29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20od2FzbUZ1bmN0aW9uLT5qc0Vu
dHJ5cG9pbnQoKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwogICAgIC8vIFdlIG5lZWQgdG8gbWFr
ZSBzdXJlIHRoaXMgaXMgaW4gYSByZWdpc3RlciBvciBvbiB0aGUgc3RhY2sgc2luY2UgaXQncyBz
dG9yZWQgaW4gVmVjdG9yPEpTVmFsdWU+LgogICAgIC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qgc3Ry
aWN0bHkgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiogc2hvdWxkIGtl
ZXAgdGhlIGluc3RhbmNlCiAgICAgLy8gYWxpdmUuIEJ1dCBpdCdzIGdvb2QgaHlnaWVuZS4KLSAg
ICB3YXNtQ29udGV4dC0+dXNlKCk7Ci0gICAgaWYgKHByZXZXYXNtQ29udGV4dCAhPSB3YXNtQ29u
dGV4dCkgeworICAgIGluc3RhbmNlLT51c2UoKTsKKyAgICBpZiAocHJldkluc3RhbmNlICE9IGlu
c3RhbmNlKSB7CiAgICAgICAgIC8vIFRoaXMgaXMganVzdCBmb3Igc29tZSBleHRyYSBzYWZldHkg
aW5zdGVhZCBvZiBsZWF2aW5nIGEgY2FjaGVkCiAgICAgICAgIC8vIHZhbHVlIGluIHRoZXJlLiBJ
ZiB3ZSBldmVyIGZvcmdldCB0byBzZXQgdGhlIHZhbHVlIHRvIGJlIGEgcmVhbAogICAgICAgICAv
LyBib3VuZHMsIHRoaXMgd2lsbCBmb3JjZSBldmVyeSBzdGFjayBvdmVyZmxvdyBjaGVjayB0byBp
bW1lZGlhdGVseQogICAgICAgICAvLyBmaXJlLgotICAgICAgICB3YXNtQ29udGV4dC0+c2V0Q2Fj
aGVkU3RhY2tMaW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dHB0cl90Pjo6bWF4KCkpKTsKKyAgICAgICAgaW5zdGFuY2UtPnNldENhY2hlZFN0YWNrTGltaXQo
Yml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgp
KSk7CiAgICAgfQotICAgIFdhc206OnN0b3JlQ29udGV4dCh2bSwgcHJldldhc21Db250ZXh0KTsK
KyAgICB2bS53YXNtQ29udGV4dC5zdG9yZShwcmV2SW5zdGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0
KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBzd2l0Y2gg
KHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CmluZGV4IGE5ZDhmMGQuLjJmZGQ1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cApAQCAtMzIsMTIgKzMyLDE0IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBl
cnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgor
I2luY2x1ZGUgIldhc21Ub0pTLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQ
cm90b3R5cGUuaCIKQEAgLTc1LDEwICs3NywxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBleAog
ICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1v
ZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSk7CisgICAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBl
eGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUsIFdhc206Okluc3Rh
bmNlOjpjcmVhdGUoUmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSkpKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaW5zdGFuY2UtPmZpbmFsaXpl
Q3JlYXRpb24odm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoaW5zdGFuY2Ut
Pm1lbW9yeU1vZGUoKSkpOworICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBleGVj
LCBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2Ut
Pm1lbW9yeU1vZGUoKSwgJldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Ondhc21U
b0pTRXhjZXB0aW9uKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1
Y3Rvci5jcHAKaW5kZXggNjQ5ODliNS4uODZmODE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rv
ci5jcHAKQEAgLTk2LDEzICs5NiwxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVt
b3J5OjpjcmVhdGUodm0sIGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQpOworICAg
IGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisKKyAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0
ZShpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LAorICAgICAgICBbJnZtXSAoKSB7
IHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAg
IFsmdm1dICgpIHsgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9
LAorICAgICAgICBbJnZtLCBqc01lbW9yeV0gKFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQs
IFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2Fs
bGJhY2sodm0sIG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAgaWYgKCFtZW1v
cnkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0gICAgYXV0byog
anNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRS
ZWYoKm1lbW9yeS5sZWFrUmVmKCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotCisgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWVtb3J5
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCmluZGV4IGU5OTRkYzguLjRmY2E4YzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1lbW9yeVByb3RvdHlwZS5jcHAKQEAgLTc3LDggKzc3LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBl
eGVjKQogICAgIHVpbnQzMl90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVj
LT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogCi0gICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSB0cnVlOwotICAg
IFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhLCBz
aG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOworICAgIFdhc206OlBhZ2VDb3VudCByZXN1
bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRl
eCA5NjEwMjRkLi4xNjYxMDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtMTYx
LDExICsxNjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1v
ZHVsZUV4cG9ydHMoRXhlY1N0YXRlKiBleGVjKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9u
OjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApLCBzdHJ1Y3R1cmUpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZl
ckZyb21WYWx1ZSh2bSwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFdlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShleGVjLCBXVEZNb3ZlKHNvdXJj
ZSkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2Vi
QXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTc1LDE2ICsxNzYsMTYgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUo
RXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1
Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihleGVjLCBzY29wZSwgIldlYkFz
c2VtYmx5Lk1vZHVsZSIpKTsKIH0KIAotSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJ1ZmZlciwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8dWludDhfdD4m
JiBidWZmZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0g
Y3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1
cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0
dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmModm0sIFdU
Rk1vdmUoc291cmNlKSkpOworICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVT
dHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2bS53
YXNtQ29udGV4dCwgV1RGTW92ZShidWZmZXIpKSk7CiB9CiAKIFdlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSogdGhpc1Byb3Rv
dHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAppbmRleCA2MDI1Yzk4Li4xM2FjYTNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVDb25zdHJ1Y3Rvci5oCkBAIC0zMCw4ICszMCwxMSBAQAogI2luY2x1ZGUgIkludGVy
bmFsRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsK
IGNsYXNzIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlOwogCiBjbGFzcyBXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewpAQCAtNDQsNyArNDcs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBj
cmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBidWZmZXIsIFN0cnVjdHVyZSopOworICAg
IHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgVmVj
dG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
CmluZGV4IGNiMWZlYzEuLjBhODY2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTkzLDcgKzkz
LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMs
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBVTlVTRURfUEFSQU0oc2NvcGUpOwog
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAot
ICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5jb2RlQmxv
Y2soKTsKKyAgICBXYXNtOjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGluc3RhbmNlLT5pbnN0YW5j
ZSgpLmNvZGVCbG9jaygpOwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1
bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIFN5bWJv
bFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IG1vZHVsZS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsK
QEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4
ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAgICAg
Ly8gUmV0dXJuIFRvSlNWYWx1ZSh2KS4KICAgICAgICAgICAgIHN3aXRjaCAoZ2xvYmFsLnR5cGUp
IHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAgICAgICAgIGV4cG9ydGVk
VmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkSTMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+aW5zdGFu
Y2UoKS5sb2FkSTMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CkBAIC0xNjAsMTEgKzE2MCwxMSBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJB
c3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpT
VmFsdWUoaW5zdGFuY2UtPmxvYWRGMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAg
ICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRG
MzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0g
SlNWYWx1ZShpbnN0YW5jZS0+bG9hZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7CisgICAgICAg
ICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmluc3RhbmNlKCkubG9h
ZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTcsMTIgKzIxNywxMiBAQCBKU1ZhbHVlIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5tb2R1bGUoKTsK
LSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2luc3RhbmNlLT5jb2Rl
QmxvY2soKTsKLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgV2FzbTo6TW9kdWxlJiBt
b2R1bGUgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLm1vZHVsZSgpOworICAgIFdhc206OkNvZGVC
bG9jayogY29kZUJsb2NrID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKTsKKyAg
ICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1
bGUubW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0g
bV9pbnN0YW5jZS0+dGFibGUoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50OjpQ
dHI+JiBkYXRhID0gbV9pbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0
YTsKKyAgICBjb25zdCBWZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9IG1vZHVsZUlu
Zm9ybWF0aW9uLmRhdGE7CiAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBtX2lu
c3RhbmNlLT5tZW1vcnkoKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8SlNWYWx1ZT4gZXhjZXB0aW9u
OwpAQCAtMjM5LDcgKzIzOSw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleCA9IGVsZW1lbnQub2Zmc2V0LmlzR2xvYmFsSW1w
b3J0KCkKLSAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNl
LT5sb2FkSTMyR2xvYmFsKGVsZW1lbnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQorICAg
ICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmluc3RhbmNl
KCkubG9hZEkzMkdsb2JhbChlbGVtZW50Lm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkKICAg
ICAgICAgICAgICAgICA6IGVsZW1lbnQub2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAgICAg
ICAgZm4oZWxlbWVudCwgdGFibGVJbmRleCk7CkBAIC0yNTUsNyArMjU1LDcgQEAgSlNWYWx1ZSBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiAgICAg
ICAgIGZvciAoY29uc3QgV2FzbTo6U2VnbWVudDo6UHRyJiBzZWdtZW50IDogZGF0YSkgewogICAg
ICAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0LmlzR2xvYmFsSW1wb3J0
KCkKLSAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5s
b2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSkKKyAgICAg
ICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5pbnN0YW5jZSgp
LmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKQogICAg
ICAgICAgICAgICAgIDogc2VnbWVudC0+b2Zmc2V0LmNvbnN0VmFsdWUoKTsKIAogICAgICAgICAg
ICAgZm4obWVtb3J5LCBzaXplSW5CeXRlcywgc2VnbWVudCwgb2Zmc2V0KTsKQEAgLTI5Myw3ICsy
OTMsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgICAgICAgICAvLyBmb3IgdGhlIGltcG9ydC4KICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAgICAgICAg
ICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tpXTsK
LSAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxl
LT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Cisg
ICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS5z
aWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAg
ICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3Vu
dCgpKSB7CiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0
PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOwog
ICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlv
bkltcG9ydCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5UHJvdG90eXBlLmNwcAppbmRleCBlOWE2MzRhLi4xZmI5NDNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUu
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKKyNp
bmNsdWRlICJKU1RvV2FzbS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eU1vZHVsZS5oIgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRp
bWVyLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21CQlFQbGFu
LmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNp
bmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCkBAIC05NCw3ICs5Niw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZUZ1bmMoRXhlY1N0YXRl
KiBleGVjKQogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
amVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFdhc206Ok1v
ZHVsZTo6dmFsaWRhdGVBc3luYyh2bSwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNr
PFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0XSAoVk0m
IHZtLCBXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewor
ICAgICAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZN
b3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+
KFtwcm9taXNlLCBnbG9iYWxPYmplY3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJl
c3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRU
aW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCBy
ZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksICZ2bV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICAgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMTM1LDcg
KzEzNyw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiB7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlh
bGx5IHJlY29tcGlsaW5nIGEgbW9kdWxlLiBXZSBmaXJzdCBnYXRoZXIgYWxsIHRoZSBpbXBvcnQv
bWVtb3J5IGluZm9ybWF0aW9uIHByaW9yIHRvIGNvbXBpbGluZyBjb2RlLgotICAgIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2
bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMs
IG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2Fz
bTo6TW9kdWxlPihtb2R1bGUtPm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSkpOwogCiAgICAgVmVjdG9yPFN0cm9u
ZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CkBAIC0xNDMsMTMgKzE0NSwxMyBAQCBzdGF0aWMgdm9p
ZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQq
IHByb21pc2UsIEpTVwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0s
IGluc3RhbmNlKSk7CiAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPmFkZFBlbmRpbmdQcm9t
aXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CiAgICAgLy8gTm90ZTogVGhpcyBj
b21wbGV0aW9uIHRhc2sgbWF5IG9yIG1heSBub3QgZ2V0IGNhbGxlZCBpbW1lZGlhdGVseS4KLSAg
ICBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVBc3luYyh2bSwgaW5zdGFuY2UtPm1lbW9yeU1vZGUo
KSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDb2RlQmxvY2s6OkNhbGxiYWNrVHlwZT4oW3Byb21p
c2UsIGluc3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kXSAoVk0mIHZtLCBSZWY8V2FzbTo6Q29k
ZUJsb2NrPiYmIHJlZkNvZGVCbG9jaykgbXV0YWJsZSB7CisgICAgbW9kdWxlLT5tb2R1bGUoKS5j
b21waWxlQXN5bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCBjcmVh
dGVTaGFyZWRUYXNrPFdhc206OkNvZGVCbG9jazo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5z
dGFuY2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmQsICZ2bV0gKFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYg
cmVmQ29kZUJsb2NrKSBtdXRhYmxlIHsKICAgICAgICAgUmVmUHRyPFdhc206OkNvZGVCbG9jaz4g
Y29kZUJsb2NrID0gV1RGTW92ZShyZWZDb2RlQmxvY2spOwogICAgICAgICB2bS5wcm9taXNlRGVm
ZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW5zdGFuY2Us
IG1vZHVsZSwgcmVzb2x2ZUtpbmQsICZ2bSwgY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxvY2sp
XSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZXhl
YywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgY29kZUJsb2NrLnJlbGVhc2VOb25OdWxsKCks
IHJlc29sdmVLaW5kKTsKICAgICAgICAgfSk7Ci0gICAgfSkpOworICAgIH0pLCAmV2FzbTo6Y3Jl
YXRlSlNUb1dhc21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pOwogfQogCiBzdGF0
aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpT
UHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmplY3QqIGltcG9y
dE9iamVjdCkKQEAgLTE2NSw3ICsxNjcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFu
dGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcgogICAg
IFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0s
IGV4ZWMsIGJ1ZmZlcik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0KGV4
ZWMsIHNjb3BlLCBwcm9taXNlKSk7CiAKLSAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMo
dm0sIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxi
YWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0XSAoVk0mIHZtLCBX
YXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgeworICAgIFdh
c206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNl
KSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2Us
IGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlkYXRp
b25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICB2bS5wcm9taXNlRGVmZXJyZWRU
aW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBn
bG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXSAoKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAg
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAt
MjEzLDcgKzIxNSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFz
c2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3QgYnl0ZVNpemU7
CiAgICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4oJnZtLCBiYXNl
ICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRG
aW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBiYXNlICsgYnl0
ZU9mZnNldCwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6
ZSgpKTsKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB0aHJvdyBhbiBPT00gZXhjZXB0
aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRoYXQgc29tZXRoaW5nIHdpbGwgT09NLgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTUKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlU
YWJsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMTE4NjVmNS4uMmM1YmM3MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0
cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVRhYmxlQ29uc3RydWN0b3IuY3BwCkBAIC05MCw4ICs5MCwxNSBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICB9CiAgICAgfQogCisgICAgUmVmUHRyPFdhc206OlRhYmxlPiB3YXNt
VGFibGUgPSBXYXNtOjpUYWJsZTo6Y3JlYXRlKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmICgh
d2FzbVRhYmxlKSB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJjb3VsZG4ndCBjcmVhdGUgVGFibGUiKSkpKTsKKyAgICB9CisKICAgICB0
aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNz
ZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgaW5pdGlhbCwgbWF4aW11bSkpOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2
bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJl
KCksIHdhc21UYWJsZS5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBleGVj
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCmluZGV4IDAyMWM2MTguLjY4ZTk1OWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2Jh
bE8KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHModm0sIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uOjppbmZvKCkpLCAiV2Ugc2hvdWxkIG5ldmVyIGRvdWJsZSB3
cmFwIGEgd3JhcHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9ICIiOwogICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29u
c3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgeyBzaWduYXR1cmVJbmRleCwgaW5zdGFuY2UtPmNvZGVCbG9jaygpLT53YXNtVG9Kc0NhbGxT
dHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSB9KTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0
dXJlKCksIFdhc206OkNhbGxhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgaW5zdGFuY2Ut
Pndhc21Db2RlQmxvY2soKS53YXNtVG9KU0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSB9
ICk7CiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICByZXN1bHQtPmZpbmlzaENy
ZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBm
dW5jdGlvbiwgaW5zdGFuY2UpOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY5MTZjN2QuLjgy
NjA1MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDktMjggIEpGIEJhc3RpZW4gIDxqZmJh
c3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBubyBWTSAvIEpTIHZlcnNp
b24gb2YgZXZlcnl0aGluZyBidXQgSW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RG
OjpkZWZhdWx0X2NvbnN0cnVjdF9hdCk6IHRoaXMgbWFrZXMgY29kZSBpbiBXYXNtVGFibGUgbXVj
aAorICAgICAgICBtb3JlIHJlYWRhYmxlLCBhbmQgaXMgZ2VuZXJhbGx5IHVzZWZ1bCBmb3IgZ2Vu
ZXJpYyBjb2RlCisKIDIwMTctMDktMjggIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255
LmNvbT4KIAogICAgICAgICBTeW5jIFNZU1RFTV9NQUxMT0MgaW1wbGVtZW50YXRpb24gb2YgR2ln
YWNhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oIGIvU291cmNl
L1dURi93dGYvU3RkTGliRXh0cmFzLmgKaW5kZXggMTJlMzkzYS4uZDdlZmFiYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYvU3Rk
TGliRXh0cmFzLmgKQEAgLTE2MCw2ICsxNjAsMTIgQEAgaW5saW5lIFRvVHlwZSBzYWZlQ2FzdChG
cm9tVHlwZSB2YWx1ZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UeXBlPih2YWx1ZSk7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCYgZGVmYXVsdF9jb25zdHJ1Y3RfYXQo
VCogYWRkcikKK3sKKyAgICByZXR1cm4gKm5ldyAoYWRkcikgVCgpOworfQorCiAvLyBSZXR1cm5z
IGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBiaXRzIHNldCBpbiAnYml0cycuCiBpbmxpbmUgc2l6
ZV90IGJpdENvdW50KHVuc2lnbmVkIGJpdHMpCiB7CkBAIC01MzUsNiArNTQxLDcgQEAgdXNpbmcg
V1RGOjpHQjsKIHVzaW5nIFdURjo6YXBwcm94aW1hdGVCaW5hcnlTZWFyY2g7CiB1c2luZyBXVEY6
OmJpbmFyeVNlYXJjaDsKIHVzaW5nIFdURjo6Yml0d2lzZV9jYXN0OwordXNpbmcgV1RGOjpkZWZh
dWx0X2NvbnN0cnVjdF9hdDsKIHVzaW5nIFdURjo6Y2FsbFN0YXRlbGVzc0xhbWJkYTsKIHVzaW5n
IFdURjo6Y2hlY2tBbmRTZXQ7CiB1c2luZyBXVEY6OmZpbmRCaXRJbldvcmQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggZmJjMzhiMy4uZDIyYjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA5
LTI4ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3Nl
bWJseTogbm8gVk0gLyBKUyB2ZXJzaW9uIG9mIGV2ZXJ5dGhpbmcgYnV0IEluc3RhbmNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc0NzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEZvcndhcmRpbmdI
ZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oOiBBZGRlZC4gVGhpcyB1c2VkIHRvIGJlCisgICAgICAg
IGluY2x1ZGVkIGluIEpTV2ViQXNzZW1ibHlNb2R1bGUuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOiBVcGRhdGUgcG9zdE1lc3NhZ2UgY29kZQorICAg
ICAgICBhY2NvcmRpbmcgdG8gQysrIEFQSSBjaGFuZ2VzLgorCiAyMDE3LTA5LTI4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIDxsaW5r
IHJlbD1wcmVjb25uZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy93YXNtL1dhc21Nb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
YjBiOWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvd2FzbS9XYXNtTW9kdWxlLmgKQEAgLTAsMCArMSwyIEBACisjcHJhZ21hIG9uY2UKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9XYXNtTW9kdWxlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA5NzVjOWM5Li43
ODQwM2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL1R5
cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgogI2lu
Y2x1ZGUgPHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oPgorI2luY2x1ZGUgPHdhc20vV2Fz
bU1vZHVsZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotLSAKMi45LjMKCg==
</data>
<flag name="review"
          id="342033"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="342034"
          type_id="3"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322458</attachid>
            <date>2017-10-02 15:28:42 -0700</date>
            <delta_ts>2017-10-19 15:48:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-everything-but-Insta.patch</filename>
            <type>text/plain</type>
            <size>435493</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA1YTc3NDdiZjY2M2FiNmE2OGVkNzA1OGExYWYwN2JjMWZkNGNmZjgyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDIgT2N0IDIwMTcgMTU6Mjc6MTAgLTA3MDAKU3ViamVjdDogW1BBVENIXSBXZWJBc3Nl
bWJseTogbm8gVk0gLyBKUyB2ZXJzaW9uIG9mIGV2ZXJ5dGhpbmcgYnV0IEluc3RhbmNlCgpUaGlz
IGNoYW5nZSBlbnRhaWxzIGNsZWFuaW5nIHVwIGFuZCBzcGxpdHRpbmcgYSBidW5jaCBvZiBjb2Rl
IHdoaWNoIHdlIGhhZAppbnRlcnR3aW5lZCBiZXR3ZWVuIEMrKyBjbGFzc2VzIHdoaWNoIHJlcHJl
c2VudCBKUyBvYmplY3RzLCBhbmQgcHVyZSBDKysKaW1wbGVtZW50YXRpb24gb2JqZWN0cy4gVGhp
cyBzcGVjaWZpYyBjaGFuZ2UgZ29lcyBtb3N0IG9mIHRoZSB3YXkgdG93YXJkcwphbGxvd2luZyBK
U0MncyBXZWJBc3NlbWJseSB0byB3b3JrIHdpdGhvdXQgVk0gLyBKUywgdXAgdG8gYnV0IGV4Y2x1
ZGluZwpKU1dlYkFzc2VtYmx5SW5zdGFuY2UgKHRoZXJlJ3MgV2FzbTo6SW5zdGFuY2UsIGJ1dCBp
dCdzIG5vdCAqdGhlKiB0aGluZwp5ZXQpLiBCZWNhdXNlIG9mIHRoaXMgd2Ugc3RpbGwgaGF2ZSBh
IGZldyBGSVhNRSBpZGVudGlmeWluZyBwbGFjZXMgdGhhdCBuZWVkIHRvCmNoYW5nZS4gQSBmb2xs
b3ctdXAgY2hhbmdlIHdpbGwgZ28gdGhlIHJlc3Qgb2YgdGhlIHdheS4KCkkgd2VudCBhYm91dCB0
aGlzIGNoYW5nZSBpbiB0aGUgc2ltcGxlc3Qgd2F5IHBvc3NpYmxlOiBncmVwIHRoZQpKYXZhU2Ny
aXB0Q29yZS93YXNtIGRpcmVjdG9yeSBmb3IgSlNbXkNfXSBhcyB3ZWxsIGFzIFZNIGFuZCBleGNs
dWRlIHRoZSAvanMvCnN1Yi1kaXJlY3RvcnkgKHdoaWNoIGNvbnRhaW5zIHRoZSBKUyBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJBc3NlbWJseSkuCgpOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhl
IG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCldlYkFzc2VtYmx5
LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3Rp
bGwgbmVlZHMgdG8KYmUgYWxsb3dlZCB0byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMu
CgpJbnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKCiAgLSBSZW1vdmUgVk0gZnJvbSBQbGFuIGFu
ZCBhc3NvY2lhdGVkIHBsYWNlcy4gSXQgY2FuIGp1c3QgbGl2ZSBhcyBhIGNhcHR1cmUgaW4KICAg
IHRoZSBjYWxsYmFjayBsYW1iZGEgaWYgaXQncyBuZWVkZWQuCiAgLSBXYXNtOjpNZW1vcnkgc2hv
dWxkbid0IHJlcXVpcmUgYSBWTS4gSXQgd2FzIG9ubHkgdXNlZCB0byBhc2sgdGhlIEdDIHRvCiAg
ICBjb2xsZWN0LiBXZSBub3cgaW5zdGVhZCBwYXNzIHR3byBsYW1iZGFzIGF0IGNvbnN0cnVjdGlv
biB0aW1lIGZvciB0aGlzCiAgICBwdXJwb3NlOiBvbmUgdG8gbm90aWZ5IG9mIG1lbW9yeSBwcmVz
c3VyZSwgYW5kIHRoZSBvdGhlciB0byBhc2sgZm9yCiAgICBzeW5jcmhvbm91cyBtZW1vcnkgcmVj
bGFtYXRpb24uIFRoaXMgYWxsb3dzIHdob2V2ZXIgY3JlYXRlcyB0aGUgbWVtb3J5IHRvCiAgICBk
aWN0YXRlIGhvdyB0byByZWFjdCB0byBib3RoIHRoZXNlIGNhc2VzLCBhbmQgZm9yIGEgSlMgZW1i
ZWRkaW5nIHRoYXQncyB0bwogICAgY2FsbCB0aGUgR0MgKGFzeW5jIG9yIHN5bmMsIHJlc3BlY3Rp
dmVseSkuCiAgLSBNb3ZlIGdyb3cgbG9naWMgZnJvbSBKU1dlYkFzc2VtYmx5TWVtb3J5IHRvIFdh
c206Ok1lbW9yeTo6Z3Jvdy4gVXNlIEV4cGVjdGVkCiAgICB0aGVyZSwgd2l0aCBhbiBlbnVtIGNs
YXNzIGZvciBmYWlsdXJlIHR5cGVzLgogIC0gRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3Ro
IG5vdyByZXR1cm5zIGEgcmFuZ2UgZXJyb3IgYXMgcGVyIHNwZWMuIFRoaXMKICAgIGlzIGEgKHZl
cnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00gZXJyb3IuIFVw
ZGF0ZSB0aGUKICAgIGNvcnJlc3BvbmRpbmcgdGVzdC4KICAtIFdoZW4gZ2VuZXJhdGluZyB0aGUg
Z3Jvd19tZW1vcnkgb3Bjb2RlLCBubyBuZWVkIHRvIGdldCB0aGUgVk0uIEluc3RlYWQsCiAgICBy
ZWFjaCBkaXJlY3RseSBmb3IgV2FzbTo6TWVtb3J5IGFuZCBncm93IGl0LgogIC0gSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Z3JvdyBjYW4gbm93IGFsd2F5cyB0aHJvdyBvbiBmYWlsdXJlLCBiZWNhdXNl
IGl0J3Mgb25seQogICAgZXZlciBjYWxsZWQgZnJvbSBKUyAobm90IGZyb20gZ3Jvd19tZW1vcnkg
YXMgYmVmb3JlKS4KICAtIFdhc206Ok1lbW9yeSBub3cgdGFrZXMgYSBjYWxsYmFjayBmb3Igc3Vj
Y2Vzc2Z1bCBncm93dGguIFRoaXMgYWxsb3dzIEpTCiAgICB3cmFwcGVycyB0byByZWdpc3RlciB0
aGVtc2VsdmVzIHdoZW4gZ3Jvd3RoIHN1Y2NlZWRzIHdpdGhvdXQgV2FzbTo6TWVtb3J5CiAgICBr
bm93bmluZyBhbnl0aGluZyBhYm91dCBKUy4gSXQnbGwgYWxzbyBhbGxvdyBjcmVhdGluZyBhIGxp
c3Qgb2YgY2FsbGJhY2tzCiAgICBmb3Igd2hlbiB3ZSBhZGQgdGhyZWFkIHN1cHBvcnQgKHdlJ2xs
IHdhbnQgdG8gbm90aWZ5IG1hbnkgd3JhcHBlcnMsIGFsbAogICAgdW5kZXIgYSBsb2NrKS4KICAt
IFdhc206Ok1lbW9yeSBpcyBub3cgYmFjayB0byBiZWluZyB0aGUgc291cmNlIG9mIHRydXRoIGFi
b3V0IGFkZHJlc3MgLyBzaXplLAogICAgdXNlZCBkaXJlY3RseSBieSBnZW5lcmF0ZWQgY29kZSBp
bnN0ZWFkIG9mIEpTV2ViQXNzZW1ibHlNZW1vcnkuCiAgLSBNb3ZlIHdhc21Ub0pTIGZyb20gdGhl
IGdlbmVyYWwgV2FzbUJpbmRpbmcgaGVhZGVyIHRvIGl0cyBvd24gaGVhZGVyIHVuZGVyCiAgICB3
YXNtL2pzLiBJdCdzIG9ubHkgdXNlZCBieSB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwLCBhbmQgdXNlcyBWTSwKICAgIGFuZCB0aGVyZWZvcmUgaXNuJ3QgZ2VuZXJhbCBXZWJBc3Nl
bWJseS4KICAtIE1ha2UgV2FzbTo6Q29udGV4dCBhbiBhY3R1YWwgdHlwZSAoanVzdCBhIHN0cnVj
dCBob2xkaW5nIGEKICAgIEpTV2ViQXNzZW1seUluc3RhbmNlIGZvciBub3cpIGluc3RlYWQgb2Yg
YW4gYWxpYXMgZm9yIHRoYXQuIE5vdGFibHkgdGhpcwogICAgZG9lc24ndCBhZGQgYW55dGhpbmcg
dG8gdGhlIENvbnRleHQgYW5kIGRvZXNuJ3QgY2hhbmdlIHdoYXQgYWN0dWFsbHkgZ2V0cwogICAg
cGFzc2VkIGFyb3VuZCBpbiBKSVQgY29kZSAoZmFzdCBUTFMgb3IgcmVnaXN0ZXJzKSBiZWNhdXNl
IHRoZXNlIGNoYW5nZXMKICAgIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlIGVu
dGlyZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvCiAgICBhbGxvdyBwYXNzaW5nIFdhc206
OkNvbnRleHQgYXJvdW5kIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgVk0uIFNpbmNlIFZN
CiAgICBjb250YWlucyBhIFdhc206OkNvbnRleHQgdGhlIEpTIGVtYmVkZGluZyBpcyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSwgYnV0IHdpdGgKICAgIHRoaXMgc2V0dXAgYSBub24tSlMgZW1iZWRkaW5n
IGlzIG11Y2ggYmV0dGVyIG9mZi4KICAtIE1vdmUgSlNXZWJBc3NlbWJseSBpbnRvIHRoZSBKUyBm
b2xkZXIuCiAgLSBPTUdQbGFuOiB1c2UgV2FzbTo6Q29kZUJsb2NrIGRpcmVjdGx5IGluc3RlYWQg
b2YgSlNXZWJBc3NlbWJseUNvZGVCbG9jay4KICAtIHdhc20tPkpTIHN0dWJzIGFyZSBub3cgb24g
V2FzbTo6Q29kZUJsb2NrJ3MgdGFpbCBhcyByYXcgcG9pbnRlcnMsIGluc3RlYWQgb2YKICAgIGJl
aW5nIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBhcmUgbm93IGNhbGxlZCB3YXNtLT5F
bWJlZGRlcgogICAgc3R1YnMuIFRoZSBvd25lZCByZWZlcmVuY2UgaXMgc3RpbGwgb24gSlNXZWJB
c3NlbWJseUNvZGVCbG9jaywgYW5kIGlzIHN0aWxsCiAgICBjYWxsZWQgd2FzbS0+SlMgc3R1Yi4g
VGhpcyBtb3ZlIG1lYW5zIHRoYXQgdGhlIGVtYmVkZGVyIG11c3QsIGFmdGVyIGNyZWF0aW5nCiAg
ICBhIFdhc206OkNvZGVCbG9jaywgc29tZWhvdyBjcmVhdGUgdGhlIHN0dWJzIHRvIGNhbGwgYmFj
ayBpbnRvIHRoZQogICAgZW1iZWRkZXIuIFRoaXMgaXNuJ3QgYWRkaW5nIGFueSBpbmRpcmVjdGlv
biB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmVjYXVzZQogICAgdGhlIEIzIElSIGdlbmVyYXRvciBu
b3cgcmVhY2hlcyBmb3IgV2FzbTo6Q29kZUJsb2NrIGluc3RlYWQgb2YKICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suCiAgLSBNb3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24g
Y29tcGxldGlvbiBpcyBub3cgbWFya2VkIGJ5IGl0cyBvd24KICAgIGF0b21pYzxib29sPiBmbGFn
IGluc3RlYWQgb2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBh
bmQKICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcwogICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQgaXRzIG93biBj
b21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQogICAgV2FzbTo6Q29kZUJsb2NrLCB3
aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgcG9pbnRzIHRvCiAg
ICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mgbm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2Vy
LCB0aGUgbG9jayB3YXMgYmVpbmcKICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2Vy
dGlvbi4KICAtIEVtYmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhy
b3VnaCBhIGZ1bmN0aW9uIHRoYXQncyBwYXNzZWQKICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUs
IGluc3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KICAt
IFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxpbmcgdGh1
bmtzLiBPbmx5IHRoZSBJUgogICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93LCBhbmQgc2hvdWxkIG1h
a2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKICAgIHRodW5rIGlzIGdlbmVyYXRl
ZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5v
dAogICAgYWxsIG9mIHRoZW0gZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KICAtIE1ha2Ug
ZXhjZXB0aW9uIHRocm93aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNv
ZGVkCiAgICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5j
dGlvbiBiZWluZyBjYWxsZWQgZnJvbSBKSVQKICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5IGV4
Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKICAgIGNh
bGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5IGhhdmUgYSBzaW5n
bGUgb2YgdGhlc2UKICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5IG9uZSBlbWJlZGRlciBwZXIgcHJv
Y2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEKICAgIHNpbmdsZXRvbi4gVGhhdCBj
YW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4KICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVy
ZSBhbGwgZW1iZWRkZXIgcGx1Z2dpbmcgd2lsbCBsaXZlLgogIC0gU3BsaXQgdXAgSlNXZWJBc3Nl
bWJseVRhYmxlIGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQog
ICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUgSklUIGNvZGUg
dG8gbG9va3VwIHdoZXJlIHRvCiAgICBjYWxsIGFuZCBkbyB0aGUgaW5zdGFuY2UgY2hlY2sgKGZv
ciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMKICAgIGFuIGV4dHJhIGFs
bG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2VzIGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhj
aGFuZ2UKICAgIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUg
aW5zdGFuY2UgdXNlZCB0byBiZSBvYnRhaW5lZAogICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4g
QWxzbyBub3RlIHRoYXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKICAgIGluc3Rh
bmNlcyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0
byB0aGUKICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQgY2F1c2Ug
cmVmZXJlbmNlIGN5Y2xlcy4KICAtIEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVj
aCBmb3Igbm93LCBvd25zIGdsb2JhbHMuCiAgLSBKU1dlYkFzc2VtYmx5IGluc3RhbmNlIG5vdyBk
b2Vzbid0IGp1c3QgY29udGFpbiB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzCiAgICBKU09iamVj
dHMsIGl0IGFsc28gaGFzIHRoZSBjb3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3
YXNtCiAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9jYXRlZCBwZXIg
aW5zdGFuY2UncyBpbXBvcnRlZAogICAgZnVuY3Rpb24sIGJ1dCB0aGVyZSBzaG91bGRuJ3QgYmUg
dGhhdCBtYW55IGltcG9ydHMuIFRoaXMgaGFzIHR3byB1cHNpZGVzOiBpdAogICAgY3JlYXRlcyBz
bWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBkaXNhc3NvY2lh
dGUKICAgIGVtYmVkZGVyLXNwZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhp
bmdzLiBUaGUgc21hbGwgLyBmYXN0ZXIKICAgIHdpbiBpcyBpbiB0d28gcGxhY2VzOiBCMyBJUiBn
ZW5lcmF0b3Igb25seSBuZWVkcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIGZvcgogICAgdGhlIGNh
bGwgb3Bjb2RlICh3aGVuIHRoZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdo
ZXRoZXIgdGhlCiAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5lbWJlZGRlciAodGhp
cyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKICAgIGJlY2F1c2UgaXQncyBkZXBlbmRlbnQg
b24gdGhlIGltcG9ydCBvYmplY3QpLCB0aGlzIGlzIG5vdyBkb25lIGJ5IHNlZWluZyBpZgogICAg
dGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0IGluc3RhbmNlIChv
bmx5IHdhc20tPndhc20KICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcg
d2hpY2ggdXNlcyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uIHRvCiAgICBmaWd1cmUgb3V0IHRoZSB3
YXNtLT53YXNtIHRhcmdldCBpbnN0YW5jZSwgYW5kIHRoZW4gZ2V0cwogICAgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwK
ICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNlIHRoZSB0YXJnZXQgaW5z
dGFuY2UgY2FuIGJlCiAgICBXYXNtOjpJbnN0YW5jZSBvbmNlIHdlIGNoYW5nZSB3aGF0IHRoZSBD
b250ZXh0IGlzLCBhbmQKICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIGlzIGFscmVhZHkg
ZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKICAgIGNhbiBtb3ZlIHRoaXMg
dGFpbCBhbGxvY2F0aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3Rh
bmNlLAogICAgYW5kIGxlYXZlIGltcG9ydEZ1bmN0aW9uIGluIGFzIGFuIG9wYXF1ZSBwb2ludGVy
IHdoaWNoIGlzIGVtYmVkZGVyLXNwZWNpZmljLAogICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdy
aXRlQmFycmllcjxKU09iamVjdD4uCiAgLSBSZW5hbWUgVk1FbnRyeUZyYW1lIHRvIEVudHJ5RnJh
bWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0byBpdAogICAgYXJvdW5kIGlu
c3RlYWQgb2YgVk0uIFRoaXMgaXMgYSBmaXJzdCBzdGVwIGluIGFsbG93aW5nIGVudHJ5IGZyYW1l
cyB3aGljaAogICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdoaWNoIGFyZSBpbnN0ZWFkIHN0
b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYwogICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdv
bid0IHJlYWxseSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CiAgICB3
aWxsIGFsbG93IFdlYkFzc2VtYmx5IHRvIHVzZSBzb21lIG1hY2hpbmVyeSBpbiBhIGdlbmVyaWMg
bWFubmVyIHdpdGhvdXQKICAgIGhhdmluZyBhIFZNLgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvd2FzbS9qcy1h
cGkvbWVtb3J5LWdyb3cuanMgICAgICAgICAgICAgICAgIHwgICAyICstCiBKU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA0NTggKysrKysrKysr
KysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgIDg4ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAg
ICAgICAgfCAgMTIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwICAgICAgICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwICAgICAgICAgICAgICB8ICAgNCArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwICAgICAgfCAgIDIgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCAgIHwgICA4ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCAgICB8ICAyNSAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oICAgICAgfCAg
MTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCAg
IHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAgfCAgMjYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaCAgIHwgIDExICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Vk1FbnRyeVJlY29yZC5oICB8ICAyMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwICAgICAgfCAgMzIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmggICAgICAgIHwgIDQ4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCAgICAgICAgfCAgIDggKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAgNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCAgICAgICAgfCAgMzIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCAgICAgIHwgICA0ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAg
NCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgICAg
ICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gICB8ICAgNiArLQogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20g
ICAgICAgICAgICAgfCAgMTggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtIHwgIDE5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCAgICAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICAgICAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCAgICAgICAgICB8ICAxOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwICAgfCAzODEgKysr
Ky0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
ICAgICB8ICAgNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
ICAgICAgICAgfCAgMjIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmggICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwICAgICAgICAgfCA2MDIgKy0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAgICAgfCAgIDUgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwICAgICAgIHwgIDM5ICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggICAgICAgICB8ICA0NiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwICAgICAgICAgfCAg
MzMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggICAgICAgICAg
IHwgIDMxICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCAgICAg
ICAgICB8ICA1OCArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAgfCAgIDIgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAgIHwgICAyIC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwICAgICAgICB8ICA1OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggICAgICAgICAgfCAgODcgKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICB8IDE1OSArKy0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgICAgICAgfCAgNDQgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgIHwgIDE0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCB8ICAgOCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwICAgICAgfCAgNDcgKysK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmggICAgICAgIHwgIDQ3
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCAgICAgICAgICB8
ICAyNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oICAgICAgICAg
ICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwICAgIHwgICAzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rp
b24uaCAgICAgICB8ICA0OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uY3BwICAgICAgICAgfCAgMjEgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
TUdQbGFuLmggICAgICAgICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGFnZUNvdW50LmggICAgICAgICB8ICAgNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uY3BwICAgICAgICAgICAgfCAgMzUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmggICAgICAgICAgICAgIHwgIDI1ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcCAgICAgICB8ICAgNCArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oICAgICAgICAgfCAgIDYgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAgICAgICAgICAgIHwgMTIyICsrKysKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oICAgICAgICAgICAgIHwgIDc2ICsr
KwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAgICAgICAgICAgfCAg
NTkgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCAgICAgICAgICAg
IHwgICA1ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAgICAg
ICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaCAg
ICAgICAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20u
Y3BwICAgICAgICAgfCAyMjcgKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc20uaCAgICAgICAgICAgfCAgNDggKysKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL3sg
PT4ganN9L0pTV2ViQXNzZW1ibHkuY3BwIHwgICAwCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS97
ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmggICB8ICA1MCArLQogLi4uL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5jcHAgICAgICAgICAgICAgfCAgMTMgKy0KIC4uLi93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaCAgICAgICAgICAgICAgIHwgIDQ2ICstCiAuLi4vd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwICAgICAgICAgICAgICB8IDExOCArKy0tCiAuLi4vSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCB8ICA4NSArKy0KIC4u
Li9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIHwgIDc2ICsr
LQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oICAgfCAg
MTMgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3Bw
IHwgIDMyICsKIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aCAgIHwgIDI1ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuY3BwICB8ICA3NSArLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5oIHwgIDQzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNt
VG9KUy5jcHAgICAgICAgICB8IDY1NSArKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmggICAgICAgICAgIHwgIDQ5ICsrCiAuLi4vSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCB8ICAyNiArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCAgICAgfCAgIDYgKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwICAgICAgIHwgIDEz
ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAgICAgICAgICB8
ICAgMyArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgICAg
ICAgfCAgMjAgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCAg
ICAgICAgIHwgICA1ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAg
ICAgICAgICAgICB8ICAyMiArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3Bw
ICAgICAgICAgICAgICAgfCAgMTQgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25z
dHJ1Y3Rvci5jcHAgICAgICAgIHwgICA5ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHAgICAgICAgICB8ICAgMiArLQogU291cmNlL1dURi9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTEgKwogU291cmNlL1dURi93dGYvU3RkTGli
RXh0cmFzLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKwogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTIgKwogU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvd2FzbS9XYXNtTW9kdWxlLmggfCAgIDIgKwogLi4uL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAgfCAgIDEgKwogMTE1IGZpbGVz
IGNoYW5nZWQsIDMxNjkgaW5zZXJ0aW9ucygrKSwgMTc0NiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5z
dGFuY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnlNb2RlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnlNb2RlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKIHJlbmFtZSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCAoMTAw
JSkKIHJlbmFtZSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2Vt
Ymx5LmggKDYyJSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XYXNtVG9KUy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XYXNtVG9KUy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvd2FzbS9XYXNtTW9kdWxlLmgKCmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDYxZTMwZjMuLmFhODZkOTMgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTctMDktMjggIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29t
PgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGlu
ZyBidXQgSW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NzQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAg
ICAgIC0gRXhjZWVkaW5nIG1heCBvbiBtZW1vcnkgZ3Jvd3RoIG5vdyByZXR1cm5zIGEgcmFuZ2Ug
ZXJyb3IgYXMgcGVyCisgICAgICAgIHNwZWMuIFRoaXMgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtp
bmcgY2hhbmdlOiBpdCB1c2VkIHRvIHRocm93IE9PTQorICAgICAgICBlcnJvci4gVXBkYXRlIHRo
ZSBjb3JyZXNwb25kaW5nIHRlc3QuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9tZW1vcnktZ3Jv
dy5qczoKKyAgICAgICAgKGFzc2VydEVxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5q
czoKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorCiAyMDE3LTEwLTAxICBDb21taXQgUXVldWUg
IDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMjIyNTY0LgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jv
dy5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4u
MGY4ZmM5NiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcwor
KysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBA
IGZvciAobGV0IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVM
ZW5ndGgsIDIqNjQqMTAyNCk7CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1
ZmZlciBzaW5jZSBpdCBmYWlscy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3co
MTAwMCksIEVycm9yLCAiT3V0IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4g
bWVtb3J5Lmdyb3coMTAwMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3
b3VsZCBleGNlZWQgdGhlIG1lbW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOwogICAgIGFz
c2VydEVxKGJ1ZmZlci5ieXRlTGVuZ3RoLCAyKjY0KjEwMjQpOwogICAgIGFzc2VydEVxKG1lbW9y
eS5idWZmZXIsIGJ1ZmZlcik7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rh
YmxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcwppbmRleCA3MmQ0OTViLi40MTMy
ODRkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCisrKyBiL0pTVGVz
dHMvd2FzbS9qcy1hcGkvdGFibGUuanMKQEAgLTE2Niw4ICsxNjYsOCBAQCBmdW5jdGlvbiBhc3Nl
cnRCYWRUYWJsZUltcG9ydCh0YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CiAgICAgICAgICAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOSAvIDMyOiByZXNpemFi
bGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlz
IGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0Mjk0OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCiAgICAgICAg
ICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNyAvIDQzOiByZXNp
emFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNo
IGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0Mjk0OTY3Mjk0IChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAg
ICAgICBbe2luaXRpYWw6IDIqKjMxLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQgLyAyNzogVGFibGUncyBp
bml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0g
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4
OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIGludmFsaWQgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAyNCAvIDI3OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlz
IHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyIC8gMzg6IFRhYmxlJ3MgaW5pdGlh
bCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiXSwKICAgICBdOwogCiAgICAgZm9yIChjb25zdCBkIG9mIGJhZERlc2NyaXB0aW9u
cykgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggYTlmM2FjZS4uYzRjYjI1MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYxIEBACisyMDE3LTA5LTI4ICBKRiBCYXN0
aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbm8gVk0g
LyBKUyB2ZXJzaW9uIG9mIGV2ZXJ5dGhpbmcgYnV0IEluc3RhbmNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc0NzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUaGlzIGNoYW5nZSBlbnRhaWxzIGNsZWFuaW5n
IHVwIGFuZCBzcGxpdHRpbmcgYSBidW5jaCBvZiBjb2RlIHdoaWNoIHdlIGhhZAorICAgICAgICBp
bnRlcnR3aW5lZCBiZXR3ZWVuIEMrKyBjbGFzc2VzIHdoaWNoIHJlcHJlc2VudCBKUyBvYmplY3Rz
LCBhbmQgcHVyZSBDKysKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2JqZWN0cy4gVGhpcyBzcGVj
aWZpYyBjaGFuZ2UgZ29lcyBtb3N0IG9mIHRoZSB3YXkgdG93YXJkcworICAgICAgICBhbGxvd2lu
ZyBKU0MncyBXZWJBc3NlbWJseSB0byB3b3JrIHdpdGhvdXQgVk0gLyBKUywgdXAgdG8gYnV0IGV4
Y2x1ZGluZworICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgKHRoZXJlJ3MgV2FzbTo6SW5z
dGFuY2UsIGJ1dCBpdCdzIG5vdCAqdGhlKiB0aGluZworICAgICAgICB5ZXQpLiBCZWNhdXNlIG9m
IHRoaXMgd2Ugc3RpbGwgaGF2ZSBhIGZldyBGSVhNRSBpZGVudGlmeWluZyBwbGFjZXMgdGhhdCBu
ZWVkIHRvCisgICAgICAgIGNoYW5nZS4gQSBmb2xsb3ctdXAgY2hhbmdlIHdpbGwgZ28gdGhlIHJl
c3Qgb2YgdGhlIHdheS4KKworICAgICAgICBJIHdlbnQgYWJvdXQgdGhpcyBjaGFuZ2UgaW4gdGhl
IHNpbXBsZXN0IHdheSBwb3NzaWJsZTogZ3JlcCB0aGUKKyAgICAgICAgSmF2YVNjcmlwdENvcmUv
d2FzbSBkaXJlY3RvcnkgZm9yICJKU1teQ19dIiBhcyB3ZWxsIGFzICJWTSIgYW5kIGV4Y2x1ZGUg
dGhlIC9qcy8KKyAgICAgICAgc3ViLWRpcmVjdG9yeSAod2hpY2ggY29udGFpbnMgdGhlIEpTIGlt
cGxlbWVudGF0aW9uIG9mIFdlYkFzc2VtYmx5KS4KKworICAgICAgICBOb25lIG9mIHRoaXMgY2hh
bmdlIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8g
dXNlCisgICAgICAgIFdlYkFzc2VtYmx5LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0
aGUgcHJvY2VzcyB0aGVyZWZvcmUgc3RpbGwgbmVlZHMgdG8KKyAgICAgICAgYmUgYWxsb3dlZCB0
byBKSVQgdG8gdXNlIHRoZXNlIHB1cmUtQysrIEFQSXMuCisKKyAgICAgICAgSW50ZXJlc3Rpbmcg
dGhpbmdzIHRvIG5vdGU6CisKKyAgICAgICAgICAtIFJlbW92ZSBWTSBmcm9tIFBsYW4gYW5kIGFz
c29jaWF0ZWQgcGxhY2VzLiBJdCBjYW4ganVzdCBsaXZlIGFzIGEgY2FwdHVyZSBpbgorICAgICAg
ICAgICAgdGhlIGNhbGxiYWNrIGxhbWJkYSBpZiBpdCdzIG5lZWRlZC4KKyAgICAgICAgICAtIFdh
c206Ok1lbW9yeSBzaG91bGRuJ3QgcmVxdWlyZSBhIFZNLiBJdCB3YXMgb25seSB1c2VkIHRvIGFz
ayB0aGUgR0MgdG8KKyAgICAgICAgICAgIGNvbGxlY3QuIFdlIG5vdyBpbnN0ZWFkIHBhc3MgdHdv
IGxhbWJkYXMgYXQgY29uc3RydWN0aW9uIHRpbWUgZm9yIHRoaXMKKyAgICAgICAgICAgIHB1cnBv
c2U6IG9uZSB0byBub3RpZnkgb2YgbWVtb3J5IHByZXNzdXJlLCBhbmQgdGhlIG90aGVyIHRvIGFz
ayBmb3IKKyAgICAgICAgICAgIHN5bmNyaG9ub3VzIG1lbW9yeSByZWNsYW1hdGlvbi4gVGhpcyBh
bGxvd3Mgd2hvZXZlciBjcmVhdGVzIHRoZSBtZW1vcnkgdG8KKyAgICAgICAgICAgIGRpY3RhdGUg
aG93IHRvIHJlYWN0IHRvIGJvdGggdGhlc2UgY2FzZXMsIGFuZCBmb3IgYSBKUyBlbWJlZGRpbmcg
dGhhdCdzIHRvCisgICAgICAgICAgICBjYWxsIHRoZSBHQyAoYXN5bmMgb3Igc3luYywgcmVzcGVj
dGl2ZWx5KS4KKyAgICAgICAgICAtIE1vdmUgZ3JvdyBsb2dpYyBmcm9tIEpTV2ViQXNzZW1ibHlN
ZW1vcnkgdG8gV2FzbTo6TWVtb3J5Ojpncm93LiBVc2UgRXhwZWN0ZWQKKyAgICAgICAgICAgIHRo
ZXJlLCB3aXRoIGFuIGVudW0gY2xhc3MgZm9yIGZhaWx1cmUgdHlwZXMuCisgICAgICAgICAgLSBF
eGNlZWRpbmcgbWF4IG9uIG1lbW9yeSBncm93dGggbm93IHJldHVybnMgYSByYW5nZSBlcnJvciBh
cyBwZXIgc3BlYy4gVGhpcworICAgICAgICAgICAgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcg
Y2hhbmdlOiBpdCB1c2VkIHRvIHRocm93IE9PTSBlcnJvci4gVXBkYXRlIHRoZQorICAgICAgICAg
ICAgY29ycmVzcG9uZGluZyB0ZXN0LgorICAgICAgICAgIC0gV2hlbiBnZW5lcmF0aW5nIHRoZSBn
cm93X21lbW9yeSBvcGNvZGUsIG5vIG5lZWQgdG8gZ2V0IHRoZSBWTS4gSW5zdGVhZCwKKyAgICAg
ICAgICAgIHJlYWNoIGRpcmVjdGx5IGZvciBXYXNtOjpNZW1vcnkgYW5kIGdyb3cgaXQuCisgICAg
ICAgICAgLSBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93IGNhbiBub3cgYWx3YXlzIHRocm93IG9u
IGZhaWx1cmUsIGJlY2F1c2UgaXQncyBvbmx5CisgICAgICAgICAgICBldmVyIGNhbGxlZCBmcm9t
IEpTIChub3QgZnJvbSBncm93X21lbW9yeSBhcyBiZWZvcmUpLgorICAgICAgICAgIC0gV2FzbTo6
TWVtb3J5IG5vdyB0YWtlcyBhIGNhbGxiYWNrIGZvciBzdWNjZXNzZnVsIGdyb3d0aC4gVGhpcyBh
bGxvd3MgSlMKKyAgICAgICAgICAgIHdyYXBwZXJzIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2hl
biBncm93dGggc3VjY2VlZHMgd2l0aG91dCBXYXNtOjpNZW1vcnkKKyAgICAgICAgICAgIGtub3du
aW5nIGFueXRoaW5nIGFib3V0IEpTLiBJdCdsbCBhbHNvIGFsbG93IGNyZWF0aW5nIGEgbGlzdCBv
ZiBjYWxsYmFja3MKKyAgICAgICAgICAgIGZvciB3aGVuIHdlIGFkZCB0aHJlYWQgc3VwcG9ydCAo
d2UnbGwgd2FudCB0byBub3RpZnkgbWFueSB3cmFwcGVycywgYWxsCisgICAgICAgICAgICB1bmRl
ciBhIGxvY2spLgorICAgICAgICAgIC0gV2FzbTo6TWVtb3J5IGlzIG5vdyBiYWNrIHRvIGJlaW5n
IHRoZSBzb3VyY2Ugb2YgdHJ1dGggYWJvdXQgYWRkcmVzcyAvIHNpemUsCisgICAgICAgICAgICB1
c2VkIGRpcmVjdGx5IGJ5IGdlbmVyYXRlZCBjb2RlIGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseU1l
bW9yeS4KKyAgICAgICAgICAtIE1vdmUgd2FzbVRvSlMgZnJvbSB0aGUgZ2VuZXJhbCBXYXNtQmlu
ZGluZyBoZWFkZXIgdG8gaXRzIG93biBoZWFkZXIgdW5kZXIKKyAgICAgICAgICAgIHdhc20vanMu
IEl0J3Mgb25seSB1c2VkIGJ5IHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAsIGFu
ZCB1c2VzIFZNLAorICAgICAgICAgICAgYW5kIHRoZXJlZm9yZSBpc24ndCBnZW5lcmFsIFdlYkFz
c2VtYmx5LgorICAgICAgICAgIC0gTWFrZSBXYXNtOjpDb250ZXh0IGFuIGFjdHVhbCB0eXBlIChq
dXN0IGEgc3RydWN0IGhvbGRpbmcgYQorICAgICAgICAgICAgSlNXZWJBc3NlbWx5SW5zdGFuY2Ug
Zm9yIG5vdykgaW5zdGVhZCBvZiBhbiBhbGlhcyBmb3IgdGhhdC4gTm90YWJseSB0aGlzCisgICAg
ICAgICAgICBkb2Vzbid0IGFkZCBhbnl0aGluZyB0byB0aGUgQ29udGV4dCBhbmQgZG9lc24ndCBj
aGFuZ2Ugd2hhdCBhY3R1YWxseSBnZXRzCisgICAgICAgICAgICBwYXNzZWQgYXJvdW5kIGluIEpJ
VCBjb2RlIChmYXN0IFRMUyBvciByZWdpc3RlcnMpIGJlY2F1c2UgdGhlc2UgY2hhbmdlcworICAg
ICAgICAgICAgcG90ZW50aWFsbHkgaW1wYWN0IHBlcmZvcm1hbmNlLiBUaGUgZW50aXJlIHB1cnBv
c2Ugb2YgdGhpcyBjaGFuZ2UgaXMgdG8KKyAgICAgICAgICAgIGFsbG93IHBhc3NpbmcgV2FzbTo6
Q29udGV4dCBhcm91bmQgd2l0aG91dCBoYXZpbmcgdG8ga25vdyBhYm91dCBWTS4gU2luY2UgVk0K
KyAgICAgICAgICAgIGNvbnRhaW5zIGEgV2FzbTo6Q29udGV4dCB0aGUgSlMgZW1iZWRkaW5nIGlz
IGVmZmVjdGl2ZWx5IHRoZSBzYW1lLCBidXQgd2l0aAorICAgICAgICAgICAgdGhpcyBzZXR1cCBh
IG5vbi1KUyBlbWJlZGRpbmcgaXMgbXVjaCBiZXR0ZXIgb2ZmLgorICAgICAgICAgIC0gTW92ZSBK
U1dlYkFzc2VtYmx5IGludG8gdGhlIEpTIGZvbGRlci4KKyAgICAgICAgICAtIE9NR1BsYW46IHVz
ZSBXYXNtOjpDb2RlQmxvY2sgZGlyZWN0bHkgaW5zdGVhZCBvZiBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLgorICAgICAgICAgIC0gd2FzbS0+SlMgc3R1YnMgYXJlIG5vdyBvbiBXYXNtOjpDb2RlQmxv
Y2sncyB0YWlsIGFzIHJhdyBwb2ludGVycywgaW5zdGVhZCBvZgorICAgICAgICAgICAgYmVpbmcg
b24gSlNXZWJBc3NlbWJseUNvZGVCbG9jaywgYW5kIGFyZSBub3cgY2FsbGVkIHdhc20tPkVtYmVk
ZGVyCisgICAgICAgICAgICBzdHVicy4gVGhlIG93bmVkIHJlZmVyZW5jZSBpcyBzdGlsbCBvbiBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLCBhbmQgaXMgc3RpbGwKKyAgICAgICAgICAgIGNhbGxlZCB3
YXNtLT5KUyBzdHViLiBUaGlzIG1vdmUgbWVhbnMgdGhhdCB0aGUgZW1iZWRkZXIgbXVzdCwgYWZ0
ZXIgY3JlYXRpbmcKKyAgICAgICAgICAgIGEgV2FzbTo6Q29kZUJsb2NrLCBzb21laG93IGNyZWF0
ZSB0aGUgc3R1YnMgdG8gY2FsbCBiYWNrIGludG8gdGhlCisgICAgICAgICAgICBlbWJlZGRlci4g
VGhpcyBpc24ndCBhZGRpbmcgYW55IGluZGlyZWN0aW9uIHRvIHRoZSBnZW5lcmF0ZWQgY29kZSBi
ZWNhdXNlCisgICAgICAgICAgICB0aGUgQjMgSVIgZ2VuZXJhdG9yIG5vdyByZWFjaGVzIGZvciBX
YXNtOjpDb2RlQmxvY2sgaW5zdGVhZCBvZgorICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jay4KKyAgICAgICAgICAtIE1vdmUgbW9yZSBDb2RlQmxvY2sgdGhpbmdzLiBDb21waWxhdGlv
biBjb21wbGV0aW9uIGlzIG5vdyBtYXJrZWQgYnkgaXRzIG93bgorICAgICAgICAgICAgYXRvbWlj
PGJvb2w+IGZsYWcgaW5zdGVhZCBvZiBhIG51bGxwdHIgcGxhbjogdGhhdCByZXF1aXJlZCB1c2lu
ZyBhIGxvY2ssIGFuZAorICAgICAgICAgICAgd2FzIGNhdXNpbmcgYSBkZWFkbG9jayBpbiBzdGFj
ay10cmFjZS5qcyBiZWNhdXNlIGJlZm9yZSBteSBjaGFuZ2VzCisgICAgICAgICAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrIGRpZCBpdHMgb3duIGNvbXBsZXRpb24gY2hlY2tpbmcgc2VwYXJhdGVs
eSBmcm9tCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxvY2ssIHdpdGhvdXQgZ2V0dGluZyB0aGUg
bG9jay4gTm93IHRoYXQgZXZlcnl0aGluZyBwb2ludHMgdG8KKyAgICAgICAgICAgIFdhc206OkNv
ZGVCbG9jayBhbmQgdGhlcmUncyBubyBjYWNoZWQgY29tcGxldGlvbiBtYXJrZXIsIHRoZSBsb2Nr
IHdhcyBiZWluZworICAgICAgICAgICAgYWNxdWlyZWQgaW4gYSBzYW5pdHktY2hlY2sgYXNzZXJ0
aW9uLgorICAgICAgICAgIC0gRW1iZWRkZXIgLT4gV2FzbSB3cmFwcGVycyBhcmUgbm93IGdlbmVy
YXRlZCB0aHJvdWdoIGEgZnVuY3Rpb24gdGhhdCdzIHBhc3NlZAorICAgICAgICAgICAgaW4gYXQg
Y29tcGlsYXRpb24gdGltZSwgaW5zdGVhZCBvZiBiZWluZyBoYXJkLWNvZGVkIGFzIGEgSlMgLT4g
V2FzbSB3cmFwcGVyLgorICAgICAgICAgIC0gV2FzbU1lbW9yeSBkb2Vucyd0IG5lZWQgdG8ga25v
dyBhYm91dCBmYXVsdCBoYW5kbGluZyB0aHVua3MuIE9ubHkgdGhlIElSCisgICAgICAgICAgICBn
ZW5lcmF0b3Igc2hvdWxkIGtub3csIGFuZCBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIGV4Y2Vw
dGlvbiB0aHJvd2luZworICAgICAgICAgICAgdGh1bmsgaXMgZ2VuZXJhdGVkIGlmIGFueSBtZW1v
cnkgaXMgcHJlc2VudCAobm90ZTogd2l0aCBzaWduYWwgaGFuZGxpbmcgbm90CisgICAgICAgICAg
ICBhbGwgb2YgdGhlbSBnZW5lcmF0ZSBhbiBleGNlcHRpb24gY2hlY2spLgorICAgICAgICAgIC0g
TWFrZSBleGNlcHRpb24gdGhyb3dpbmcgcGx1Z2dhYmxlOiBpbnN0ZWFkIG9mIGhhdmluZyBhIGhh
cmQtY29kZWQKKyAgICAgICAgICAgIEpTLXNwZWNpZmljIGxhbWJkYSB3ZSBub3cgaGF2ZSBhIHJl
Z3VsYXIgQysrIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBmcm9tIEpJVAorICAgICAgICAgICAgY29k
ZSB3aGVuIGEgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGlzIHRocm93bi4gVGhpcyBhbGxvd3MgYW55
IGVtYmVkZGVyIHRvIGdldAorICAgICAgICAgICAgY2FsbGVkIGFzIHRoZXkgd2lzaC4gRm9yIG5v
dyBhIHByb2Nlc3MgY2FuIG9ubHkgaGF2ZSBhIHNpbmdsZSBvZiB0aGVzZQorICAgICAgICAgICAg
ZnVuY3Rpb25zIChpLmUuIG9ubHkgb25lIGVtYmVkZGVyIHBlciBwcm9jZXNzKSBiZWNhdXNlIHRo
ZSB0cmFwIGhhbmRsZXIgaXMgYQorICAgICAgICAgICAgc2luZ2xldG9uLiBUaGF0IGNhbiBiZSBm
aXhlZCBpbiBpbiAjMTc3NDc1LgorICAgICAgICAgIC0gQ3JlYXRlIFdhc21FbWJlZGRlci5oIHdo
ZXJlIGFsbCBlbWJlZGRlciBwbHVnZ2luZyB3aWxsIGxpdmUuCisgICAgICAgICAgLSBTcGxpdCB1
cCBKU1dlYkFzc2VtYmx5VGFibGUgaW50byBXYXNtOjpUYWJsZSB3aGljaCBpcworICAgICAgICAg
ICAgcmVmY291bnRlZC4gSlNXZWJBc3NlbWJseVRhYmxlIG5vdyBvbmx5IGNvbnRhaW5zIHRoZSBK
UyBmdW5jdGlvbnMgaW4gdGhlCisgICAgICAgICAgICB0YWJsZSwgYW5kIFdhc206OlRhYmxlIGlz
IHdoYXQncyB1c2VkIGJ5IHRoZSBKSVQgY29kZSB0byBsb29rdXAgd2hlcmUgdG8KKyAgICAgICAg
ICAgIGNhbGwgYW5kIGRvIHRoZSBpbnN0YW5jZSBjaGVjayAoZm9yIGNvbnRleHQgc3dpdGNoKS4g
Tm90ZSB0aGF0IHRoaXMgY3JlYXRlcworICAgICAgICAgICAgYW4gZXh0cmEgYWxsb2NhdGlvbiBm
b3IgYWxsIHRoZSBpbnN0YW5jZXMgaW4gV2FzbTo6VGFibGUsIGFuZCBpbiBleGNoYW5nZQorICAg
ICAgICAgICAgcmVtb3ZlcyBhbiBpbmRpcmVjdGlvbiBpbiBKSVQgY29kZSBiZWNhdXNlIHRoZSBp
bnN0YW5jZSB1c2VkIHRvIGJlIG9idGFpbmVkCisgICAgICAgICAgICBvZmYgb2YgdGhlIEpTIGZ1
bmN0aW9uLiBBbHNvIG5vdGUgdGhhdCBpdCdzIHRoZSBlbWJlZGRlciB0aGFuIGtlZXBzIHRoZQor
ICAgICAgICAgICAgaW5zdGFuY2VzIGFsaXZlLCBub3QgV2FzbTo6VGFibGUgKHdoaWNoIGhvbGRz
IGEgZHVtYiBwb2ludGVyIHRvIHRoZQorICAgICAgICAgICAgaW5zdGFuY2UpLCBiZWNhdXNlIGRv
aW5nIG90aGVyd2lzZSB3b3VsZCBjYXVzZSByZWZlcmVuY2UgY3ljbGVzLgorICAgICAgICAgIC0g
QWRkIFdhc21JbnN0YW5jZS4gSXQgZG9lc24ndCBkbyBtdWNoIGZvciBub3csIG93bnMgZ2xvYmFs
cy4KKyAgICAgICAgICAtIEpTV2ViQXNzZW1ibHkgaW5zdGFuY2Ugbm93IGRvZXNuJ3QganVzdCBj
b250YWluIHRoZSBpbXBvcnRlZCBmdW5jdGlvbnMgYXMKKyAgICAgICAgICAgIEpTT2JqZWN0cywg
aXQgYWxzbyBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgaW1wb3J0J3MgaW5zdGFuY2UgYW5kIHdhc20K
KyAgICAgICAgICAgIGVudHJ5cG9pbnQuIFRoaXMgdHJpcGxlcyB0aGUgc3BhY2UgYWxsb2NhdGVk
IHBlciBpbnN0YW5jZSdzIGltcG9ydGVkCisgICAgICAgICAgICBmdW5jdGlvbiwgYnV0IHRoZXJl
IHNob3VsZG4ndCBiZSB0aGF0IG1hbnkgaW1wb3J0cy4gVGhpcyBoYXMgdHdvIHVwc2lkZXM6IGl0
CisgICAgICAgICAgICBjcmVhdGVzIHNtYWxsZXIgYW5kIGZhc3RlciBjb2RlLCBhbmQgbWFrZXMg
aXMgZWFzaWVyIHRvIGRpc2Fzc29jaWF0ZQorICAgICAgICAgICAgZW1iZWRkZXItc3BlY2lmaWMg
dGhpbmdzIGZyb20gZW1iZWRkZXItbmV1dHJhbCB0aGluZ3MuIFRoZSBzbWFsbCAvIGZhc3Rlcgor
ICAgICAgICAgICAgd2luIGlzIGluIHR3byBwbGFjZXM6IEIzIElSIGdlbmVyYXRvciBvbmx5IG5l
ZWRzIG9mZnNldE9mSW1wb3J0RnVuY3Rpb24gZm9yCisgICAgICAgICAgICB0aGUgY2FsbCBvcGNv
ZGUgKHdoZW4gdGhlIGNhbGxlZCBpbmRleCBpcyBhbiBpbXBvcnQpIHRvIGtub3cgd2hldGhlciB0
aGUKKyAgICAgICAgICAgIGltcG9ydCBpcyB3YXNtLT53YXNtIG9yIHdhc20tPmVtYmVkZGVyICh0
aGlzIGlzbid0IGtub3duIGF0IGNvbXBpbGUtdGltZQorICAgICAgICAgICAgYmVjYXVzZSBpdCdz
IGRlcGVuZGVudCBvbiB0aGUgaW1wb3J0IG9iamVjdCksIHRoaXMgaXMgbm93IGRvbmUgYnkgc2Vl
aW5nIGlmCisgICAgICAgICAgICB0aGF0IGltcG9ydCBmdW5jdGlvbiBoYXMgYW4gYXNzb2NpYXRl
ZCB0YXJnZXQgaW5zdGFuY2UgKG9ubHkgd2FzbS0+d2FzbQorICAgICAgICAgICAgZG9lcyk7IHRo
ZSBvdGhlciBwbGFjZSBpcyB3YXNtQmluZGluZyB3aGljaCB1c2VzIG9mZnNldE9mSW1wb3J0RnVu
Y3Rpb24gdG8KKyAgICAgICAgICAgIGZpZ3VyZSBvdXQgdGhlIHdhc20tPndhc20gdGFyZ2V0IGlu
c3RhbmNlLCBhbmQgdGhlbiBnZXRzCisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uOjpv
ZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHRvIGRvIGEgdGFpbAorICAgICAgICAg
ICAgY2FsbC4gVGhlIGRpc2Fzc29jaWF0aW9uIGNvbWVzIGJlY2F1c2UgdGhlIHRhcmdldCBpbnN0
YW5jZSBjYW4gYmUKKyAgICAgICAgICAgIFdhc206Okluc3RhbmNlIG9uY2Ugd2UgY2hhbmdlIHdo
YXQgdGhlIENvbnRleHQgaXMsIGFuZAorICAgICAgICAgICAgV2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gaXMgYWxyZWFkeSBlbWJlZGRlci1pbmRlcGVuZGVudC4gQXMgYSBuZXh0IHN0ZXAgSQor
ICAgICAgICAgICAgY2FuIG1vdmUgdGhpcyB0YWlsIGFsbG9jYXRpb24gZnJvbSBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UgdG8gV2FzbTo6SW5zdGFuY2UsCisgICAgICAgICAgICBhbmQgbGVhdmUgaW1w
b3J0RnVuY3Rpb24gaW4gYXMgYW4gb3BhcXVlIHBvaW50ZXIgd2hpY2ggaXMgZW1iZWRkZXItc3Bl
Y2lmaWMsCisgICAgICAgICAgICBhbmQgaW4gSlMgd2lsbCByZW1haW4gV3JpdGVCYXJyaWVyPEpT
T2JqZWN0Pi4KKyAgICAgICAgICAtIFJlbmFtZSBWTUVudHJ5RnJhbWUgdG8gRW50cnlGcmFtZSwg
YW5kIGluIG1hbnkgcGxhY2VzIHBhc3MgYSBwb2ludGVyIHRvIGl0CisgICAgICAgICAgICBhcm91
bmQgaW5zdGVhZCBvZiBWTS4gVGhpcyBpcyBhIGZpcnN0IHN0ZXAgaW4gYWxsb3dpbmcgZW50cnkg
ZnJhbWVzIHdoaWNoCisgICAgICAgICAgICBhcmVuJ3Qgc3RvcmVkIG9uIFZNLCBidXQgd2hpY2gg
YXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGVtYmVkZGVyLXNwZWNpZmljCisgICAgICAgICAgICBs
b2NhdGlvbi4gVGhhdCBjaGFuZ2Ugd29uJ3QgcmVhbGx5IGFmZmVjdCBKUyBleGNlcHQgdGhyb3Vn
aCBjb2RlIGNodXJuLCBidXQKKyAgICAgICAgICAgIHdpbGwgYWxsb3cgV2ViQXNzZW1ibHkgdG8g
dXNlIHNvbWUgbWFjaGluZXJ5IGluIGEgZ2VuZXJpYyBtYW5uZXIgd2l0aG91dAorICAgICAgICAg
ICAgaGF2aW5nIGEgVk0uCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKiBkZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzdGVwT3V0T2ZGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpyZXR1cm5FdmVudCk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyOjp1bndpbmRFdmVudCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpkaWRFeGVjdXRl
UHJvZ3JhbSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAg
KiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRy
eSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXQ6OmNvbXBpbGVPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21w
aWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6b3NyRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMaW5rLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdU
b0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgor
ICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6Ondhc21Bd2FyZUxleGljYWxHbG9iYWxPYmplY3QpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lOjp1bnNhZmVDYWxsZXJGcmFtZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
Lmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2FsbGVyRnJhbWUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lT3JFbnRyeUZyYW1lIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6RXhlY1N0YXRlOjp1bnNhZmVDYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmg6CisgICAgICAgIChKU0M6Ok5h
dGl2ZUNhbGxGcmFtZVRyYWNlcjo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyKToKKyAgICAgICAgKEpT
Qzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmU6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmU6On5OYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpv
cGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6Y29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIgY29uc3QpOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6dW53aW5kKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OlN0YWNrVmlzaXRvcik6CisgICAg
ICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0
YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlz
aXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlz
aXRvci5oOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpjYWxsZXJJc0VudHJ5
RnJhbWUgY29uc3QpOgorICAgICAgICAqIGludGVycHJldGVyL1ZNRW50cnlSZWNvcmQuaDoKKyAg
ICAgICAgKEpTQzo6Vk1FbnRyeVJlY29yZDo6cHJldlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAo
SlNDOjpWTUVudHJ5UmVjb3JkOjp1bnNhZmVQcmV2VG9wRW50cnlGcmFtZSk6CisgICAgICAgIChK
U0M6OkVudHJ5RnJhbWU6OnZtRW50cnlSZWNvcmRPZmZzZXQpOgorICAgICAgICAqIGppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1Nj
cmF0Y2hSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNt
Q29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXJJbXBsKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAqIGppdC9KSVRFeGNlcHRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1Vud2luZCk6CisgICAgICAgICogaml0L0pJ
VE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2xvb3BfaGludCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3Ip
OgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvbkR1bXBDYWxsRnJhbWUpOgor
ICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5jcHA6
CisgICAgICAgIChKU0M6OnZtRW50cnlSZWNvcmQpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6RnJh
bWVXYWxrZXIpOgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6YWR2YW5jZVRvUGFyZW50RnJh
bWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0
YWNrVHJhY2VzKToKKyAgICAgICAgKiBydW50aW1lL1Rocm93U2NvcGUuY3BwOgorICAgICAgICAo
SlNDOjpUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OnRvcEVudHJ5RnJhbWVPZmZzZXQp
OgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAgIChKU0M6OmlzU2FuZUZy
YW1lKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyk6
CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjayk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeSk6CisgICAgICAgIChK
U0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VB
bmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAg
ICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OkJC
UVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGxldGUpOgorICAgICAgICAqIHdhc20v
V2FzbUJCUVBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICog
d2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub1dhc20pOgor
ICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6Oldhc206OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Q29kZUJsb2NrOjpjb21waWxlQXN5bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6
OnNldENvbXBpbGF0aW9uRmluaXNoZWQpOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5o
OgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Om9mZnNldE9mSW1wb3J0U3R1YnMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6Q29kZUJsb2NrOjppbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Om9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJTdHVi
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjp3YXNtVG9KU0NhbGxTdHViRm9ySW1w
b3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjb21waWxhdGlvbkZpbmlzaGVk
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpqc0VudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjp3YXNt
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAgICAqIHdhc20v
V2FzbUNvbnRleHQuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExT
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6bG9hZCBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OkNvbnRleHQ6OnN0b3JlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0Lmg6
CisgICAgICAgICogd2FzbS9XYXNtRW1iZWRkZXIuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaC4KKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNp
Z25hbEhhbmRsZXIuY3BwOgorICAgICAgICAqIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
OgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAqIHdhc20vV2FzbUluc3Rh
bmNlLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5oLgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6SW5zdGFuY2Up
OgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6fkluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW5zdGFuY2U6OmV4dHJhTWVtb3J5QWxsb2NhdGVkIGNvbnN0KToKKyAgICAgICAg
KiB3YXNtL1dhc21JbnN0YW5jZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFu
Y2U6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om1vZHVsZSk6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjpjb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6bWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnRhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmxvYWRJMzJHbG9iYWwgY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6bG9hZEk2NEdsb2JhbCBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjpsb2FkRjMyR2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SW5zdGFuY2U6OmxvYWRGNjRHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6c2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpj
YWNoZWRTdGFja0xpbWl0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNl
dENhY2hlZFN0YWNrTGltaXQpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeTo6TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVt
b3J5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6On5NZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Omdyb3cpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9y
eS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OlBp
bm5lZFJlZ2lzdGVySW5mbyk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjp0b1NhdmUgY29uc3Qp
OgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeU1vZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmguCisgICAgICAgIChK
U0M6Oldhc206Om1ha2VTdHJpbmcpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeU1vZGUuaDog
Q29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5oLgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Om1ha2VWYWxpZGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6
OnZhbGlkYXRlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3lu
Yyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmNvbXBpbGVTeW5jKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlOjpjb21waWxlQXN5bmMpOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZS5o
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcik6CisgICAgICAgICogd2FzbS9XYXNt
T01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46Ok9NR1BsYW4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpydW5Gb3JJbmRleCk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbVBhZ2VDb3VudC5oOgorICAgICAgICAo
SlNDOjpXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAqIHdhc20vV2Fz
bVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGxhbjo6cnVuQ29tcGxldGlvblRhc2tzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6YWRkQ29tcGxldGlvblRhc2spOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0cnlS
ZW1vdmVDb250ZXh0QW5kQ2FuY2VsSWZMYXN0KToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmRvbnRGaW5hbGl6ZSk6CisgICAgICAgICogd2Fz
bS9XYXNtU2lnbmF0dXJlLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21TaWduYXR1cmUuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21UYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpU
YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6On5UYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlOjpUYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxl
Ojpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6c2V0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vV2Fz
bVRhYmxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5oLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6bWF4aW11bSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VGFibGU6Om9mZnNldE9mU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxl
OjpvZmZzZXRPZkZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpvZmZzZXRP
Zkluc3RhbmNlcyk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjppc1ZhbGlkU2l6ZSk6Cisg
ICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dF
eGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJp
Z2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtz
OjpzZXRUaHJvd1dhc21FeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OnRo
cm93V2FzbUV4Y2VwdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAg
ICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
c3RvcEFsbFBsYW5zRm9yQ29udGV4dCk6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDoK
KyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldh
c206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgor
ICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNwcC4KKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L0pTV2ViQXNzZW1ibHkuaC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Omlu
c3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp0YWJsZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFpbCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1wb3J0RnVuY3Rpb25JbmZvKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21FbnRyeXBvaW50
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbXBvcnRGdW5j
dGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW50ZXJuYWxNZW1v
cnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Ondhc21Db2RlQmxvY2sg
Y29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2Fz
bVRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNh
bGxlZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9i
YWxzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21D
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
V2FzbU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y2FjaGVk
U3RhY2tMaW1pdCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
c2V0Q2FjaGVkU3RhY2tMaW1pdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6d2FzbU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6d2Fz
bU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6YWxsb2NhdGlv
blNpemUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1vZHVsZSBjb25z
dCk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseU1lbW9yeTo6YWRvcHQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5
OjpKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9y
eTo6Z3Jvdyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3dTdWNjZXNz
Q2FsbGJhY2spOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oOgorICAg
ICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZXhwb3J0U3ltYm9sVGFibGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbklu
ZGV4U3BhY2UgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjYWxs
ZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGUpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJs
ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFi
bGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5o
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRTaXplKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjptYXhpbXVtIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseVRhYmxlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseVRhYmxlOjp0YWJsZSk6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6bWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwpOgorICAgICAgICAoSlND
OjpXYXNtOjp3YXNtVG9KUyk6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub0pTRXhjZXB0aW9u
KToKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmguCisgICAgICAgICogd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24p
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlNZW1v
cnlQcm90b0Z1bmNHcm93KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxl
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9k
dWxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaDoK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseUNvbXBpbGVGdW5j
KToKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjpjb21waWxlQW5k
SW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUpOgorICAgICAgICAqIHdhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKwogMjAxNy0xMC0wMiAgU2FhbSBCYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggZGVidWcgYXNzZXJ0
aW9uIGFmdGVyIHIyMjI2NzEuIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZWI3
NDAxLi5iOTA1MmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA4MCw3ICsx
MDgwLDcgQEAKIAkJNzlDNEIxNUUxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5QzRCMTVDMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5n
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5Q0ZD
NkVGMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlENUNENUIxQzExMDZBOTAwQ0VDQTA3
IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlE
QUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURBRTI3OTFFMDNDODIyMDBCNTI2
QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLzsgfTsKKwkJNzlEQUUyN0ExRTAzQzgyMjAwQjUy
NkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OURBRTI3OTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlv
blR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlERkNCREExRDg4QzU5
NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVFMEMwMDFCNEFGQjg1MDAwMzg1QzkgLyog
VmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1l
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVGRDQ4
MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NTgsNyAr
MTQ1OCw2IEBACiAJCUFEMkZDQzIwMURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxl
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDJGQ0MxNDFEQjU5QzU5MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0
cnVjdG9yLmx1dC5oICovOyB9OwogCQlBRDJGQ0MyMTFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNz
ZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFEMkZDQzE1MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRh
YmxlUHJvdG90eXBlLmx1dC5oICovOyB9OwogCQlBRDJGQ0MyRDFEQjgzOEZEMDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFEMkZDQzI3MURCODM4QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3Rv
dHlwZS5oICovOyB9OwotCQlBRDJGQ0MzMTFEQjgzRDQ5MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJs
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkND
MkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAqLzsgfTsKIAkJQUQ0MTJCMzQx
RTdCMkU5RTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNv
bnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBRDQyNTI1MTFFNUQwRTE0MDA5RDJBOTcgLyogRnVsbENvZGVPcmlnaW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDI1MjUwMUU1RDBERUIwMDlE
MkE5NyAvKiBGdWxsQ29kZU9yaWdpbi5oICovOyB9OwogCQlBRDQ5MzdDNDFEREJFNjE0MDA3N0M4
MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkzN0MyMUREQkU2MEEwMDc3QzgwNyAvKiBBYnN0cmFjdE1v
ZHVsZVJlY29yZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xNDY2LDYgKzE0NjUsMTMgQEAKIAkJQUQ0OTM3RDQxREREMjdERTAwNzdDODA3IC8q
IFdlYkFzc2VtYmx5RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFENDkzN0NBMURERDI3MzQwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0
aW9uLmggKi87IH07CiAJCUFENEIxREZBMURGMjQ0RTIwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0QjFERjgx
REYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmggKi87IH07CiAJCUFENUI0MTZGMUVCQUZC
NzcwMDhFRkE0MyAvKiBXYXNtTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQ1QjQxNkUxRUJBRkI2NTAwOEVGQTQzIC8qIFdhc21OYW1lLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2REQx
RjY4OEI2NTAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2REMxRjY4OEI1RjAwMEJDQUFGIC8qIFdhc21F
bWJlZGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUMzNkRGMUY2OTlFQjYwMDBC
Q0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZFNDFG
NjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUExRjc1QUQ2QTAwMEJDQUFGIC8qIEpTVG9X
YXNtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDhE
RDZDRjFGNjcwODlGMDAwNEVCNTIgLyogSlNUb1dhc20uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFQjFGNzVBRDczMDAwQkNBQUYgLyog
SlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFQzFGNzVB
RDdDMDAwQkNBQUYgLyogV2FzbVRvSlMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkVG
MUY3QTI2M0EwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdh
c21NZW1vcnlNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENzQzOEJGMUUwNDU3
OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtH
Q01hcElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ4RkYzOTgxRUI1
QkRCMjAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8qIFdhc21J
bmRleE9yTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC00MTU1LDkgKzQxNjEsMjUgQEAKIAkJQUQyRkNDMTUxREI1OUM1OTAwQjNFNzM2IC8q
IFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUFEMkZDQzI2MURCODM4QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVBy
b3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3Nl
bWJseVByb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzI3MURCODM4QzQwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseVByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJBc3NlbWJseVByb3RvdHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUQyRkNDMkUxREI4MzlGNzAwQjNFNzM2IC8q
IEpTV2ViQXNzZW1ibHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXZWJBc3NlbWJseS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFEMkZDQzJG
MURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV2ViQXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQUQyRkNDMzIxREM0MDQ1MzAwQjNFNzM2IC8qIFdhc21Gb3JtYXQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUFEM0YxRTQ3MUY0QkE3ODYwMDY2OTkxMiAvKiBXQUJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0FCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0Yx
RTRBMUY0REU2OEMwMDY2OTkxMiAvKiBXQUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBSW5z
dGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNEIxRjRERTY4QzAw
NjY5OTEyIC8qIFdBVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FUYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0QzFGNERFNjhDMDA2Njk5MTIgLyogV0FNZW1vcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0FNZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQUQzRjFFNTIxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTWVtb3J5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdBTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFF
NTMxRjRGNEFFNTAwNjY5OTEyIC8qIFdBTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
TW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNTQxRjRGNEFF
NTAwNjY5OTEyIC8qIFdBSW5zdGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FJbnN0YW5j
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTU1MUY0RjRBRTUwMDY2
OTkxMiAvKiBXQVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBVGFibGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2NDFGNTBFNTdGMDA2Njk5MTIgLyogV0FF
eGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNjUxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQUQzRjFFNjgxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1lbW9yeURlc2NyaXB0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2OTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FNZW1v
cnlEZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBTWVtb3J5RGVzY3JpcHRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2QTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FJ
bXBvcnRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FJbXBvcnRPYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkIxRjU0N0NCODAwNjY5OTEyIC8qIFdBVGFibGVE
ZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBVGFibGVEZXNjcmlwdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZDMUY1NDdDQjgwMDY2OTkxMiAvKiBXQUltcG9y
dE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUltcG9ydE9iamVjdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZEMUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRh
YmxlRGVzY3JpcHRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVRhYmxlRGVzY3JpcHRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTcwMUY1NEMzQUEwMDY2OTkx
MiAvKiBXQUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBRnVuY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNzExRjU0QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUFENDEyQjMxMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ29udGV4dC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENDEyQjMyMUU3QjJFOEEwMDhBRjE1NyAv
KiBXYXNtQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQxMkIzNTFFN0I1N0MwMDA4
QUYxNTcgLyogQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxNzIsMTUgKzQxOTQsMjggQEAKIAkJQUQ0
QjFERjcxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21CaW5kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQUQ0QjFERjgxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21CaW5kaW5nLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFENUI0MTZFMUVCQUZCNjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTmFtZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZEQzFGNjg4QjVGMDAwQkNBQUYgLyogV2FzbUVtYmVk
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21FbWJlZGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBRDVDMzZERTFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21JbnN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFENUMzNkRGMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbUluc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2
RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2RUUxRjdBMjYyOTAwMEJD
QUFGIC8qIFdhc21NZW1vcnlNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21NZW1vcnlNb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkYwMUY3QTI2QkYwMDBCQ0FBRiAv
KiBXYXNtTWVtb3J5TW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMy
QSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21TaWduYXR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDc0
MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtU2lnbmF0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ01hcElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9X
YXNtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTVG9XYXNtLmg7IHBhdGggPSBqcy9KU1RvV2FzbS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDhERDZEMDFGNjcwOEEzMDAwNEVCNTIgLyog
SlNUb1dhc20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNUb1dhc20uY3BwOyBwYXRoID0ganMv
SlNUb1dhc20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDhGRjM5NTFFQjVC
RDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdhc21JbmRleE9yTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21JbmRleE9yTmFtZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2suaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0
IC8qIFdhc21QYWdlQ291bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2FzbVBhZ2VDb3VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEQkM1
NEQyMURGOEVBMDAwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxsZWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmNwcDsg
cGF0aCA9IGpzL1dlYkFzc2VtYmx5VG9KU0NhbGxlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFEQkM1NEQzMURGOEVBMDAwMDVCRjczOCAvKiBXZWJBc3NlbWJseVRvSlNDYWxs
ZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlUb0pTQ2Fs
bGVlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVRvSlNDYWxsZWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdhc21Ub0pTLmg7IHBhdGggPSBqcy9XYXNtVG9KUy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBREQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2FzbVRvSlMuY3BwOyBwYXRoID0ganMvV2FzbVRvSlMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREQwOUFGMjFGNjI0ODI5MDAxMzEz
QzIgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
LmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBREQwOUFGMzFGNjI0ODJFMDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERDhGQTQzMUVCMzA3NzEwMERGNTQyRiAvKiBX
YXNtTmFtZVNlY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2FzbU5hbWVTZWN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
RDhGQTQ0MUVCMzA3NzEwMERGNTQyRiAvKiBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4
IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3Bh
cXVlUm9vdFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDE5MCw2ICs0MjI1
LDggQEAKIAkJQURFODAyOTYxRTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9y
UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFz
c2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vy
cm9yUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURFODAyOTcx
RTA4RjFDOTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBl
Lmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBREU4MDI5RDFFMDhGMjI2MDA1OERFNzggLyogV2ViQXNzZW1i
bHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmNwcDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBREZDMzBGNzFGNDdBN0I4MDA2NDUxRDMgLyogV2ViQXNzZW1ibHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQURG
QzMwRjkxRjQ3QThDMDAwNjQ1MUQzIC8qIFdBTW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBTW9k
dWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OUY4OTM3MTg5MUFEMzMwMEQ1
Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjU5Rjg5MzgxODkxQURCNTAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1
Y3Rpb25TdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5s
aW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NDIsNiArNTY3OSwyNiBAQAogCQkJCTg2RjNF
RUI2MTY4NTVBNUIwMDc3QjkyQSAvKiBPYmpjUnVudGltZUV4dHJhcy5oICovLAogCQkJCUUxMjRB
OEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi8sCiAJCQkJRTEyNEE4
RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi8sCisJCQkJQUQzRjFFNDcx
RjRCQTc4NjAwNjY5OTEyIC8qIFdBQmFzZS5oICovLAorCQkJCUFEM0YxRTY1MUY1MEU1N0YwMDY2
OTkxMiAvKiBXQUV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJQUQzRjFFNjQxRjUwRTU3RjAwNjY5OTEy
IC8qIFdBRXhjZXB0aW9uLmggKi8sCisJCQkJQUQzRjFFNzExRjU0QzNBQTAwNjY5OTEyIC8qIFdB
RnVuY3Rpb24uY3BwICovLAorCQkJCUFEM0YxRTcwMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0
aW9uLmggKi8sCisJCQkJQUQzRjFFNkMxRjU0N0NCODAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0
LmNwcCAqLywKKwkJCQlBRDNGMUU2QTFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3Qu
aCAqLywKKwkJCQlBRDNGMUU1NDFGNEY0QUU1MDA2Njk5MTIgLyogV0FJbnN0YW5jZS5jcHAgKi8s
CisJCQkJQUQzRjFFNEExRjRERTY4QzAwNjY5OTEyIC8qIFdBSW5zdGFuY2UuaCAqLywKKwkJCQlB
RDNGMUU1MjFGNEY0QUU1MDA2Njk5MTIgLyogV0FNZW1vcnkuY3BwICovLAorCQkJCUFEM0YxRTRD
MUY0REU2OEMwMDY2OTkxMiAvKiBXQU1lbW9yeS5oICovLAorCQkJCUFEM0YxRTY4MUY1NDdDQjYw
MDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuY3BwICovLAorCQkJCUFEM0YxRTY5MUY1NDdD
QjYwMDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuaCAqLywKKwkJCQlBRDNGMUU1MzFGNEY0
QUU1MDA2Njk5MTIgLyogV0FNb2R1bGUuY3BwICovLAorCQkJCUFERkMzMEY5MUY0N0E4QzAwMDY0
NTFEMyAvKiBXQU1vZHVsZS5oICovLAorCQkJCUFEM0YxRTU1MUY0RjRBRTUwMDY2OTkxMiAvKiBX
QVRhYmxlLmNwcCAqLywKKwkJCQlBRDNGMUU0QjFGNERFNjhDMDA2Njk5MTIgLyogV0FUYWJsZS5o
ICovLAorCQkJCUFEM0YxRTZEMUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5j
cHAgKi8sCisJCQkJQUQzRjFFNkIxRjU0N0NCODAwNjY5OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9y
LmggKi8sCisJCQkJQURGQzMwRjcxRjQ3QTdCODAwNjQ1MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8s
CiAJCQkJNURFM0QwRjQwREQ4RERGQjAwNDY4NzE0IC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICov
LAogCQkJKTsKIAkJCXBhdGggPSBBUEk7CkBAIC02MDAxLDggKzYwNTgsNiBAQAogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBRDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYg
LyoganMgKi8sCi0JCQkJQUQyRkNDMkUxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHku
Y3BwICovLAotCQkJCUFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Lmgg
Ki8sCiAJCQkJNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmNw
cCAqLywKIAkJCQk1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3Iu
aCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICov
LApAQCAtNjAxOCw2ICs2MDczLDcgQEAKIAkJCQk1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovLAogCQkJCUFENDEyQjMxMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNt
Q29udGV4dC5jcHAgKi8sCiAJCQkJQUQ0MTJCMzIxRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250
ZXh0LmggKi8sCisJCQkJQUQ1QzM2REMxRjY4OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5o
ICovLAogCQkJCTc5REFFMjc5MUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5o
ICovLAogCQkJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmNwcCAqLywKIAkJCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5oICovLApAQCAtNjAyNiw2ICs2MDgyLDggQEAKIAkJCQk1M0Y0MEU4QTFENTkw
MUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8sCiAJCQkJQUQ4RkYzOTYxRUI1
QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5jcHAgKi8sCiAJCQkJQUQ4RkYzOTUxRUI1
QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovLAorCQkJCUFENUMzNkRFMUY2OTlF
QjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuY3BwICovLAorCQkJCUFENUMzNkRGMUY2OTlFQjYw
MDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAqLywKIAkJCQlBRDAwNjU5RDFFQ0FDN0ZFMDAwQ0E5
MjYgLyogV2FzbUxpbWl0cy5oICovLAogCQkJCTUzRTlFMEE5MUVBRTgzREUwMEZFRTI1MSAvKiBX
YXNtTWFjaGluZVRocmVhZHMuY3BwICovLAogCQkJCTUzRTlFMEFBMUVBRTgzREUwMEZFRTI1MSAv
KiBXYXNtTWFjaGluZVRocmVhZHMuaCAqLywKQEAgLTYwMzMsNiArNjA5MSw4IEBACiAJCQkJNTM1
NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLywKIAkJCQk3OUI3NTk3MTFE
RkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCAqLywKIAkJCQk3OUI3
NTk3MjFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggKi8sCisJCQkJ
QUQ1QzM2RjAxRjdBMjZCRjAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmNwcCAqLywKKwkJCQlB
RDVDMzZFRTFGN0EyNjI5MDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuaCAqLywKIAkJCQk3OTAw
ODEzNjFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVsZS5jcHAgKi8sCiAJCQkJNzkwMDgxMzcx
RTk1QThFQzAwNTJEN0NEIC8qIFdhc21Nb2R1bGUuaCAqLywKIAkJCQk1M0U3NzdFMTFFOTJFMjY1
MDA3Q0JFQzQgLyogV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcCAqLywKQEAgLTYwNTQsNiArNjEx
NCw4IEBACiAJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICov
LAogCQkJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywK
IAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJ
CUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovLAorCQkJCUFENUMz
NkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERB
MDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCiAJCQkJNTI1MEQyRDAxRThEQTA1QTAw
MjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQk1M0U5RTBBRTFFQUVDNDU3MDBGRUUyNTEg
LyogV2FzbVRpZXJVcENvdW50LmggKi8sCkBAIC03NjU2LDYgKzc3MTgsMTAgQEAKIAkJQUQyRkNC
OEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBRDhERDZEMDFGNjcwOEEzMDAwNEVCNTIgLyogSlNUb1dhc20uY3Bw
ICovLAorCQkJCUFEOERENkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovLAorCQkJ
CUFERDA5QUYyMUY2MjQ4MjkwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLywKKwkJCQlB
REQwOUFGMzFGNjI0ODJFMDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzODNB
QTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLywKIAkJ
CQlBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICov
LAogCQkJCTc5RUZENDgxMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuY3BwICovLApAQCAtNzY3NSw2ICs3NzQxLDggQEAKIAkJCQlBRDJGQ0JBRDFEQjU4
REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oICovLAogCQkJCUFEMkZD
QkFFMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuY3BwICovLAogCQkJCUFE
MkZDQkFGMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCAqLywKKwkJCQlB
REQwOUFFRjFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuY3BwICovLAorCQkJCUFERDA5QUVF
MUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICovLAogCQkJCUFEMkZDQkIwMURCNThEQTQw
MEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJ
CQlBRDJGQ0JCMTFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25z
dHJ1Y3Rvci5oICovLAogCQkJCUFEMkZDQkIyMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJs
eUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAgKi8sCkBAIC03OTUwLDYgKzgwMTgsNyBAQAogCQkJ
CTBGRUM4NUJCMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQzNkU1NDUzMUM0NjhFNzQwMEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVt
b3J5T2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFG
IC8qIFdhc21Ub0pTLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxRTFCRjI4NkVBMDAxM0M4
OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDMxOURBMDQxQzFCRTQw
RDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtODA0MCw2ICs4MTA5LDcgQEAKIAkJCQlFMzI4REFFQjFEMzhEMDA1MDAx
QTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkx
OEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVF
MTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBRDVDMzZFQjFGNzVBRDczMDAwQkNBQUYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJy
aWVyUHRyLmggaW4gSGVhZGVycyAqLywKQEAgLTgyNDQsNiArODMxNCw3IEBACiAJCQkJMEZBNTgx
QkMxNTBFOTUzMDAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlE
Q0VFMjIwRDFDRUJBRjc1MDAwQzIzOTYgLyogREZHTnVsbEFic3RyYWN0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI5Q0U3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZERDFGNjg4QjY1MDAw
QkNBQUYgLyogV2FzbUVtYmVkZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFOTE5RDBC
QTdEMDBCMUQxQjUgLyogREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQzlERDAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGN0MzOUZGMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCBp
biBIZWFkZXJzICovLApAQCAtODM1NCw4ICs4NDI1LDEwIEBACiAJCQkJMEYzQUM3NTQxODhFNUVD
ODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4
NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4
M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBRDVDMzZFQTFGNzVBRDZBMDAwQkNBQUYgLyogSlNUb1dhc20uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUMzQzU3MUYzM0E0NTMwMEY1OUI2QyAvKiBGYXN0TWFsbG9jQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFC
MTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RTIxRjY5OUVD
MDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkx
N0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
NEU1NDMxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
NEVEQkY3MURCNUZGQzkwMERDODdBNSAvKiBGcmFtZVRyYWNlcnMuaCBpbiBIZWFkZXJzICovLApA
QCAtODc1Nyw3ICs4ODMwLDYgQEAKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNX
ZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjI4NkIxRUI4
RTZDRjAwMEVCNUQyIC8qIEpTV2Vha1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZC
ODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUFE
MkZDQzMxMURCODNENDkwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTMxREI1
OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCBpbiBIZWFkZXJzICov
LApAQCAtODk1MCw2ICs5MDIyLDcgQEAKIAkJCQlCQ0QyMDJENjBFMTcwNzA4MDAyQzdFODIgLyog
UmVnRXhwQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGQjFDOEY2
MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJC
NDExMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1
QzM2RTYxRjY5RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NUIwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cE9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY3QzM5RkQxQzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRDIwMkM0MEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTExOSw2ICs5MTkyLDcgQEAKIAkJCQkwRkUwNTAy
RDFBQTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQy
NkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjFGQjM5MzFFMTc3QTcyMDBBOUJFNTAgLyogVmlzaXRpbmdUaW1lb3V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBRDVDMzZFRjFGN0EyNjNBMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUExMURGNzg2MDkwMEUwNkZCRCAvKiBWaXNpdFJh
Y2VLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBW
TS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50
cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4
IDQxNDU1ZGIuLmI0YTRiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTkzNSw3
ICs5MzUsNiBAQCB0b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAogdG9vbHMvU2lnaWxsQ3Jh
c2hBbmFseXplci5jcHAKIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcAogCi13YXNtL0pTV2ViQXNzZW1i
bHkuY3BwCiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAogd2FzbS9XYXNtQkJRUGxhbi5jcHAK
IHdhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC05NDMsMTIgKzk0MiwxNiBAQCB3YXNtL1dhc21DYWxs
ZWUuY3BwCiB3YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAKIHdhc20vV2FzbUNvZGVCbG9j
ay5jcHAKIHdhc20vV2FzbUNvbnRleHQuY3BwCit3YXNtL1dhc21FbWJlZGRlci5oCiB3YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCiB3YXNtL1dhc21Gb3JtYXQuY3BwCiB3YXNtL1dhc21J
bmRleE9yTmFtZS5jcHAKK3dhc20vV2FzbUluc3RhbmNlLmNwcAord2FzbS9XYXNtSW5zdGFuY2Uu
aAogd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCiB3YXNtL1dhc21NZW1vcnkuY3BwCiB3YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKK3dhc20vV2FzbU1lbW9yeU1vZGUuY3BwCiB3YXNt
L1dhc21Nb2R1bGUuY3BwCiB3YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKIHdhc20vV2Fz
bU1vZHVsZVBhcnNlci5jcHAKQEAgLTk1OCwxMCArOTYxLDE1IEBAIHdhc20vV2FzbU9wY29kZU9y
aWdpbi5jcHAKIHdhc20vV2FzbVBhZ2VDb3VudC5jcHAKIHdhc20vV2FzbVBsYW4uY3BwCiB3YXNt
L1dhc21TaWduYXR1cmUuY3BwCit3YXNtL1dhc21UYWJsZS5jcHAKK3dhc20vV2FzbVRhYmxlLmgK
IHdhc20vV2FzbVRodW5rcy5jcHAKIHdhc20vV2FzbVZhbGlkYXRlLmNwcAogd2FzbS9XYXNtV29y
a2xpc3QuY3BwCiAKK3dhc20vanMvSlNUb1dhc20uY3BwCit3YXNtL2pzL0pTVG9XYXNtLmgKK3dh
c20vanMvSlNXZWJBc3NlbWJseS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcApAQCAtOTcxLDYgKzk3OSw4IEBAIHdhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAK
IHdhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAKIHdhc20vanMvSlNXZWJBc3Nl
bWJseVRhYmxlLmNwcAord2FzbS9qcy9XYXNtVG9KUy5jcHAKK3dhc20vanMvV2FzbVRvSlMuaAog
d2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAogd2FzbS9qcy9X
ZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCmluZGV4IDQyMjgwYzUuLmY4YTM5NzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAt
MTc5LDcgKzE3OSw3IEBAIENhbGxTaXRlSW5kZXggQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpvcmln
aW5hbENhbGxTaXRlSW5kZXgoKSBjb25zdCB7IHJldHVybiBzdHViCiB2b2lkIEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpCiB7CiAgICAgcmVzdG9y
ZVNjcmF0Y2goKTsKLSAgICBqaXQtPmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIobV92bSk7CisgICAgaml0LT5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihtX3ZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGlmIChuZWVkc1RvUmVz
dG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKCkpIHsKICAgICAgICAgLy8gVG8gdGhlIEpJVCB0aGF0
IHByb2R1Y2VzIHRoZSBvcmlnaW5hbCBleGNlcHRpb24gaGFuZGxpbmcKICAgICAgICAgLy8gY2Fs
bCBzaXRlLCB0aGV5IHdpbGwgZXhwZWN0IHRoZSBPU1IgZXhpdCB0byBiZSBhcnJpdmVkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAppbmRleCAzNDhjNjhjLi43
NzE2ZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywgMjAxNCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKgpAQCAtNjUyLDggKzY1Miw4
IEBAIHZvaWQgRGVidWdnZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKCkKICAgICBpZiAoIW1faXNQYXVz
ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1l
ID0gbV92bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJy
ZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5
RnJhbWUpIDogbnVsbHB0cjsKKyAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gbV92bS50
b3BFbnRyeUZyYW1lOworICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFt
ZSA/IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSkgOiBudWxs
cHRyOwogICAgIG1fcGF1c2VPblN0ZXBPdXQgPSB0cnVlOwogICAgIHNldFN0ZXBwaW5nTW9kZShT
dGVwcGluZ01vZGVFbmFibGVkKTsKICAgICBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZl
bnRzKCk7CkBAIC04MzEsOCArODMxLDggQEAgdm9pZCBEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gbV92bS50b3BW
TUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiB0b3BF
bnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwogCiAg
ICAgLy8gUmV0dXJuaW5nIGZyb20gYSBjYWxsLCB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lIGV4cHJl
c3Npb24gb24gdGhlIHN0YXRlbWVudCB3ZSBhcmUgcmV0dXJuaW5nIHRvLgogICAgIG1fcGFzdEZp
cnN0RXhwcmVzc2lvbkluU3RhdGVtZW50ID0gdHJ1ZTsKQEAgLTg1Niw4ICs4NTYsOCBAQCB2b2lk
IERlYnVnZ2VyOjp1bndpbmRFdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1f
Y3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0
b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJh
bWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7
CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBUcmVhdCBzdGVwcGluZyBvdmVyIGFuIGV4
Y2VwdGlvbiBsb2NhdGlvbiBsaWtlIGEgc3RlcC1vdXQuCiAgICAgaWYgKG1fY3VycmVudENhbGxG
cmFtZSA9PSBtX3BhdXNlT25DYWxsRnJhbWUpCkBAIC04ODYsOCArODg2LDggQEAgdm9pZCBEZWJ1
Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKCFt
X2N1cnJlbnRDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZNRW50cnlGcmFtZSog
dG9wVk1FbnRyeUZyYW1lID0gbV92bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZy
YW1lKTsKKyAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1l
OworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKHRvcEVudHJ5RnJhbWUpOwogCiAgICAgLy8gUmV0dXJuaW5nIGZyb20gYSBwcm9ncmFt
LCBjb3VsZCBiZSBldmFsKCksIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbiBvbiB0
aGUgc3RhdGVtZW50IHdlIGFyZSByZXR1cm5pbmcgdG8uCiAgICAgbV9wYXN0Rmlyc3RFeHByZXNz
aW9uSW5TdGF0ZW1lbnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAppbmRleCBkMTlkZGI3Li41ZmE0OGYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgaWYgKCFtX2V4Y2Vw
dGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhj
ZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKLSAgICAgICAg
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7Cisg
ICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkt
PnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9t
Q2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMg
KHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5l
bXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAg
ICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7
CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIg
aXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJh
bWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCA1
ODNiZjk4Li4wMjFlYWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbgog
ICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwogCiAgICAgdW5z
aWduZWQgcmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOwotICAg
IFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0tPnRvcFZNRW50cnlGcmFt
ZSk7CisgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS0+dG9wRW50
cnlGcmFtZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkr
KykgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IHJlZ2lzdGVyU2F2
ZUxvY2F0aW9ucy0+YXQoaSk7CiAgICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoY3Vy
cmVudEVudHJ5LnJlZygpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
CmluZGV4IDM0MzMwOGMuLmFiN2FjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4
aXQ6OmNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgaWYgKGV4aXQubV9r
aW5kID09IEdlbmVyaWNVbndpbmQpIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMg
YSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53
aW5kKCkuCiAgICAgICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1l
IGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOworICAgICAgICAgICAgaml0LnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVu
dHJ5RnJhbWUpOwogICAgICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFkZHJlc3NPZkNhbGxGcmFt
ZUZvckNhdGNoKCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgfQogICAg
ICAgICBqaXQuYWRkUHRyKApAQCAtNTM3LDcgKzUzNyw3IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGls
ZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29u
c3QKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAogICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CisgICAgICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsK
IAogICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJl
c3VsdHMgaW50byB0aGUgc3RhY2suCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmNwcAppbmRleCBiNzMyN2YzLi5kMGM0ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaHVua3MuY3BwCkBAIC0xMzUsNyArMTM1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9z
ckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZH
VW5yZWFzb25hYmxlT1NSRW50cnlKdW1wRGVzdGluYXRpb24pOwogCiAgICAgb2subGluaygmaml0
KTsKLSAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCp2bSk7CisgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5lbWl0TWF0ZXJpYWxp
emVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKaW5kZXggZmYyY2U1Ni4uZmYy
NDY3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCkBAIC0xMzEs
NyArMTMxLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZXN1bHQm
IHNhZmVwb2ludFJlc3VsdCkKIAogICAgIC8vIEVtaXQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgog
ICAgICpzdGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOworICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZy
YW1lKTsKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmdm0pLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTGluay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCmluZGV4
IDdjMDE4MWQuLjJhMWViNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTGluay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlDaGVjayA9IGppdC5jYWxsKCk7CiAKICAgICAg
ICAgICAgIGF1dG8gbm9FeGNlcHRpb24gPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVh
dGVyVGhhbk9yRXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CisgICAgICAgICAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAgICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0
LmNhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAppbmRleCBjNzkzNGUzLi5hOTliNWM0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMjY0LDcgKzI2NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwotICAgICAgICAgICAgICAgICAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOworICAgICAg
ICAgICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAg
ICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0
LmNvZGVCbG9jaygpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAppbmRleCA4ZTA4MWQ3Li4xYzdl
Njg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTg2LDcgKzE4Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAg
IC8vIFRoZSBmaXJzdCB0aGluZyB3ZSBuZWVkIHRvIGRvIGlzIHJlc3RhYmxpc2ggb3VyIGZyYW1l
IGluIHRoZSBjYXNlIG9mIGFuIGV4Y2VwdGlvbi4KICAgICBpZiAoZXhpdC5pc0dlbmVyaWNVbndp
bmRIYW5kbGVyKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNh
dGNoKTsgLy8gVGhlIGZpcnN0IHRpbWUgd2UgaGl0IHRoaXMgZXhpdCwgbGlrZSBhdCBhbGwgb3Ro
ZXIgdGltZXMsIHRoaXMgZmllbGQgc2hvdWxkIGJlIG5vbi1udWxsLgotICAgICAgICBqaXQucmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7Cisg
ICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFkZHJlc3NP
ZkNhbGxGcmFtZUZvckNhdGNoKCksIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
cik7CiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJs
b2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQxMiw4ICs0MTIsOCBAQCBzdGF0aWMgdm9pZCBjb21w
aWxlU3R1YigKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVTYXZlcyA9IFZNOjpn
ZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgUmVnaXN0ZXJTZXQgdm1DYWxs
ZWVTYXZlc1RvU2tpcCA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwogICAgIGlmIChl
eGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIGppdC5sb2FkUHRyKCZ2bS0+dG9w
Vk1FbnRyeUZyYW1lLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVm
ZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5sb2FkUHRyKCZ2bS0+
dG9wRW50cnlGcmFtZSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZm
ZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICB9CiAKICAgICBmb3IgKFJlZyByZWcg
PSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAppbmRl
eCA5ZmEyOWQwLi5iZTYxYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTMtMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMjE3LDcgKzIxOCw3IEBAIEpTR2xvYmFs
T2JqZWN0KiBDYWxsRnJhbWU6Ondhc21Bd2FyZUxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKQog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoIWNhbGxlZSgpLmlzV2FzbSgpKQogICAg
ICAgICByZXR1cm4gbGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBXYXNtOjpsb2Fk
Q29udGV4dCh2bSktPmdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiB2bS53YXNtQ29udGV4dC5s
b2FkKCktPmdsb2JhbE9iamVjdCgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odm0pOwogICAg
IHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0yMzcsMjQgKzIzOCwyNCBAQCBib29s
IENhbGxGcmFtZTo6aXNBbnlXYXNtQ2FsbGVlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUNh
bGxGcmFtZSogQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJiBjdXJyVk1FbnRy
eUZyYW1lKQorQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJiBj
dXJyRW50cnlGcmFtZSkKIHsKLSAgICBpZiAoY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpID09
IGN1cnJWTUVudHJ5RnJhbWUpIHsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogY3VyclZNRW50cnlS
ZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJWTUVudHJ5RnJhbWUpOwotICAgICAgICBjdXJyVk1F
bnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAg
ICBpZiAoY2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAg
ICAgICBWTUVudHJ5UmVjb3JkKiBjdXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3Vy
ckVudHJ5RnJhbWUpOworICAgICAgICBjdXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3Jk
LT5wcmV2VG9wRW50cnlGcmFtZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQt
PnByZXZUb3BDYWxsRnJhbWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxG
cmFtZSo+KGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENhbGxGcmFtZSo+KGNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCi1TVVBQUkVT
U19BU0FOIENhbGxGcmFtZSogQ2FsbEZyYW1lOjp1bnNhZmVDYWxsZXJGcmFtZShWTUVudHJ5RnJh
bWUqJiBjdXJyVk1FbnRyeUZyYW1lKQorU1VQUFJFU1NfQVNBTiBDYWxsRnJhbWUqIENhbGxGcmFt
ZTo6dW5zYWZlQ2FsbGVyRnJhbWUoRW50cnlGcmFtZSomIGN1cnJFbnRyeUZyYW1lKQogewotICAg
IGlmICh1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgPT0gY3VyclZNRW50cnlGcmFt
ZSkgewotICAgICAgICBWTUVudHJ5UmVjb3JkKiBjdXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlS
ZWNvcmQoY3VyclZNRW50cnlGcmFtZSk7Ci0gICAgICAgIGN1cnJWTUVudHJ5RnJhbWUgPSBjdXJy
Vk1FbnRyeVJlY29yZC0+dW5zYWZlUHJldlRvcFZNRW50cnlGcmFtZSgpOworICAgIGlmICh1bnNh
ZmVDYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpID09IGN1cnJFbnRyeUZyYW1lKSB7CisgICAgICAg
IFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZChjdXJyRW50
cnlGcmFtZSk7CisgICAgICAgIGN1cnJFbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnVu
c2FmZVByZXZUb3BFbnRyeUZyYW1lKCk7CiAgICAgICAgIHJldHVybiBjdXJyVk1FbnRyeVJlY29y
ZC0+dW5zYWZlUHJldlRvcENhbGxGcmFtZSgpOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FsbEZyYW1lKj4odW5zYWZlQ2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4odW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJh
bWUoKSk7CiB9CiAKIFNvdXJjZU9yaWdpbiBDYWxsRnJhbWU6OmNhbGxlclNvdXJjZU9yaWdpbigp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXgg
NjIzMDlhMC4uNmQ1ZDcyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaApAQCAtMTQxLDEyICsxNDEsMTIgQEAgbmFtZXNwYWNlIEpTQyAgewogCiAg
ICAgICAgIENhbGxGcmFtZSYgb3BlcmF0b3I9KGNvbnN0IFJlZ2lzdGVyJiByKSB7ICpzdGF0aWNf
Y2FzdDxSZWdpc3Rlcio+KHRoaXMpID0gcjsgcmV0dXJuICp0aGlzOyB9CiAKLSAgICAgICAgQ2Fs
bEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFt
ZSo+KGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7IH0KLSAgICAgICAgdm9pZCogY2FsbGVy
RnJhbWVPclZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZyYW1lQW5kUEMoKS5j
YWxsZXJGcmFtZTsgfQotICAgICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVuc2FmZUNhbGxlckZy
YW1lT3JWTUVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiB1bnNhZmVDYWxsZXJGcmFtZUFuZFBD
KCkuY2FsbGVyRnJhbWU7IH0KKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KGNhbGxlckZyYW1lT3JFbnRyeUZyYW1l
KCkpOyB9CisgICAgICAgIHZvaWQqIGNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gY2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9CisgICAgICAgIFNVUFBSRVNT
X0FTQU4gdm9pZCogdW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVy
biB1bnNhZmVDYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KIAotICAgICAgICBDYWxs
RnJhbWUqIHVuc2FmZUNhbGxlckZyYW1lKFZNRW50cnlGcmFtZSomKTsKLSAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJik7CisgICAg
ICAgIENhbGxGcmFtZSogdW5zYWZlQ2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYpOwog
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFNvdXJjZU9yaWdpbiBjYWxsZXJTb3VyY2VPcmln
aW4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Zy
YW1lVHJhY2Vycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJh
Y2Vycy5oCmluZGV4IGM1YjZiODMuLjc2YWNkNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotc3RydWN0IFZNRW50cnlGcmFtZTsKK3N0cnVjdCBFbnRyeUZyYW1lOwogCiBj
bGFzcyBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgewogcHVibGljOgpAQCAtNzQsMzMgKzc0LDMzIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFTU0VSVChjYWxs
RnJhbWUpOwotICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbEZyYW1l
KSA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZtLT50b3BWTUVudHJ5RnJhbWUpKTsKKyAgICAg
ICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJl
dF9jYXN0PHZvaWQqPih2bS0+dG9wRW50cnlGcmFtZSkpOwogICAgICAgICB2bS0+dG9wQ2FsbEZy
YW1lID0gY2FsbEZyYW1lOwogICAgIH0KIH07CiAKIGNsYXNzIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlIHsKIHB1YmxpYzoKLSAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlcldpdGhSZXN0b3JlKFZNKiB2bSwgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQorICAgIEFMV0FZU19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyV2l0aFJlc3RvcmUoVk0qIHZtLCBFbnRyeUZyYW1lKiBFbnRyeUZyYW1lLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICAgICAgOiBtX3ZtKHZtKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZt
KTsKICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZSk7Ci0gICAgICAgIG1fc2F2ZWRUb3BWTUVudHJ5
RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX3NhdmVkVG9wRW50cnlGcmFt
ZSA9IHZtLT50b3BFbnRyeUZyYW1lOwogICAgICAgICBtX3NhdmVkVG9wQ2FsbEZyYW1lID0gdm0t
PnRvcENhbGxGcmFtZTsKLSAgICAgICAgdm0tPnRvcFZNRW50cnlGcmFtZSA9IHZtRW50cnlGcmFt
ZTsKKyAgICAgICAgdm0tPnRvcEVudHJ5RnJhbWUgPSBFbnRyeUZyYW1lOwogICAgICAgICB2bS0+
dG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgfk5h
dGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKCkKICAgICB7Ci0gICAgICAgIG1fdm0tPnRv
cFZNRW50cnlGcmFtZSA9IG1fc2F2ZWRUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIG1fdm0tPnRv
cEVudHJ5RnJhbWUgPSBtX3NhdmVkVG9wRW50cnlGcmFtZTsKICAgICAgICAgbV92bS0+dG9wQ2Fs
bEZyYW1lID0gbV9zYXZlZFRvcENhbGxGcmFtZTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgVk0q
IG1fdm07Ci0gICAgVk1FbnRyeUZyYW1lKiBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lOworICAgIEVu
dHJ5RnJhbWUqIG1fc2F2ZWRUb3BFbnRyeUZyYW1lOwogICAgIENhbGxGcmFtZSogbV9zYXZlZFRv
cENhbGxGcmFtZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGEyMjE4YjMuLjgyZGEyOTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNjUzLDkg
KzY1Myw5IEBAIHB1YmxpYzoKIAogICAgICAgICBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKG1f
dm0sIG1fY2FsbEZyYW1lKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2aXNpdG9yKTsKIAotICAgICAgICBib29sIHNob3Vs
ZFN0b3BVbndpbmRpbmcgPSB2aXNpdG9yLT5jYWxsZXJJc1ZNRW50cnlGcmFtZSgpOworICAgICAg
ICBib29sIHNob3VsZFN0b3BVbndpbmRpbmcgPSB2aXNpdG9yLT5jYWxsZXJJc0VudHJ5RnJhbWUo
KTsKICAgICAgICAgaWYgKHNob3VsZFN0b3BVbndpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpEb25lOwogCkBAIC02NjMsNyArNjYzLDcgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHZvaWQgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoU3RhY2tWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAogICAgIHsKICNpZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NB
VkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRD
YWxsZWVTYXZlcyA9IHZpc2l0b3ItPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKQEAgLTY3Niw3ICs2
NzYsNyBAQCBwcml2YXRlOgogICAgICAgICBpbnRwdHJfdCogZnJhbWUgPSByZWludGVycHJldF9j
YXN0PGludHB0cl90Kj4obV9jYWxsRnJhbWUtPnJlZ2lzdGVycygpKTsKIAogICAgICAgICB1bnNp
Z25lZCByZWdpc3RlckNvdW50ID0gY3VycmVudENhbGxlZVNhdmVzLT5zaXplKCk7Ci0gICAgICAg
IFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQobV92bS50b3BWTUVudHJ5RnJh
bWUpOworICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0u
dG9wRW50cnlGcmFtZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3Rl
ckNvdW50OyBpKyspIHsKICAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgY3VycmVudEVudHJ5
ID0gY3VycmVudENhbGxlZVNhdmVzLT5hdChpKTsKICAgICAgICAgICAgIGlmIChkb250Q29weVJl
Z2lzdGVycy5nZXQoY3VycmVudEVudHJ5LnJlZygpKSkKQEAgLTcwMiw3ICs3MDIsNyBAQCBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJh
bWUqJiBjYWxsRnJhbWUsIEV4YwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKIAogICAgIGlmICh1bndpbmRTdGFydCA9PSBVbndpbmRGcm9tQ2FsbGVyRnJhbWUpIHsK
LSAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpID09IHZt
LnRvcFZNRW50cnlGcmFtZSkKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPckVu
dHJ5RnJhbWUoKSA9PSB2bS50b3BFbnRyeUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApp
bmRleCA4NWQxNDdhLi5kMDgyYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDE4ICs0NCwx
OCBAQCBTdGFja1Zpc2l0b3I6OlN0YWNrVmlzaXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFZN
KiB2bSkKICAgICBDYWxsRnJhbWUqIHRvcEZyYW1lOwogICAgIGlmIChzdGFydEZyYW1lKSB7CiAg
ICAgICAgIEFTU0VSVCh2bSk7Ci0gICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bS0+
dG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX2ZyYW1lLm1fZW50cnlGcmFtZSA9IHZtLT50b3BF
bnRyeUZyYW1lOwogICAgICAgICB0b3BGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgICAg
IAotICAgICAgICBpZiAodG9wRnJhbWUgJiYgc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZnJhbWUubV9W
TUVudHJ5RnJhbWUpID09IHN0YXRpY19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKLSAgICAgICAg
ICAgIHRvcEZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKS0+bV9w
cmV2VG9wQ2FsbEZyYW1lOwotICAgICAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlGcmFtZSA9IHZt
RW50cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcFZNRW50cnlGcmFt
ZTsKKyAgICAgICAgaWYgKHRvcEZyYW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1f
ZW50cnlGcmFtZSkgPT0gc3RhdGljX2Nhc3Q8dm9pZCo+KHRvcEZyYW1lKSkgeworICAgICAgICAg
ICAgdG9wRnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUubV9lbnRyeUZyYW1lKS0+bV9wcmV2
VG9wQ2FsbEZyYW1lOworICAgICAgICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bUVudHJ5
UmVjb3JkKG1fZnJhbWUubV9lbnRyeUZyYW1lKS0+bV9wcmV2VG9wRW50cnlGcmFtZTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSAwOwor
ICAgICAgICBtX2ZyYW1lLm1fZW50cnlGcmFtZSA9IDA7CiAgICAgICAgIHRvcEZyYW1lID0gMDsK
ICAgICB9Ci0gICAgbV9mcmFtZS5tX2NhbGxlcklzVk1FbnRyeUZyYW1lID0gZmFsc2U7CisgICAg
bV9mcmFtZS5tX2NhbGxlcklzRW50cnlGcmFtZSA9IGZhbHNlOwogICAgIHJlYWRGcmFtZSh0b3BG
cmFtZSk7CiAKICAgICAvLyBGaW5kIHRoZSBmcmFtZSB0aGUgY2FsbGVyIHdhbnRzIHRvIHN0YXJ0
IHVud2luZGluZyBmcm9tLgpAQCAtNzUsMTQgKzc1LDE0IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpn
b3RvTmV4dEZyYW1lKCkKICAgICAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUu
Y2FsbEZyYW1lKCksICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcik7CiAgICAgICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9mcmFtZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1f
Q2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSBt
X2ZyYW1lLm1fY2FsbGVyRW50cnlGcmFtZTsKICAgICAgICAgICAgIHJlYWRGcmFtZShtX2ZyYW1l
LmNhbGxlckZyYW1lKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlYWRJbmxpbmVk
RnJhbWUobV9mcmFtZS5jYWxsRnJhbWUoKSwgY2FsbGVyQ29kZU9yaWdpbik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgbV9mcmFtZS5tX1ZN
RW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5t
X2VudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fY2FsbGVyRW50cnlGcmFtZTsKICAgICByZWFkRnJhbWUo
bV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsKIH0KIApAQCAtMTUyLDkgKzE1Miw5IEBAIHZvaWQgU3Rh
Y2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2Rl
T3JpZ2luKiBjb2RlT3JpCiB7CiAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsK
ICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7Ci0gICAgbV9mcmFtZS5tX0NhbGxlclZNRW50cnlG
cmFtZSA9IG1fZnJhbWUubV9WTUVudHJ5RnJhbWU7Ci0gICAgbV9mcmFtZS5tX2NhbGxlckZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZShtX2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lKTsK
LSAgICBtX2ZyYW1lLm1fY2FsbGVySXNWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fQ2FsbGVyVk1F
bnRyeUZyYW1lICE9IG1fZnJhbWUubV9WTUVudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX2NhbGxl
ckVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fZW50cnlGcmFtZTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVy
RnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKG1fZnJhbWUubV9jYWxsZXJFbnRyeUZyYW1l
KTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVySXNFbnRyeUZyYW1lID0gbV9mcmFtZS5tX2NhbGxlckVu
dHJ5RnJhbWUgIT0gbV9mcmFtZS5tX2VudHJ5RnJhbWU7CiAgICAgbV9mcmFtZS5tX2lzV2FzbUZy
YW1lID0gZmFsc2U7CiAKICAgICBDYWxsZWVCaXRzIGNhbGxlZSA9IGNhbGxGcmFtZS0+Y2FsbGVl
KCk7CkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQsIEluZGVudGVyIGluZGVudCwgc3RkOjpmdW5jdGlvbjwKIAogICAgICAg
ICAgICAgaW5kZW50LS07CiAgICAgICAgIH0KLSAgICAgICAgb3V0LnByaW50KGluZGVudCwgInZt
RW50cnlGcmFtZTogIiwgUmF3UG9pbnRlcih2bUVudHJ5RnJhbWUoKSksICJcbiIpOworICAgICAg
ICBvdXQucHJpbnQoaW5kZW50LCAiRW50cnlGcmFtZTogIiwgUmF3UG9pbnRlcihtX2VudHJ5RnJh
bWUpLCAiXG4iKTsKICAgICAgICAgaW5kZW50LS07CiAgICAgfQogICAgIG91dC5wcmludChpbmRl
bnQsICJ9XG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaAppbmRleCA4YWQwOTQwLi5lMmExMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsNyArNjIs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25z
dCB7IHJldHVybiBtX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyB9Ci0gICAgICAgIGJvb2wg
Y2FsbGVySXNWTUVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlcklzVk1FbnRyeUZy
YW1lOyB9CisgICAgICAgIGJvb2wgY2FsbGVySXNFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsZXJJc0VudHJ5RnJhbWU7IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVyRnJhbWU7IH0KICAgICAgICAgQ2FsbGVlQml0cyBjYWxs
ZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CkBAIC05Nyw3ICs5Nyw2IEBAIHB1
YmxpYzoKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKIAogICAgICAgICBDbG9uZWRBcmd1bWVudHMqIGNyZWF0ZUFyZ3VtZW50cygpOwotICAgICAg
ICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fVk1FbnRyeUZy
YW1lOyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsRnJhbWU7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIElu
ZGVudGVyID0gSW5kZW50ZXIoKSkgY29uc3Q7CkBAIC0xMTQsOCArMTEzLDggQEAgcHVibGljOgog
ICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIG1faW5saW5lQ2FsbEZyYW1lOwogI2VuZGlmCiAgICAg
ICAgIENhbGxGcmFtZSogbV9jYWxsRnJhbWU7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogbV9WTUVu
dHJ5RnJhbWU7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogbV9DYWxsZXJWTUVudHJ5RnJhbWU7Cisg
ICAgICAgIEVudHJ5RnJhbWUqIG1fZW50cnlGcmFtZTsKKyAgICAgICAgRW50cnlGcmFtZSogbV9j
YWxsZXJFbnRyeUZyYW1lOwogICAgICAgICBDYWxsRnJhbWUqIG1fY2FsbGVyRnJhbWU7CiAgICAg
ICAgIENhbGxlZUJpdHMgbV9jYWxsZWU7CiAgICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CkBAIC0xMjMsNyArMTIyLDcgQEAgcHVibGljOgogICAgICAgICBzaXplX3QgbV9hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKICAg
ICAgICAgV2FzbTo6SW5kZXhPck5hbWUgbV93YXNtRnVuY3Rpb25JbmRleE9yTmFtZTsKLSAgICAg
ICAgYm9vbCBtX2NhbGxlcklzVk1FbnRyeUZyYW1lIDogMTsKKyAgICAgICAgYm9vbCBtX2NhbGxl
cklzRW50cnlGcmFtZSA6IDE7CiAgICAgICAgIGJvb2wgbV9pc1dhc21GcmFtZSA6IDE7CiAKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFN0YWNrVmlzaXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCmluZGV4IGYzNmMyYmUuLjAxMDNhNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVj
b3JkLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNRW50cnlSZWNv
cmQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSw3ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgVk1F
bnRyeUZyYW1lOworc3RydWN0IEVudHJ5RnJhbWU7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBW
TTsKIApAQCAtNDAsNyArNDAsNyBAQCBzdHJ1Y3QgVk1FbnRyeVJlY29yZCB7CiAgICAgICovCiAg
ICAgVk0qIG1fdm07CiAgICAgRXhlY1N0YXRlKiBtX3ByZXZUb3BDYWxsRnJhbWU7Ci0gICAgVk1F
bnRyeUZyYW1lKiBtX3ByZXZUb3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogbV9wcmV2
VG9wRW50cnlGcmFtZTsKIAogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTID4gMAogICAgIGludHB0cl90IGNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJb
TlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlNdOwpAQCAtNDksMjAgKzQ5LDIwIEBAIHN0
cnVjdCBWTUVudHJ5UmVjb3JkIHsKICAgICBFeGVjU3RhdGUqIHByZXZUb3BDYWxsRnJhbWUoKSB7
IHJldHVybiBtX3ByZXZUb3BDYWxsRnJhbWU7IH0KICAgICBTVVBQUkVTU19BU0FOIEV4ZWNTdGF0
ZSogdW5zYWZlUHJldlRvcENhbGxGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcENhbGxGcmFtZTsg
fQogCi0gICAgVk1FbnRyeUZyYW1lKiBwcmV2VG9wVk1FbnRyeUZyYW1lKCkgeyByZXR1cm4gbV9w
cmV2VG9wVk1FbnRyeUZyYW1lOyB9Ci0gICAgU1VQUFJFU1NfQVNBTiBWTUVudHJ5RnJhbWUqIHVu
c2FmZVByZXZUb3BWTUVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BWTUVudHJ5RnJhbWU7
IH0KKyAgICBFbnRyeUZyYW1lKiBwcmV2VG9wRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRv
cEVudHJ5RnJhbWU7IH0KKyAgICBTVVBQUkVTU19BU0FOIEVudHJ5RnJhbWUqIHVuc2FmZVByZXZU
b3BFbnRyeUZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wRW50cnlGcmFtZTsgfQogfTsKIAotZXh0
ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKFZNRW50cnlGcmFtZSopOworZXh0
ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKEVudHJ5RnJhbWUqKTsKIAotc3Ry
dWN0IFZNRW50cnlGcmFtZSB7CitzdHJ1Y3QgRW50cnlGcmFtZSB7CiAjaWYgRU5BQkxFKEpJVCkg
JiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgc3RhdGljIHB0cmRp
ZmZfdCB2bUVudHJ5UmVjb3JkT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSog
ZmFrZVZNRW50cnlGcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Vk1FbnRyeUZyYW1lKj4oMHgxMDAw
KTsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChmYWtlVk1F
bnRyeUZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSogZmFrZUVudHJ5RnJhbWUgPSByZWludGVy
cHJldF9jYXN0PEVudHJ5RnJhbWUqPigweDEwMDApOworICAgICAgICBWTUVudHJ5UmVjb3JkKiBy
ZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGZha2VFbnRyeUZyYW1lKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZWNvcmQpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFrZVZNRW50cnlGcmFtZSkpOwor
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGZha2VFbnRyeUZyYW1lKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCA4ZDMxZjdhLi5hNGE0YzBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC01
ODIsNyArNTgyLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhWTSYg
dm0sIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLAogfQogI2VuZGlmCiAKLXZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoVk0mIHZtKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5
RnJhbWUpCiB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNh
dmVSZWdpc3Rlck9mZnNldHMoKTsKQEAgLTYwNSw4ICs2MDUsOCBAQCB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KFZNJiB2bQogICAgIH0KICAgICBBU1NFUlQoc2NyYXRjaCAhPSBJbnZhbGlkR1BSUmVnKTsKIAot
ICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwgc2NyYXRjaCk7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQo
KSksIHNjcmF0Y2gpOworICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZl
ck9mZnNldCgpKSwgc2NyYXRjaCk7CiAKICAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMg
ZXhjZXB0IGZvciB0aGUgc2NyYXRjaC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVn
aXN0ZXJDb3VudDsgaSsrKSB7CkBAIC02MjcsNyArNjI3LDcgQEAgdm9pZCBBc3NlbWJseUhlbHBl
cnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihW
TSYgdm0KICAgICBBU1NFUlQoc2NyYXRjaCA9PSBlbnRyeS5yZWcoKS5ncHIoKSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHNjcmF0Y2gsIGVudHJ5Lm9mZnNldCgpKSwgc2NyYXRjaCk7CiAjZWxzZQot
ICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOwog
I2VuZGlmCiB9CiAKQEAgLTc3OCw0MSArNzc4LDQxIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKFZNJiB2bSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJl
CiB9CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi12b2lkIEFzc2VtYmx5SGVscGVyczo6bG9h
ZFdhc21Db250ZXh0KEdQUlJlZyBkc3QpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFdhc21D
b250ZXh0SW5zdGFuY2UoR1BSUmVnIGRzdCkKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQot
ICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKFdhc206OkNv
bnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBsb2FkRnJvbVRMU1B0cihmYXN0VExTT2Zm
c2V0Rm9yS2V5KFdURl9XQVNNX0NPTlRFWFRfS0VZKSwgZHN0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgotICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53
YXNtQ29udGV4dFBvaW50ZXIsIGRzdCk7CisgICAgbW92ZShXYXNtOjpQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBkc3QpOwogfQogCi12b2lkIEFz
c2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dChHUFJSZWcgc3JjKQordm9pZCBBc3NlbWJs
eUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShHUFJSZWcgc3JjKQogewogI2lmIEVO
QUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkp
IHsKKyAgICBpZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgIHN0b3Jl
VG9UTFNQdHIoc3JjLCBmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9XQVNNX0NPTlRFWFRfS0VZKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtb3ZlKHNyYywgV2FzbTo6UGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dFBvaW50ZXIpOworICAgIG1vdmUoc3Jj
LCBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLndhc21Db250ZXh0SW5zdGFuY2VQb2lu
dGVyKTsKIH0KIAotYm9vbCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dE5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKQorYm9vbCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCiB7CiAjaWYgRU5BQkxFKEZBU1Rf
VExTX0pJVCkKLSAgICBpZiAoV2FzbTo6dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAgICBpZiAo
V2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICByZXR1cm4gbG9hZEZyb21UTFNQ
dHJOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1Nj
cmF0Y2hSZWdpc3RlcigpCitib29sIEFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dElu
c3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExT
X0pJVCkKLSAgICBpZiAoV2FzbTo6dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAgICBpZiAoV2Fz
bTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICByZXR1cm4gc3RvcmVUb1RMU1B0ck5l
ZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKQEAg
LTg3NSwxMCArODc1LDEwIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwoVk0mIHZt
LCBWX0RlYnVnT3BlcmF0aW9uX0VQUCBmdW5jdGlvbiwgdm9pZCogYXJnCiAgICAgfQogfQogCi12
b2lkIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKQordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChH
UFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIpCiB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19S
RUdJU1RFUlMgPiAwCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxl
ZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIGNhbGxlZVNhdmVzQnVmZmVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJP
ZmZzZXQoKSksIGNhbGxlZVNhdmVzQnVmZmVyKTsKIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7
CiAgICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tS
ZWdpc3RlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CmluZGV4IGE2OGMzNjkuLmNlMGFiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaApAQCAtMzYwLDI4ICszNjAsMjggQEAgcHVibGljOgogICAgIHZvaWQg
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1H
UFIpCiAgICAgewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Modm1HUFIsIFZNOjp0b3BWTUVudHJ5RnJhbWVPZmZzZXQoKSks
IHZtR1BSKTsKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlckltcGwodm1HUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Modm1HUFIsIFZNOjp0
b3BFbnRyeUZyYW1lT2Zmc2V0KCkpLCB2bUdQUik7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh2bUdQUik7CiAjZWxzZQogICAgICAgICBV
TlVTRURfUEFSQU0odm1HUFIpOwogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBjb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSwgY29uc3QgVGVtcFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCkgfSkKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lLCBjb25zdCBUZW1wUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSB9KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+
IDAKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwot
ICAgICAgICBsb2FkUHRyKCZ2bS50b3BWTUVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAgICAgY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwodGVtcDEpOwor
ICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CiAjZWxzZQot
ICAgICAgICBVTlVTRURfUEFSQU0odm0pOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlG
cmFtZSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKICNlbmRpZgogICAg
IH0KIAotICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKFZNJik7CisgICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJik7CiAKLSAgICB2b2lkIGNvcHlDYWxsZWVT
YXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZN
JiB2bSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZl
c0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZy
YW1lKiYgdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
ID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAgICB7CiAj
aWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQUlJlZyB0
ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKQEAgLTM5Miw4ICszOTIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAKICAgICAgICAgLy8gQ29weSBz
YXZlZCBjYWxsZWVTYXZlcyBvbiBzdGFjayBvciB1bnNhdmVkIGNhbGxlZVNhdmVzIGluIHJlZ2lz
dGVyIHRvIHZtIGNhbGxlZVNhdmUgYnVmZmVyCi0gICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50
cnlGcmFtZSwgdGVtcDEpOwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFt
ZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVtcDEpOworICAgICAgICBs
b2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVtcDEp
OwogCiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpn
ZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpOwpAQCAtNDAxLDEyICs0MDEsMTIgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBy
ZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0IHZtRW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgICAg
ICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KHZtRW50cnkucmVnKCkpKQorICAgICAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAgICAg
ICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogY3VycmVudEZyYW1l
RW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmZpbmQodm1FbnRyeS5yZWcoKSk7CisgICAgICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxsZWVT
YXZlcy0+ZmluZChlbnRyeS5yZWcoKSk7CiAKLSAgICAgICAgICAgIGlmICh2bUVudHJ5LnJlZygp
LmlzR1BSKCkpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKSB7CiAgICAg
ICAgICAgICAgICAgR1BSUmVnIHJlZ1RvU3RvcmU7CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRGcmFtZUVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgY2FsbGVlU2F2ZSBm
cm9tIHN0YWNrIGludG8gdGVtcCByZWdpc3RlcgpAQCAtNDE0LDkgKzQxNCw5IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyYW1lUG9pbnRlclJlZ2lzdGVy
LCBjdXJyZW50RnJhbWVFbnRyeS0+b2Zmc2V0KCkpLCByZWdUb1N0b3JlKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBzdG9yZSBjYWxsZWUgc2F2
ZSBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICByZWdUb1N0b3JlID0gdm1FbnRyeS5yZWco
KS5ncHIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnVG9TdG9yZSA9IGVudHJ5LnJlZygpLmdw
cigpOwogCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1w
MSwgdm1FbnRyeS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1RvU3Rv
cmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvU3RvcmU7CiAgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRGcmFtZUVudHJ5KSB7CkBAIC00MjUsMTMgKzQyNSwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGxvYWREb3VibGUoQWRkcmVzcyhmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgY3VycmVudEZyYW1lRW50cnktPm9mZnNldCgpKSwgZnBSZWdUb1N0b3JlKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBzdG9yZSBjYWxsZWUg
c2F2ZSBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICBmcFJlZ1RvU3RvcmUgPSB2bUVudHJ5
LnJlZygpLmZwcigpOworICAgICAgICAgICAgICAgICAgICBmcFJlZ1RvU3RvcmUgPSBlbnRyeS5y
ZWcoKS5mcHIoKTsKIAotICAgICAgICAgICAgICAgIHN0b3JlRG91YmxlKGZwUmVnVG9TdG9yZSwg
QWRkcmVzcyh0ZW1wMSwgdm1FbnRyeS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIHN0b3Jl
RG91YmxlKGZwUmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgZW50cnkub2Zmc2V0KCkpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZtKTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOwogICAgICAgICBVTlVTRURfUEFS
QU0odXNlZFJlZ2lzdGVycyk7CiAjZW5kaWYKICAgICB9CkBAIC0xNjQ0LDE0ICsxNjQ0LDE0IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHZvaWQgbG9h
ZFdhc21Db250ZXh0KEdQUlJlZyBkc3QpOwotICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dChHUFJS
ZWcgc3JjKTsKLSAgICBzdGF0aWMgYm9vbCBsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCk7Ci0gICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9T
Y3JhdGNoUmVnaXN0ZXIoKTsKKyAgICB2b2lkIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJl
ZyBkc3QpOworICAgIHZvaWQgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUlJlZyBzcmMpOwor
ICAgIHN0YXRpYyBib29sIGxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hS
ZWdpc3RlcigpOworICAgIHN0YXRpYyBib29sIHN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcg
Y2FsbGVlU2F2ZXNCdWZmZXIpOworICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CiAKICAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9iYXNlbGluZUNvZGVCbG9j
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA1ZWNmM2E2Li5jODEyZjhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBKSVQ6OmVt
aXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5j
aEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZK
SVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CiAK
LSAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdp
c3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwog
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7
CiAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVl
R1BSKSk7CkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMoKQogICAgIGlmICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVS
b2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAgICAg
ICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lIGlzIHBhc3NlZCB0d28g
YXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAKQEAgLTkw
NSw3ICs5MDUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygp
CiAgICAgICAgIG1fZXhjZXB0aW9uSGFuZGxlciA9IGxhYmVsKCk7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAg
ICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRo
ZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggY2EyZGI4Yy4uZjIwMThjYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYs
OCArNTYsOCBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFt
ZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgCiAgICAgRXhlY1N0YXRlKiBzaGFkb3dD
aGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVud2lu
ZEZyb21DYWxsZXJGcmFtZSkgewotICAgICAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9
IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgRW50cnlG
cmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgICAgICBzaGFkb3dD
aGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpOwog
ICAgIH0KICAgICB2bS0+c2hhZG93Q2hpY2tlbigpLmxvZygqdm0sIHNoYWRvd0NoaWNrZW5Ub3BG
cmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aHJvd1BhY2tldCgpKTsKICAgICAKQEAgLTg0
LDcgKzg0LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJh
bWUsIFVud2luZFN0YXJ0IHVud2luZFN0YXJ0KQogICAgIH0gZWxzZQogICAgICAgICBjYXRjaFJv
dXRpbmUgPSBMTEludDo6Z2V0Q29kZVB0cihoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbik7CiAgICAg
Ci0gICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgQVNTRVJUKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2
bS0+dG9wRW50cnlGcmFtZSkpOwogCiAgICAgdm0tPmNhbGxGcmFtZUZvckNhdGNoID0gY2FsbEZy
YW1lOwogICAgIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyA9IGNhdGNoUm91dGluZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IDliNDE2NmEuLjhiNGJl
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtNDU1LDcg
KzQ1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVu
dHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0o
KSk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVzdG9yZUNhbGxlZVNhdmVz
RnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJh
bWUpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAgICAgbG9hZDY0
KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIpOwpAQCAtOTUyLDcgKzk1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29w
X2hpbnQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpCiAg
ICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwog
Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZy
YW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5
RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0
ZWNvZGVPZmZzZXQpOwogICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hUZXN0
UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBhMTIyOGQzLi4wYWQ3ODI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8
cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03NjUsNyArNzY1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZy
YW1lKTsKICAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdU
MSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRo
cm93LCByZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwpA
QCAtODI2LDcgKzgyNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19zdHJpbmcoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAKIHZvaWQgSklUOjpl
bWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsK
KyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdU
Myk7CiAgICAgLy8gb3BlcmF0aW9uVGhyb3cgcmV0dXJucyB0aGUgY2FsbEZyYW1lIGZvciB0aGUg
aGFuZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmlu
ZGV4IDQ4Y2I2ZWQuLjA2NTUwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcApAQCAtMTAzLDE0ICsxMDMsMTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2Nr
KgogICAgIFZNKiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2
bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5j
YWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUgPSB2
bS0+dG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2Fs
bGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgaWYgKCFjYWxsZXJGcmFtZSkgewogICAgICAgICBj
YWxsZXJGcmFtZSA9IGV4ZWM7Ci0gICAgICAgIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5
RnJhbWU7CisgICAgICAgIGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKICAgICB9CiAK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIHZtRW50cnlG
cmFtZSwgY2FsbGVyRnJhbWUpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3Jl
IHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGNhbGxlckZyYW1lLCBzY29wZSk7CiB9CiAKQEAgLTEyMCwxMCArMTIwLDEwIEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd0RpdmlkZUVycm9yKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2
bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5j
YWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUgPSB2
bS0+dG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2Fs
bGVyRnJhbWUoZW50cnlGcmFtZSk7CiAKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVz
dG9yZSB0cmFjZXIodm0sIHZtRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJh
bWUpOwogICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKCp2bSk7CiAgICAgdGhyb3dF
eGNlcHRpb24oY2FsbGVyRnJhbWUsIHNjb3BlLCBjcmVhdGVFcnJvcihjYWxsZXJGcmFtZSwgQVND
SUlMaXRlcmFsKCJEaXZpc2lvbiBieSB6ZXJvIG9yIGRpdmlzaW9uIG92ZXJmbG93LiIpKSk7CiB9
CkBAIC0xMzMsMTAgKzEzMywxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dP
dXRPZkJvdW5kc0FjY2Vzc0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCi0g
ICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAg
IENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUp
OworICAgIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIHZtRW50cnlG
cmFtZSwgY2FsbGVyRnJhbWUpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3Jl
IHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgIEVycm9ySGFuZGxpbmdT
Y29wZSBlcnJvclNjb3BlKCp2bSk7CiAgICAgdGhyb3dFeGNlcHRpb24oY2FsbGVyRnJhbWUsIHNj
b3BlLCBjcmVhdGVFcnJvcihjYWxsZXJGcmFtZSwgQVNDSUlMaXRlcmFsKCJPdXQtb2YtYm91bmRz
IGFjY2Vzcy4iKSkpOwogfQpAQCAtMTQ5LDkgKzE0OSw5IEBAIGludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICBpbnQzMl90
IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAq
dm0sIENvZGVGb3JDYWxsKTsKICAgICBpZiAobWlzc2luZ0FyZ0NvdW50IDwgMCkgewotICAgICAg
ICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAg
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJh
bWUpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0s
IHZtRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiBlbnRyeUZy
YW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAg
ICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxlckZyYW1lLCBzY29wZSk7CiAgICAg
fQogCkBAIC0xNjUsOSArMTY1LDkgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bnN0cnVjdEFyaXR5Q2hlY2soRXhlY1N0YXRlKiBleGVjKQogCiAgICAgaW50MzJfdCBtaXNzaW5n
QXJnQ291bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgKnZtLCBDb2Rl
Rm9yQ29uc3RydWN0KTsKICAgICBpZiAobWlzc2luZ0FyZ0NvdW50IDwgMCkgewotICAgICAgICBW
TUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgICAg
IENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUp
OwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIHZt
RW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1l
ID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAg
ICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxlckZyYW1lLCBzY29wZSk7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXgg
OTJlNDJiMS4uOTAzYTA1Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiAgICAgLy8gZXZl
biB0aG91Z2ggd2Ugd29uJ3QgdXNlIGl0LgogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKIAotICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BF
bnRyeUZyYW1lKTsKIAogICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKQEAgLTM2Miw3ICszNjIsNyBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlbmVyYXRvcihWTSogdm0s
IENvZGVTcGVjaWFsaXphdGlvbktpbmQgawogICAgIC8vIEhhbmRsZSBhbiBleGNlcHRpb24KICAg
ICBleGNlcHRpb25IYW5kbGVyLmxpbmsoJmppdCk7CiAKLSAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOworICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAg
ICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50
b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKaW5kZXggYzA2NDY2NC4uNTI3NzU4MyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
QEAgLTE5NTcsOCArMTk1Nyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25QcmludFN0ZEVycihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHByaW50CiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50
cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBFeGVjU3RhdGUqIGNhbGxlckZyYW1l
ID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiB0
b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKKyAgICBFeGVjU3RhdGUqIGNhbGxlckZy
YW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgaWYgKGNhbGxlckZy
YW1lKQogICAgICAgICB2bS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFtZShjYWxsZXJGcmFtZSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IGYyZDQ5YTYuLjIz
MTVjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcApAQCAtNDgxLDEzICs0ODEsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3RhY2tfY2hl
Y2spCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0g
dm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5j
YWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUg
PSB2bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5j
YWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7CiAgICAg
ICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0udG9wVk1F
bnRyeUZyYW1lOworICAgICAgICB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKICAg
ICB9Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKCZ2bSwgdm1F
bnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmUgdHJhY2VyKCZ2bSwgdG9wRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogCiAgICAgTExJ
TlRfU0VUX1BDX0ZPUl9TVFVCUygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50VGh1bmtzLmNwcAppbmRleCAzNmY2NDg2Li41Mjk2N2UzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyArMTE2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgdm1FbnRyeVRvTmF0aXZlKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBW
TSogdm0sIFByb3RvQ2FsbEZyYW1lKgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAotZXh0ZXJuICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKFZNRW50cnlG
cmFtZSogZW50cnlGcmFtZSkKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29yZCogdm1FbnRyeVJlY29y
ZChFbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQogewogICAgIC8vIFRoZSBDIExvb3AgZG9lc24ndCBo
YXZlIGFueSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMsIHNvIHRoZSBWTUVudHJ5UmVjb3JkIGlzIGFs
bG9jYXRlZCBhdCB0aGUgYmFzZSBvZiB0aGUgZnJhbWUuCiAgICAgaW50cHRyX3Qgc3RhY2tBbGln
bm1lbnQgPSBzdGFja0FsaWdubWVudEJ5dGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggNWRkZTY2NC4uN2JmMWVj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQpAQCAtNjU5LDcgKzY1OSw3IEBAIGVuZAogCiBtYWNybyBjb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLCB0ZW1wKQogICAgIGlmIEFSTTY0
IG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCi0gICAgICAgIGxvYWRwIFZNOjp0b3BWTUVudHJ5RnJh
bWVbdm1dLCB0ZW1wCisgICAgICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwgdGVtcAog
ICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAsIHRlbXApCiAgICAgICAgIGxlYXAgVk1FbnRyeVJl
Y29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlclt0ZW1wXSwgdGVtcAogICAgICAgICBpZiBB
Uk02NApAQCAtNzAxLDcgKzcwMSw3IEBAIGVuZAogCiBtYWNybyByZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAgICAgaWYgQVJNNjQg
b3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFt
ZVt2bV0sIHRlbXAKKyAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1dLCB0ZW1wCiAg
ICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBWTUVudHJ5UmVj
b3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAgICAgICAgIGlmIEFS
TTY0CkBAIC0xMTQ0LDcgKzExNDQsNyBAQCBpZiBub3QgQ19MT09QCiAgICAgICAgIHN0b3JlcCBh
ZGRyZXNzLCBWTTo6bV9sYXN0U3RhY2tUb3Bbdm1dCiAgICAgICAgIHJldAogICAgIAotICAgICMg
Vk1FbnRyeVJlY29yZCogdm1FbnRyeVJlY29yZChjb25zdCBWTUVudHJ5RnJhbWUqIGVudHJ5RnJh
bWUpCisgICAgIyBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0IEVudHJ5RnJhbWUq
IGVudHJ5RnJhbWUpCiAgICAgZ2xvYmFsIF92bUVudHJ5UmVjb3JkCiAgICAgX3ZtRW50cnlSZWNv
cmQ6CiAgICAgICAgIGlmIFg4NiBvciBYODZfV0lOCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDExNGE5
NzguLjMzMDkwZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMjUsOCArMTI1LDggQEAgbWFjcm8g
ZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29yZDo6bV92bVtz
cF0KICAgICBsb2FkcCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9yZXAgdDQsIFZN
RW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBWTTo6dG9wVk1F
bnRyeUZyYW1lW3ZtXSwgdDQKLSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRv
cFZNRW50cnlGcmFtZVtzcF0KKyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0sIHQ0Cisg
ICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3NwXQogCiAg
ICAgIyBBbGlnbiBzdGFjayBwb2ludGVyCiAgICAgaWYgWDg2X1dJTiBvciBNSVBTCkBAIC0xODks
OCArMTg5LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlS
ZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENh
bGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9wQ2FsbEZyYW1lW3Q1XQotICAg
IGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0sIHQ0Ci0gICAg
c3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAgIGxvYWRwIFZNRW50cnlSZWNv
cmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0b3JlcCB0NCwgVk06OnRvcEVu
dHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNmciwgQ2FsbGVlUmVn
aXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTI0MSw3ICsyNDEsNyBAQCBtYWNybyBkb1ZNRW50cnkobWFr
ZUNhbGwpCiAKIC5jb3B5QXJnc0RvbmU6CiAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2FsbEZyYW1l
W3ZtXQotICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAgc3RvcmVw
IGNmciwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBtYWtlQ2FsbChlbnRyeSwgdDMsIHQ0
KQogCkBAIC0yNTUsOCArMjU1LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxv
YWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6
Om1fcHJldlRvcENhbGxGcmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9wQ2FsbEZy
YW1lW3Q1XQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtz
cF0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAgIGxvYWRw
IFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0b3JlcCB0
NCwgVk06OnRvcEVudHJ5RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNm
ciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgdDUKQEAgLTMyNCw4ICszMjQsOCBAQCBfaGFuZGxl
VW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQz
CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDUKICAg
ICBzdG9yZXAgdDUsIFZNOjp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29y
ZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXSwgdDUKLSAgICBzdG9yZXAgdDUsIFZNOjp0b3BW
TUVudHJ5RnJhbWVbdDNdCisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlG
cmFtZVtzcF0sIHQ1CisgICAgc3RvcmVwIHQ1LCBWTTo6dG9wRW50cnlGcmFtZVt0M10KIAogICAg
IGlmIEFSTXY3CiAgICAgICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCB0Mwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQppbmRleCA1ZDYyOTg3Li43NjlmNjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMTI5LDggKzEy
OSw4IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBzdG9yZXAgdm0sIFZNRW50cnlS
ZWNvcmQ6Om1fdm1bc3BdCiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2bV0sIHQ0CiAgICAg
c3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3BdCi0gICAgbG9h
ZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVj
b3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdCisgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJh
bWVbdm1dLCB0NAorICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlG
cmFtZVtzcF0KIAogICAgIGxvYWRpIFByb3RvQ2FsbEZyYW1lOjpwYWRkZWRBcmdDb3VudFtwcm90
b0NhbGxGcmFtZV0sIHQ0CiAgICAgYWRkcCBDYWxsRnJhbWVIZWFkZXJTbG90cywgdDQsIHQ0CkBA
IC0xNzEsOCArMTcxLDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fdm1bdDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJl
dlRvcENhbGxGcmFtZVt0NF0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRyYVRlbXBSZWcs
IFZNOjp0b3BDYWxsRnJhbWVbdm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
Vk1FbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJhVGVtcFJlZywg
Vk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZU
b3BFbnRyeUZyYW1lW3Q0XSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywg
Vk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZl
U2l6ZSwgc3AKIApAQCAtMjIwLDcgKzIyMCw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkK
ICAgICBlbHNlCiAgICAgICAgIHN0b3JlcCBzcCwgVk06OnRvcENhbGxGcmFtZVt2bV0KICAgICBl
bmQKLSAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIHN0b3JlcCBj
ZnIsIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXQogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoZXh0cmFUZW1wUmVnLCAweGJhZDBkYzAyKQogCkBAIC0yMzYsOCArMjM2LDggQEAgbWFjcm8g
ZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bdDRdLCB2
bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0NF0sIHQyCiAg
ICAgc3RvcmVwIHQyLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQotICAgIGxvYWRwIFZNRW50cnlSZWNv
cmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0NF0sIHQyCi0gICAgc3RvcmVwIHQyLCBWTTo6dG9w
Vk1FbnRyeUZyYW1lW3ZtXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5
RnJhbWVbdDRdLCB0MgorICAgIHN0b3JlcCB0MiwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAg
ICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjc2LDcgKzI3Niw2
IEBAIG1hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1wKQogICAgIGVuZAogZW5k
CiAKLQogX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0
MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwpAQCAtMjkxLDggKzI5MCw4IEBAIF9oYW5k
bGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ZtW3QyXSwg
dDMKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbdDJdLCBleHRy
YVRlbXBSZWcKICAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQot
ICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0Ml0sIGV4dHJh
VGVtcFJlZwotICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDNd
CisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0Ml0sIGV4dHJh
VGVtcFJlZworICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BFbnRyeUZyYW1lW3QzXQog
CiAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHNwCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYTVhNTNjNi4uMmEyYmJkZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQwNiw3ICs0MDYs
NyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICAgICAgT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHkoKSA9IGZhbHNlOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VX
ZWJBc3NlbWJseSgpKQotICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RUTFMoKSA9
IGZhbHNlOworICAgICAgICBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQoKSA9IGZh
bHNlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKQogICAgICAgICB8
fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCmluZGV4IDNjZWM1NTIuLjg0NzVjMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ2Nyw4ICs0NjcsNyBAQCB0eXBlZGVmIGNvbnN0IGNo
YXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZhc3RNZW1vcnlS
ZWR6b25lUGFnZXMsIDEyOCwgTm9ybWFsLCAiV2ViQXNzZW1ibHkgZmFzdCBtZW1vcmllcyB1c2Ug
NEdpQiB2aXJ0dWFsIGFsbG9jYXRpb25zLCBwbHVzIGEgcmVkem9uZSAoY291bnRlZCBhcyBtdWx0
aXBsZSBvZiA2NEtpQiBXZWJBc3NlbWJseSBwYWdlcykgYXQgdGhlIGVuZCB0byBjYXRjaCByZWcr
aW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZCAzMi1iaXQsIGFueXRoaW5nIGJleW9uZCB0aGUgcmVk
em9uZSBpcyBleHBsaWNpdGx5IGJvdW5kcy1jaGVja2VkIikgXAogICAgIHYoYm9vbCwgY3Jhc2hJ
ZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3
aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9yeSBmb3Igd2FzbS4iKSBcCiAg
ICAgdih1bnNpZ25lZCwgbWF4TnVtV2ViQXNzZW1ibHlGYXN0TWVtb3JpZXMsIDQsIE5vcm1hbCwg
bnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0VExTLCB0cnVlLCBOb3Jt
YWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0aHJlYWQtbG9jYWwgc3RvcmFn
ZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uIikgXAotICAgIHYoYm9vbCwg
dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlIChhbmQgZmFz
dCBUTFMgaXMgZW5hYmxlZCksIHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0IFRMUy4gSWYg
ZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAorICAgIHYoYm9vbCwgdXNl
RmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHN0
b3JlIGNvbnRleHQgaW4gZmFzdCBUTFMuIElmIGZhbHNlLCB3ZSB3aWxsIHBpbiBpdCB0byBhIHJl
Z2lzdGVyLiIpIFwKICAgICB2KGJvb2wsIHVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxs
cywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgQ2FsbExpbmtJbmZvIHRvIGlu
bGluZSBjYWNoZSBXYXNtIHRvIEpTIGNhbGxzLiIpIFwKICAgICB2KGJvb2wsIHVzZU9iamVjdFJl
c3RTcHJlYWQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZW5hYmxlIE9iamVjdCBS
ZXN0L1NwcmVhZCBmZWF0dXJlLiIpIFwKICAgICB2KGJvb2wsIHVzZUFycmF5QWxsb2NhdGlvblBy
b2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ugb3VyIG5vcm1hbCBh
cnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRoZSBhbGxvY2F0aW9uIHByb2Zp
bGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4IGE0YmU5NWIu
LjNiY2Y2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBGcmFtZVdhbGtl
cihWTSYgdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBjb25zdCBBYnN0cmFjdExvY2tlciYgY29k
ZUJsb2NrU2V0TG9ja2VyLCBjb25zdCBBYnN0cmFjdExvY2tlciYgbWFjaGluZVRocmVhZHNMb2Nr
ZXIpCiAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgLCBtX2NhbGxGcmFtZShjYWxsRnJhbWUp
Ci0gICAgICAgICwgbV92bUVudHJ5RnJhbWUodm0udG9wVk1FbnRyeUZyYW1lKQorICAgICAgICAs
IG1fZW50cnlGcmFtZSh2bS50b3BFbnRyeUZyYW1lKQogICAgICAgICAsIG1fY29kZUJsb2NrU2V0
TG9ja2VyKGNvZGVCbG9ja1NldExvY2tlcikKICAgICAgICAgLCBtX21hY2hpbmVUaHJlYWRzTG9j
a2VyKG1hY2hpbmVUaHJlYWRzTG9ja2VyKQogICAgIHsKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgU1VQUFJFU1NfQVNBTgogICAgIHZvaWQgYWR2YW5jZVRvUGFyZW50RnJhbWUo
KQogICAgIHsKLSAgICAgICAgbV9jYWxsRnJhbWUgPSBtX2NhbGxGcmFtZS0+dW5zYWZlQ2FsbGVy
RnJhbWUobV92bUVudHJ5RnJhbWUpOworICAgICAgICBtX2NhbGxGcmFtZSA9IG1fY2FsbEZyYW1l
LT51bnNhZmVDYWxsZXJGcmFtZShtX2VudHJ5RnJhbWUpOwogICAgIH0KIAogICAgIGJvb2wgaXNB
dFRvcCgpIGNvbnN0CkBAIC0xODgsNyArMTg4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgVk0mIG1f
dm07CiAgICAgRXhlY1N0YXRlKiBtX2NhbGxGcmFtZTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fdm1F
bnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fZW50cnlGcmFtZTsKICAgICBjb25zdCBBYnN0
cmFjdExvY2tlciYgbV9jb2RlQmxvY2tTZXRMb2NrZXI7CiAgICAgY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIG1fbWFjaGluZVRocmVhZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxpbmdPdXQgeyBmYWxz
ZSB9OwpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1Vu
dmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgLy8gV2UgcmV1c2UgTExJbnQg
Q29kZUJsb2NrcyBmb3IgdGhlIGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0byBjaGVjayBmb3Ig
Ym90aCBqaXQgdHlwZXMuCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhbHNvIGJlIGZh
bHNlIGZvciB2YXJpb3VzIHJlYXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZlbiB0aG91Z2gK
ICAgICAgICAgICAgICAgICAvLyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUgcmVhc29uIHRoYXQg
dGhpcyBjYW4gYmUgZmFsc2UgaXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZHIGZyYW1lLAotICAg
ICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGEgVk1F
bnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAgICAgICAgICAvLyBh
bmQgd2UgZW5kIHVwIGhhdmluZyB0byB1bndpbmQgcGFzdCBhbiBFbnRyeUZyYW1lLCB3ZSB3aWxs
IGVuZCB1cCBleGVjdXRpbmcKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3Mg
aGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0IHRoaXMK
ICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBieXRlY29kZUluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGhyb3dTY29wZS5jcHAKaW5kZXggMDZlOTMwMy4uNGM2NWQ2MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDEzIEBAIFRocm93U2Nv
cGU6On5UaHJvd1Njb3BlKCkKIAogICAgIGJvb2wgd2lsbEJlSGFuZGxlQnlMTEludE9ySklUID0g
ZmFsc2U7CiAgICAgdm9pZCogcHJldmlvdXNTY29wZSA9IG1fcHJldmlvdXNTY29wZTsKLSAgICB2
b2lkKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKKyAgICB2b2lkKiB0
b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOwogCi0gICAgLy8gSWYgdGhlIHRvcFZN
RW50cnlGcmFtZSB3YXMgcHVzaGVkIG9uIHRoZSBzdGFjayBhZnRlciB0aGUgcHJldmlvdXNTY29w
ZSB3YXMgaW5zdGFudGlhdGVkLAorICAgIC8vIElmIHRoZSB0b3BFbnRyeUZyYW1lIHdhcyBwdXNo
ZWQgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBpbnN0YW50aWF0ZWQs
CiAgICAgLy8gdGhlbiB0aGlzIHRocm93U2NvcGUgd2lsbCBiZSByZXR1cm5pbmcgdG8gTExJTlQg
b3IgSklUIGNvZGUgdGhhdCBhbHdheXMgZG8gYW4gZXhjZXB0aW9uCiAgICAgLy8gY2hlY2suIElu
IHRoYXQgY2FzZSwgc2tpcCB0aGUgc2ltdWxhdGVkIHRocm93IGJlY2F1c2UgdGhlIExMSW50IGFu
ZCBKSVQgd2lsbCBiZQogICAgIC8vIGNoZWNraW5nIGZvciB0aGUgZXhjZXB0aW9uIHRoZWlyIG93
biB3YXkgaW5zdGVhZCBvZiBjYWxsaW5nIFRocm93U2NvcGU6OmV4Y2VwdGlvbigpLgotICAgIGlm
ICh0b3BWTUVudHJ5RnJhbWUgJiYgcHJldmlvdXNTY29wZSA+IHRvcFZNRW50cnlGcmFtZSkKKyAg
ICBpZiAodG9wRW50cnlGcmFtZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wRW50cnlGcmFtZSkKICAg
ICAgICAgd2lsbEJlSGFuZGxlQnlMTEludE9ySklUID0gdHJ1ZTsKICAgICAKICAgICBpZiAoIXdp
bGxCZUhhbmRsZUJ5TExJbnRPckpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApp
bmRleCAxODFlM2I3Li4zZWU1MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CkBAIC0xODQsNyArMTg0LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBU
eXBlKQogI2VuZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQot
ICAgICwgdG9wVk1FbnRyeUZyYW1lKG51bGxwdHIpCisgICAgLCB0b3BFbnRyeUZyYW1lKG51bGxw
dHIpCiAgICAgLCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQogICAgICwgcHJv
bWlzZURlZmVycmVkVGltZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRUaW1lcj4o
KnRoaXMpKQogICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/IFRo
cmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkgOiBuZXcgQXRvbWljU3RyaW5nVGFi
bGUpCkBAIC0zNjgsNyArMzY4LDcgQEAgVk06On5WTSgpCiAgICAgcHJvbWlzZURlZmVycmVkVGlt
ZXItPnN0b3BSdW5uaW5nVGFza3MoKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYg
KFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSkKLSAgICAgICAgV2FzbTo6ZW5zdXJlV29y
a2xpc3QoKS5zdG9wQWxsUGxhbnNGb3JWTSgqdGhpcyk7CisgICAgICAgIFdhc206OmVuc3VyZVdv
cmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yQ29udGV4dCh3YXNtQ29udGV4dCk7CiAjZW5kaWYKICAg
ICBpZiAoVU5MSUtFTFkobV93YXRjaGRvZykpCiAgICAgICAgIG1fd2F0Y2hkb2ctPndpbGxEZXN0
cm95Vk0odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5NTU4NTk0Li5k
MjBlMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU1LDYgKzU1LDcgQEAK
ICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJWTUVudHJ5
UmVjb3JkLmgiCiAjaW5jbHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9j
YXRvci5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgpAQCAtMzI5LDE0ICsz
MzAsMTUgQEAgcHVibGljOgogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnREYXRhKiBj
bGllbnREYXRhOwotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOworICAgIEVudHJ5
RnJhbWUqIHRvcEVudHJ5RnJhbWU7CiAgICAgLy8gTk9URTogV2hlbiB0aHJvd2luZyBhbiBleGNl
cHRpb24gd2hpbGUgcm9sbGluZyBiYWNrIHRoZSBjYWxsIGZyYW1lLCB0aGlzIG1heSBiZSBlcXVh
bCB0bwotICAgIC8vIHRvcFZNRW50cnlGcmFtZS4KKyAgICAvLyB0b3BFbnRyeUZyYW1lLgogICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIHZvaWQqLCBiZWNhdXNlIGl0IG1pZ2h0IG5vdCBw
b2ludCB0byBhIENhbGxGcmFtZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwNDQxCiAgICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWUgeyBudWxscHRy
IH07Ci0gICAgLy8gRklYTUU6IFNhdmUgdGhpcyBzdGF0ZSBlbHNld2hlcmUgdG8gYWxsb3cgUElD
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NzczCi0gICAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCB7IG51bGxwdHIgfTsKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisgICAgV2FzbTo6Q29udGV4dCB3YXNtQ29udGV4dDsKKyNlbmRpZgogICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB0
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CkBAIC01MDEsOSArNTAzLDkgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0YXJnZXRNYWNoaW5lUENG
b3JUaHJvdyk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCB0b3BWTUVudHJ5RnJhbWVP
ZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdG9wRW50cnlGcmFtZU9mZnNldCgpCiAgICAg
ewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0b3BWTUVudHJ5RnJhbWUpOwor
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0b3BFbnRyeUZyYW1lKTsKICAgICB9
CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlv
bikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTVRyYXBzLmNwcAppbmRleCBkZWFhNDQ5Li44NzNkMzU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtODksNyArODksNyBAQCBpbmxpbmUgQ2Fs
bEZyYW1lKiBzYW5pdGl6ZWRUb3BDYWxsRnJhbWUoQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUpCiAg
ICAgcmV0dXJuIHRvcENhbGxGcmFtZTsKIH0KIAotc3RhdGljIGJvb2wgaXNTYW5lRnJhbWUoQ2Fs
bEZyYW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgVk1FbnRyeUZyYW1lKiBlbnRy
eUZyYW1lLCBTdGFja0JvdW5kcyBzdGFja0JvdW5kcykKK3N0YXRpYyBib29sIGlzU2FuZUZyYW1l
KENhbGxGcmFtZSogZnJhbWUsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEVudHJ5RnJhbWUqIGVu
dHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzKQogewogICAgIGlmIChyZWludGVycHJl
dF9jYXN0PHZvaWQqPihmcmFtZSkgPj0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW50cnlGcmFt
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMSwxOCArMTIxLDE4IEBAIHZvaWQgVk1U
cmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhTaWduYWxDb250ZXh0JiBjb250ZXh0LCBT
dGFja0JvdW5kcyBzdGFjCiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBmb3VuZENvZGVCbG9jayA9
IG51bGxwdHI7Ci0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5
RnJhbWU7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJhbWU7CiAK
ICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY2FsbGVlIHRvIHN0YXJ0IHdpdGguIFNvLCB1c2UgdGhl
IGVuZCBvZiB0aGUgc3RhY2sgdG8ga2VlcCB0aGUKICAgICAvLyBpc1NhbmVGcmFtZSgpIGNoZWNr
ZXIgYmVsb3cgaGFwcHkgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb24uIEl0IHdpbGwgc3RpbGwgY2hl
Y2sKICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgYWRkcmVzcyBpcyBpbiB0aGUgc3RhY2tCb3Vu
ZHMuCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZy
YW1lKj4oc3RhY2tCb3VuZHMuZW5kKCkpOwogCi0gICAgaWYgKCF2bUVudHJ5RnJhbWUgfHwgIWNh
bGxGcmFtZSkKKyAgICBpZiAoIWVudHJ5RnJhbWUgfHwgIWNhbGxGcmFtZSkKICAgICAgICAgcmV0
dXJuOyAvLyBOb3QgcnVubmluZyBKUyBjb2RlLiBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdh
aW4gbGF0ZXIuCiAKICAgICBkbyB7Ci0gICAgICAgIGlmICghaXNTYW5lRnJhbWUoY2FsbEZyYW1l
LCBjYWxsZWVGcmFtZSwgdm1FbnRyeUZyYW1lLCBzdGFja0JvdW5kcykpCisgICAgICAgIGlmICgh
aXNTYW5lRnJhbWUoY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZW50cnlGcmFtZSwgc3RhY2tCb3Vu
ZHMpKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdh
aW4gbGF0ZXIuCiAKICAgICAgICAgQ29kZUJsb2NrKiBjYW5kaWRhdGVDb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTQyLDkgKzE0Miw5IEBAIHZvaWQgVk1UcmFwczo6dHJ5
SW5zdGFsbFRyYXBCcmVha3BvaW50cyhTaWduYWxDb250ZXh0JiBjb250ZXh0LCBTdGFja0JvdW5k
cyBzdGFjCiAgICAgICAgIH0KIAogICAgICAgICBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZTsKLSAg
ICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOwor
ICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwog
Ci0gICAgfSB3aGlsZSAoY2FsbEZyYW1lICYmIHZtRW50cnlGcmFtZSk7CisgICAgfSB3aGlsZSAo
Y2FsbEZyYW1lICYmIGVudHJ5RnJhbWUpOwogCiAgICAgaWYgKCFmb3VuZENvZGVCbG9jaykgewog
ICAgICAgICAvLyBXZSBtYXkgaGF2ZSBqdXN0IGVudGVyZWQgdGhlIGZyYW1lIGFuZCB0aGUgY29k
ZUJsb2NrIHBvaW50ZXIgaXMgbm90CkBAIC0xODEsMTcgKzE4MSwxNyBAQCB2b2lkIFZNVHJhcHM6
OmludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjayhMb2NrZXI8TG9jaz4mLCBFeGVjU3RhdGUqIHRv
cENhbGxGcmFtZQogCiAgICAgbV9uZWVkVG9JbnZhbGlkYXRlZENvZGVCbG9ja3MgPSBmYWxzZTsK
IAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0oKS50b3BWTUVudHJ5RnJhbWU7
CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtKCkudG9wRW50cnlGcmFtZTsKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHRvcENhbGxGcmFtZTsKIAotICAgIGlmICghdm1FbnRyeUZy
YW1lKQorICAgIGlmICghZW50cnlGcmFtZSkKICAgICAgICAgcmV0dXJuOyAvLyBOb3QgcnVubmlu
ZyBKUyBjb2RlLiBOb3RoaW5nIHRvIGludmFsaWRhdGUuCiAKICAgICB3aGlsZSAoY2FsbEZyYW1l
KSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9m
aWxlcjo6SmV0dGlzb25EdWVUb1ZNVHJhcHMpOwotICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFtZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggYWQ3ZDYyMS4u
YWY2Y2ZlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcApAQCAtNDksOCArNDksNiBAQAogI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNr
VmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXNt
Q2FsbGluZ0NvbnZlbnRpb24uaCIKQEAgLTE3OCw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxl
ICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2Nl
ZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
LCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRp
ZXJVcENvdW50Kik7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJf
dCk7CkBAIC0yNDcsNyArMjQ1LDcgQEAgcHJpdmF0ZToKIAogICAgIGludDMyX3QgV0FSTl9VTlVT
RURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJf
dCk7CiAKLSAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmLCBCYXNpY0Jsb2Nr
KiwgVmFsdWUqKTsKKyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVy
ZSYsIEJhc2ljQmxvY2sqLCBWYWx1ZSopOwogICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xv
YmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBWYWx1ZSogaW5zdGFuY2UsIFByb2Nl
ZHVyZSYsIEJhc2ljQmxvY2sqKTsKIAogICAgIE9yaWdpbiBvcmlnaW4oKTsKQEAgLTI2Nyw3ICsy
NjUsNyBAQCBwcml2YXRlOgogICAgIEluc2VydGlvblNldCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFs
dWVzOwogICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAg
R1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKLSAgICBHUFJSZWcgbV93
YXNtQ29udGV4dEdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4
dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsg
ZmFsc2UgfTsKIAogICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWUgeyBudWxscHRyIH07IC8vIEFs
d2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUg
aXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4KQEAgLTI5MSwzNyArMjg5LDM3IEBAIGludDMyX3Qg
QjNJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRy
LCB1aW50MzJfdCBvZmZzCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2FzbUNvbnRleHQoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9j
aywgVmFsdWUqIGFyZykKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5z
dGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVmFsdWUqIGFyZykKIHsK
LSAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChDb250ZXh0Ojp1c2VG
YXN0VExTKCkpIHsKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7Ci0g
ICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCkpCisgICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJ
bnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAg
ICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVl
ZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNt
Q29udGV4dChwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6c3RvcmVX
YXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1swXS5ncHIoKSk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBC
ZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dCByZWdpc3RlciBhbmQg
ZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIg
c2lkZS4KKyAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2Fz
bUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVl
ZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAvLyBUaGlzIHByZXZlbnRz
IHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUg
cGlubmVkIHJlZ2lzdGVyLgogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOwog
ICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICBlZmZlY3RzLndyaXRl
c1Bpbm5lZCA9IHRydWU7CiAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgp
OwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOwotICAgIHBhdGNocG9pbnQtPmNs
b2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRHUFIpKTsKKyAgICBwYXRjaHBvaW50
LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKLSAgICBHUFJSZWcgd2FzbUNvbnRleHRHUFIgPSBtX3dhc21Db250ZXh0R1BSOworICAg
IEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BS
OwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7Ci0gICAgICAgIGppdC5tb3Zl
KHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEdQUik7CisgICAgICAgIGppdC5tb3ZlKHBhcmFt
WzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAgICB9KTsKIH0KIAotQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlN
b2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJh
dG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwg
SW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRp
b25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6
IG1faW5mbyhpbmZvKQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2NvbXBpbGF0aW9uTW9k
ZShjb21waWxhdGlvbk1vZGUpCkBAIC0zMzksOSArMzM3LDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9j
ZWR1cmUKICAgICBtX21lbW9yeUJhc2VHUFIgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVy
OwogICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOwogCi0gICAgbV93YXNt
Q29udGV4dEdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRQb2ludGVyOwotICAgIGlmICghdXNl
RmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNv
bnRleHRHUFIpOworICAgIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2Fz
bUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CisgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkp
CisgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpOwog
CiAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CiAgICAgICAgIEFTU0VS
VCghcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOwpAQCAtMzUwLDYgKzM0
OCw5IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICBtX3Byb2MucGluUmVn
aXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIpOwogICAgIH0KIAorICAgIGlmICh0aHJvd1dhc21F
eGNlcHRpb24pCisgICAgICAgIFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0
aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CisKICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAg
ICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgcGlubmVkR1BSKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBAIC0zNjMsNiArMzY0LDE2IEBAIEIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFBy
b2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLT5lbWl0
RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vz
cyk7CiAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgIGNh
c2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFj
Y2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0IGV4Y2VwdGlvbiBj
aGVjayBiZWNhdXNlIHRoZXkgY2FuIHJlbHkgb24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0IG91
dC1vZi1ib3VuZHMgYWNjZXNzZXMuIEZhdWx0U2lnbmFsSGFuZGxlciBub25ldGhlbGVzcyBuZWVk
cyB0aGUgdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAgICAgd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUoJmNvbXBpbGF0aW9uLT5jYWxsZWVN
b3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKQEAgLTM3Mywx
MiArMzg0LDEyIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgIG1faW5zdGFuY2VW
YWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVjazsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5h
cHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0No
ZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAg
ICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFu
ZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxl
ciBzaWRlLgorICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0
SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVz
dG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCiAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRz
IHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUg
cGlubmVkIHJlZ2lzdGVyLgogICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3Rz
LndyaXRlc1Bpbm5lZCA9IGZhbHNlOwogICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5l
ZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVj
ay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7Cisg
ICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJl
cDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAgICAgICAgIH0KICAgICAgICAgc3Rh
Y2tPdmVyZmxvd0NoZWNrLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOwogICAgICAgICBzdGFj
a092ZXJmbG93Q2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKQEAgLTQwMSw3ICs0MTIs
NyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgYm9vbCBuZWVkVW5kZXJm
bG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6OnJl
c2VydmVkWm9uZVNpemUoKTsKICAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNrID0g
bV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVudENoZWNrU2l6ZSB8
fCBuZWVkVW5kZXJmbG93Q2hlY2s7CiAKLSAgICAgICAgICAgIEdQUlJlZyBjb250ZXh0ID0gdXNl
RmFzdFRMU0ZvckNvbnRleHQoKSA/IHBhcmFtc1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRHUFI7
CisgICAgICAgICAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRM
UygpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogCiAgICAg
ICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hl
Y2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCiAgICAgICAgICAgICAvLyBjZXJ0YWlu
IGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNo
ZWNrLgpAQCAtNDExLDEwICs0MjIsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7CiAKLSAgICAg
ICAgICAgICAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWRXYXNtQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250
ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKIAotICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hl
ZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIGZw
LCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92
ZXJmbG93OwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5kZXJmbG93Q2hlY2sp
KQpAQCAtNDIzLDEwICs0MzQsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVM
b2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dG
cm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiB1c2VGYXN0VExTRm9y
Q29udGV4dCgpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUg
JiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZs
b3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0
byBiZSBjb3JyZWN0LgotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0TmVl
ZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21D
b250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0
SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGpp
dC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRl
ci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBiZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0
aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRp
YWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCiAg
ICAgICAgICAgICB9CkBAIC00MzgsNyArNDQ5LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVy
YXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUK
IAogdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25z
dCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYg
cHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7Ci0gICAgcmVzdG9yZVdhc21Db250ZXh0KHByb2Ms
IGJsb2NrLCBpbnN0YW5jZSk7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywg
YmxvY2ssIGluc3RhbmNlKTsKIAogICAgIGlmICghIW1lbW9yeSkgewogICAgICAgICBjb25zdCBQ
aW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KTsKQEAgLTQ1OCwxMiArNDY5LDEyIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFz
c2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yCiAKICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsK
LSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0u
Z3ByKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFt
c1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSks
IGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRS
ZWdzLT5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+
PSAxKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRo
ZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1
YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVt
b3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJB
c3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1l
bW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQogICAgICAgICAgICAg
ICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6
ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lz
dGVyKTsKICAgICAgICAgfSk7CkBAIC01NDEsMjQgKzU1MiwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAogCiBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkgKENv
bnRleHQqLCBpbnQzMl90KSA9IFtdIChDb250ZXh0KiB3YXNtQ29udGV4dCwgaW50MzJfdCBkZWx0
YSkgLT4gaW50MzJfdCB7Ci0gICAgICAgIFZNJiB2bSA9ICp3YXNtQ29udGV4dC0+dm0oKTsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIEpT
V2ViQXNzZW1ibHlNZW1vcnkqIHdhc21NZW1vcnkgPSB3YXNtQ29udGV4dC0+bWVtb3J5KCk7Ci0K
KyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgaW50MzJf
dCkgPSBbXSAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkg
LT4gaW50MzJfdCB7CiAgICAgICAgIGlmIChkZWx0YSA8IDApCiAgICAgICAgICAgICByZXR1cm4g
LTE7CiAKLSAgICAgICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSBmYWxz
ZTsKLSAgICAgICAgLy8gZ3JvdygpIGRvZXMgbm90IHJlcXVpcmUgRXhlY1N0YXRlKiBpZiBpdCBk
b2Vzbid0IHRocm93IGV4Y2VwdGlvbnMuCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG51bGxw
dHI7Ci0gICAgICAgIFBhZ2VDb3VudCByZXN1bHQgPSB3YXNtTWVtb3J5LT5ncm93KHZtLCBleGVj
LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGVsdGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZh
aWx1cmUpOwotICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAg
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGF1dG8gZ3Jv
d24gPSBpbnN0YW5jZS0+aW50ZXJuYWxNZW1vcnkoKS5ncm93KFBhZ2VDb3VudChkZWx0YSkpOwor
ICAgICAgICBpZiAoIWdyb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRh
OgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1Np
emU6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVk
TWF4aW11bToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZN
ZW1vcnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5wYWdlQ291bnQoKTsKKyAgICAgICAgcmV0dXJu
IGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7CiAgICAgfTsKIAogICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCks
CkBAIC01NzIsMTMgKzU4MSwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnko
RXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSk7CisgICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSkpOwogCi0gICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNl
Kj4obnVsbHB0ciktPm1lbW9yeSgpLT5tZW1vcnkoKS5zaXplKCkpKSA9PSBzaXplb2YodWludDY0
X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7Ci0gICAgVmFsdWUqIHNpemUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0
LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5
TWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0
eXBlKHN0YXRpY19jYXN0PFdhc206Ok1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXpl
b2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgVmFsdWUq
IHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihXYXNt
OjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7CiAgICAgCiAgICAgY29uc3RleHByIHVpbnQzMl90
IHNoaWZ0VmFsdWUgPSAxNjsKLSAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUg
PT0gMSA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRv
IGJlIGNvcnJlY3QuIik7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09
IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0
byBiZSBjb3JyZWN0LiIpOwogICAgIFZhbHVlKiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCksCiAgICAgICAgIHNpemUsIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBz
aGlmdFZhbHVlKSk7CiAKQEAgLTEwNjksMTQgKzEwNzgsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLAogICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVt
SlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIAog
ICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNhbiBiZSBsaW5rZWQgaGVyZSwgaW5zdGVhZCBvZiBn
ZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwgYmVjYXVzZSBhbGwgaW1wb3J0IHN0dWJzIGFyZSBnZW5l
cmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0aW9uIHN0YXJ0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgotICAgICAgICBWYWx1ZSogZnVuY3Rpb25JbXBvcnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihmdW5jdGlvbklu
ZGV4KSkpOwotICAgICAgICBWYWx1ZSoganNUeXBlT2ZJbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4Wiwgb3JpZ2luKCksIGZ1bmN0aW9u
SW1wb3J0LCBzYWZlQ2FzdDxpbnQzMl90PihKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSk7
Ci0gICAgICAgIFZhbHVlKiBpc1dhc21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgV2ViQXNzZW1i
bHlGdW5jdGlvblR5cGUpKTsKKyAgICAgICAgVmFsdWUqIHRhcmdldEluc3RhbmNlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpKTsK
KyAgICAgICAgVmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgdGFyZ2V0SW5zdGFuY2UsIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSk7CiAK
ICAgICAgICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAg
ICAgICAgQmFzaWNCbG9jayogaXNKU0Jsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAg
IEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAg
ICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gs
IG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVx
dWVudGVkQmxvY2soaXNKU0Jsb2NrKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2FsbCwg
RnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlzRW1iZWRkZXJC
bG9jaykpOwogCiAgICAgICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgewpAQCAtMTA5NywxNSArMTEwNSwxNSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsCiAgICAgICAgIFVwc2lsb25WYWx1ZSogd2FzbUNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJu
VHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzV2FzbUJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNtQ2FsbFJlc3VsdCk7CiAgICAgICAgIGlzV2FzbUJs
b2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGlu
dWF0aW9uKTsKIAotICAgICAgICAvLyBGSVhNRTogTGV0cyByZW1vdmUgdGhpcyBpbmRpcmVjdGlv
biBieSBjcmVhdGluZyBhIFBJQyBmcmllbmRseSBJQworICAgICAgICAvLyBGSVhNRTogTGV0J3Mg
cmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24gYnkgY3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkgSUMKICAg
ICAgICAgLy8gZm9yIGNhbGxzIG91dCB0byBKUy4gVGhpcyBzaG91bGRuJ3QgYmUgdGhhdCBoYXJk
IHRvIGRvLiBXZSBjb3VsZCBwcm9iYWJseQogICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIElDIHRv
IGJlIG92ZXIgV2FzbTo6Q29udGV4dCouCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzNzUKLSAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlz
SlNCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQz
Ml90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpKTsKLSAgICAg
ICAgVmFsdWUqIGp1bXBEZXN0aW5hdGlvbiA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
Y29kZUJsb2NrLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpvZmZz
ZXRPZkltcG9ydFdhc21Ub0pTU3R1YihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSog
anNDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywg
aXNKU0Jsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAg
IFZhbHVlKiBjb2RlQmxvY2sgPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLAorICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGlu
c3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZldhc21Db2RlQmxvY2soKSkpOworICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9u
ID0gaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKKyAgICAg
ICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIHNhZmVDYXN0
PGludDMyX3Q+KENvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoZnVu
Y3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFsdWUqIGVtYmVkZGVyQ2FsbFJlc3VsdCA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzRW1iZWRkZXJCbG9jaywgb3Jp
Z2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICAgICAgWyZdIChQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CkBAIC0xMTE5LDggKzExMjcsOCBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1
cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIFVwc2lsb25WYWx1ZSoganNDYWxsUmVzdWx0VXBzaWxvbiA9
IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0pTQmxvY2stPmFwcGVuZE5ldzxVcHNp
bG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGpzQ2FsbFJlc3VsdCk7Ci0gICAgICAgIGlzSlNC
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIFVwc2lsb25WYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxv
biA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVu
ZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7
CisgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywg
SnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBjb250aW51YXRpb247CiAKQEAgLTExMjksNyArMTEzNyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb250aW51YXRpb24t
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNUeXBlKHJldHVyblR5cGUpLCBvcmln
aW4oKSk7CiAgICAgICAgICAgICB3YXNtQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQp
OwotICAgICAgICAgICAganNDYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7CisgICAg
ICAgICAgICBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdl
YkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1v
cnkuCkBAIC0xMTY1LDE3ICsxMTczLDE3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAg
bV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50
cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKICAgICBFeHByZXNzaW9u
VHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOwotICAgIEV4cHJlc3Npb25UeXBlIGpzRnVuY3Rp
b25CdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyOwogICAgIEV4cHJl
c3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplOwogICAgIHsKICAgICAgICAgRXhw
cmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgaW5z
dGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mVGFibGUoKSkpOworICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbVRhYmxlKCkpKTsKICAg
ICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAg
ICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZz
ZXRPZkZ1bmN0aW9ucygpKSk7Ci0gICAgICAgIGpzRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNz
ZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1bmN0aW9ucygpKSk7CisgICAgICAgICAgICB0YWJsZSwg
c2FmZUNhc3Q8aW50MzJfdD4oV2FzbTo6VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsKKyAg
ICAgICAgaW5zdGFuY2VzQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgICAg
IHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMo
KSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLAot
ICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6
b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihX
YXNtOjpUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKICAgICB9CiAKICAgICAvLyBDaGVjayB0aGUg
aW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHZhbGlkLgpAQCAtMTE5NSw2ICsxMjAzLDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0
aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdp
bigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBvZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgdGhh
dCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24n
dC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFs
aXplZC4KKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBq
dXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMg
MC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAogICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKENhbGxhYmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBz
aXplb2YodWludDMyX3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTMyIik7CiAgICAgRXhwcmVz
c2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5j
dGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rpb24s
IHNpZ25hdHVyZUluZGV4KSkpOwogICAgIHsKQEAgLTEyMjMsMTkgKzEyMzIsMTcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW8KICAgICB7CiAgICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCiAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3Jp
Z2luKCksIGNhbGxlZUluZGV4KSwKLSAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCks
IHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSkpOwotICAgICAgICBWYWx1ZSoganNPYmpl
Y3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBqc0Z1bmN0aW9uQnVmZmVyLCBv
ZmZzZXQpKTsKKyAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXYXNt
OjpJbnN0YW5jZSopKSk7CisgICAgICAgIFZhbHVlKiBuZXdDb250ZXh0SW5zdGFuY2UgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkpOwog
CiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwog
ICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBtX3Byb2MuYWRkQmxvY2soKTsK
IAotICAgICAgICBWYWx1ZSogbmV3Q29udGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAg
ICAgICAgICBqc09iamVjdCwgc2FmZUNhc3Q8aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2U6Om9mZnNldE9mSW5zdGFuY2UoKSkpOwotICAgICAgICBWYWx1ZSogaXNTYW1lQ29udGV4dCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LAotICAgICAgICAgICAgbmV3Q29udGV4dCwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgVmFs
dWUqIGlzU2FtZUNvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAorICAgICAgICAgICAgbmV3Q29udGV4dEluc3Rh
bmNlLCBpbnN0YW5jZVZhbHVlKCkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksCi0gICAgICAgICAgICBp
c1NhbWVDb250ZXh0LCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJs
b2NrKGRvQ29udGV4dFN3aXRjaCkpOworICAgICAgICAgICAgaXNTYW1lQ29udGV4dEluc3RhbmNl
LCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4
dFN3aXRjaCkpOwogCiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29u
dGV4dFN3aXRjaC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwg
b3JpZ2luKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRy
dWU7CkBAIC0xMjQzLDI2ICsxMjUwLDI2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29u
dGV4dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChuZXdDb250ZXh0SW5zdGFuY2UsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwot
ICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgb2xkQ29udGV4dCA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdwcigpOwogICAgICAgICAgICAg
Y29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKTsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5z
aXplUmVnaXN0ZXJzOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdz
LmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHQgIT0gYmFz
ZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
b2xkQ29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVt
b3J5KTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobmV3Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkp
KTsKLSAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KG5ld0NvbnRleHQpOwotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHQsIENvbnRl
eHQ6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9y
eSouCisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRl
eHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGlt
aXQoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsg
Ly8gV2FzbTo6TWVtb3J5Ki4KICAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0g
MSk7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VN
ZW1vcnkpOwotICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBu
ZXdDb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIg
IT0gbmV3Q29udGV4dEluc3RhbmNlKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0u
c2l6ZU9mZnNldCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXpl
UmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVt
b3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc21NZW1vcnk6OnZvaWQq
LgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1v
cnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICAgICAgfSk7CiAgICAgICAg
IGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3Jp
Z2luKCksIGNvbnRpbnVhdGlvbik7CiAKQEAgLTEzMzksMTk0ICsxMzQ2LDYgQEAgdm9pZCBCM0lS
R2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ss
IGNvbnN0IEV4cHJlc3MKICAgICBkYXRhTG9nTG4oKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQm
IGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXgpCi17Ci0gICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0Lmpz
RW50cnlwb2ludEpJVDsKLQotICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRl
cm5hbEZ1bmN0aW9uPigpOwotICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotCi0gICAg
Ly8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKLSAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxs
ZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAg
ICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2Rl
TG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVN
b3ZlTG9jYXRpb247Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihjYWxsZWVNb3ZlTG9jYXRpb24pOwotICAgIH0pOwotCi0gICAgY29uc3QgUGlubmVkUmVnaXN0
ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKLSAgICBSZWdp
c3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2RlKTsKLQotI2lmICFBU1NFUlRf
RElTQUJMRUQKLSAgICB1bnNpZ25lZCB0b1NhdmVTaXplID0gdG9TYXZlLm51bWJlck9mU2V0R1BS
cygpOwotICAgIC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUgc2F2ZXMuCi0gICAgdG9TYXZl
LmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBBU1NFUlQo
dG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUpOwotI2VuZGlmCi0KLSAgICBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9m
ZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCk7Ci0gICAgcmVzdWx0
LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwotCi0g
ICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNp
emVvZih2b2lkKik7Ci0gICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxpbmdDb252ZW50aW9u
OjpoZWFkZXJTaXplSW5CeXRlcygpOwotICAgIHRvdGFsRnJhbWVTaXplIC09IHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKTsKLSAgICB1bnNpZ25lZCBudW1HUFJzID0gMDsKLSAgICB1bnNpZ25lZCBu
dW1GUFJzID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkp
KSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAg
ICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJn
cy5zaXplKCkpCi0gICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQq
KTsKLSAgICAgICAgICAgICsrbnVtR1BSczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdhc206OkYzMjoKLSAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICBpZiAo
bnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQotICAg
ICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAg
ICArK251bUZQUnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdu
bWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKLSAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8gV2Ugc2F2ZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHJl
Z2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KLSAgICAvLyBUaGUgcmVhc29uIGlz
IHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2guIFRoYXQgc2FpZCwKLSAgICAv
LyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVtb3J5LCBzbyBpdCdzIG5vdCBy
ZWFsbHkKLSAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHRoZXkgZG9u
J3QuCi0gICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lz
dGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdw
cigpOwotICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7Ci0g
ICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgR1BSUmVnIHdhc21Db250
ZXh0R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dFBvaW50ZXI7Ci0KLSAgICB7Ci0gICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotICAgICAgICBudW1HUFJzID0gMDsK
LSAgICAgICAgbnVtRlBScyA9IDA7Ci0gICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHNldCB0aGUg
cGlubmVkIHJlZ2lzdGVycyBhZnRlciB0aGlzLiBTbwotICAgICAgICAvLyB3ZSBjYW4gdXNlIHRo
aXMgYXMgYSBzY3JhdGNoIGZvciBub3cgc2luY2Ugd2Ugc2F2ZWQgaXQgYWJvdmUuCi0gICAgICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKLQotICAg
ICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0gICAgICAgIC8vIHZtRW50cnlUb1dhc20gcGFzc2Vz
IFdhc206OkNvbnRleHQqIGFzIHRoZSBmaXJzdCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCi0gICAg
ICAgIC8vIG5vdCB1c2luZyBmYXN0IFRMUyB0byBob2xkIHRoZSBXYXNtOjpDb250ZXh0Ki4KLSAg
ICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpz
T2Zmc2V0KSwgd2FzbUNvbnRleHRHUFIpOwotICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zm
c2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KTsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewot
ICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAgICAgICAgICBjYXNlIFdhc206Okk2NDoK
LSAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2dwckFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJn
dW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNP
ZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2
NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zm
c2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChz
Y3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2
b2lkKik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVt
R1BSc10uZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Nb
bnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK251
bUdQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkYz
MjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAgICAgIGlmIChudW1G
UFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09
IFdhc206OkYzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91Ymxl
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZz
ZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGpz
T2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoISFpbmZvLm1lbW9yeSkgewotICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5l
ZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0KLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29u
dGV4dCgpKQotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdh
c21Db250ZXh0R1BSLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250
ZXh0KGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnko
KSksIGJhc2VNZW1vcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBp
bm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKLSAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXpl
KCkgPj0gMSk7Ci0gICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAv
LyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRl
cyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJs
eU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6
ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3Nb
aV0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRP
Zk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgfQotCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVuY3Rpb25D
b3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsKLSAgICB9KTsK
LQotCi0gICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lz
dGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdw
cigpOwotICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAg
ICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOwotICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIG9mZnNldCksIHJlZyk7Ci0gICAgfQotCi0gICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJu
VHlwZSgpKSB7Ci0gICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgIGppdC5tb3ZlRmxvYXRUbzMy
KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICBqaXQubW92ZURvdWJsZVRv
NjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQogYXV0byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KIHsK
ICAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFy
c2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CkBAIC0xNTM0LDcgKzEzNTMsNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29u
dGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBz
aXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUg
Y29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGll
clVwKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
Y29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1l
bW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRo
cm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8
SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMTU1OCwxMSArMTM3NywxMSBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KENvbXBpbGF0aW9uQwogICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0
aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9u
TGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQoaW5mbywgcHJvY2VkdXJlLCBy
ZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1v
ZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7Ci0gICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVy
YXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIGluZm8pOworICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2Vk
dXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxh
dGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAg
ICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0
aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCi0gICAgY29udGV4dC5pbnNlcnRD
b25zdGFudHMoKTsKKyAgICBpckdlbmVyYXRvci5pbnNlcnRDb25zdGFudHMoKTsKIAogICAgIHBy
b2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgpOwogICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXgg
ZTJjNmFkYi4uNjliZTQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQjNDb21waWxhdGlv
bi5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtVGll
clVwQ291bnQuaCIKQEAgLTU0LDkgKzU1LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2lu
dEJ5cHJvZHVjdHM7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGls
YXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRy
KTsKLQotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3Jh
cHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUs
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQm
LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUs
IENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0g
bnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cAppbmRleCAyMmVkZDE2Li5kMGVhZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCkBA
IC01MywyMSArNTEsMjEgQEAgbmFtZXNwYWNlIFdhc21CQlFQbGFuSW50ZXJuYWwgewogc3RhdGlj
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1CQlFQbGFuOjpCQlFQbGFuKFZNKiB2
bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlv
blRhc2smJiB0YXNrKQotICAgIDogQmFzZSh2bSwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNr
KSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0
aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVF
bWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlv
biB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyks
IFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNt
RXhjZXB0aW9uKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKQogICAgICwgbV9hc3lu
Y1dvcmsod29yaykKIHsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihWTSogdm0sIFZlY3Rvcjx1aW50
OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAg
ICA6IEJCUVBsYW4odm0sIGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShz
b3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFzaykpCitCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQq
IGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBs
ZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJX
cmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorICAgIDogQkJR
UGxhbihjb250ZXh0LCBhZG9wdFJlZigqbmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291
cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBl
ciksIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7
CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNp
emVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
Ci0gICAgOiBCYXNlKHZtLCBzb3VyY2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKK0JC
UVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBz
aXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNr
KQorICAgIDogQmFzZShjb250ZXh0LCBzb3VyY2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNr
KSkKICAgICAsIG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCiAgICAgLCBtX2FzeW5jV29yayh3b3Jr
KQogewpAQCAtMjY5LDcgKzI2Nyw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwog
ICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tz
KCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBh
dXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9u
Q29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBm
dW5jdGlvbkluZGV4LCB0aWVyVXApOworICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3Vs
dCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0s
IGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1f
dGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29t
cGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKQEAgLTI4NSw3ICsyODMsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogCiAgICAgICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25J
bmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fanNUb1dh
c21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgY3JlYXRlSlNUb1dhc21XcmFw
cGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCAmbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KSk7CisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwg
bV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5k
ZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhd
LCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAg
ICAgIH0KIApAQCAtMzE0LDE0ICszMTIsMTQgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNv
bnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmIChhdXRvIGpzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IG1fanNUb1dhc21JbnRl
cm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
IGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAgICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwo
bG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24g
ZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAganNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9u
ID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgICAgIGVt
YmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICAgICAgRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkphdmFTY3JpcHQtPldlYkFzc2VtYmx5IGVudHJ5cG9p
bnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAogICAgICAgICAgICAgICAg
ICAgICBXVEZNb3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKaW5kZXggMzU5ZjEz
Yi4uYzZlYTQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJC
UVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBA
IC0yOCwxMiArMjgsMTIgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJD
b21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRl
ICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0
Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVk
VGFzay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTQxLDggKzQxLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBDYWxsTGlua0luZm87Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIEpTUHJvbWlzZURl
ZmVycmVkOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTUwLDEyICs0OCwxMyBAQCBjbGFzcyBC
QlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQ
bGFuOwogICAgIGVudW0gQXN5bmNXb3JrIDogdWludDhfdCB7IEZ1bGxDb21waWxlLCBWYWxpZGF0
aW9uIH07CisKICAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSBy
ZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2Ug
Y3ljbGUuCi0gICAgQkJRUGxhbihWTSosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29y
aywgQ29tcGxldGlvblRhc2smJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSos
IFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEJC
UVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+
JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYs
IFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91
bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxl
IGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwogICAgIC8vIEZJWE1FOiBXaGVuIHdlIGdl
dCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBBc3luY1dvcmsgZnJvbSB0
aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oVk0qLCBjb25z
dCB1aW50OF90Kiwgc2l6ZV90LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qs
IEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAKICAgICBib29sIHBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUoKTsKIApAQCAtMTQxLDcgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25z
OwogICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6
SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZXhw
b3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhh
c2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2pzVG9X
YXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhh
c2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVk
ZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4
dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwogICAgIFZlY3RvcjxUaWVyVXBDb3VudD4gbV90aWVy
VXBDb3VudHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5J
bmxpbmVzLmgKaW5kZXggMWI4YjU2Zi4uNDQ0NzkwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKQEAgLTM5LDEwICszOSwxMCBAQCB2b2lk
IEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogICAg
IEFTU0VSVCghZmFpbGVkKCkpOwogICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbklu
ZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMu
c2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewogCi0gICAgICAgIFJlZlB0cjxXYXNt
OjpDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1dG8ganNUb1dhc21G
dW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlv
bkluZGV4KSkgewotICAgICAgICAgICAganNFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVl
OjpjcmVhdGUoV1RGTW92ZShqc1RvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoanNUb1dhc21GdW5jdGlvbi0+Y2Fs
bGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGpzRW50cnlwb2ludENhbGxlZS5n
ZXQoKSkpOworICAgICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWU7CisgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVk
ZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsK
KyAgICAgICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUuZ2V0KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIEludGVybmFsRnVuY3Rp
b24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbklu
ZGV4XS5nZXQoKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2Fs
bGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykKICAgICAgICAgUmVmPFdhc206OkNhbGxlZT4g
d2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0
aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9u
LT5uYW1lU2VjdGlvbi5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CiAKLSAgICAgICAg
Y2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxl
ZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKKyAgICAgICAgY2FsbGJhY2soaW50
ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdU
Rk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAppbmRleCA2N2NjZjVlLi40OTEwYzgzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC0yOSw1OTYgKzI5
LDE0IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCi0jaW5jbHVkZSAiSklURXhjZXB0aW9ucy5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgotI2luY2x1ZGUgIldhc21D
YWxsaW5nQ29udmVudGlvbi5oIgotI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCi0jaW5jbHVkZSAi
V2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
IAogdXNpbmcgSklUID0gQ0NhbGxIZWxwZXJzOwogCi1zdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUlt
cG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQp
Ci17Ci0gICAgLy8gV2UncmUgY2FsbGluZyBvdXQgb2YgdGhlIGN1cnJlbnQgV2ViQXNzZW1ibHku
SW5zdGFuY2UuIFRoYXQgSW5zdGFuY2UgaGFzIGEgbGlzdCBvZiBhbGwgaXRzIGltcG9ydCBmdW5j
dGlvbnMuCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChyZXN1bHQpOwotICAgIGppdC5sb2FkUHRy
KEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBv
cnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOwotfQotCi1FeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxs
TGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwg
dW5zaWduZWQgaW1wb3J0SW5kZXgpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9l
c24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCi0gICAg
Ly8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCi0gICAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3
YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBjb25zdCBKU0NDYWxsaW5nQ29u
dmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7Ci0gICAgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKLSAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7Ci0g
ICAgSklUIGppdDsKLQotICAgIC8vIE5vdGU6IFdhc21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhh
dCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVlIHNhdmUuCi0gICAgLy8gSWYgd2UgZXZl
ciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gY2hhbmdlIFdhc21CM0lSR2VuZXJh
dG9yLgotCi0gICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZl
bnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KLSAgICBBU1NFUlQoIWpzQ0MubV9ncHJBcmdz
LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFqc0NDLm1fZnByQXJncy5zaXplKCkpOwotCi0gICAgaml0
LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1t
MzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAv
LyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQotCi0gICAgewotICAgICAgICBib29sIGhhc0JhZEk2
NFVzZSA9IGZhbHNlOwotICAgICAgICBoYXNCYWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJldHVyblR5
cGUoKSA9PSBJNjQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwg
YXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUg
YXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAgc3dpdGNo
IChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1
bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAg
ICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkg
ewotICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICAgICAgaml0LmxvYWRXYXNt
Q29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotCi0gICAgICAgICAgICAvLyBTdG9yZSBD
YWxsZWUuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6YXJndW1lbnRHUFIxLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVl
KCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86OmFyZ3VtZW50R1BSMiwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAg
ICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwotCi0gICAgICAgICAgICB2b2lk
ICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10g
KEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCkgLT4g
dm9pZCB7Ci0gICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAg
ICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9i
YWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJ
TGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFu
IGltcG9ydGVkIGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxU
b0FsbG9jYXRlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5k
aW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwotCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
Y2FsbCwgdGhyb3dCYWRJNjQpOwotICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1w
b3J0WyVpXSIsIGltcG9ydEluZGV4KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBIZXJl
IHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gc2F2ZXMgYXQgbGVhc3Qg
YWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4gV2UgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gc2F2
ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB0aGUgd2FzbSBjYWxsZWUgYWxyZWFk
eSB0b29rIGNhcmUgb2YgdGhpcy4KLSAgICBSZWdpc3RlclNldCBtaXNzaW5nQ2FsbGVlU2F2ZXMg
PSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgIG1pc3NpbmdDYWxsZWVTYXZlcy5l
eGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKLSAgICBBU1NFUlQobWlzc2luZ0Nh
bGxlZVNhdmVzLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAoIU9wdGlvbnM6OnVzZUNhbGxJQ3NGb3JX
ZWJBc3NlbWJseVRvSlNDYWxscygpKSB7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYXJnQ291bnQgKiBzaXplb2YodWludDY0
X3QpKTsKLSAgICAgICAgY2hhciogYnVmZmVyID0gYXJnQ291bnQgPyBzdGF0aWNfY2FzdDxjaGFy
Kj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IG51bGxwdHI7Ci0gICAgICAgIHVuc2ln
bmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMg
PSAwOwotICAgICAgICB1bnNpZ25lZCBidWZmZXJPZmZzZXQgPSAwOwotICAgICAgICB1bnNpZ25l
ZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgY29uc3QgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBHUFJJbmZvOjpyZWdDUzA7Ci0gICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBzaXplb2YoUmVnaXN0ZXIpKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKLQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkg
ewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoK
LSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAg
ICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgIEdQUlJlZyBn
cHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3By
QXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFy
Z3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhl
c2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAg
ICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgICAgICAgICBq
aXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZz
ZXQpLCBncHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVn
aXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVu
ZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdw
clJlZywgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxs
ZWRHUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAg
ICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAg
ICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJz
XS5mcHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUg
YXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUklu
Zm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsK
LSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZw
clJlZywgZnByUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVn
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBi
dWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IEY2NDogewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAg
aWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBh
bHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFi
bGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJn
dW1lbnRGUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShKSVQ6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRj
aEdQUik7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsg
YnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBidWZmZXJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgfQotICAgICAg
ICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaWYgKGFyZ0NvdW50KSB7
Ci0gICAgICAgICAgICAvLyBUaGUgR0Mgc2hvdWxkIG5vdCBsb29rIGF0IHRoaXMgYnVmZmVyIGF0
IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFsdWVzLgotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0
aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB1aW50NjRfdCAoKmNhbGxGdW5jKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIFNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCopID0KLSAgICAgICAgICAgIFtdIChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjYWxsZWUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4LCB1aW50NjRfdCogYnVmZmVyKSAtPiB1aW50NjRfdCB7IAotICAgICAgICAgICAgICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpOyArK2FyZ051bSkgewotICAgICAgICAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBz
aWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBh
cmc7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEk2
NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSTMyOgotICAgICAgICAgICAgICAgICAgICAgICAg
YXJnID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYnVmZmVyW2FyZ051bV0pKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEYz
MjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihidWZmZXJbYXJnTnVtXSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+bWV0aG9kVGFibGUoKnZtKS0+Z2V0Q2FsbERhdGEoY2Fs
bGVlLCBjYWxsRGF0YSk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUg
IT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2Fs
bChleGVjLCBjYWxsZWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7
Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLQot
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlYWxSZXN1bHQ7Ci0gICAgICAgICAgICAgICAgc3dp
dGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBGdW5j
OgotICAgICAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgICAgICBjYXNlIEk2
NDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBWb2lkOgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEkzMjogewotICAg
ICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRp
Y19jYXN0PHVpbnQzMl90PihyZXN1bHQudG9JbnQzMihleGVjKSkpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBGNjQ6
Ci0gICAgICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgICAgICAgICAgcmVhbFJl
c3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocmVzdWx0LnRvTnVtYmVyKGV4ZWMpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
MCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxSZXN1bHQ7Ci0gICAgICAgICAgICB9Owot
ICAgICAgICAKLSAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
LSAgICAgICAgCi0gICAgICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5k
ZXgsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5m
bzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyA+PSA0LCAiV2UgcmVseSBvbiB0aGlzIHdpdGgg
dGhlIGNhbGwgYmVsb3cuIik7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWdu
YXR1cmVJbmRleCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihidWZmZXIpKTsKLSAgICAg
ICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGpp
dC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6OkludmVydGVkRXhjZXB0
aW9uQ2hlY2spOwotCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBoZXJlLgotICAgICAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKLSAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVj
U3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEh
dm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfTsKLSAgICAgICAgYXV0byBleGNlcHRp
b25DYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
KnZtKTsKLQotICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwotICAgICAgICBzd2l0Y2gg
KHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAg
ICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBGMzI6IHsKLSAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICAgICAgaml0LmNv
bnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBqaXQuZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAgICAgaml0LnJldCgpOwotCi0gICAgICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9m
TWVtb3J5KTsKLQotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOwotICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2FsbCwgZG9VbndpbmRpbmcpOwotCi0gICAg
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFT
Y3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSkpOwotICAgIH0KLQotICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8g
cGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUgc2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKLSAgICAv
LyB3aWxsIGRvIHRoZSBzdGFjayBjaGVjayBmb3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMgdGhh
dCBpdCBtaWdodCBtYWtlCi0gICAgLy8gYSBjYWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1ha2Ug
c3VyZSBpdHMgc3RhY2sgY2hlY2sgaW5jbHVkZXMgc3BhY2UKLSAgICAvLyBmb3IgdXMgaGVyZS4K
LQotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsgMTsg
Ly8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1lbnQuCi0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVy
T2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVy
T2ZQYXJhbWV0ZXJzOwotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0g
bnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyk7Ci0gICAgY29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7
Ci0gICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0
KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBKSVQ6OkFkZHJl
c3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKTsKLQotICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dp
dGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNr
LiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3Ci0gICAgCi0gICAgLy8gRmlyc3Qg
Z28gdGhyb3VnaCB0aGUgaW50ZWdlciBwYXJhbWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lz
dGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4KLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxs
ZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAg
ICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1l
bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICB1bnNpZ25l
ZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0g
PSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJn
VHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChh
cmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6
Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3Zl
LgotICAgICAgICAgICAgY2FzZSBJMzI6IHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVn
OwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Mu
c2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21h
cnNoYWxsZWRHUFJzXS5ncHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJl
Z2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGdw
clJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0Lmxv
YWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwg
Z3ByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVy
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsK
LSAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOyAv
LyBDbGVhciBub24taW50MzIgYW5kIG5vbi10YWcgYml0cy4KLSAgICAgICAgICAgICAgICBqaXQu
Ym94SW50MzIoZ3ByUmVnLCBKU1ZhbHVlUmVncyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUud2l0
aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1l
T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgICAgIGNhc2UgRjY0Ogot
ICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYmVsb3cuCi0gICAgICAgICAgICAg
ICAgaWYgKG1hcnNoYWxsZWRGUFJzID49IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQg
Kz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIC8vIEludGVnZXIgcmVn
aXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNwaWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxhYmxl
LgotICAgICAgICBHUFJSZWcgZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6YXJn
dW1lbnRHUFIwOwotICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50R1BS
MTsKLSAgICAgICAgYm9vbCBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBmYWxz
ZTsKLSAgICAgICAgYXV0byBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFzTWF0
ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKLSAgICAg
ICAgICAgIGlmICghaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0KSB7Ci0gICAgICAg
ICAgICAgICAgc3RhdGljX2Fzc2VydChEb3VibGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4LCAi
Y29kZWdlbiBhc3N1bWVzIHRoaXMgYmVsb3ciKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShK
SVQ6OlRydXN0ZWRJbW0zMigxKSwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgaml0LmxzaGlmdDY0
KEpJVDo6VHJ1c3RlZEltbTMyKDQ4KSwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgaGFzTWF0ZXJp
YWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fTsKLQotICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7Ci0gICAgICAgIHVuc2ln
bmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZz
ZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsr
YXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQo
YXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5j
OgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KLSAgICAgICAgICAgIGNhc2UgSTMyOgot
ICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYWJvdmUuCi0gICAgICAgICAgICAg
ICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQg
Kz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgRjMyOiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAg
ICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10u
ZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2
YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZv
Ojphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJS
ZWcsIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOwotICAg
ICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOwotICAgICAg
ICAgICAgICAgIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNl
dEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQ
UlJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2Fs
bGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAg
KyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsK
LSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNp
emUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJz
aGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdp
c3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJS
ZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
RG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQp
LCBmcHJSZWcpOwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0
ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZw
clJlZyk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRj
aCk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91Ymxl
RW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5j
b2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChz
Y3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaml0Lmxv
YWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAg
aml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICBHUFJSZWcgaW1wb3J0SlNDZWxsR1BSUmVn
ID0gR1BSSW5mbzo6cmVnVDA7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBmb3Igc2xv
dyBwYXRoIGJlbG93LgotICAgIEFTU0VSVCghd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5n
ZXQoaW1wb3J0SlNDZWxsR1BSUmVnKSk7Ci0KLSAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChq
aXQsIGltcG9ydEluZGV4LCBpbXBvcnRKU0NlbGxHUFJSZWcpOwotCi0gICAgaml0LnN0b3JlNjQo
aW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBqaXQu
c3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOwotICAgIGppdC5zdG9yZTY0
KEpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpKSk7Ci0KLSAgICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJu
IHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4OAotCi0gICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9zLmFkZCgpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdpbigpLCBpbXBvcnRKU0NlbGxHUFJS
ZWcpOwotICAgIEpJVDo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUOjpUcnVz
dGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlKDApOwotICAgIEpJVDo6SnVtcCBzbG93UGF0aCA9
IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBpbXBvcnRK
U0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ssIGluaXRpYWxSaWdodFZhbHVlKTsKLSAgICBKSVQ6
OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKLSAgICBKSVQ6Okp1bXAgZG9uZSA9IGpp
dC5qdW1wKCk7Ci0gICAgc2xvd1BhdGgubGluaygmaml0KTsKLSAgICAvLyBDYWxsZWUgbmVlZHMg
dG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVk
cyB0byBiZSBpbiByZWdUMi4KLSAgICBKSVQ6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwo
KTsKLSAgICBkb25lLmxpbmsoJmppdCk7Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4
Y2VwdGlvbkNoZWNrczsKLQotICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewot
ICAgIGNhc2UgVm9pZDoKLSAgICAgICAgLy8gRGlzY2FyZC4KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGdW5jOgotICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgLy8gRm9yIHRoZSBKYXZhU2Ny
aXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5cGVzIGluIHRoZWlyIHNpZ25hdHVy
ZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZhbGlkYXRpb24gZXJyb3IuCi0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSTY0OiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRs
ZWQgYWJvdmUuCi0gICAgfQotICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZG9uZTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsK
LQotICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7Ci0gICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBzbG93UGF0
aC5saW5rKCZqaXQpOwotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
LSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigq
dm0pKTsKLQotICAgICAgICBpbnQzMl90ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1Zh
bHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAotICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIHJldHVybiB2LnRvSW50MzIo
ZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252
ZXJ0VG9JMzIpOwotICAgICAgICB9KTsKLQotICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEYzMjogewotICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5v
dE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsK
LSAgICAgICAgYXV0byBpc0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdz
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAg
ICAgLy8gV2UncmUgYW4gaW50MzIKLSAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGpp
dC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAg
ICAgIGlzRG91YmxlLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZElt
bTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBq
aXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
RlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxv
YXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAg
ICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgbm90QU51bWJlci5saW5r
KCZqaXQpOwotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAg
ICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsK
LQotICAgICAgICBmbG9hdCAoKmNvbnZlcnRUb0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBb
XSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGZsb2F0IHsgCi0gICAgICAgICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2
LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgfTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGwsIGNvbnZlcnRUb0YzMik7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGRvbmUubGluaygm
aml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0
LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpOwotICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIo
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpOwotICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgotICAgICAgICBqaXQuc2lnbkV4dGVuZDMy
VG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
LSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5tb3ZlKEpJ
VDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIp
OwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBkb25lLmFwcGVu
ZChqaXQuanVtcCgpKTsKLQotICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVj
a3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGRvdWJs
ZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICAgICAgICAgIHJldHVybiB2LnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICB9OwotICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjY0KTsKLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
fQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwotCi0g
ICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1wdHkoKSkgewotICAgICAgICBleGNlcHRpb25DaGVj
a3MubGluaygmaml0KTsKLSAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGF1dG8gY2FsbCA9
IGppdC5jYWxsKCk7Ci0gICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0K
LSAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUq
IGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAg
ICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNh
bGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgZG9VbndpbmRpbmcpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwotICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9y
eSk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBo
b3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSk7Ci0gICAg
Q29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKGZhc3RDYWxsKTsKLSAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMo
Y2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7Ci0KLSAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlw
dCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpKSk7Ci19Ci0KIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgY29uc3Qg
UGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KTsKQEAgLTYzMywyNCArNTEsMjMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBC
aW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICBBU1NF
UlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IHNjcmF0Y2gpOwogICAgIEdQUlJlZyBzaXpl
UmVnQXNTY3JhdGNoID0gc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyOwogCi0gICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8Q29udGV4dCwgSlNXZWJBc3NlbWJseUluc3RhbmNlPjo6dmFsdWUs
ICJUaGlzIGlzIGFzc3VtZWQgaW4gdGhlIGNvZGUgYmVsb3cuIik7CiAgICAgLy8gQjMncyBjYWxs
IGNvZGVnZW4gZW5zdXJlcyB0aGF0IHRoZSBKU0NlbGwgaXMgYSBXZWJBc3NlbWJseUZ1bmN0aW9u
LgotICAgIGppdC5sb2FkV2FzbUNvbnRleHQoc2l6ZVJlZ0FzU2NyYXRjaCk7IC8vIE9sZCBJbnN0
YW5jZSoKLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSks
IHNjcmF0Y2gpOwotCi0gICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5j
ZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0LiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9m
IHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVz
cyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBiYXNl
TWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAgIGppdC5zdG9yZVdhc21Db250ZXh0KGJhc2VNZW1v
cnkpOworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNoKTsg
Ly8gT2xkIEluc3RhbmNlKgorICAgIC8vIEdldCB0aGUgY2FsbGVlJ3MgV2ViQXNzZW1ibHkuSW5z
dGFuY2UgYW5kIHNldCBpdCBhcyBXYXNtQ29udGV4dCdzIGluc3RhbmNlLiBUaGUgY2FsbGVyIHdp
bGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgorICAgIGppdC5sb2Fk
UHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoaW1wb3J0SW5kZXgpKSwgYmFzZU1lbW9yeSk7IC8vIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSouCisgICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQg
Y2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWlsIGNh
bGwgdG8gaXQgYmVsb3cuCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1Nj
cmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludChpbXBv
cnRJbmRleCkpLCBzY3JhdGNoKTsgLy8gV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24u
CisgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKIAogICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRjaCk7CiAg
ICAgaml0LnN0b3JlUHRyKHNpemVSZWdBc1NjcmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CiAK
ICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXZWJBc3Nl
bWJseS5JbnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNh
bGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVn
aXN0ZXJzLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJB
c3NlbWJseU1lbW9yeSouCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnks
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5
KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQp
OyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3Vs
YXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNl
dE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCi0g
ICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1v
cnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbU1lbW9yeTo6dm9pZCou
CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6
b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6
ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5
OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6dm9pZCou
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CiAg
ICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CkBAIC02
NTgsNyArNzUsNiBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIH0KIAogICAgIC8vIFRh
aWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUgV2ViQXNzZW1ibHkgZnVuY3Rpb24uCi0gICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9m
V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIHNjcmF0Y2gpOwogICAgIGppdC5sb2FkUHRy
KHNjcmF0Y2gsIHNjcmF0Y2gpOwogICAgIGppdC5qdW1wKHNjcmF0Y2gpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaAppbmRleCA0ZTI2MmJhLi5mZWM2YmQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjgsNyBAQAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNs
dWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKLSNpbmNsdWRlIDx3dGYvQmFnLmg+
CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDQsNyAr
NDIsNiBAQCBlbnVtIGNsYXNzIEJpbmRpbmdGYWlsdXJlIHsKIH07CiAKIEV4cGVjdGVkPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1w
b3J0SW5kZXgpOwotRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVy
ZT4gd2FzbVRvSnMoVk0qLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0
dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcApp
bmRleCA3MGZlZmIwLi5lNTEzNjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ29kZUJsb2NrLmNwcApAQCAtMzEsMjAgKzMxLDMxIEBACiAKICNpbmNsdWRlICJXYXNtQkJR
UGxhbklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUZv
cm1hdC5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKK1JlZjxDb2RlQmxvY2s+IENvZGVC
bG9jazo6Y3JlYXRlKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVh
dGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24p
Cit7CisgICAgc2l6ZV90IGltcG9ydEZ1bmN0aW9uQ291bnQgPSBtb2R1bGVJbmZvcm1hdGlvbi5p
bXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBm
YXN0TWFsbG9jKGFsbG9jYXRpb25TaXplKGltcG9ydEZ1bmN0aW9uQ291bnQpKSkgQ29kZUJsb2Nr
KGNvbnRleHQsIG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVy
V3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbXBvcnRGdW5jdGlvbkNvdW50OyArK2kpCisgICAgICAgIHJlc3VsdC0+aW1wb3J0V2FzbVRv
RW1iZWRkZXJTdHViKGkpID0gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRSZWYoKnJlc3VsdCk7
Cit9CisKK0NvZGVCbG9jazo6Q29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUg
bW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBDcmVhdGVFbWJlZGRl
cldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24pCiAgICAgOiBtX2NhbGxlZUNvdW50KG1vZHVsZUluZm9ybWF0aW9uLmlu
dGVybmFsRnVuY3Rpb25Db3VudCgpKQogICAgICwgbV9tb2RlKG1vZGUpCiB7CiAgICAgUmVmUHRy
PENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7Ci0gICAgbV9wbGFuID0gYWRvcHRSZWYo
Km5ldyBCQlFQbGFuKG51bGxwdHIsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFu
OjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFZNKiwgUGxhbiYpIHsK
KworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBtYWtlUmVmKG1v
ZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJlZFRhc2s8
UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyldIChQbGFuJikgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgpKSB7CiAgICAgICAgICAgICBtX2Vycm9y
TWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgICAgICBtX3BsYW4gPSBu
dWxscHRyOworICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY2LDEwICs3NywxMCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1h
dGlvbikKICAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRv
V2FzbUNhbGxzaXRlcygpOwogICAgICAgICBtX3RpZXJVcENvdW50cyA9IG1fcGxhbi0+dGFrZVRp
ZXJVcENvdW50cygpOwogCi0gICAgICAgIG1fcGxhbiA9IG51bGxwdHI7Ci0gICAgfSkpKTsKLQor
ICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAgfSksIFdURk1vdmUoY3JlYXRl
RW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7CiAgICAgbV9wbGFuLT5zZXRN
b2RlKG1vZGUpOworCiAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjplbnN1cmVXb3JrbGlzdCgp
OwogICAgIC8vIE5vdGUsIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGVucXVldWUgdGhlIHBsYW4sIHRo
ZXJlIGlzIGEgY2hhbmNlIHRoZSBhYm92ZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4KICAgICB3
b3JrbGlzdC5lbnF1ZXVlKG1ha2VSZWYoKm1fcGxhbi5nZXQoKSkpOwpAQCAtOTIsNyArMTAzLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OndhaXRVbnRpbEZpbmlzaGVkKCkKICAgICAvLyBlbHNlLCBpZiB3
ZSBkb24ndCBoYXZlIGEgcGxhbiwgd2UncmUgYWxyZWFkeSBjb21waWxlZC4KIH0KIAotdm9pZCBD
b2RlQmxvY2s6OmNvbXBpbGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYm
IHRhc2spCit2b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIEFz
eW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiB7CiAgICAgUmVmUHRyPFBsYW4+IHBsYW47
CiAgICAgewpAQCAtMTA0LDEyICsxMTUsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3lu
YyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8ga2VlcCBhIFJlZlB0ciBvbiB0aGUgUGxhbiBiZWNhdXNlIHRoZSB3b3Jr
bGlzdCB3aWxsIGtlZXAKICAgICAgICAgLy8gYSBSZWZQdHIgb24gdGhlIFBsYW4gdW50aWwgdGhl
IHBsYW4gZmluaXNoZXMgbm90aWZ5aW5nIGFsbCBvZiBpdHMgY2FsbGJhY2tzLgogICAgICAgICBS
ZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsKLSAgICAgICAgcGxhbi0+YWRk
Q29tcGxldGlvblRhc2sodm0sIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihb
dGhpcywgdGFzayA9IFdURk1vdmUodGFzayksIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3Rl
Y3RlZFRoaXMpXSAoVk0qIHZtLCBQbGFuJikgewotICAgICAgICAgICAgQVNTRVJUKHZtKTsKLSAg
ICAgICAgICAgIHRhc2stPnJ1bigqdm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAgICAgcGxhbi0+
YWRkQ29tcGxldGlvblRhc2soY29udGV4dCwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFj
a1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92ZSh0YXNrKSwgcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgeworICAgICAgICAgICAgdGFzay0+cnVuKG1ha2VS
ZWYoKnRoaXMpKTsKICAgICAgICAgfSkpOwogICAgIH0gZWxzZQotICAgICAgICB0YXNrLT5ydW4o
dm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAgICAgdGFzay0+cnVuKG1ha2VSZWYoKnRoaXMpKTsK
IH0KIAogYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1lbW9yeU1vZGUgbWVtb3J5TW9kZSkK
QEAgLTEzMCw2ICsxNDAsMTMgQEAgYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1lbW9yeU1v
ZGUgbWVtb3J5TW9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKwordm9pZCBDb2RlQmxvY2s6
OnNldENvbXBpbGF0aW9uRmluaXNoZWQoKQoreworICAgIG1fcGxhbiA9IG51bGxwdHI7CisgICAg
bV9jb21waWxhdGlvbkZpbmlzaGVkLnN0b3JlKHRydWUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IDJkYmY3ZTQuLmIxNjhhYWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTI4LDYgKzI4
LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtVGll
clVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KQEAgLTM3LDExICszOCwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0K
IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgQ2FsbGVlOworc3RydWN0IENvbnRleHQ7CiBjbGFz
cyBCQlFQbGFuOwogY2xhc3MgT01HUGxhbjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKQEAg
LTUxLDIwICs1MSw0MiBAQCBlbnVtIGNsYXNzIE1lbW9yeU1vZGUgOiB1aW50OF90OwogICAgIAog
Y2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9jaz4g
ewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0mLCBSZWY8Q29kZUJs
b2NrPiYmKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFJlZjxDb2RlQmxvY2s+JiYp
OwogICAgIHVzaW5nIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayA9IFJlZlB0cjxXVEY6OlNoYXJl
ZFRhc2s8Q2FsbGJhY2tUeXBlPj47Ci0gICAgc3RhdGljIFJlZjxDb2RlQmxvY2s+IGNyZWF0ZShN
ZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKKyAg
ICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1
bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRp
b24pOworCisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydFN0dWJzKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6
ZW9mKENvZGVCbG9jaykpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNp
emUoQ2hlY2tlZDxzaXplX3Q+IGZ1bmN0aW9uSW1wb3J0Q291bnQpCisgICAgeworICAgICAgICBy
ZXR1cm4gKG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBmdW5jdGlvbklt
cG9ydENvdW50KS51bnNhZmVHZXQoKTsKKyAgICB9CisKKyAgICB2b2lkKiYgaW1wb3J0V2FzbVRv
RW1iZWRkZXJTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ29kZUJsb2NrKG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uKSk7CisgICAg
ICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZvaWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSArIG9mZnNldE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGltcG9ydEluZGV4KSk7CisgICAg
fQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1
Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXRPZklt
cG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogaW1wb3J0SW5kZXg7CisgICAgfQorCisgICAg
V2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbVRvSlNDYWxsU3R1YkZvckltcG9y
dCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgp
KTsKKyAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgp
OwogICAgIH0KIAogICAgIHZvaWQgd2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICB2b2lkIGNvbXBp
bGVBc3luYyhWTSYsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsKKyAgICB2b2lkIGNvbXBp
bGVBc3luYyhDb250ZXh0KiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgYm9v
bCBjb21waWxhdGlvbkZpbmlzaGVkKCkKICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuICFtX3BsYW47CisgICAgICAgIHJldHVybiBt
X2NvbXBpbGF0aW9uRmluaXNoZWQubG9hZCgpOwogICAgIH0KICAgICBib29sIHJ1bm5hYmxlKCkg
eyByZXR1cm4gY29tcGlsYXRpb25GaW5pc2hlZCgpICYmICFtX2Vycm9yTWVzc2FnZTsgfQogCkBA
IC03OSw4ICsxMDEsMTEgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCk7IH0KIAor
ICAgIC8vIFRoZXNlIHR3byBjYWxsZWUgZ2V0dGVycyBhcmUgb25seSB2YWxpZCBvbmNlIHRoZSBj
YWxsZWVzIGhhdmUgYmVlbiBwb3B1bGF0ZWQuCisKICAgICBDYWxsZWUmIGpzRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKICAgICAgICAg
dW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9y
dENvdW50KCk7CiAKQEAgLTkwLDYgKzExNSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgQ2FsbGVl
JiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVu
Y3Rpb25JbmRleFNwYWNlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRD
b3VudCgpKTsKICAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3Bh
Y2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7CiAgICAgICAgIGlmIChtX29wdGltaXplZENhbGxl
ZXNbY2FsbGVlSW5kZXhdKQpAQCAtMTE3LDcgKzE0Myw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIE9NR1BsYW47CiAKLSAgICBDb2RlQmxvY2soTWVtb3J5TW9kZSwgTW9k
dWxlSW5mb3JtYXRpb24mKTsKKyAgICBDb2RlQmxvY2soQ29udGV4dCosIE1lbW9yeU1vZGUsIE1v
ZHVsZUluZm9ybWF0aW9uJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2Vw
dGlvbik7CisgICAgdm9pZCBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CiAgICAgdW5zaWduZWQg
bV9jYWxsZWVDb3VudDsKICAgICBNZW1vcnlNb2RlIG1fbW9kZTsKICAgICBWZWN0b3I8UmVmUHRy
PENhbGxlZT4+IG1fY2FsbGVlczsKQEAgLTEyOCw2ICsxNTUsNyBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2FzbVRvV2FzbUNhbGxzaXRl
czsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1
YnM7CiAgICAgUmVmUHRyPEJCUVBsYW4+IG1fcGxhbjsKKyAgICBzdGQ6OmF0b21pYzxib29sPiBt
X2NvbXBpbGF0aW9uRmluaXNoZWQgeyBmYWxzZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2Fn
ZTsKICAgICBMb2NrIG1fbG9jazsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ29udGV4dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29udGV4dC5jcHAKaW5kZXggZmVhMTZkZS4uZTA1OWZjMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcApAQCAtMjgsMzAgKzI4LDQxIEBACiAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKwogI2luY2x1ZGUgPG11dGV4Pgog
I2luY2x1ZGUgPHd0Zi9GYXN0VExTLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKLUNvbnRleHQqIGxvYWRDb250ZXh0KFZNJiB2bSkKK2Jvb2wgQ29udGV4dDo6dXNlRmFz
dFRMUygpCit7CisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICByZXR1cm4gT3B0aW9uczo6
dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIENvbnRleHQ6OmxvYWQoKSBjb25zdAog
ewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKHVzZUZhc3RUTFNGb3JDb250ZXh0
KCkpCi0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29udGV4dCo+KF9wdGhyZWFkX2dldHNw
ZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSkpOworICAgIGlmICh1c2VGYXN0VExT
KCkpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4o
X3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZKSk7CiAjZW5k
aWYKLSAgICByZXR1cm4gdm0ud2FzbUNvbnRleHQ7CisgICAgcmV0dXJuIGluc3RhbmNlOwogfQog
Ci12b2lkIHN0b3JlQ29udGV4dChWTSYgdm0sIENvbnRleHQqIGNvbnRleHQpCit2b2lkIENvbnRl
eHQ6OnN0b3JlKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaSwgdm9pZCogc29mdFN0YWNrTGltaXQp
CiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRl
eHQoKSkKLSAgICAgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NPTlRF
WFRfS0VZLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGNvbnRleHQpKTsKKyAgICBpZiAodXNlRmFzdFRM
UygpKQorICAgICAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVY
VF9LRVksIGJpdHdpc2VfY2FzdDx2b2lkKj4oaSkpOwogI2VuZGlmCi0gICAgdm0ud2FzbUNvbnRl
eHQgPSBjb250ZXh0OwotICAgIGlmIChjb250ZXh0KQotICAgICAgICBjb250ZXh0LT5zZXRDYWNo
ZWRTdGFja0xpbWl0KHZtLnNvZnRTdGFja0xpbWl0KCkpOworICAgIGluc3RhbmNlID0gaTsKKyAg
ICBpZiAoaW5zdGFuY2UpCisgICAgICAgIGluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KHNv
ZnRTdGFja0xpbWl0KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCmluZGV4IDNjZjY1ZmIuLmMyYjUxZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaApAQCAtMjcsMzcgKzI3LDIw
IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0KIG5hbWVzcGFjZSBKU0MgewogCi1j
bGFzcyBWTTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIAogbmFtZXNwYWNlIFdhc20g
ewogCi0vLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0aGlzIHRvIGJlIHNvbWV0aGluZyBlbHNlIGF0
IHNvbWUgcG9pbnQ6Ci0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwMjYwCi11c2luZyBDb250ZXh0ID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOwotCi1pbmxpbmUg
Ym9vbCB1c2VGYXN0VExTKCkKLXsKLSNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIHJldHVy
biBPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RUTFMoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZh
bHNlOwotI2VuZGlmCi19CitzdHJ1Y3QgQ29udGV4dCB7CisgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSB7IG51bGxwdHIgfTsKIAotaW5saW5lIGJvb2wgdXNlRmFzdFRMU0ZvckNv
bnRleHQoKQotewotICAgIGlmICh1c2VGYXN0VExTKCkpCi0gICAgICAgIHJldHVybiBPcHRpb25z
Ojp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBsb2FkKCkgY29uc3Q7CisgICAgdm9pZCBzdG9yZShKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqLCB2b2lkKiBzb2Z0U3RhY2tMaW1pdCk7CiAKLUNvbnRleHQqIGxv
YWRDb250ZXh0KFZNJik7Ci12b2lkIHN0b3JlQ29udGV4dChWTSYsIENvbnRleHQqKTsKKyAgICBz
dGF0aWMgYm9vbCB1c2VGYXN0VExTKCk7Cit9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyODc5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaApAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlw
ZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNl
OyAvLyBGSVhNRSB0aGlzIHNob3VsZCBiZSBXYXNtOjpJbnN0YW5jZSwgc28gc2hvdWxkIHVzZSBi
ZWxvdy4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCisKK25hbWVzcGFjZSBXYXNtIHsKKwor
c3RydWN0IENvbXBpbGF0aW9uQ29udGV4dDsKK3N0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uOworc3Ry
dWN0IE1vZHVsZUluZm9ybWF0aW9uOworY2xhc3MgU2lnbmF0dXJlOworc3RydWN0IFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw7CisKKy8vIENyZWF0ZSB3cmFwcGVyIGNvZGUgdG8gY2FsbCBmcm9tIGVt
YmVkZGVyIC0+IFdlYkFzc2VtYmx5LgordXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RG
OjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4oQ29tcGlsYXRpb25D
b250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCk+OworCisv
LyBDYWxsZWQgYXMgc29vbiBhcyBhbiBleGNlcHRpb24gaXMgZGV0ZWN0ZWQuIFRoZSByZXR1cm4g
dmFsdWUgaXMgdGhlIFBDIHRvIGNvbnRpbnVlIGF0LgordXNpbmcgVGhyb3dXYXNtRXhjZXB0aW9u
ID0gdm9pZCogKCopKEV4ZWNTdGF0ZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAppbmRleCAyYjFkODI4Li5jYzFlN2QxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmNwcApAQCAtMzAsMTEgKzMwLDExIEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2Nh
dG9yLmgiCiAjaW5jbHVkZSAiTWFjaGluZUNvbnRleHQuaCIKLSNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2lu
Y2x1ZGUgIldhc21UaHVua3MuaCIKIAorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKaW5kZXggMzgxMjgzNi4uZTVlMDdhOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuaApAQCAtMjcsOCArMjcsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0K
IG5hbWVzcGFjZSBXYXNtIHsKIAogdm9pZCByZWdpc3RlckNvZGUodm9pZCogc3RhcnQsIHZvaWQq
IGVuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggYjIyMjIx
Ny4uZTdiM2RmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAt
NDQsMTQgKzQ0LDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0Z1bmN0aW9uOwot
CiBuYW1lc3BhY2UgQjMgewogY2xhc3MgQ29tcGlsYXRpb247CiB9CiAKIG5hbWVzcGFjZSBXYXNt
IHsKIAorc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dDsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlv
bjsKKwogaW5saW5lIGJvb2wgaXNWYWx1ZVR5cGUoVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAo
dHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3Rh
bmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiZTBlNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKworI2luY2x1ZGUg
IlJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K25hbWVzcGFjZSB7CitzaXplX3QgZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoTW9kdWxlJiBtb2R1bGUp
Cit7CisgICAgcmV0dXJuIG1vZHVsZS5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgp
ICogc2l6ZW9mKFJlZ2lzdGVyKTsKK30KK30KKworSW5zdGFuY2U6Okluc3RhbmNlKFJlZjxNb2R1
bGU+JiYgbW9kdWxlKQorICAgIDogbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQorICAgICwgbV9n
bG9iYWxzKE1hbGxvY1B0cjx1aW50NjRfdD46Om1hbGxvYyhnbG9iYWxNZW1vcnlCeXRlU2l6ZSht
X21vZHVsZS5nZXQoKSkpKQoreworfQorCitJbnN0YW5jZTo6fkluc3RhbmNlKCkgeyB9CisKK3Np
emVfdCBJbnN0YW5jZTo6ZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSBjb25zdAoreworICAgIHJldHVy
biBnbG9iYWxNZW1vcnlCeXRlU2l6ZShtX21vZHVsZS5nZXQoKSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjA2ZmI4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2Fz
bU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUu
aCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBJbnN0YW5jZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbnN0YW5jZT4geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8SW5zdGFuY2U+IGNyZWF0ZShSZWY8TW9kdWxlPiYmIG1vZHVsZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3RhbmNlKFdURk1vdmUobW9kdWxlKSkpOwor
ICAgIH0KKworICAgIHZvaWQgZmluYWxpemVDcmVhdGlvbihSZWY8Q29kZUJsb2NrPiYmIGNvZGVC
bG9jaykKKyAgICB7CisgICAgICAgIG1fY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxvY2spOwor
ICAgIH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5JbnN0YW5jZSgpOworCisgICAgc2l6ZV90
IGV4dHJhTWVtb3J5QWxsb2NhdGVkKCkgY29uc3Q7CisKKyAgICBNb2R1bGUmIG1vZHVsZSgpIHsg
cmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJl
dHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQorICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4g
bV9tZW1vcnkuZ2V0KCk7IH0KKyAgICBUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdl
dCgpOyB9CisKKyAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CisgICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQorICAgIGZsb2F0
IGxvYWRGMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGZs
b2F0Pihsb2FkSTMyR2xvYmFsKGkpKTsgfQorICAgIGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwo
aSkpOyB9CisgICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1f
Z2xvYmFscy5nZXQoKVtpXSA9IGJpdHM7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBt
X2NhY2hlZFN0YWNrTGltaXQpOyB9CisgICAgdm9pZCogY2FjaGVkU3RhY2tMaW1pdCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tM
aW1pdCh2b2lkKiBsaW1pdCkgeyBtX2NhY2hlZFN0YWNrTGltaXQgPSBsaW1pdDsgfQorCisgICAg
ZnJpZW5kIGNsYXNzIEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOyAvLyBGSVhNRSByZW1vdmUg
dGhpcyBvbmNlIHJlZmFjdG9yZWQgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyLgorCitwcml2
YXRlOgorICAgIEluc3RhbmNlKFJlZjxNb2R1bGU+JiYpOworCisgICAgUmVmPE1vZHVsZT4gbV9t
b2R1bGU7CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CisgICAgUmVmUHRyPE1l
bW9yeT4gbV9tZW1vcnk7CisgICAgUmVmUHRyPFRhYmxlPiBtX3RhYmxlOworICAgIE1hbGxvY1B0
cjx1aW50NjRfdD4gbV9nbG9iYWxzOworICAgIHZvaWQqIG1fY2FjaGVkU3RhY2tMaW1pdCB7IGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkg
fTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmlu
ZGV4IGM1ZjQ4ZTkuLjFjMWNmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnkuY3BwCkBAIC0yOCwxMyArMjgsMTkgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVkZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgIk9w
dGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9HaWdhY2Fn
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09TQWxsb2NhdG9yLmg+
CisjaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgog
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxt
dXRleD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTEsMTkgKzU3
LDE5IEBAIE5FVkVSX0lOTElORSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd2ViQXNzZW1i
bHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpIHsgQ1JBCiBzdHJ1Y3QgTWVtb3J5UmVzdWx0IHsKICAg
ICBlbnVtIEtpbmQgewogICAgICAgICBTdWNjZXNzLAotICAgICAgICBTdWNjZXNzQW5kQXN5bmNH
QywKLSAgICAgICAgU3luY0dDQW5kUmV0cnkKKyAgICAgICAgU3VjY2Vzc0FuZE5vdGlmeU1lbW9y
eVByZXNzdXJlLAorICAgICAgICBTeW5jVHJ5VG9SZWNsYWltTWVtb3J5CiAgICAgfTsKLSAgICAK
KwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0b1N0cmluZyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBTdWNjZXNzOgogICAgICAgICAgICAg
cmV0dXJuICJTdWNjZXNzIjsKLSAgICAgICAgY2FzZSBTdWNjZXNzQW5kQXN5bmNHQzoKLSAgICAg
ICAgICAgIHJldHVybiAiU3VjY2Vzc0FuZEFzeW5jR0MiOwotICAgICAgICBjYXNlIFN5bmNHQ0Fu
ZFJldHJ5OgotICAgICAgICAgICAgcmV0dXJuICJTeW5jR0NBbmRSZXRyeSI7CisgICAgICAgIGNh
c2UgU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAgICAgcmV0dXJuICJT
dWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUiOworICAgICAgICBjYXNlIFN5bmNUcnlUb1Jl
Y2xhaW1NZW1vcnk6CisgICAgICAgICAgICByZXR1cm4gIlN5bmNUcnlUb1JlY2xhaW1NZW1vcnki
OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtOTgsMTcgKzEwNCwxNyBAQCBwdWJsaWM6CiAgICAgICAg
IE1lbW9yeVJlc3VsdCByZXN1bHQgPSBbJl0gewogICAgICAgICAgICAgYXV0byBob2xkZXIgPSBo
b2xkTG9jayhtX2xvY2spOwogICAgICAgICAgICAgaWYgKG1fbWVtb3JpZXMuc2l6ZSgpID49IG1f
bWF4Q291bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBN
ZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVt
b3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IEdpZ2FjYWdlOjp0cnlB
bGxvY2F0ZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBNZW1vcnk6OmZhc3RNYXBw
ZWRCeXRlcygpKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJl
dHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1
bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X21lbW9yaWVzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1
cm4gTWVtb3J5UmVzdWx0KAogICAgICAgICAgICAgICAgIHJlc3VsdCwKLSAgICAgICAgICAgICAg
ICBtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50IC8gMiA/IE1lbW9yeVJlc3VsdDo6U3Vj
Y2Vzc0FuZEFzeW5jR0MgOiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3MpOworICAgICAgICAgICAgICAg
IG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQgLyAyID8gTWVtb3J5UmVzdWx0OjpTdWNj
ZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmUgOiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3MpOwogICAg
ICAgICB9KCk7CiAgICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bG9nV2ViQXNzZW1ibHlN
ZW1vcnkoKSkKQEAgLTE1MywxMiArMTU5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgTWVtb3J5UmVz
dWx0OjpLaW5kIHJlc3VsdCA9IFsmXSB7CiAgICAgICAgICAgICBhdXRvIGhvbGRlciA9IGhvbGRM
b2NrKG1fbG9jayk7CiAgICAgICAgICAgICBpZiAobV9waHlzaWNhbEJ5dGVzICsgYnl0ZXMgPiBt
ZW1vcnlMaW1pdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN5bmNH
Q0FuZFJldHJ5OworICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlU
b1JlY2xhaW1NZW1vcnk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fcGh5c2ljYWxCeXRl
cyArPSBieXRlczsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fcGh5c2ljYWxCeXRl
cyA+PSBtZW1vcnlMaW1pdCgpIC8gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVz
dWx0OjpTdWNjZXNzQW5kQXN5bmNHQzsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVz
dWx0OjpTdWNjZXNzQW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M7CiAgICAgICAgIH0oKTsKQEAgLTIw
NSw3ICsyMTEsNyBAQCBzdGF0aWMgTWVtb3J5TWFuYWdlciYgbWVtb3J5TWFuYWdlcigpCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1ib29sIHRyeUFuZEdDKFZNJiB2bSwgY29uc3QgRnVu
YyYgYWxsb2NhdGUpCitib29sIHRyeUFsbG9jYXRlKGNvbnN0IEZ1bmMmIGFsbG9jYXRlLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPHZvaWQoTWVtb3J5OjpOb3RpZnlQcmVzc3VyZSk+JiBub3RpZnlNZW1v
cnlQcmVzc3VyZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKE1lbW9yeTo6U3luY1RyeVRvUmVj
bGFpbSk+JiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KQogewogICAgIHVuc2lnbmVkIG51bVRyaWVz
ID0gMjsKICAgICBib29sIGRvbmUgPSBmYWxzZTsKQEAgLTIxNCwxNCArMjIwLDE2IEBAIGJvb2wg
dHJ5QW5kR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKICAgICAgICAgY2FzZSBNZW1v
cnlSZXN1bHQ6OlN1Y2Nlc3M6CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M6Ci0g
ICAgICAgICAgICB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwor
ICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJl
OgorICAgICAgICAgICAgaWYgKG5vdGlmeU1lbW9yeVByZXNzdXJlKQorICAgICAgICAgICAgICAg
IG5vdGlmeU1lbW9yeVByZXNzdXJlKE1lbW9yeTo6Tm90aWZ5UHJlc3N1cmVUYWcpOwogICAgICAg
ICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNZW1v
cnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5OgorICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeToKICAgICAgICAgICAgIGlmIChpICsgMSA9PSBudW1UcmllcykK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHZtLmhlYXAuY29sbGVjdFN5bmMo
Q29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKyAgICAgICAgICAgIGlmIChzeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5KQorICAgICAgICAgICAgICAgIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkoTWVtb3J5OjpT
eW5jVHJ5VG9SZWNsYWltVGFnKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpAQCAtMjMwLDMyICsyMzgsMzIgQEAgYm9vbCB0cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMm
IGFsbG9jYXRlKQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotY29uc3QgY2hhciogbWFr
ZVN0cmluZyhNZW1vcnlNb2RlIG1vZGUpCitNZW1vcnk6Ok1lbW9yeSgpCiB7Ci0gICAgc3dpdGNo
IChtb2RlKSB7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogcmV0dXJuICJC
b3VuZHNDaGVja2luZyI7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHJldHVybiAi
U2lnbmFsaW5nIjsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gIiI7CiB9CiAKLU1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdl
Q291bnQgbWF4aW11bSkKK01lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgRnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5
UHJlc3N1cmUsIEZ1bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3luY1RyeVRvUmVj
bGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBh
Z2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1faW5pdGlhbChpbml0aWFs
KQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgLCBtX25vdGlmeU1lbW9yeVByZXNzdXJl
KFdURk1vdmUobm90aWZ5TWVtb3J5UHJlc3N1cmUpKQorICAgICwgbV9zeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5KFdURk1vdmUoc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkpCisgICAgLCBtX2dyb3dTdWNj
ZXNzQ2FsbGJhY2soV1RGTW92ZShncm93U3VjY2Vzc0NhbGxiYWNrKSkKIHsKICAgICBBU1NFUlQo
IWluaXRpYWwuYnl0ZXMoKSk7CiAgICAgQVNTRVJUKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3Vu
ZHNDaGVja2luZyk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFs
bG9jYXRpbmcgIiwgKnRoaXMpOwogfQogCi1NZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5
LCBNZW1vcnlNb2RlIG1vZGUpCitNZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3Vu
dCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1v
cnlNb2RlIG1vZGUsIEZ1bmN0aW9uPHZvaWQoTm90aWZ5UHJlc3N1cmUpPiYmIG5vdGlmeU1lbW9y
eVByZXNzdXJlLCBGdW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1Jl
Y2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQ
YWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCiAgICAgOiBtX21lbW9yeShtZW1vcnkp
CiAgICAgLCBtX3NpemUoaW5pdGlhbC5ieXRlcygpKQogICAgICwgbV9pbml0aWFsKGluaXRpYWwp
CiAgICAgLCBtX21heGltdW0obWF4aW11bSkKICAgICAsIG1fbWFwcGVkQ2FwYWNpdHkobWFwcGVk
Q2FwYWNpdHkpCiAgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fbm90aWZ5TWVtb3J5UHJlc3N1
cmUoV1RGTW92ZShub3RpZnlNZW1vcnlQcmVzc3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xh
aW1NZW1vcnkoV1RGTW92ZShzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1
Y2Nlc3NDYWxsYmFjayhXVEZNb3ZlKGdyb3dTdWNjZXNzQ2FsbGJhY2spKQogewogICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Ok1lbW9yeSBhbGxvY2F0aW5nICIsICp0aGlzKTsKIH0K
QEAgLTI3NSw3ICsyODMsMTIgQEAgc3RhdGljIHZvaWQgY29tbWl0WmVyb1BhZ2VzKHZvaWQqIHN0
YXJ0QWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQogI2VuZGlmCiB9CiAKLVJlZlB0cjxNZW1v
cnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBt
YXhpbXVtKQorUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTWVtb3J5KCkpOworfQorCitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0
ZShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9p
ZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIFdURjo6RnVuY3Rpb248
dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1
bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3Vj
Y2Vzc0NhbGxiYWNrKQogewogICAgIEFTU0VSVChpbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VS
VCghbWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFy
YW50ZWVkIGJ5IG91ciBjYWxsZXIuCkBAIC0yODMsMzMgKzI5NiwyNyBAQCBSZWZQdHI8TWVtb3J5
PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSkKICAgICBjb25zdCBzaXplX3QgaW5pdGlhbEJ5dGVzID0gaW5pdGlhbC5ieXRlcygpOwog
ICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtQnl0ZXMgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygp
IDogMDsKIAotICAgIC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0
byBydW5uaW5nIGNvZGUuCi0gICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0
dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCiAgICAgaWYgKG1heGltdW0gJiYgIW1heGltdW1CeXRlcykgewogICAgICAg
ICAvLyBVc2VyIHNwZWNpZmllZCBhIHplcm8gbWF4aW11bSwgaW5pdGlhbCBzaXplIG11c3QgYWxz
byBiZSB6ZXJvLgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5pdGlhbEJ5dGVzKTsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtLCBXVEZNb3ZlKG5v
dGlmeU1lbW9yeVByZXNzdXJlKSwgV1RGTW92ZShzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgV1RG
TW92ZShncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogICAgIH0KICAgICAKLSAgICBib29sIGRvbmUg
PSB0cnlBbmRHQygKLSAgICAgICAgdm0sCisgICAgYm9vbCBkb25lID0gdHJ5QWxsb2NhdGUoCiAg
ICAgICAgIFsmXSAoKSAtPiBNZW1vcnlSZXN1bHQ6OktpbmQgewogICAgICAgICAgICAgcmV0dXJu
IG1lbW9yeU1hbmFnZXIoKS50cnlBbGxvY2F0ZVBoeXNpY2FsQnl0ZXMoaW5pdGlhbEJ5dGVzKTsK
LSAgICAgICAgfSk7CisgICAgICAgIH0sIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBzeW5jVHJ5VG9S
ZWNsYWltTWVtb3J5KTsKICAgICBpZiAoIWRvbmUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAKICAgICBjaGFyKiBmYXN0TWVtb3J5ID0gbnVsbHB0cjsKICAgICBpZiAoT3B0aW9u
czo6dXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCkpIHsKLSAgICAgICAgdHJ5QW5kR0MoCi0gICAg
ICAgICAgICB2bSwKKyAgICAgICAgdHJ5QWxsb2NhdGUoCiAgICAgICAgICAgICBbJl0gKCkgLT4g
TWVtb3J5UmVzdWx0OjpLaW5kIHsKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1lbW9y
eU1hbmFnZXIoKS50cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcygpOwogICAgICAgICAgICAgICAgIGZh
c3RNZW1vcnkgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHJlc3VsdC5iYXNlUHRyKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0LmtpbmQ7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0sIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KTsKICAgICB9
CiAgICAgCiAgICAgaWYgKGZhc3RNZW1vcnkpIHsKQEAgLTMyMCwxNSArMzI3LDE1IEBAIFJlZlB0
cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VD
b3VudCBtYXhpbXVtKQogICAgICAgICB9CiAKICAgICAgICAgY29tbWl0WmVyb1BhZ2VzKGZhc3RN
ZW1vcnksIGluaXRpYWxCeXRlcyk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1lbW9yeShmYXN0TWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnk6OmZhc3RNYXBw
ZWRCeXRlcygpLCBNZW1vcnlNb2RlOjpTaWduYWxpbmcpKTsKKworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lbW9yeShmYXN0TWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnk6OmZh
c3RNYXBwZWRCeXRlcygpLCBNZW1vcnlNb2RlOjpTaWduYWxpbmcsIFdURk1vdmUobm90aWZ5TWVt
b3J5UHJlc3N1cmUpLCBXVEZNb3ZlKHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBXVEZNb3ZlKGdy
b3dTdWNjZXNzQ2FsbGJhY2spKSk7CiAgICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKICAgICAgICAgd2ViQXNz
ZW1ibHlDb3VsZG50R2V0RmFzdE1lbW9yeSgpOwogCiAgICAgaWYgKCFpbml0aWFsQnl0ZXMpCi0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSwgV1RGTW92
ZShub3RpZnlNZW1vcnlQcmVzc3VyZSksIFdURk1vdmUoc3luY1RyeVRvUmVjbGFpbU1lbW9yeSks
IFdURk1vdmUoZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKICAgICAKICAgICB2b2lkKiBzbG93TWVt
b3J5ID0gR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RG
OjpwYWdlU2l6ZSgpLCBpbml0aWFsQnl0ZXMpOwogICAgIGlmICghc2xvd01lbW9yeSkgewpAQCAt
MzM2LDcgKzM0Myw3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgbWVtc2V0KHNsb3dNZW1vcnksIDAsIGluaXRpYWxCeXRlcyk7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoc2xvd01lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwg
aW5pdGlhbEJ5dGVzLCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTWVtb3J5KHNsb3dNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIGluaXRpYWxC
eXRlcywgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcsIFdURk1vdmUobm90aWZ5TWVtb3J5UHJl
c3N1cmUpLCBXVEZNb3ZlKHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBXVEZNb3ZlKGdyb3dTdWNj
ZXNzQ2FsbGJhY2spKSk7CiB9CiAKIE1lbW9yeTo6fk1lbW9yeSgpCkBAIC0zNDUsNyArMzUyLDEw
IEBAIE1lbW9yeTo6fk1lbW9yeSgpCiAgICAgICAgIG1lbW9yeU1hbmFnZXIoKS5mcmVlUGh5c2lj
YWxCeXRlcyhtX3NpemUpOwogICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgewogICAgICAgICBjYXNl
IE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKLSAgICAgICAgICAgIG1wcm90ZWN0KG1fbWVtb3J5LCBN
ZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgICAg
ICAgICAgIGlmIChtcHJvdGVjdChtX21lbW9yeSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwg
UFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJtcHJv
dGVjdCBmYWlsZWQ6ICIsIHN0cmVycm9yKGVycm5vKSwgIlxuIik7CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG1lbW9yeU1hbmFnZXIoKS5mcmVlVmlydHVhbFBhZ2VzKG1fbWVtb3J5KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgpAQCAtMzcx
LDM0ICszODEsNTAgQEAgYm9vbCBNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2
b2lkKiBhZGRyZXNzKQogICAgIHJldHVybiBtZW1vcnlNYW5hZ2VyKCkuY29udGFpbnNBZGRyZXNz
KGFkZHJlc3MpOwogfQogCi1ib29sIE1lbW9yeTo6Z3JvdyhWTSYgdm0sIFBhZ2VDb3VudCBuZXdT
aXplKQorRXhwZWN0ZWQ8UGFnZUNvdW50LCBNZW1vcnk6Okdyb3dGYWlsUmVhc29uPiBNZW1vcnk6
Omdyb3coUGFnZUNvdW50IGRlbHRhKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG5ld1NpemUgPiBQ
YWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpKTsKKyAgICBjb25zdCBXYXNtOjpQYWdlQ291bnQg
b2xkUGFnZUNvdW50ID0gc2l6ZUluUGFnZXMoKTsKIAotICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJNZW1vcnk6Omdyb3cgdG8gIiwgbmV3U2l6ZSwgIiBmcm9tICIsICp0aGlzKTsKKyAgICBpZiAo
IWRlbHRhLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWls
UmVhc29uOjpJbnZhbGlkRGVsdGEpOworICAgIAorICAgIGNvbnN0IFdhc206OlBhZ2VDb3VudCBu
ZXdQYWdlQ291bnQgPSBvbGRQYWdlQ291bnQgKyBkZWx0YTsKKyAgICBpZiAoIW5ld1BhZ2VDb3Vu
dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpJbnZhbGlk
R3Jvd1NpemUpOwogCi0gICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gbWF4aW11bSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBzdWNjZXNzID0gWyZdICgpIHsKKyAgICAg
ICAgbV9ncm93U3VjY2Vzc0NhbGxiYWNrKEdyb3dTdWNjZXNzVGFnLCBvbGRQYWdlQ291bnQsIG5l
d1BhZ2VDb3VudCk7CisgICAgICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CisgICAgfTsKIAotICAg
IHNpemVfdCBkZXNpcmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKKyAgICBpZiAoZGVsdGEucGFn
ZUNvdW50KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKworICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3coIiwgZGVsdGEsICIpIHRvICIsIG5ld1BhZ2VDb3Vu
dCwgIiBmcm9tICIsICp0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdQYWdlQ291bnQgPiBQ
YWdlQ291bnQ6OmZyb21CeXRlcyhtX3NpemUpKTsKKworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3
UGFnZUNvdW50ID4gbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jv
d0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bSk7CisKKyAgICBzaXplX3QgZGVzaXJlZFNp
emUgPSBuZXdQYWdlQ291bnQuYnl0ZXMoKTsKICAgICBSRUxFQVNFX0FTU0VSVChkZXNpcmVkU2l6
ZSA+IG1fc2l6ZSk7CiAgICAgc2l6ZV90IGV4dHJhQnl0ZXMgPSBkZXNpcmVkU2l6ZSAtIG1fc2l6
ZTsKICAgICBSRUxFQVNFX0FTU0VSVChleHRyYUJ5dGVzKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0
cnlBbmRHQygKLSAgICAgICAgdm0sCisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VzcyA9IHRyeUFs
bG9jYXRlKAogICAgICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0OjpLaW5kIHsKICAgICAgICAg
ICAgIHJldHVybiBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQaHlzaWNhbEJ5dGVzKGV4dHJh
Qnl0ZXMpOwotICAgICAgICB9KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgCisgICAgICAgIH0sIG1fbm90aWZ5TWVtb3J5UHJlc3N1cmUsIG1fc3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeSk7CisgICAgaWYgKCFhbGxvY2F0aW9uU3VjY2VzcykKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeSk7CisK
ICAgICBzd2l0Y2ggKG1vZGUoKSkgewogICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmc6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0gMCk7Ci0g
ICAgICAgIAorCiAgICAgICAgIHZvaWQqIG5ld01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVk
TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIFdURjo6cGFnZVNpemUoKSwgZGVzaXJlZFNpemUp
OwogICAgICAgICBpZiAoIW5ld01lbW9yeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1v
cnkpOworCiAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOwogICAg
ICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld01lbW9yeSkgKyBtX3NpemUsIDAsIGRl
c2lyZWRTaXplIC0gbV9zaXplKTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQpAQCAtNDA2LDcgKzQz
Miw3IEBAIGJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCiAgICAg
ICAgIG1fbWVtb3J5ID0gbmV3TWVtb3J5OwogICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVz
aXJlZFNpemU7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKICAgICB9CiAgICAgY2FzZSBNZW1vcnlN
b2RlOjpTaWduYWxpbmc6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkpOwpAQCAt
NDE1LDE2ICs0NDEsMTcgQEAgYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291bnQgbmV3
U2l6ZSkKICAgICAgICAgCiAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5nIFdl
YkFzc2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiIGFzIHJlYWQrd3Jp
dGUgaW4gcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9pbnRl
cihzdGFydEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKICAgICAgICAgaWYgKG1wcm90ZWN0
KHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgZmFp
bGVkICIsICp0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRh
dGFMb2coIm1wcm90ZWN0IGZhaWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAiXG4iKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAg
Y29tbWl0WmVyb1BhZ2VzKHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRlcyk7CiAgICAgICAgIG1fc2l6
ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKKyAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKyAgICB9CisgICAgfQorCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG9sZFBhZ2VD
b3VudDsKIH0KIAogdm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCA2MGE5YmI3Li5jZDU4NmE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC0yNyw4ICsyNywx
MSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1v
ZGUuaCIKICNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAKKyNpbmNsdWRlIDx3dGYvRXhwZWN0
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzgsMTggKzQxLDggQEAgY2xhc3Mg
UHJpbnRTdHJlYW07CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNl
IFdhc20gewogCi0vLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotZW51bSBjbGFz
cyBNZW1vcnlNb2RlIDogdWludDhfdCB7Ci0gICAgQm91bmRzQ2hlY2tpbmcsCi0gICAgU2lnbmFs
aW5nCi19Owotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7
Ci1KU19FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOwot
CiBjbGFzcyBNZW1vcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAt
NTgsNyArNTEsMTIgQEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9tZW1vcnk7IH0KICAgICAKLSAgICBzdGF0aWMgUmVmUHRyPE1lbW9y
eT4gY3JlYXRlKFZNJiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKTsKKyAg
ICBlbnVtIE5vdGlmeVByZXNzdXJlIHsgTm90aWZ5UHJlc3N1cmVUYWcgfTsKKyAgICBlbnVtIFN5
bmNUcnlUb1JlY2xhaW0geyBTeW5jVHJ5VG9SZWNsYWltVGFnIH07CisgICAgZW51bSBHcm93U3Vj
Y2VzcyB7IEdyb3dTdWNjZXNzVGFnIH07CisKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3Jl
YXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShQYWdlQ291bnQgaW5pdGlh
bCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+
JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNs
YWltKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1
Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAog
ICAgIH5NZW1vcnkoKTsKIApAQCAtNzUsMjIgKzczLDM0IEBAIHB1YmxpYzoKIAogICAgIE1lbW9y
eU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogCi0gICAgLy8gZ3JvdygpIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBKU1dlYkFzc2VtYmx5TWVtb3J5IG9iamVjdCBz
aW5jZSB0aGF0IG9iamVjdCBuZWVkcyB0byB1cGRhdGUgaW50ZXJuYWwKLSAgICAvLyBwb2ludGVy
cyB3aXRoIHRoZSBjdXJyZW50IGJhc2UgYW5kIHNpemUuCi0gICAgYm9vbCBncm93KFZNJiwgUGFn
ZUNvdW50KTsKKyAgICBlbnVtIGNsYXNzIEdyb3dGYWlsUmVhc29uIHsKKyAgICAgICAgSW52YWxp
ZERlbHRhLAorICAgICAgICBJbnZhbGlkR3Jvd1NpemUsCisgICAgICAgIFdvdWxkRXhjZWVkTWF4
aW11bSwKKyAgICAgICAgT3V0T2ZNZW1vcnksCisgICAgfTsKKyAgICBFeHBlY3RlZDxQYWdlQ291
bnQsIEdyb3dGYWlsUmVhc29uPiBncm93KFBhZ2VDb3VudCk7CiAKICAgICB2b2lkIGNoZWNrKCkg
eyAgQVNTRVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkpOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9tZW1v
cnkpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3NpemUpOyB9CisKIHByaXZhdGU6Ci0gICAgTWVtb3J5KHZv
aWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3Qg
bWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUpOwotICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlh
bCwgUGFnZUNvdW50IG1heGltdW0pOworICAgIE1lbW9yeSgpOworICAgIE1lbW9yeSh2b2lkKiBt
ZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBl
ZENhcGFjaXR5LCBNZW1vcnlNb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoTm90aWZ5UHJlc3N1cmUp
PiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVj
bGFpbSk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dT
dWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjayk7Cisg
ICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgV1RGOjpGdW5j
dGlvbjx2b2lkKE5vdGlmeVByZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpG
dW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnks
IFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYm
IGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRo
ZXNlIHRvIHRoZSBpbnN0YW5jZSB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNl
IGNhbGxzLgorICAgIC8vIEZJWE1FOiB3ZSBjYWNoZSB0aGVzZSBvbiB0aGUgaW5zdGFuY2VzIHRv
IGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5zdGFuY2UgY2FsbHMuIFRoaXMgd2lsbCByZXF1
aXJlIHVwZGF0aW5nIGFsbCB0aGUgaW5zdGFuY2VzIHdoZW4gZ3JvdyBpcyBjYWxsZWQuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUKICAgICB2b2lkKiBtX21l
bW9yeSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwogICAgIFBhZ2VDb3Vu
dCBtX2luaXRpYWw7CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKICAgICBzaXplX3QgbV9tYXBw
ZWRDYXBhY2l0eSB7IDAgfTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nIH07CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKE5vdGlmeVByZXNzdXJlKT4g
bV9ub3RpZnlNZW1vcnlQcmVzc3VyZTsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoU3luY1RyeVRv
UmVjbGFpbSk+IG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeTsKKyAgICBXVEY6OkZ1bmN0aW9uPHZv
aWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4gbV9ncm93U3VjY2Vzc0NhbGxi
YWNrOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCmluZGV4IGJmNTY1
ZjAuLmI1YzM0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnlJbmZvcm1hdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcApAQCAtNTcsNyArNTcsNyBAQCBjb25zdCBQaW5uZWRSZWdp
c3RlckluZm8mIFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAgICBzdGQ6OmNhbGxfb25jZShz
dGF0aWNQaW5uZWRSZWdpc3RlckluZm9GbGFnLCBbXSAoKSB7CiAgICAgICAgIFZlY3RvcjxQaW5u
ZWRTaXplUmVnaXN0ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOwogICAgICAgICBHUFJSZWcgYmFzZU1l
bW9yeVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBHUFJSZWcgd2FzbUNvbnRleHRQ
b2ludGVyID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFu
Y2VQb2ludGVyID0gSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3RlciwgYW5kIHdlIHNob3Vs
ZCBhbGxvdyBkaWZmZXJlbnQKICAgICAgICAgLy8gICAgICAgIFdlYkFzc2VtYmx5Lkluc3RhbmNl
IHRvIGhhdmUgZGlmZmVyZW50IHBpbnMuIFJpZ2h0IG5vdyB3ZSB0YWtlIGEgdmVjdG9yIHdpdGgg
b25seSBvbmUgZW50cnkuCkBAIC02NSwyNyArNjUsMjcgQEAgY29uc3QgUGlubmVkUmVnaXN0ZXJJ
bmZvJiBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpCiAgICAgICAgIC8vICAgICAgICBzZWU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAgICAgVmVj
dG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZlBpbm5lZFJlZ2lzdGVycyA9IHBpbm5lZFNpemVzLnNpemUoKSArIDE7Ci0gICAgICAgIGlm
ICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0
VExTKCkpCiAgICAgICAgICAgICArK251bWJlck9mUGlubmVkUmVnaXN0ZXJzOwogICAgICAgICBW
ZWN0b3I8R1BSUmVnPiBwaW5uZWRSZWdzID0gZ2V0UGlubmVkUmVnaXN0ZXJzKG51bWJlck9mUGlu
bmVkUmVnaXN0ZXJzKTsKIAogICAgICAgICBiYXNlTWVtb3J5UG9pbnRlciA9IHBpbm5lZFJlZ3Mu
dGFrZUxhc3QoKTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAg
ICAgICAgd2FzbUNvbnRleHRQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOworICAgICAg
ICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgIHdhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOwogCiAgICAgICAgIEFTU0VSVChw
aW5uZWRTaXplcy5zaXplKCkgPT0gcGlubmVkUmVncy5zaXplKCkpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGlubmVkU2l6ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBz
aXplUmVnaXN0ZXJzLmFwcGVuZCh7IHBpbm5lZFJlZ3NbaV0sIHBpbm5lZFNpemVzW2ldIH0pOwot
ICAgICAgICBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uY29uc3RydWN0KFdURk1vdmUoc2l6ZVJl
Z2lzdGVycyksIGJhc2VNZW1vcnlQb2ludGVyLCB3YXNtQ29udGV4dFBvaW50ZXIpOworICAgICAg
ICBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uY29uc3RydWN0KFdURk1vdmUoc2l6ZVJlZ2lzdGVy
cyksIGJhc2VNZW1vcnlQb2ludGVyLCB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAg
fSk7CiAKICAgICByZXR1cm4gc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvLmdldCgpOwogfQogCi1Q
aW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJl
Z2lzdGVySW5mbz4mJiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIsIEdQ
UlJlZyB3YXNtQ29udGV4dFBvaW50ZXIpCitQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lz
dGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaXN0ZXJzLCBH
UFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIsIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRl
cikKICAgICA6IHNpemVSZWdpc3RlcnMoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSkKICAgICAsIGJh
c2VNZW1vcnlQb2ludGVyKGJhc2VNZW1vcnlQb2ludGVyKQotICAgICwgd2FzbUNvbnRleHRQb2lu
dGVyKHdhc21Db250ZXh0UG9pbnRlcikKKyAgICAsIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
KHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCmluZGV4IDQyMzdiYWMuLjIz
MzI5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJ
bmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJ
bmZvcm1hdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8g
ewogc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7CiAgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdp
c3RlckluZm8+IHNpemVSZWdpc3RlcnM7CiAgICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyOwot
ICAgIEdQUlJlZyB3YXNtQ29udGV4dFBvaW50ZXI7CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyOwogICAgIHN0YXRpYyBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIGdldCgp
OwogICAgIFBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4m
JiwgR1BSUmVnLCBHUFJSZWcpOwogCkBAIC01Miw4ICs1Miw4IEBAIHN0cnVjdCBQaW5uZWRSZWdp
c3RlckluZm8gewogICAgIHsKICAgICAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwogICAgICAgICBy
ZXN1bHQuc2V0KGJhc2VNZW1vcnlQb2ludGVyKTsKLSAgICAgICAgaWYgKHdhc21Db250ZXh0UG9p
bnRlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgcmVzdWx0LnNldCh3YXNtQ29udGV4
dFBvaW50ZXIpOworICAgICAgICBpZiAod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJlc3VsdC5zZXQod2FzbUNvbnRleHRJbnN0YW5jZVBv
aW50ZXIpOwogICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKICAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaW5mbyA6IHNpemVSZWdpc3RlcnMpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0LnNldChpbmZvLnNpemVSZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjFiYzk4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnlNb2RlLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CisKK2NvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQor
eworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFs
aW5nOiByZXR1cm4gIlNpZ25hbGluZyI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnlNb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMTRmYzg5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlNb2RlLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiSlNFeHBvcnRNYWNyb3MuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK25hbWVzcGFjZSBXYXNtIHsKKworLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVy
IG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2
OTMKK2VudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3QgeworICAgIEJvdW5kc0NoZWNraW5n
LAorICAgIFNpZ25hbGluZworfTsKKworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZN
ZW1vcnlNb2RlcyA9IDI7CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3RyaW5n
KE1lbW9yeU1vZGUpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
Y3BwCmluZGV4IDhlMzY2ZjQuLjk5MmUzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGUuY3BwCkBAIC01NiwyNyArNTYsMjYgQEAgc3RhdGljIE1vZHVsZTo6VmFsaWRh
dGlvblJlc3VsdCBtYWtlVmFsaWRhdGlvblJlc3VsdChCQlFQbGFuJiBwbGFuKQogCiBzdGF0aWMg
UGxhbjo6Q29tcGxldGlvblRhc2sgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhNb2R1bGU6OkFzeW5j
VmFsaWRhdGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVNoYXJl
ZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0g
KFZNKiB2bSwgUGxhbiYgcGxhbikgeworICAgIHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPFBsYW46
OkNhbGxiYWNrVHlwZT4oW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChQbGFuJiBwbGFu
KSB7CiAgICAgICAgIEFTU0VSVCghcGxhbi5oYXNXb3JrKCkpOwotICAgICAgICBBU1NFUlQodm0p
OwotICAgICAgICBjYWxsYmFjay0+cnVuKCp2bSwgbWFrZVZhbGlkYXRpb25SZXN1bHQoc3RhdGlj
X2Nhc3Q8QkJRUGxhbiY+KHBsYW4pKSk7CisgICAgICAgIGNhbGxiYWNrLT5ydW4obWFrZVZhbGlk
YXRpb25SZXN1bHQoc3RhdGljX2Nhc3Q8QkJRUGxhbiY+KHBsYW4pKSk7CiAgICAgfSk7CiB9CiAK
LU1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhWTSYgdm0sIFZl
Y3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKK01vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBNb2R1bGU6
OnZhbGlkYXRlU3luYyhDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2Up
CiB7Ci0gICAgUmVmPEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oJnZtLCBX
VEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgp
KSk7CisgICAgUmVmPEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4
dCwgV1RGTW92ZShzb3VyY2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxp
emUoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwogICAgIHBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1
bGUoKTsKICAgICByZXR1cm4gbWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbi5nZXQoKSk7CiB9CiAK
LXZvaWQgTW9kdWxlOjp2YWxpZGF0ZUFzeW5jKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291
cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit2b2lkIE1v
ZHVsZTo6dmFsaWRhdGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBz
b3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAg
ICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbigmdm0sIFdURk1vdmUoc291
cmNlKSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3Zl
KGNhbGxiYWNrKSkpKTsKKyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxh
bihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxp
ZGF0aW9uQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpLCBudWxscHRyLCBudWxscHRyKSk7CiAg
ICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOwogfQogCi1S
ZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKE1lbW9yeU1vZGUgbW9k
ZSkKK1JlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCog
Y29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVF
bWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7
CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKQEAgLTg3LDIzICs4NiwyMyBAQCBSZWY8Q29kZUJsb2NrPiBNb2R1bGU6
OmdldE9yQ3JlYXRlQ29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSkKICAgICAvLyBGSVhNRTogV2Ug
bWlnaHQgd2FudCB0byBiYWNrIG9mZiByZXRyeWluZyBhdCBzb21lIHBvaW50OgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2MDcKICAgICBpZiAoIWNv
ZGVCbG9jayB8fCAoY29kZUJsb2NrLT5jb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIWNvZGVCbG9j
ay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUo
bW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkp
KTsKKyAgICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUoY29udGV4dCwgbW9kZSwg
Y29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpLCBXVEZN
b3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgICAg
IG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0gPSBjb2RlQmxvY2s7CiAg
ICAgfQogICAgIHJldHVybiBjb2RlQmxvY2sucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPENv
ZGVCbG9jaz4gTW9kdWxlOjpjb21waWxlU3luYyhNZW1vcnlNb2RlIG1vZGUpCitSZWY8Q29kZUJs
b2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9k
ZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dh
c21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewotICAgIFJlZjxDb2RlQmxvY2s+IGNv
ZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKG1vZGUpOworICAgIFJlZjxDb2RlQmxvY2s+
IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIFdURk1vdmUo
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBjb2RlQmxv
Y2stPndhaXRVbnRpbEZpbmlzaGVkKCk7CiAgICAgcmV0dXJuIGNvZGVCbG9jazsKIH0KIAotdm9p
ZCBNb2R1bGU6OmNvbXBpbGVBc3luYyhWTSYgdm0sIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2Nr
OjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrKQordm9pZCBNb2R1bGU6OmNvbXBpbGVB
c3luYyhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENvZGVCbG9jazo6QXN5bmND
b21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRl
RW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQog
ewotICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKG1v
ZGUpOwotICAgIGNvZGVCbG9jay0+Y29tcGlsZUFzeW5jKHZtLCBXVEZNb3ZlKHRhc2spKTsKKyAg
ICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9jayhjb250ZXh0
LCBtb2RlLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bik7CisgICAgY29kZUJsb2NrLT5jb21waWxlQXN5bmMoY29udGV4dCwgV1RGTW92ZSh0YXNrKSk7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlLmgKaW5kZXggYTFhZjc1OC4uYTZhZTI5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJXYXNtRW1i
ZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTM2LDE5ICszNywyMCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKIHN0cnVjdCBNb2R1
bGVJbmZvcm1hdGlvbjsKIGNsYXNzIFBsYW47CiAKIHVzaW5nIFNpZ25hdHVyZUluZGV4ID0gdWlu
dDMyX3Q7Ci0gICAgCisKIGNsYXNzIE1vZHVsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxNb2R1bGU+IHsKIHB1YmxpYzoKICAgICB1c2luZyBWYWxpZGF0aW9uUmVzdWx0ID0gV1RGOjpF
eHBlY3RlZDxSZWZQdHI8TW9kdWxlPiwgU3RyaW5nPjsKLSAgICB0eXBlZGVmIHZvaWQgQ2FsbGJh
Y2tUeXBlKFZNJiwgVmFsaWRhdGlvblJlc3VsdCYmKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJh
Y2tUeXBlKFZhbGlkYXRpb25SZXN1bHQmJik7CiAgICAgdXNpbmcgQXN5bmNWYWxpZGF0aW9uQ2Fs
bGJhY2sgPSBSZWZQdHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKIAotICAgIHN0YXRpYyBW
YWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlU3luYyhWTSYsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJj
ZSk7Ci0gICAgc3RhdGljIHZvaWQgdmFsaWRhdGVBc3luYyhWTSYsIFZlY3Rvcjx1aW50OF90PiYm
IHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmKTsKKyAgICBzdGF0aWMg
VmFsaWRhdGlvblJlc3VsdCB2YWxpZGF0ZVN5bmMoQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYm
IHNvdXJjZSk7CisgICAgc3RhdGljIHZvaWQgdmFsaWRhdGVBc3luYyhDb250ZXh0KiwgVmVjdG9y
PHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOwog
CiAgICAgc3RhdGljIFJlZjxNb2R1bGU+IGNyZWF0ZShSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYg
bW9kdWxlSW5mb3JtYXRpb24pCiAgICAgewpAQCAtNTgsMTQgKzYwLDE0IEBAIHB1YmxpYzoKICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdDsKICAgICBjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21v
ZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9CiAKLSAgICBSZWY8Q29kZUJsb2NrPiBjb21waWxlU3lu
YyhNZW1vcnlNb2RlKTsKLSAgICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIE1lbW9yeU1vZGUsIENv
ZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOworICAgIFJlZjxDb2RlQmxvY2s+
IGNvbXBpbGVTeW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXIm
JiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0Kiwg
TWVtb3J5TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiwgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB+TW9kdWxlKCk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihNZW1vcnlN
b2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2Rl
KV0uZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2Rl
QmxvY2soTWVtb3J5TW9kZSk7CisgICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxv
Y2soQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dh
c21FeGNlcHRpb24pOwogCiAgICAgTW9kdWxlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJik7CiAg
ICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA2Yzk0OGI1
Li42ZDQ0YWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmNwcApAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAog
I2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRh
YmxlLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgpAQCAtMjY1LDcgKzI2
NCw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXph
YmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwogICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkK
ICAgICAgICAgcmV0dXJuIGxpbWl0cy5nZXRVbmV4cGVjdGVkKCk7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighSlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0aWFsKSwgIlRhYmxl
J3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdGlhbCA+IG1heFRhYmxlRW50cmllcywgIlRhYmxlJ3Mg
aW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgdG9vIGJpZywgbWF4aW11bSAi
LCBtYXhUYWJsZUVudHJpZXMpOwogCiAgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49
IGluaXRpYWwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TmFtZVNlY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzN2Y2NTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaApA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXYXNtTmFtZS5oIgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RydWN0IE5hbWVTZWN0aW9uIDogVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8TmFtZVNlY3Rpb24+IHsKKyAgICBzdGF0aWMgUmVmPE5hbWVTZWN0
aW9uPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmFtZVNl
Y3Rpb24oKSk7CisgICAgfQorCisgICAgTmFtZSBtb2R1bGVOYW1lOworICAgIFZlY3RvcjxOYW1l
PiBmdW5jdGlvbk5hbWVzOworICAgIGNvbnN0IE5hbWUqIGdldChzaXplX3QgZnVuY3Rpb25JbmRl
eFNwYWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGZ1bmN0
aW9uTmFtZXMuc2l6ZSgpID8gJmZ1bmN0aW9uTmFtZXNbZnVuY3Rpb25JbmRleFNwYWNlXSA6IG51
bGxwdHI7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA3NGNmNjUzLi5jY2RmNzJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0zMSw5
ICszMSwxMCBAQAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCM09wYXF1
ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJB
c3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2lu
Y2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUg
Ildhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKQEAgLTUxLDEw
ICs1MiwxMCBAQCBuYW1lc3BhY2UgV2FzbU9NR1BsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLU9NR1BsYW46Ok9NR1BsYW4oUmVmPE1vZHVsZT4g
bW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2UobnVsbHB0ciwgbWFrZVJlZihjb25zdF9jYXN0PE1v
ZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSksIFdURk1vdmUo
dGFzaykpCi0gICAgLCBtX21vZHVsZShtb2R1bGUuY29weVJlZigpKQotICAgICwgbV9jb2RlQmxv
Y2soKm1vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQorT01HUGxhbjo6T01HUGxhbihDb250ZXh0
KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
TWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKGNvbnRl
eHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxl
SW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQorICAgICwgbV9tb2R1bGUoV1RGTW92ZSht
b2R1bGUpKQorICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkp
CiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKICAgICBzZXRNb2RlKG1v
ZGUpOwpAQCAtMTYyLDEzICsxNjMsMTMgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9u
RWZmb3J0KQogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwogfQogCi12b2lkIHJ1bk9N
R1BsYW5Gb3JJbmRleChDb250ZXh0KiBjb250ZXh0LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQor
dm9pZCBPTUdQbGFuOjpydW5Gb3JJbmRleChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNl
LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogewotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNvbnRleHQtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb250ZXh0LT5t
ZW1vcnlNb2RlKCkgPT0gY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+bW9kZSgpKTsKKyAgICBXYXNt
OjpDb2RlQmxvY2smIGNvZGVCbG9jayA9IGluc3RhbmNlLT53YXNtQ29kZUJsb2NrKCk7CisgICAg
QVNTRVJUKGluc3RhbmNlLT53YXNtTWVtb3J5KCktPm1vZGUoKSA9PSBjb2RlQmxvY2subW9kZSgp
KTsKIAotICAgIGlmIChjb2RlQmxvY2stPm1fY29kZUJsb2NrLT50aWVyVXBDb3VudChmdW5jdGlv
bkluZGV4KS5zaG91bGRTdGFydFRpZXJVcCgpKSB7Ci0gICAgICAgIFJlZjxQbGFuPiBwbGFuID0g
YWRvcHRSZWYoKm5ldyBPTUdQbGFuKGNvbnRleHQtPm1vZHVsZSgpLT5tb2R1bGUoKSwgZnVuY3Rp
b25JbmRleCwgY29kZUJsb2NrLT5tX2NvZGVCbG9jay0+bW9kZSgpLCBQbGFuOjpkb250RmluYWxp
emUoKSkpOworICAgIGlmIChjb2RlQmxvY2sudGllclVwQ291bnQoZnVuY3Rpb25JbmRleCkuc2hv
dWxkU3RhcnRUaWVyVXAoKSkgeworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgT01HUGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5j
ZS0+d2FzbU1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6
ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAgZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4u
Y29weVJlZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50
SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCmluZGV4IDcxNjRhOWUuLmI4MDgyNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaApAQCAtMjcsNyArMjcsNiBA
QAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRl
ICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKICNpbmNsdWRlICJXYXNt
UGxhbi5oIgpAQCAtNDEsMTcgKzQwLDIwIEBAIG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIE9NR1Bs
YW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47
Ci0gICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNl
IHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgot
ICAgIE9NR1BsYW4oUmVmPE1vZHVsZT4sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1v
ZGUsIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgYm9vbCBoYXNXb3JrKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gIW1fY29tcGxldGVkOyB9CiAgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZm
b3J0KSBvdmVycmlkZTsKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQogCisgICAgc3RhdGljIHZvaWQgcnVuRm9ySW5kZXgoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisKIHByaXZhdGU6CiAgICAg
Ly8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNs
YXNzZXMuLi4KICAgICB1c2luZyBCYXNlOjptX2xvY2s7CiAKKyAgICAvLyBOb3RlOiBDb21wbGV0
aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNl
IHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgT01HUGxhbihDb250ZXh0Kiwg
UmVmPE1vZHVsZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxl
dGlvblRhc2smJik7CisKICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2NvbXBsZXRlZDsgfQogICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGxvY2tlcikgb3ZlcnJpZGUKICAgICB7CkBAIC02NSw4ICs2Nyw2IEBAIHByaXZhdGU6CiAg
ICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwogfTsKIAotdm9pZCBydW5PTUdQbGFuRm9ySW5k
ZXgoQ29udGV4dCosIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwotCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCmluZGV4IGU0Mzg0N2MuLmVmMDVmMzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNiArNTcsMTEg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291
bnQ7CiAgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNWYWxpZChtX3BhZ2VDb3VudCk7CisgICAgfQogCiAgICAgc3RhdGljIFBhZ2VD
b3VudCBmcm9tQnl0ZXModWludDY0X3QgYnl0ZXMpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGJhMjdjZjkuLmQwNjNjYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOCArMjksNiBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxl
ZS5oIgpAQCAtNTEsMjAgKzQ5LDI3IEBAIG5hbWVzcGFjZSBXYXNtUGxhbkludGVybmFsIHsKIHN0
YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0s
IFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxh
bjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENv
bXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDog
bV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKGluZm8pKQorICAgICwgbV9jcmVhdGVFbWJlZGRl
cldyYXBwZXIoV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpKQorICAgICwgbV90aHJvd1dh
c21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9zb3VyY2UobV9tb2R1bGVJ
bmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkKICAgICAsIG1fc291cmNlTGVuZ3RoKG1fbW9kdWxl
SW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkpCiB7Ci0gICAgbV9jb21wbGV0aW9uVGFza3MuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKHZtLCBXVEZNb3ZlKHRhc2spKSk7CisgICAgbV9jb21wbGV0aW9u
VGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKIH0K
IAotUGxhbjo6UGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJj
ZUxlbmd0aCwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250
ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykK
KyAgICA6IFBsYW4oY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgbnVsbHB0
ciwgbnVsbHB0cikKK3sKK30KKworUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1
aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFz
aykKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1h
dGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwg
bV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQogewotICAgIG1fY29tcGxldGlvblRhc2tzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcih2bSwgV1RGTW92ZSh0YXNrKSkpOworICAgIG1fY29tcGxldGlv
blRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9
CiAKIHZvaWQgUGxhbjo6cnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikK
QEAgLTcyLDE4ICs3NywxOCBAQCB2b2lkIFBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyhjb25zdCBB
YnN0cmFjdExvY2tlciYpCiAgICAgQVNTRVJUKGlzQ29tcGxldGUoKSAmJiAhaGFzV29yaygpKTsK
IAogICAgIGZvciAoYXV0byYgdGFzayA6IG1fY29tcGxldGlvblRhc2tzKQotICAgICAgICB0YXNr
LnNlY29uZC0+cnVuKHRhc2suZmlyc3QsICp0aGlzKTsKKyAgICAgICAgdGFzay5zZWNvbmQtPnJ1
bigqdGhpcyk7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuY2xlYXIoKTsKICAgICBtX2NvbXBsZXRl
ZC5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBQbGFuOjphZGRDb21wbGV0aW9uVGFzayhWTSYgdm0s
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKK3ZvaWQgUGxhbjo6YWRkQ29tcGxldGlvblRhc2soQ29u
dGV4dCogY29udGV4dCwgQ29tcGxldGlvblRhc2smJiB0YXNrKQogewogICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbG9jayk7CiAgICAgaWYgKCFpc0NvbXBsZXRlKCkpCi0gICAgICAgIG1fY29tcGxl
dGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigmdm0sIFdURk1vdmUodGFzaykpKTsKKyAg
ICAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdU
Rk1vdmUodGFzaykpKTsKICAgICBlbHNlCi0gICAgICAgIHRhc2stPnJ1bigmdm0sICp0aGlzKTsK
KyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsKIH0KIAogdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxl
dGlvbigpCkBAIC05NCwxOSArOTksMTkgQEAgdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigp
CiAgICAgfQogfQogCi1ib29sIFBsYW46OnRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJiB2
bSkKK2Jvb2wgUGxhbjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChDb250ZXh0JiBj
b250ZXh0KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAKICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZmlyc3QgY29tcGxldGlv
biB0YXNrIHRvIG5vdCBoYXZlIGEgdm0uCisgICAgICAgIC8vIFdlIGFsbG93IHRoZSBmaXJzdCBj
b21wbGV0aW9uIHRhc2sgdG8gbm90IGhhdmUgYSBDb250ZXh0LgogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgbV9jb21wbGV0aW9uVGFza3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAg
ICBBU1NFUlQobV9jb21wbGV0aW9uVGFza3NbaV0uZmlyc3QpOwogICAgIH0KIAogICAgIGJvb2wg
cmVtb3ZlZEFueVRhc2tzID0gZmFsc2U7Ci0gICAgbV9jb21wbGV0aW9uVGFza3MucmVtb3ZlQWxs
TWF0Y2hpbmcoWyZdIChjb25zdCBzdGQ6OnBhaXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4mIHBhaXIp
IHsKLSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmUgPSBwYWlyLmZpcnN0ID09ICZ2bTsKKyAgICBt
X2NvbXBsZXRpb25UYXNrcy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNvbnN0IHN0ZDo6cGFpcjxD
b250ZXh0KiwgQ29tcGxldGlvblRhc2s+JiBwYWlyKSB7CisgICAgICAgIGJvb2wgc2hvdWxkUmVt
b3ZlID0gcGFpci5maXJzdCA9PSAmY29udGV4dDsKICAgICAgICAgcmVtb3ZlZEFueVRhc2tzIHw9
IHNob3VsZFJlbW92ZTsKICAgICAgICAgcmV0dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IDEwZjhhMWIuLjdhMDdiZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApAQCAtMjgsOCArMjgsOCBAQAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0j
aW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUg
Ildhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgpAQCAtMzksMjUg
KzM5LDI3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbExpbmtJbmZvOwotY2xhc3Mg
SlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKIAogbmFtZXNwYWNlIFdh
c20gewogCitzdHJ1Y3QgQ29udGV4dDsKKwogY2xhc3MgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxQbGFuPiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlw
ZShWTSosIFBsYW4mKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFBsYW4mKTsKICAg
ICB1c2luZyBDb21wbGV0aW9uVGFzayA9IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+
OwotICAgIHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVh
dGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oVk0qLCBQbGFuJikgeyB9KTsgfQotICAgIFBs
YW4oVk0qLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKKworICAg
IHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFy
ZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oUGxhbiYpIHsgfSk7IH0KKyAgICBQbGFuKENvbnRleHQq
LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRl
cldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBQbGFuKENvbnRleHQqLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIC8vIE5vdGU6IFRo
aXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxs
eSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQ29tcGxl
dGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihDb250ZXh0KiwgY29uc3Qg
dWludDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7CiAgICAgdmlydHVhbCBKU19FWFBP
UlRfUFJJVkFURSB+UGxhbigpOwogCiAgICAgLy8gSWYgeW91IGd1YXJhbnRlZSB0aGUgb3JkZXJp
bmcgaGVyZSwgeW91IGNhbiByZWx5IG9uIEZJRk8gb2YgdGhlCiAgICAgLy8gY29tcGxldGlvbiB0
YXNrcyBiZWluZyBjYWxsZWQuCi0gICAgdm9pZCBhZGRDb21wbGV0aW9uVGFzayhWTSYsIENvbXBs
ZXRpb25UYXNrJiYpOworICAgIHZvaWQgYWRkQ29tcGxldGlvblRhc2soQ29udGV4dCosIENvbXBs
ZXRpb25UYXNrJiYpOwogCiAgICAgdm9pZCBzZXRNb2RlKE1lbW9yeU1vZGUgbW9kZSkgeyBtX21v
ZGUgPSBtb2RlOyB9CiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
OyB9CkBAIC03Miw3ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2FpdEZvckNvbXBsZXRp
b24oKTsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY2FuY2VsbGVkIHRoZSBwbGFuLgotICAg
IGJvb2wgdHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3QoVk0mKTsKKyAgICBib29sIHRyeVJlbW92
ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBydW5Db21wbGV0aW9uVGFza3MoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKQEAgLTgzLDcgKzg1
LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJ
bmZvcm1hdGlvbjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4s
IDE+IG1fY29tcGxldGlvblRhc2tzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29udGV4dCosIENv
bXBsZXRpb25UYXNrPiwgMT4gbV9jb21wbGV0aW9uVGFza3M7CisKKyAgICBDcmVhdGVFbWJlZGRl
cldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9u
IG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogCiAgICAgY29uc3QgdWludDhfdCog
bV9zb3VyY2U7CiAgICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAppbmRleCA4YjYwMGVkLi42YTQyZDUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwx
MCArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgi
CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9u
cy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKaW5kZXggZTQxM2IyNS4uYWFjZWQ1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw4ICs0
Myw2IEBAIGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07
Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgU2lnbmF0dXJlQXJnQ291bnQgPSB1aW50MzJf
dDsKQEAgLTE1Niw3ICsxNTQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
V2FzbTo6U2lnbmF0dXJlSGFzaD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi0vLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMg
aGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5IFZNcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0
byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2Fz
bSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVu
IG11bHRpcGxlIFZNcy4KKy8vIFNpZ25hdHVyZSBpbmZvcm1hdGlvbiBpcyBoZWxkIGdsb2JhbGx5
IGFuZCBzaGFyZWQgYnkgdGhlIGVudGlyZSBwcm9jZXNzIHRvIGFsbG93IGFsbCBzaWduYXR1cmVz
IHRvIGJlIHVuaXF1ZS4gVGhpcyBpcyByZXF1aXJlZCB3aGVuIHdhc20gY2FsbHMgYW5vdGhlciB3
YXNtIGluc3RhbmNlLCBhbmQgbXVzdCB3b3JrIHdoZW4gbW9kdWxlcyBhcmUgc2hhcmVkIGJldHdl
ZW4gbXVsdGlwbGUgVk1zLgogLy8gTm90ZTogc2lnbmF0dXJlcyBhcmUgbmV2ZXIgcmVtb3ZlZCBi
ZWNhdXNlIHRoYXQgd291bGQgcmVxdWlyZSBhY2NvdW50aW5nIGZvciBhbGwgV2ViQXNzZW1ibHku
TW9kdWxlIGFuZCB3aGljaCBzaWduYXR1cmVzIHRoZXkgdXNlLiBUaGUgbWF4aW11bSBudW1iZXIg
b2Ygc2lnbmF0dXJlcyBpcyBib3VuZGVkLCBhbmQgaXNuJ3Qgd29ydGggdGhlIGNvdW50aW5nIG92
ZXJoZWFkLiBXZSBjb3VsZCBjbGVhciBldmVyeXRoaW5nIHdoZW4gd2UgcmVhY2ggemVybyBvdXRz
dGFuZGluZyBXZWJBc3NlbWJseS5Nb2R1bGUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjYwMzcKIGNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTaWduYXR1cmVJbmZvcm1hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jNzAxYTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRhYmxlLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNt
VGFibGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9DaGVj
a2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx0eXBlX3RyYWl0cz4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworUmVm
UHRyPFRhYmxlPiBUYWJsZTo6Y3JlYXRlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwg
ZmFzdE1hbGxvYyhzaXplb2YoVGFibGUpKSkgVGFibGUoaW5pdGlhbCwgbWF4aW11bSkpOworfQor
CitUYWJsZTo6flRhYmxlKCkKK3sKK30KKworVGFibGU6OlRhYmxlKHVpbnQzMl90IGluaXRpYWws
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgbV9zaXplID0gaW5pdGlh
bDsKKyAgICBtX21heGltdW0gPSBtYXhpbXVtOworICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3Np
emUpKTsKKyAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7CisK
KyAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBt
YXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCisgICAgLy8gQnV0IGZv
ciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgorICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRy
PFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVu
Y3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICBtX2luc3RhbmNlcyA9
IE1hbGxvY1B0cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPjo6bWFsbG9jKHNpemVvZihKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGRlZmF1bHRfY29u
c3RydWN0X2F0KCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSk7CisgICAgICAgIEFTU0VSVChtX2Z1bmN0
aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJ
bmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBtX2lu
c3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBUYWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKK3sKKyAgICBpZiAoZGVsdGEgPT0g
MCkKKyAgICAgICAgcmV0dXJuIHNpemUoKTsKKworICAgIHVzaW5nIENoZWNrZWQgPSBDaGVja2Vk
PHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz47CisgICAgQ2hlY2tlZCBuZXdTaXplQ2hlY2tlZCA9
IHNpemUoKTsKKyAgICBuZXdTaXplQ2hlY2tlZCArPSBkZWx0YTsKKyAgICB1aW50MzJfdCBuZXdT
aXplOworICAgIGlmIChuZXdTaXplQ2hlY2tlZC5zYWZlR2V0KG5ld1NpemUpID09IENoZWNrZWRT
dGF0ZTo6RGlkT3ZlcmZsb3cpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBp
ZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIGNoZWNrZWRHcm93ID0gWyZdIChhdXRvJiBjb250
YWluZXIpIHsKKyAgICAgICAgQ2hlY2tlZCByZWFsbG9jU2l6ZUNoZWNrZWQgPSBuZXdTaXplQ2hl
Y2tlZDsKKyAgICAgICAgcmVhbGxvY1NpemVDaGVja2VkICo9IHNpemVvZigqY29udGFpbmVyLmdl
dCgpKTsKKyAgICAgICAgdWludDMyX3QgcmVhbGxvY1NpemU7CisgICAgICAgIGlmIChyZWFsbG9j
U2l6ZUNoZWNrZWQuc2FmZUdldChyZWFsbG9jU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVy
ZmxvdykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29udGFpbmVyLnJlYWxs
b2MocmVhbGxvY1NpemUpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBu
ZXdTaXplOyArK2kpCisgICAgICAgICAgICBkZWZhdWx0X2NvbnN0cnVjdF9hdCgmY29udGFpbmVy
LmdldCgpW2ldKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIGlmICghY2hl
Y2tlZEdyb3cobV9mdW5jdGlvbnMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghY2hlY2tlZEdyb3cobV9pbnN0YW5jZXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgbV9zaXplID0gbmV3U2l6ZTsKKworICAgIHJldHVybiBuZXdTaXplOworfQor
Cit2b2lkIFRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0g
PSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgp
W2luZGV4XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7
IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1faW5zdGFuY2VzLmdl
dCgpW2luZGV4XSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgVGFibGU6OnNldEZ1bmN0aW9uKHVpbnQz
Ml90IGluZGV4LCBDYWxsYWJsZUZ1bmN0aW9uIGZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAg
ICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbjsKKyAgICBtX2luc3RhbmNlcy5n
ZXQoKVtpbmRleF0gPSBpbnN0YW5jZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OlRhYmxl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDhlYzgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUu
aApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbUxpbWl0cy5oIgorI2luY2x1ZGUgPHd0
Zi9NYWxsb2NQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7IC8vIEZJWE1FIHRoaXMgc2hv
dWxkIGJlIFdhc206Okluc3RhbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorCituYW1l
c3BhY2UgV2FzbSB7CisKK2NsYXNzIFRhYmxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFRhYmxlPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDcmVhdGVGYWlsIHsKKyAgICAgICAg
SW52YWxpZFNpemUsCisgICAgfTsKKyAgICBzdGF0aWMgUmVmUHRyPFRhYmxlPiBjcmVhdGUodWlu
dDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB+VGFibGUoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKyAgICB1aW50MzJfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
Z3Jvdyh1aW50MzJfdCBkZWx0YSkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZvaWQgY2xlYXJG
dW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9pZCBzZXRGdW5jdGlvbih1aW50MzJfdCwgQ2FsbGFi
bGVGdW5jdGlvbiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7IC8vIEZJWE1FIG1ha2UgdGhpcyBX
YXNtOjpJbnN0YW5jZS4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCisKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwg
bV9zaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1fZnVuY3Rpb25zKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFi
bGUsIG1faW5zdGFuY2VzKTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMy
X3Qgc2l6ZSkgeyByZXR1cm4gc2l6ZSA8IG1heFRhYmxlRW50cmllczsgfQorCitwcml2YXRlOgor
ICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW0pOworCisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOworICAgIHVpbnQz
Ml90IG1fc2l6ZTsKKyAgICBNYWxsb2NQdHI8Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7
CisgICAgLy8gY2FsbF9pbmRpcmVjdCBuZWVkcyB0byBkbyBhbiBJbnN0YW5jZSBjaGVjayB0byBw
b3RlbnRpYWxseSBjb250ZXh0IHN3aXRjaCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0byBhbm90
aGVyIGluc3RhbmNlLiBXZSBjYW4gaG9sZCByYXcgcG9pbnRlcnMgdG8gSW5zdGFuY2UgaGVyZSBi
ZWNhdXNlIHRoZSBlbWJlZGRlciBlbnN1cmVzIHRoYXQgVGFibGUga2VlcHMgYWxsIHRoZSBpbnN0
YW5jZXMgYWxpdmUuIFdlIGNvdWxkbid0IGhvbGQgYSBSZWYgaGVyZSBiZWNhdXNlIGl0IHdvdWxk
IGNhdXNlIGN5Y2xlcy4KKyAgICBNYWxsb2NQdHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4gbV9p
bnN0YW5jZXM7IC8vIEZJWE1FIG1ha2UgdGhpcyBhIFdhc206Okluc3RhbmNlLiBodHRwczovL3dl
YmtpdC5vcmcvYi8xNzc0NzIKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaHVua3MuY3BwCmluZGV4IDk3N2IwMWIuLmMyMzU5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBAIC0yOSwxMSArMjksOSBAQAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkZyYW1l
VHJhY2Vycy5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVEV4
Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgog
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldhc21Db250
ZXh0LmgiCkBAIC00OCw0NiArNDYsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhj
ZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYKIAogICAg
IC8vIFRoZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVzdCBtb3ZlIEV4Y2VwdGlvblR5cGUgaW50
byB0aGUgYXJndW1lbnRHUFIxIGJlZm9yZSBqdW1waW5nIGhlcmUuCiAgICAgLy8gV2UncmUgYWxs
b3dlZCB0byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZS4gV2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVz
ZSBjYWxsZWUgc2F2ZXMuCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjph
cmd1bWVudEdQUjIsIENvbnRleHQ6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwogICAgIGppdC5qdW1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKICAgICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbm90IHJl
YWNoIHRoaXMuCiAKLSAgICB2b2lkKiAoKnRocm93V2FzbUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwg
V2FzbTo6RXhjZXB0aW9uVHlwZSwgV2FzbTo6Q29udGV4dCopID0gW10gKEV4ZWNTdGF0ZSogZXhl
YywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCkg
LT4gdm9pZCogewotICAgICAgICBWTSogdm0gPSB3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgewotICAg
ICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAg
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9i
YWxPYmplY3QoKTsKLQotICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yOyAKLSAgICAgICAgICAg
IGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCi0gICAgICAgICAgICAg
ICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3I6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlS
dW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlw
ZSh0eXBlKSk7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBl
cnJvcik7Ci0gICAgICAgIH0KLQotICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAg
ICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAgQVNTRVJUKCEh
dm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IG1ha2UgdGhpcyBiZXR0ZXI6Ci0gICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQg
dGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKLSAg
ICAgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBW
TS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQotICAgICAgICAvLyB0aGlzIHNp
bmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQg
bWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCi0gICAgICAgIC8vIGZvciBleGNlcHRpb25zIGZp
cnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9y
ZSBqdW1waW5nCi0gICAgICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlk
IHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCi0gICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKLSAgICAgICAgYml0
d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4od2FzbUNvbnRleHQtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsK
LSAgICAgICAgcmV0dXJuIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKLSAgICB9OwotCisg
ICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xl
dG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNt
RXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cih0aHJvd1dhc21FeGNlcHRpb24pKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBm
cm9tIFdhc20iKSk7CiB9CiAKQEAgLTExOSw4ICs4OSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJikK
ICNlbmRpZgogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclBy
ZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNU
b1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsK
IAotICAgIGppdC5sb2FkV2FzbUNvbnRleHQoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihydW5PTUdQbGFuRm9ySW5kZXgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBq
aXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB0
eXBlZGVmIHZvaWQgKCpSdW4pKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90KTsKKyAg
ICBSdW4gcnVuID0gT01HUGxhbjo6cnVuRm9ySW5kZXg7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocnVuKSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsK
IAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0
YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsK
QEAgLTE0Miw2ICsxMTQsMTkgQEAgVGh1bmtzJiBUaHVua3M6OnNpbmdsZXRvbigpCiAgICAgcmV0
dXJuICp0aHVua3M7CiB9CiAKK3ZvaWQgVGh1bmtzOjpzZXRUaHJvd1dhc21FeGNlcHRpb24oVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgLy8gVGhlIHRodW5rcyBhcmUgdW5pcXVlIGZvciB0aGUg
ZW50aXJlIHByb2Nlc3MsIHRoZXJlZm9yZSBjaGFuZ2luZyB0aGUgdGhyb3dpbmcgZnVuY3Rpb24g
Y2hhbmdlcyBpdCBmb3IgYWxsIHVzZXMgb2YgV2ViQXNzZW1ibHkuCisgICAgUkVMRUFTRV9BU1NF
UlQoIW1fdGhyb3dXYXNtRXhjZXB0aW9uIHx8IG1fdGhyb3dXYXNtRXhjZXB0aW9uID09IHRocm93
V2FzbUV4Y2VwdGlvbik7CisgICAgbV90aHJvd1dhc21FeGNlcHRpb24gPSB0aHJvd1dhc21FeGNl
cHRpb247Cit9CisKK1Rocm93V2FzbUV4Y2VwdGlvbiBUaHVua3M6OnRocm93V2FzbUV4Y2VwdGlv
bigpCit7CisgICAgcmV0dXJuIG1fdGhyb3dXYXNtRXhjZXB0aW9uOworfQorCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmgKaW5kZXggZGYxNGNhMi4uNTI5NzY0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUg
Ildhc21FbWJlZGRlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBA
IC00Miw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAg
ICAgc3RhdGljIFRodW5rcyYgc2luZ2xldG9uKCk7CiAKKyAgICB2b2lkIHNldFRocm93V2FzbUV4
Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24pOworICAgIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24oKTsKKwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViKFRodW5r
R2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1Yihjb25zdCBBYnN0cmFj
dExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhp
c3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsKQEAgLTUwLDYgKzU0LDcgQEAgcHJpdmF0ZToKICAg
ICBUaHVua3MoKSA9IGRlZmF1bHQ7CiAKICAgICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY+IG1fc3R1YnM7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhy
b3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2NrOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggOWM1YjY4NC4u
MmZlMTMyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmts
aXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3Bw
CkBAIC0yMiw2ICsyMiw3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
KwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBAIC0x
NzIsMTMgKzE3MywxMyBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5
KFBsYW4mIHBsYW4pCiAgICAgcGxhbi53YWl0Rm9yQ29tcGxldGlvbigpOwogfQogCi12b2lkIFdv
cmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCit2b2lkIFdvcmtsaXN0OjpzdG9wQWxs
UGxhbnNGb3JDb250ZXh0KENvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CiAgICAgVmVjdG9yPFF1ZXVlRWxlbWVudD4gZWxlbWVudHM7CiAgICAgd2hp
bGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9
IG1fcXVldWUuZGVxdWV1ZSgpOwotICAgICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxh
bi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAgICBib29sIGRpZENhbmNl
bCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0
KTsKICAgICAgICAgaWYgKCFkaWRDYW5jZWwpCiAgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQo
V1RGTW92ZShlbGVtZW50KSk7CiAgICAgfQpAQCAtMTg4LDcgKzE4OSw3IEBAIHZvaWQgV29ya2xp
c3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKIAogICAgIGZvciAoYXV0byYgdGhyZWFkIDog
bV90aHJlYWRzKSB7CiAgICAgICAgIGlmICh0aHJlYWQtPmVsZW1lbnQucGxhbikgewotICAgICAg
ICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1B
bmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQt
PmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsK
ICAgICAgICAgICAgIGlmIChkaWRDYW5jZWwpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBkZWFkbG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNh
bid0IGJsb2NrIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGEgbmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0
aGUgbG9jayB0byBkbyBzby4KICAgICAgICAgICAgICAgICB0aHJlYWQtPnN5bmNocm9uaXplLndh
aXQoKm1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
V29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCmlu
ZGV4IDZiNjkzNTIuLjc0OGE5ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Xb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21X
b3JrbGlzdC5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
LSNpbmNsdWRlICJWTS5oIgotCiAjaW5jbHVkZSA8cXVldWU+CiAKICNpbmNsdWRlIDx3dGYvQXV0
b21hdGljVGhyZWFkLmg+CkBAIC0zNywxMCArMzUsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENv
bnRleHQ7CiBjbGFzcyBQbGFuOwogCiBjbGFzcyBXb3JrbGlzdCB7CkBAIC01MCwxMyArNDcsMTAg
QEAgcHVibGljOgogICAgIH5Xb3JrbGlzdCgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbnF1ZXVlKFJlZjxQbGFuPik7Ci0gICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JWTShWTSYpOwor
ICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yQ29udGV4dChDb250ZXh0Jik7CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYpOwogCi0gICAg
dm9pZCBhY3RpdmF0ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7Ci0gICAgdm9pZCBk
ZWFjdGl2ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQbGFuKik7Ci0KICAgICBlbnVtIGNsYXNz
IFByaW9yaXR5IHsKICAgICAgICAgU2h1dGRvd24sCiAgICAgICAgIFN5bmNocm9ub3VzLApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmMyYjcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlv
bkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorewor
ICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRK
SVQ7CisKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlv
bj4oKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgIC8vIEZJWE1FIFN0
b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1MzIxCisgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
NjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0
aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3Jl
UHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9u
OworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92
ZUxvY2F0aW9uKTsKKyAgICB9KTsKKworICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlu
bmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9T
YXZlID0gcGlubmVkUmVncy50b1NhdmUobW9kZSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKTsKKyAgICAv
LyBUaGV5IHNob3VsZCBhbGwgYmUgY2FsbGVlIHNhdmVzLgorICAgIHRvU2F2ZS5maWx0ZXIoUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgQVNTRVJUKHRvU2F2ZS5udW1i
ZXJPZlNldEdQUnMoKSA9PSB0b1NhdmVTaXplKTsKKyNlbmRpZgorCisgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpP
ZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQpOworICAgIHJlc3VsdC0+ZW50cnlwb2lu
dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9TcGlsbDsKKworICAgIHVuc2lnbmVk
IHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yodm9pZCop
OworICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6
ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
Qyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAg
ICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBp
ZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAg
ICAgICArK251bUdQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpG
MzI6CisgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgKytudW1GUFJz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdG90YWxG
cmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygp
LCB0b3RhbEZyYW1lU2l6ZSk7CisgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHRvdGFsRnJhbWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKworICAgIC8vIFdlIHNhdmUgYWxsIHRoZXNlIHJlZ2lzdGVycyByZWdhcmRsZXNzIG9m
IGhhdmluZyBhIG1lbW9yeSBvciBub3QuCisgICAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHdlIHVz
ZSBvbmUgb2YgdGhlc2UgYXMgYSBzY3JhdGNoLiBUaGF0IHNhaWQsCisgICAgLy8gYWxtb3N0IGFs
bCByZWFsIHdhc20gcHJvZ3JhbXMgdXNlIG1lbW9yeSwgc28gaXQncyBub3QgcmVhbGx5CisgICAg
Ly8gd29ydGggb3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhhdCB0aGV5IGRvbid0LgorICAgIGZv
ciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxs
KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAg
ICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBqaXQu
c3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIG9mZnNldCkpOworICAgIH0KKworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNl
R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKworICAgIHsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMg
PSAwOworICAgICAgICBudW1GUFJzID0gMDsKKyAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0
IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCisgICAgICAgIC8vIHdlIGNhbiB1
c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwor
CisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVu
dCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisKKyAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBw
YXNzZXMgV2FzbTo6Q29udGV4dConcyBpbnN0YW5jZSBhcyB0aGUgZmlyc3QgSlMgYXJndW1lbnQg
d2hlbiB3ZSdyZQorICAgICAgICAvLyBub3QgdXNpbmcgZmFzdCBUTFMgdG8gaG9sZCB0aGUgV2Fz
bTo6Q29udGV4dConcyBpbnN0YW5jZS4KKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExT
KCkpIHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BS
KTsKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIH0KKworICAgICAgICBwdHJkaWZmX3Qgd2FzbU9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICAgICAg
c3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6
STMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51
bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkkzMikg
eworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkg
PT0gV2FzbTo6STMyKQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwg
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytudW1HUFJzOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdh
c206OkY2NDoKKyAgICAgICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWdu
YXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkp
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
c3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9
IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpCisgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsK
KyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVy
OworCisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
YmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnko
KSksIGJhc2VNZW1vcnkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5
TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBp
bm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXpl
KCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAv
LyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRl
cyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5
OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tp
XS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXpl
UmVnaXN0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJh
c2VNZW1vcnkpOworICAgIH0KKworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICBB
U1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkp
OworICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1
bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7CisgICAgfSk7CisKKworICAgIGZvciAo
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7
CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAg
QVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZf
dCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCBy
ZWcpOworICAgIH0KKworICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAg
IGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBqaXQubW92ZUZsb2F0VG8zMihGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJl
dHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGI5OGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFj
ZSBXYXNtIHsKKworc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVu
YW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKcmVu
YW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKc2ltaWxhcml0eSBp
bmRleCA2MiUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3Nl
bWJseS5oCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmgKaW5kZXggMGZhZjk3Ny4uYzU3OGRmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHkuaApAQCAtMjgsMzEgKzI4LDMxIEBACiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgotI2luY2x1ZGUgImpz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgotI2luY2x1ZGUg
ImpzL0pTV2ViQXNzZW1ibHlUYWJsZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJv
clByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNs
dWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9X
ZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlM
aW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TGlua0Vycm9y
UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2Vt
Ymx5TW9kdWxlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpz
L1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5
VGFibGVDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0
b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgorI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBl
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVByb3RvdHlwZS5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHAKaW5kZXggZjkxZTZjNy4uMDgyNTE1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAK
QEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlN
b2R1bGUuaCIKLSNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIApAQCAtNDQsNyArNDQsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCBudWxscAog
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKFZN
JiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUpCiB7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUlu
Zm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpOwotICAgIGF1
dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1
bmN0aW9uQ291bnQoKSkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVC
bG9jayksIG1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwKSkgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayh2bSwgV1RGTW92ZShjb2RlQmxvY2spLCBtb2R1bGVJbmZvcm1hdGlv
bik7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgbW9kdWxlKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtNTgsNyArNTgsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAg
IG1fd2FzbVRvSlNFeGl0U3R1YnMucmVzZXJ2ZUNhcGFjaXR5KG1fY29kZUJsb2NrLT5mdW5jdGlv
bkltcG9ydENvdW50KCkpOwogICAgIGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBv
cnRJbmRleCA8IG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7ICsraW1wb3J0SW5k
ZXgpIHsKICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuYXQoaW1wb3J0SW5k
ZXgpOwotICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9Kcygmdm0sIG1fY2FsbExp
bmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKKyAgICAgICAgYXV0byBiaW5k
aW5nID0gV2FzbTo6d2FzbVRvSlMoJnZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4
LCBpbXBvcnRJbmRleCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghYmluZGluZykpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoYmluZGluZy5lcnJvcigpKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206
OkJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeToKQEAgLTY4LDcgKzY4LDcgQEAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIFJlZjxXYXNtOjpD
b2RlQmxvY2s+JiYgY28KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KICAgICAgICAgbV93YXNtVG9KU0V4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQo
YmluZGluZy52YWx1ZSgpKTsKLSAgICAgICAgaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4
KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOworICAgICAgICBtX2NvZGVCbG9jay0+aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGlt
cG9ydEluZGV4KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOwogICAgIH0KIH0KIApAQCAtODMsMTEgKzgzLDYgQEAgdm9pZCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2Fz
dDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
On5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKCk7CiB9CiAKLWJvb2wgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6aXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAotewot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNTYWZlVG9SdW4obWVtb3J5LT5tZW1vcnkoKS5tb2Rl
KCkpOwotfQotCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsSUNzKFZN
JiB2bSkKIHsKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAppbmRleCA1MjcwM2Y4Li5hYmI4YzY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oCkBAIC02NCwzOSArNjQsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLndl
YkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CiAgICAgfQogCi0gICAgdW5zaWduZWQgZnVuY3Rpb25J
bXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENv
dW50KCk7IH0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVy
biBtX21vZHVsZS5nZXQoKTsgfQorICAgIFdhc206OkNvZGVCbG9jayYgY29kZUJsb2NrKCkgeyBy
ZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KIAotICAgIGJvb2wgaXNTYWZlVG9SdW4oSlNXZWJB
c3NlbWJseU1lbW9yeSopIGNvbnN0OworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSopOwogCi0gICAgLy8gVGhlc2UgdHdvIGNhbGxl
ZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVs
YXRlZC4KLQotICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAgICAgICBB
U1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAg
IH0KLSAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAgIH0KLQotICAgIFdhc206Oldhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0
SW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVy
biAmaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2
b2lkKikgKiBpbXBvcnRJbmRleDsKLSAgICB9Ci0KLSAgICBXYXNtOjpDb2RlQmxvY2smIGNvZGVC
bG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9Ci0KICAgICB2b2lkIGNsZWFySlND
YWxsSUNzKFZNJik7CiAKICAgICBib29sIHJ1bm5hYmxlKCkgY29uc3QgeyByZXR1cm4gIW1fZXJy
b3JNZXNzYWdlOyB9CkBAIC0xMTQsMjEgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRTdHVi
cygpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
Zih2b2lkKik+KHNpemVvZihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBv
cnRDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsg
c2l6ZW9mKHZvaWQqKSAqIGZ1bmN0aW9uSW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOwotICAgIH0K
LQotICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0g
ICAgewotICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDx2b2lkKio+KGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCkpOwot
ICAgIH0KLQogICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpV
bmNvbmRpdGlvbmFsRmluYWxpemVyIHsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpIG92ZXJyaWRlOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCBjNzdmYTA1Li43MmFh
MGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTQ5LDEyICs0OSwxNyBAQCBTdHJ1Y3R1cmUqIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
IH0KIAotSlNXZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQorSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zLCBSZWY8V2FzbTo6SW5z
dGFuY2U+JiYgaW5zdGFuY2UpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2lu
c3RhbmNlKFdURk1vdmUoaW5zdGFuY2UpKQogICAgICwgbV92bSgmdm0pCisgICAgLCBtX3dhc21N
b2R1bGUobV9pbnN0YW5jZS0+bW9kdWxlKCkpCisgICAgLCBtX3dhc21UYWJsZShtX2luc3RhbmNl
LT5tX3RhYmxlLmdldCgpKQorICAgICwgbV9nbG9iYWxzKG1faW5zdGFuY2UtPm1fZ2xvYmFscy5n
ZXQoKSkKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsK
LSAgICBtZW1zZXQoaW1wb3J0RnVuY3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICog
c2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKKyAgICAgICAgbmV3IChpbXBvcnRGdW5j
dGlvbkluZm8oaSkpIEltcG9ydEZ1bmN0aW9uSW5mbygpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QpCkBA
IC02MywxMiArNjgsMTAgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG1vZHVsZSk7
Ci0gICAgY29uc3Qgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSA9IGdsb2JhbE1lbW9yeUJ5dGVTaXpl
KCk7Ci0gICAgbV9nbG9iYWxzID0gTWFsbG9jUHRyPHVpbnQ2NF90Pjo6bWFsbG9jKGV4dHJhTWVt
b3J5U2l6ZSk7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChleHRyYU1l
bW9yeVNpemUpOwotCiAgICAgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Quc2V0KHZtLCB0aGlzLCBt
b2R1bGVOYW1lc3BhY2VPYmplY3QpOwogICAgIG1fY2FsbGVlLnNldCh2bSwgdGhpcywgbW9kdWxl
LT5jYWxsZWUoKSk7CisgICAgCisgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRl
ZChtX2luc3RhbmNlLT5leHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsKIH0KIAogdm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtODgsNDAgKzkxLDQ0IEBA
IHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9t
ZW1vcnkpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFibGUpOwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKLSAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5nbG9iYWxNZW1vcnlCeXRlU2l6ZSgpKTsKKyAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNl
LT5leHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGhpc09iamVjdC0+bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+aW1wb3J0RnVuY3Rpb25zKClbaV0pOworICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbkluZm8oaSktPmltcG9ydEZ1bmN0aW9u
KTsgLy8gVGhpcyBhbHNvIGtlZXBzIHRoZSBmdW5jdGlvbnMnIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSBhbGl2ZS4KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRp
b24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNv
ZGVCbG9jaykKIHsKKyAgICBtX2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHdhc21Db2RlQmxv
Y2suY29weVJlZigpKTsKKyAgICBtX3dhc21Db2RlQmxvY2sgPSB3YXNtQ29kZUJsb2NrLnB0cigp
OworCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYg
KCF3YXNtQ29kZUJsb2NrLT5ydW5uYWJsZSgpKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2Jh
bE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCB3YXNtQ29kZUJsb2Nr
LT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUkVMRUFT
RV9BU1NFUlQod2FzbUNvZGVCbG9jay0+aXNTYWZlVG9SdW4obWVtb3J5TW9kZSgpKSk7Ci0gICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gbW9kdWxlKCktPmNvZGVCbG9jayht
ZW1vcnlNb2RlKCkpOwotICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBqc0NvZGVCbG9jayA9IG1fbW9kdWxlLT5jb2RlQmxvY2sobWVtb3J5TW9kZSgpKTsK
KyAgICBpZiAoanNDb2RlQmxvY2spIHsKICAgICAgICAgLy8gQSBDb2RlQmxvY2sgbWlnaHQgaGF2
ZSBhbHJlYWR5IGJlZW4gY29tcGlsZWQuIElmIHNvLCBpdCBtZWFucwogICAgICAgICAvLyB0aGF0
IHRoZSBDb2RlQmxvY2sgd2UgYXJlIHRyeWluZyB0byBjb21waWxlIG11c3QgYmUgdGhlIHNhbWUK
ICAgICAgICAgLy8gYmVjYXVzZSB3ZSB3aWxsIG5ldmVyIGNvbXBpbGUgYSBDb2RlQmxvY2sgYWdh
aW4gb25jZSBpdCdzCiAgICAgICAgIC8vIHJ1bm5hYmxlLgotICAgICAgICBBU1NFUlQoJmNvZGVC
bG9jay0+Y29kZUJsb2NrKCkgPT0gd2FzbUNvZGVCbG9jay5wdHIoKSk7Ci0gICAgICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKKyAgICAgICAgQVNTRVJUKCZqc0NvZGVC
bG9jay0+Y29kZUJsb2NrKCkgPT0gd2FzbUNvZGVCbG9jay5wdHIoKSk7CisgICAgICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywganNDb2RlQmxvY2spOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgd2FzbUNvZGVC
bG9jay5jb3B5UmVmKCksIG1fbW9kdWxlLmdldCgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFj
b2RlQmxvY2stPnJ1bm5hYmxlKCkpKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxP
YmplY3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLT5lcnJv
ck1lc3NhZ2UoKSkpOworICAgICAgICBqc0NvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmNyZWF0ZSh2bSwgV1RGTW92ZSh3YXNtQ29kZUJsb2NrKSwgbV9tb2R1bGUuZ2V0KCkpOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIWpzQ29kZUJsb2NrLT5ydW5uYWJsZSgpKSkgeworICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6
OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TGlua0Vycm9yU3Ry
dWN0dXJlKCksIGpzQ29kZUJsb2NrLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJs
b2NrKTsKLSAgICAgICAgbW9kdWxlKCktPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBj
b2RlQmxvY2spOworICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGpzQ29kZUJsb2Nr
KTsKKyAgICAgICAgbV9tb2R1bGUtPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBqc0Nv
ZGVCbG9jayk7CiAgICAgfQogCiAgICAgYXV0byogbW9kdWxlUmVjb3JkID0ganNDYXN0PFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkKj4obV9tb2R1bGVOYW1lc3BhY2VPYmplY3QtPm1vZHVsZVJlY29y
ZCgpKTsKLSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbW9kdWxlKCksIHRoaXMpOworICAg
IG1vZHVsZVJlY29yZC0+bGluayhleGVjLCBtX21vZHVsZS5nZXQoKSwgdGhpcyk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIEpTVmFsdWUgc3RhcnRSZXN1
bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwpAQCAtMTI5LDcgKzEzNiw3IEBAIHZv
aWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBSZWY8V2FzbTo6CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKIH0KIAotSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSoganNN
b2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1
cmUpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRl
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwg
SlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSwgUmVm
PFdhc206Okluc3RhbmNlPiYmIGluc3RhbmNlKQogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE1OCw4ICsxNjUsOCBAQCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKUwogCiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZSA9
IG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpOwogICAgIC8vIEZJWE1FOiBU
aGVzZSBvYmplY3RzIGNvdWxkIGJlIHByZXR0eSBiaWcgd2Ugc2hvdWxkIHRyeSB0byB0aHJvdyBP
T00gaGVyZS4KLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5m
b3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2
bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291
bnQoKSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxl
TmFtZXNwYWNlKTsKKyAgICBhdXRvKiBqc0luc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpKSkgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rp
b25Db3VudCgpLCBXVEZNb3ZlKGluc3RhbmNlKSk7CisgICAganNJbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24odm0sIGpzTW9kdWxlLCBtb2R1bGVOYW1lc3BhY2UpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKICAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVz
IGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3Jp
cHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRh
YmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4KQEAgLTE5MCwxNSArMTk3LDIxIEBAIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZXhlYywgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydCBmdW5jdGlvbiIs
ICJtdXN0IGJlIGNhbGxhYmxlIikpKTsKIAorICAgICAgICAgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBjYWxsZWVJbnN0YW5jZSA9IG51bGxwdHI7CisgICAgICAgICAgICBXYXNtOjpXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCA9IG51bGxwdHI7CiAgICAgICAgICAg
ICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisKICAgICAg
ICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6
CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CiAgICAgICAg
ICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKICAg
ICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2Fz
bUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGEu
IElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGks
IHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgogICAgICAgICAgICAgICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYg
KHdhc21GdW5jdGlvbikKKyAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNp
Z25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUluc3RhbmNlID0gd2Fz
bUZ1bmN0aW9uLT5pbnN0YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB3YXNtRW50cnlwb2lu
dCA9IHdhc21GdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlt
cG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRl
eCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3Vy
ZV1dLgpAQCAtMjE1LDcgKzIyOCwxMCBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAg
ICAgICAgLy8gTm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVs
ZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0
YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCiAK
ICAgICAgICAgICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRl
eCk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25zKClbbnVtSW1wb3J0RnVu
Y3Rpb25zKytdLnNldCh2bSwgaW5zdGFuY2UsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEltcG9y
dEZ1bmN0aW9uSW5mbyogaW5mbyA9IGpzSW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhudW1J
bXBvcnRGdW5jdGlvbnMrKyk7CisgICAgICAgICAgICBpbmZvLT50YXJnZXRJbnN0YW5jZSA9IGNh
bGxlZUluc3RhbmNlOworICAgICAgICAgICAgaW5mby0+d2FzbUVudHJ5cG9pbnQgPSB3YXNtRW50
cnlwb2ludDsKKyAgICAgICAgICAgIGluZm8tPmltcG9ydEZ1bmN0aW9uLnNldCh2bSwganNJbnN0
YW5jZSwgZnVuY3Rpb24pOwogICAgICAgICAgICAgLy8gdi4gQXBwZW5kIGNsb3N1cmUgdG8gaW1w
b3J0cy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNDMsNyArMjU5LDggQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRv
IHRhYmxlcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tUYWJsZV1dIHRvIGltcG9y
dHMuCi0gICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJs
ZSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwganNJbnN0YW5jZSwg
dGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV93YXNtVGFibGUgPSB0YWJsZS0+dGFi
bGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTI3Myw4ICsyOTAsOCBA
QCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5kIHYg
dG8gbWVtb3JpZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5XV0gdG8g
aW1wb3J0cy4KLSAgICAgICAgICAgIEFTU0VSVCghaW5zdGFuY2UtPm1fbWVtb3J5KTsKLSAgICAg
ICAgICAgIGluc3RhbmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLCBtZW1vcnkpOworICAg
ICAgICAgICAgQVNTRVJUKCFqc0luc3RhbmNlLT5tX21lbW9yeSk7CisgICAgICAgICAgICBqc0lu
c3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTI5MSwxMyArMzA4LDEzIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAg
ICAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBpbXBvcnQua2luZEluZGV4KTsKICAgICAg
ICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4
XS50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgICAgICBp
bnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVj
KSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVt
SW1wb3J0R2xvYmFscysrLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGluc3Rh
bmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNlLT5pbnN0
YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJf
dD4odmFsdWUudG9GbG9hdChleGVjKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2Jh
bChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1i
ZXIoKSkpOworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFs
KG51bUltcG9ydEdsb2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJl
cigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTUsMTQgKzMz
MiwyMSBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiAhaGFzTWVtb3J5SW1wb3J0KSB7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCkp
OwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBk
ZWZpbml0aW9uLgotICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2Fz
bTo6TWVtb3J5OjpjcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCks
IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKworICAgICAg
ICAgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOworCisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpN
ZW1vcnk6OmNyZWF0ZShtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJ
bmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpLAorICAgICAgICAgICAgICAgIFsmdm1dIChXYXNt
OjpNZW1vcnk6Ok5vdGlmeVByZXNzdXJlKSB7IHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxlY3Rp
b25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgICAgICAgICAgWyZ2bV0gKFdhc206Ok1lbW9yeTo6
U3luY1RyeVRvUmVjbGFpbSkgeyB2bS5oZWFwLmNvbGxlY3RTeW5jKENvbGxlY3Rpb25TY29wZTo6
RnVsbCk7IH0sCisgICAgICAgICAgICAgICAgWyZ2bSwganNNZW1vcnldIChXYXNtOjpNZW1vcnk6
Okdyb3dTdWNjZXNzLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdlQ291
bnQgbmV3UGFnZUNvdW50KSB7IGpzTWVtb3J5LT5ncm93U3VjY2Vzc0NhbGxiYWNrKHZtLCBvbGRQ
YWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7IH0pOwogICAgICAgICAgICAgaWYgKCFtZW1vcnkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKIAotICAgICAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2bSwgaW5zdGFuY2Us
Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCks
IG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgICAgICAgICBqc01lbW9yeS0+YWRvcHQo
bWVtb3J5LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAganNJbnN0YW5jZS0+c2V0TWVt
b3J5KHZtLCBqc01lbW9yeSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIG51bGxwdHIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzM2LDE5ICszNjAsMjQgQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRpb24u
dGFibGVJbmZvcm1hdGlvbiAmJiAhaGFzVGFibGVJbXBvcnQpIHsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkp
OwogICAgICAgICAgICAgLy8gV2UgY3JlYXRlIGEgVGFibGUgd2hlbiBpdCdzIGEgVGFibGUgZGVm
aW5pdGlvbi4KLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBKU1dlYkFz
c2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgbW9kdWxlSW5m
b3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRh
YmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpUYWJs
ZT4gd2FzbVRhYmxlID0gV2FzbTo6VGFibGU6OmNyZWF0ZShtb2R1bGVJbmZvcm1hdGlvbi50YWJs
ZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlv
bi5tYXhpbXVtKCkpOworICAgICAgICAgICAgaWYgKCF3YXNtVGFibGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCAiY291bGRuJ3QgY3JlYXRlIFRhYmxlIikpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRh
YmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgd2FzbVRh
YmxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBi
ZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRlZmluZWQuCiAg
ICAgICAgICAgICAvLyBJZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3ZSBzaG91bGQg
aGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9uIGVycm9yLgogICAgICAgICAgICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgQVNTRVJUKHRhYmxlKTsKLSAgICAgICAg
ICAgIGluc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwgaW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAg
ICAgIGpzSW5zdGFuY2UtPm1fdGFibGUuc2V0KHZtLCBqc0luc3RhbmNlLCB0YWJsZSk7CisgICAg
ICAgICAgICBqc0luc3RhbmNlLT5tX3dhc21UYWJsZSA9IHRhYmxlLT50YWJsZSgpOwogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIGlmICghaW5zdGFuY2UtPm1lbW9yeSgpKSB7CisgICAgaWYg
KCFqc0luc3RhbmNlLT5tZW1vcnkoKSkgewogICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBh
IGR1bW15IG1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNraW5n
IGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0ZXJz
LgotICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnkuc2V0KHZtLCBpbnN0YW5jZSwgSlNXZWJBc3Nl
bWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCAw
LCAwKS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgICAgIGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJB
c3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOworICAgICAgICBqc01lbW9yeS0+YWRv
cHQoV2FzbTo6TWVtb3J5OjpjcmVhdGUoKS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAganNJ
bnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBqc01lbW9yeSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgfQogICAgIApAQCAtMzYwLDIwICszODks
MTMgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0
ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwu
aW5pdGlhbGl6YXRpb25UeXBlICE9IFdhc206Okdsb2JhbDo6SXNJbXBvcnQpOwogICAgICAgICAg
ICAgaWYgKGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPT0gV2FzbTo6R2xvYmFsOjpGcm9tR2xv
YmFsSW1wb3J0KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5pbml0aWFsQml0c09y
SW1wb3J0TnVtYmVyIDwgbnVtSW1wb3J0R2xvYmFscyk7Ci0gICAgICAgICAgICAgICAgaW5zdGFu
Y2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgaW5zdGFuY2UtPmxvYWRJNjRHbG9iYWwoZ2xvYmFs
LmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNl
LT5pbnN0YW5jZSgpLnNldEdsb2JhbChnbG9iYWxJbmRleCwganNJbnN0YW5jZS0+aW5zdGFuY2Uo
KS5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7CiAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2Jh
bEluZGV4LCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7CisgICAgICAgICAgICAg
ICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGdsb2JhbC5p
bml0aWFsQml0c09ySW1wb3J0TnVtYmVyKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEFTU0VS
VCghaW5zdGFuY2UtPmNvZGVCbG9jaygpKTsKLQotICAgIHJldHVybiBpbnN0YW5jZTsKLX0KLQot
c2l6ZV90IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Z2xvYmFsTWVtb3J5Qnl0ZVNpemUoKSBjb25z
dAotewotICAgIHJldHVybiBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxzLnNp
emUoKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgcmV0dXJuIGpzSW5zdGFuY2U7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAppbmRleCAzY2ZlNTQ5Li5kNTI1NTBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseVRhYmxlLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKKyNpbmNsdWRlICJXYXNtSW5z
dGFuY2UuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5LDc1ICs0MSw5NCBAQCBjbGFzcyBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDsKIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFz
cyBXZWJBc3NlbWJseVRvSlNDYWxsZWU7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIENvZGVC
bG9jazsKK2NsYXNzIFRhYmxlOyAvLyBGSVhNRSByZW1vdmUgdGhpcyBhZnRlciByZWZhY3Rvcmlu
Zy4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyCit9CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSos
IEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1
bGUqLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6SW5zdGFu
Y2U+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2suZ2V0KCk7IH0KICAgICB2b2lkIGZpbmFsaXplQ3JlYXRpb24oVk0mLCBFeGVjU3RhdGUq
LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmKTsKLQotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1v
ZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0KLSAgICBKU09iamVjdCog
aW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KSB7IFJFTEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVt
SW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9ucygpW2lkeF0uZ2V0KCk7IH0K
LQorICAgIAorICAgIFdhc206Okluc3RhbmNlJiBpbnN0YW5jZSgpIHsgcmV0dXJuIG1faW5zdGFu
Y2UuZ2V0KCk7IH0KKyAgICBXYXNtOjpDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
Jm1fdm0tPndhc21Db250ZXh0OyB9CiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVs
ZU5hbWVzcGFjZU9iamVjdCgpIHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0LmdldCgp
OyB9CisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0
KCk7IH0KKyAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIHdlYkFzc2VtYmx5VG9KU0NhbGxlZSgp
IHsgcmV0dXJuIG1fY2FsbGVlLmdldCgpOyB9CiAKICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBt
ZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQotICAgIHZvaWQgc2V0TWVtb3J5KFZN
JiB2bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogdmFsdWUpIHsgQVNTRVJUKCFtZW1vcnkoKSk7IG1f
bWVtb3J5LnNldCh2bSwgdGhpcywgdmFsdWUpOyB9CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZt
LCBKU1dlYkFzc2VtYmx5TWVtb3J5KiB2YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1v
cnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7IG1fd2FzbU1lbW9yeSA9ICZtZW1vcnkoKS0+bWVtb3J5
KCk7IH0KICAgICBXYXNtOjpNZW1vcnlNb2RlIG1lbW9yeU1vZGUoKSB7IHJldHVybiBtZW1vcnko
KS0+bWVtb3J5KCkubW9kZSgpOyB9CiAKLSAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKCkg
eyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQotCi0gICAgaW50MzJfdCBsb2FkSTMyR2xvYmFsKHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQotICAgIGludDY0
X3QgbG9hZEk2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0
KClbaV07IH0KLSAgICBmbG9hdCBsb2FkRjMyR2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDxmbG9hdD4obG9hZEkzMkdsb2JhbChpKSk7IH0KLSAgICBkb3VibGUg
bG9hZEY2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91
YmxlPihsb2FkSTY0R2xvYmFsKGkpKTsgfQotICAgIHZvaWQgc2V0R2xvYmFsKHVuc2lnbmVkIGks
IGludDY0X3QgYml0cykgeyBtX2dsb2JhbHMuZ2V0KClbaV0gPSBiaXRzOyB9Ci0KLSAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9tZW1vcnkpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSwgbV90YWJsZSk7IH0KKyAgICAvLyBUYWlsIGFjY2Vzc29ycy4KKyAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mVGFpbCgpIHsgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2YodWludDY0X3QpPihzaXplb2YoSlNXZWJBc3NlbWJseUluc3RhbmNlKSk7IH0KKyAgICBzdHJ1
Y3QgSW1wb3J0RnVuY3Rpb25JbmZvIHsKKyAgICAgICAgLy8gVGFyZ2V0IGluc3RhbmNlIGFuZCBl
bnRyeXBvaW50IGFyZSBvbmx5IHNldCBmb3Igd2FzbS0+d2FzbSBjYWxscywgYW5kIGFyZSBvdGhl
cndpc2UgbnVsbHB0ci4gVGhlIGVtYmVkZGVyLXNwZWNpZmljIGxvZ2ljIG9jY3VycyB0aHJvdWdo
IGltcG9ydCBmdW5jdGlvbi4KKyAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB0YXJnZXRJ
bnN0YW5jZSB7IG51bGxwdHIgfTsKKyAgICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gd2FzbUVudHJ5cG9pbnQgeyBudWxscHRyIH07CisgICAgICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gaW1wb3J0RnVuY3Rpb24geyBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCkgfTsKKyAg
ICB9OworICAgIEltcG9ydEZ1bmN0aW9uSW5mbyogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVfdCBp
bXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gJmJpdHdpc2VfY2FzdDxJbXBvcnRGdW5jdGlvbklu
Zm8qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZUYWlsKCkpW2ltcG9ydEZ1
bmN0aW9uTnVtXTsgfQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShz
aXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0
RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRP
RihJbXBvcnRGdW5jdGlvbkluZm8sIHRhcmdldEluc3RhbmNlKTsgfQorICAgIHN0YXRpYyBzaXpl
X3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludChzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0
dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVu
Y3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdhc21FbnRy
eXBvaW50KTsgfQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXpl
X3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVu
Y3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJ
bXBvcnRGdW5jdGlvbkluZm8sIGltcG9ydEZ1bmN0aW9uKTsgfQorICAgIEpTT2JqZWN0KiBpbXBv
cnRGdW5jdGlvbih1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSkgeyBSRUxFQVNFX0FTU0VSVChp
bXBvcnRGdW5jdGlvbk51bSA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1
bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlvbk51bSktPmltcG9ydEZ1bmN0aW9uLmdldCgpOyB9Cisg
ICAgCisgICAgLy8gRklYTUUgcmVtb3ZlIHRoZXNlIGFmdGVyIHJlZmFjdG9yaW5nIHRoZW0gb3V0
LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKKyAgICBXYXNtOjpNZW1vcnkmIGludGVybmFs
TWVtb3J5KCkgeyByZXR1cm4gbWVtb3J5KCktPm1lbW9yeSgpOyB9CisgICAgV2FzbTo6Q29kZUJs
b2NrJiB3YXNtQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gKm1faW5zdGFuY2UtPmNvZGVCbG9j
aygpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZldhc21UYWJsZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fd2FzbVRhYmxlKTsgfQog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWxsZWUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2NhbGxlZSk7IH0KLSAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFz
c2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mVk0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBt
X3ZtKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2NvZGVCbG9jayk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mV2FzbUNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fd2FzbUNvZGVCbG9jayk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fY2FjaGVkU3RhY2tMaW1pdCk7IH0KLSAgICBz
dGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPik+KHNpemVvZihKU1dl
YkFzc2VtYmx5SW5zdGFuY2UpKTsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRG
dW5jdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mSW1wb3J0
RnVuY3Rpb25zKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihzaXplb2YoV3JpdGVCYXJy
aWVyPEpTQ2VsbD4pKTsgfQotCi0gICAgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiB3ZWJBc3NlbWJs
eVRvSlNDYWxsZWUoKSB7IHJldHVybiBtX2NhbGxlZS5nZXQoKTsgfQotCi0gICAgdm9pZCogY2Fj
aGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RhY2tMaW1pdDsgfQotICAg
IHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBsaW1pdCkgeyBtX2NhY2hlZFN0YWNrTGlt
aXQgPSBsaW1pdDsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtTWVtb3J5KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93YXNtTWVt
b3J5KTsgfQorICAgIHZvaWQqIGNhY2hlZFN0YWNrTGltaXQoKSBjb25zdCB7IFJFTEVBU0VfQVNT
RVJUKG1faW5zdGFuY2UtPmNhY2hlZFN0YWNrTGltaXQoKSA9PSBtX2NhY2hlZFN0YWNrTGltaXQp
OyByZXR1cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9CisgICAgdm9pZCBzZXRDYWNoZWRTdGFja0xp
bWl0KHZvaWQqIGxpbWl0KSB7IG1faW5zdGFuY2UtPnNldENhY2hlZFN0YWNrTGltaXQobGltaXQp
OyBtX2NhY2hlZFN0YWNrTGltaXQgPSBsaW1pdDsgfQorICAgIFdhc206Ok1lbW9yeSogd2FzbU1l
bW9yeSgpIHsgcmV0dXJuIG1fd2FzbU1lbW9yeTsgfQorICAgIFdhc206Ok1vZHVsZSYgd2FzbU1v
ZHVsZSgpIHsgcmV0dXJuIG1fd2FzbU1vZHVsZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNXZWJB
c3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rp
b25zKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25l
ZCBudW1JbXBvcnRGdW5jdGlvbnMsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGlj
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gbnVtSW1wb3J0RnVuY3Rpb25z
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIChvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIG51bUltcG9ydEZ1bmN0aW9ucykudW5zYWZlR2V0
KCk7CisgICAgICAgIHJldHVybiAob2Zmc2V0T2ZUYWlsKCkgKyBzaXplb2YoSW1wb3J0RnVuY3Rp
b25JbmZvKSAqIG51bUltcG9ydEZ1bmN0aW9ucykudW5zYWZlR2V0KCk7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIFZNKiBtX3ZtOwotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1
bmN0aW9ucygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Kj4o
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkpOyB9
Ci0gICAgc2l6ZV90IGdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29uc3Q7CisgICAgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KKwor
ICAgIFJlZjxXYXNtOjpJbnN0YW5jZT4gbV9pbnN0YW5jZTsKIAorICAgIFZNKiBtX3ZtOwogICAg
IFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJy
aWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKICAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7CiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlUYWJsZT4gbV90YWJsZTsKICAgICBXcml0ZUJhcnJpZXI8V2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlPiBtX2NhbGxlZTsKLSAgICBNYWxsb2NQdHI8dWludDY0X3Q+IG1f
Z2xvYmFsczsKKyAgICAKKyAgICAvLyBGSVhNRSByZW1vdmUgdGhlc2UgYWZ0ZXIgcmVmYWN0b3Jp
bmcgdGhlbSBvdXQuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgogICAgIHZvaWQqIG1fY2Fj
aGVkU3RhY2tMaW1pdCB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1
aW50cHRyX3Q+OjptYXgoKSkgfTsKKyAgICBXYXNtOjpDb2RlQmxvY2sqIG1fd2FzbUNvZGVCbG9j
ayB7IG51bGxwdHIgfTsKKyAgICBXYXNtOjpNb2R1bGUmIG1fd2FzbU1vZHVsZTsKKyAgICBXYXNt
OjpNZW1vcnkqIG1fd2FzbU1lbW9yeSB7IG51bGxwdHIgfTsKKyAgICBXYXNtOjpUYWJsZSogbV93
YXNtVGFibGUgeyBudWxscHRyIH07CisgICAgdWludDY0X3QqIG1fZ2xvYmFscyB7IG51bGxwdHIg
fTsKKwogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVuY3Rpb25zOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcApp
bmRleCAyMjNjNThiLi5kNjQwYTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcApAQCAtMzcsNyArMzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnNfaW5m
byA9IHsgIldlYkFzc2VtYmx5Lk1lbW9yeSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseU1lbW9yeSkgfTsKIAotSlNXZWJB
c3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1v
cnkpCitKU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGdsb2JhbE9i
amVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTUwLDEwICs1MCwxNiBAQCBK
U1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBWTSYgdm0sIFN0cnVjdAogICAgIGlmICghZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVFdmFsRXJyb3IoZXhl
YywgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseURpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKIAot
ICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3Nl
bWJseU1lbW9yeT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSwg
V1RGTW92ZShtZW1vcnkpKTsKLSAgICBpbnN0YW5jZS0+bV9tZW1vcnktPmNoZWNrKCk7Ci0gICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICByZXR1cm4gaW5zdGFuY2U7CisgICAg
YXV0byogbWVtb3J5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1l
bW9yeT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSk7CisgICAg
bWVtb3J5LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIG1lbW9yeTsKK30KKyAgICAK
K3ZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6YWRvcHQoUmVmPFdhc206Ok1lbW9yeT4mJiBtZW1v
cnkpCit7CisgICAgbV9tZW1vcnkuc3dhcChtZW1vcnkpOworICAgIEFTU0VSVChtX21lbW9yeS0+
cmVmQ291bnQoKSA9PSAxKTsKKyAgICBtX21lbW9yeS0+Y2hlY2soKTsKIH0KIAogU3RydWN0dXJl
KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTYxLDEzICs2NywxMCBA
QCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJs
eU1lbW9yeShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6TWVtb3J5PiYm
IG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAs
IG1fbWVtb3J5KFdURk1vdmUobWVtb3J5KSkKKyAgICAsIG1fbWVtb3J5KFdhc206Ok1lbW9yeTo6
Y3JlYXRlKCkucmVsZWFzZU5vbk51bGwoKSkKIHsKLSAgICBBU1NFUlQobV9tZW1vcnktPnJlZkNv
dW50KCkgPT0gMSk7Ci0gICAgbV9tZW1vcnlCYXNlID0gbV9tZW1vcnktPm1lbW9yeSgpOwotICAg
IG1fbWVtb3J5U2l6ZSA9IG1fbWVtb3J5LT5zaXplKCk7CiB9CiAKIEpTQXJyYXlCdWZmZXIqIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkBAIC04NSw1MiArODgsNDUgQEAgSlNBcnJheUJ1ZmZlciogSlNXZWJBc3NlbWJseU1l
bW9yeTo6YnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBy
ZXR1cm4gbV9idWZmZXJXcmFwcGVyLmdldCgpOwogfQogCi1XYXNtOjpQYWdlQ291bnQgSlNXZWJB
c3NlbWJseU1lbW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVs
dGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorV2FzbTo6UGFnZUNvdW50
IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3coVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIHVpbnQz
Ml90IGRlbHRhKQogewotICAgIC8vIE5vdGU6IFdlIGNhbiBvbmx5IHVzZSBleGVjIGlmIHNob3Vs
ZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSBpcyB0cnVlLgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VD
b3VudCA9IG1lbW9yeSgpLnNpemVJblBhZ2VzKCk7Ci0KLSAgICBpZiAoIVdhc206OlBhZ2VDb3Vu
dDo6aXNWYWxpZChkZWx0YSkpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09u
RmFpbHVyZSkKKyAgICBhdXRvIGdyb3duID0gbWVtb3J5KCkuZ3JvdyhXYXNtOjpQYWdlQ291bnQo
ZGVsdGEpKTsKKyAgICBpZiAoIWdyb3duKSB7CisgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3Io
KSkgeworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRE
ZWx0YToKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyBl
eHBlY3RzIHRoZSBkZWx0YSB0byBiZSBhIHZhbGlkIHBhZ2UgY291bnQiKSkpOwotICAgICAgICBy
ZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7Ci0gICAgfQotCi0gICAgV2FzbTo6UGFnZUNvdW50IG5l
d1NpemUgPSBvbGRQYWdlQ291bnQgKyBXYXNtOjpQYWdlQ291bnQoZGVsdGEpOwotICAgIGlmICgh
bmV3U2l6ZSkgewotICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJl
YXNvbjo6SW52YWxpZEdyb3dTaXplOgogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2Vt
Ymx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGdyb3duIHNpemUgdG8gYmUgYSB2YWxpZCBwYWdl
IGNvdW50IikpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9y
eTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToKKyAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNlZWQgdGhlIG1lbW9yeSdz
IGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAg
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJy
b3IoZXhlYykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IFdhc206OlBhZ2VDb3VudCgpOwogICAgIH0KIAotICAgIGlmIChkZWx0YSkgewotICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBtZW1vcnkoKS5ncm93KHZtLCBuZXdTaXplKTsKLSAgICAgICAgaWYgKCFz
dWNjZXNzKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9tZW1vcnlCYXNlID09IG1lbW9yeSgpLm1l
bW9yeSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemUgPT0gbWVtb3J5KCkuc2l6
ZSgpKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCi0g
ICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihleGVjKSk7Ci0gICAgICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9tZW1vcnlCYXNlID0gbWVtb3J5KCkubWVtb3J5KCk7
Ci0gICAgICAgIG1fbWVtb3J5U2l6ZSA9IG1lbW9yeSgpLnNpemUoKTsKLSAgICB9CisgICAgcmV0
dXJuIGdyb3duLnZhbHVlKCk7Cit9CiAKLSAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0aGUg
b2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1pZ2h0IG5vdyBiZSBwb2ludGluZwotICAgIC8v
IHRvIHN0YWxlIG1lbW9yeS4KK3ZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3Jvd1N1Y2Nlc3ND
YWxsYmFjayhWTSYgdm0sIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VD
b3VudCBuZXdQYWdlQ291bnQpCit7CisgICAgLy8gV2UgbmVlZCB0byBjbGVhciBvdXQgdGhlIG9s
ZCBhcnJheSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUgcG9pbnRpbmcgdG8gc3RhbGUg
bWVtb3J5LgogICAgIC8vIE5ldXRlciB0aGUgb2xkIGFycmF5LgogICAgIGlmIChtX2J1ZmZlcikg
ewogICAgICAgICBtX2J1ZmZlci0+bmV1dGVyKHZtKTsKICAgICAgICAgbV9idWZmZXIgPSBudWxs
cHRyOwogICAgICAgICBtX2J1ZmZlcldyYXBwZXIuY2xlYXIoKTsKICAgICB9Ci0KKyAgICAKICAg
ICBtZW1vcnkoKS5jaGVjaygpOwotCi0gICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9j
YXRlZChXYXNtOjpQYWdlQ291bnQoZGVsdGEpLmJ5dGVzKCkpOwotICAgIHJldHVybiBvbGRQYWdl
Q291bnQ7CisgICAgCisgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdQ
YWdlQ291bnQuYnl0ZXMoKSAtIG9sZFBhZ2VDb3VudC5ieXRlcygpKTsKIH0KIAogdm9pZCBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKaW5kZXggMWQwNmM0
Yy4uNGJiYmNjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuaApAQCAtNDgsMjYgKzQ4LDIzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuICZ2bS5lYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKICAgICB9CiAK
LSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1lbW9yeSogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwg
U3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4mJik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1i
bHlNZW1vcnkqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCisgICAgdm9pZCBhZG9wdChSZWY8V2Fz
bTo6TWVtb3J5PiYmKTsKICAgICBXYXNtOjpNZW1vcnkmIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVt
b3J5LmdldCgpOyB9CiAgICAgSlNBcnJheUJ1ZmZlciogYnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqKTsKLSAgICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhWTSYsIEV4ZWNTdGF0ZSosIHVpbnQz
Ml90IGRlbHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7Ci0KLSAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5QmFzZSk7IH0KLSAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5
TWVtb3J5LCBtX21lbW9yeVNpemUpOyB9CisgICAgV2FzbTo6UGFnZUNvdW50IGdyb3coVk0mLCBF
eGVjU3RhdGUqLCB1aW50MzJfdCBkZWx0YSk7CisgICAgdm9pZCBncm93U3VjY2Vzc0NhbGxiYWNr
KFZNJiwgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1Bh
Z2VDb3VudCk7CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVj
dHVyZSosIFJlZjxXYXNtOjpNZW1vcnk+JiYpOworICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0m
LCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkKiBtX21lbW9yeUJhc2U7Ci0gICAgc2l6
ZV90IG1fbWVtb3J5U2l6ZTsKICAgICBSZWY8V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKICAgICBX
cml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4gbV9idWZmZXJXcmFwcGVyOwogICAgIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gbV9idWZmZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IGJhYjExODEuLjQwYzEwMDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAi
V2FzbU1vZHVsZS5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1i
bHlUb0pTQ2FsbGVlLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNjEsNiAr
NjIsNyBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAorCiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dl
YkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpN
b2R1bGU+JiYgbW9kdWxlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgICwgbV9tb2R1
bGUoV1RGTW92ZShtb2R1bGUpKQpAQCAtOTEsNiArOTMsMzYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5
TW9kdWxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBXYXNtOjpTaWduYXR1cmVJbmZvcm1h
dGlvbjo6dHJ5Q2xlYW51cCgpOwogfQogCitjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYg
SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKK30KKworU3ltYm9sVGFibGUqIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmV4cG9ydFN5bWJvbFRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9leHBvcnRTeW1ib2xUYWJsZS5nZXQoKTsKK30KKworV2FzbTo6U2lnbmF0dXJlSW5kZXgg
SlNXZWJBc3NlbWJseU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tb2R1
bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3Bh
Y2UpOworfQorCitXZWJBc3NlbWJseVRvSlNDYWxsZWUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNh
bGxlZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FsbGVlLmdldCgpOworfQorCitKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2soV2FzbTo6TWVt
b3J5TW9kZSBtb2RlKQoreworICAgIHJldHVybiBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6
ZV90Pihtb2RlKV0uZ2V0KCk7Cit9CisKK1dhc206Ok1vZHVsZSYgSlNXZWJBc3NlbWJseU1vZHVs
ZTo6bW9kdWxlKCkKK3sKKyAgICByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7Cit9CisKIHZvaWQgSlNX
ZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29kZUJsb2NrKFZNJiB2bSwgV2FzbTo6TWVtb3J5TW9kZSBt
b2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgbV9jb2RlQmxv
Y2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuaAppbmRleCAzZGM2N2EzLi4wMWI1ZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBAIC0zMCwxNSArMzAsMTkgQEAK
ICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgotI2luY2x1ZGUgIldhc21Nb2R1
bGUuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5TW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNw
YWNlIFdhc20gewogY2xhc3MgTW9kdWxlOworc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogY2xh
c3MgUGxhbjsKK3VzaW5nIFNpZ25hdHVyZUluZGV4ID0gdWludDMyX3Q7CiB9CiAKIGNsYXNzIFN5
bWJvbFRhYmxlOwpAQCAtNTIsMjMgKzU2LDIwIEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNXZWJBc3NlbWJseU1v
ZHVsZSogY3JlYXRlU3R1YihWTSYsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFdhc206Ok1vZHVs
ZTo6VmFsaWRhdGlvblJlc3VsdCYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNX
ZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlU3R1YihWTSYsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IFdURjo6RXhwZWN0ZWQ8UmVmUHRyPFdhc206Ok1vZHVsZT4sIFN0cmluZz4mJik7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKIAotICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1h
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOyB9Ci0g
ICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leHBv
cnRTeW1ib2xUYWJsZS5nZXQoKTsgfQotICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2Up
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9tb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAgIH0KLSAgICBXZWJB
c3NlbWJseVRvSlNDYWxsZWUqIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlLmdldCgp
OyB9CisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
KCkgY29uc3Q7CisgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkgY29uc3Q7Cisg
ICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3Q7CisgICAgV2ViQXNzZW1ibHlU
b0pTQ2FsbGVlKiBjYWxsZWUoKSBjb25zdDsKIAotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsgfQorICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpOworICAgIHZvaWQgc2V0Q29k
ZUJsb2NrKFZNJiwgV2FzbTo6TWVtb3J5TW9kZSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOwog
CiAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UoKSBjb25zdDsKIAotICAgIFdhc206
Ok1vZHVsZSYgbW9kdWxlKCkgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dENvZGVCbG9jayhWTSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBXYXNtOjpNb2R1bGUmIG1vZHVsZSgpOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKaW5k
ZXggZmY0NmQ0ZC4uYWRhYTc0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCkBAIC0yOSwzMCArMjksMjIgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
V2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlUYWJsZTo6c19pbmZv
ID0geyAiV2ViQXNzZW1ibHkuVGFibGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlUYWJsZSkgfTsKIAotSlNXZWJBc3Nl
bWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IG1heGltdW0pCitKU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlU
YWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUmVmPFdhc206OlRhYmxlPiYmIHRhYmxlKQogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKIAotICAgIGF1dG8gZXhjZXB0aW9uID0gWyZdIChKU09iamVj
dCogZXJyb3IpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJy
b3IpOworICAgIGlmICghZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUVuYWJsZWQoKSkgeworICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVFdmFsRXJyb3IoZXhl
YywgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseURpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfTsKLQotICAgIGlmICghZ2xvYmFsT2JqZWN0LT53
ZWJBc3NlbWJseUVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVFdmFs
RXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseURpc2FibGVkRXJyb3JNZXNzYWdl
KCkpKTsKLQotICAgIGlmICghaXNWYWxpZFNpemUoaW5pdGlhbCkpCi0gICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgfQogCi0gICAgYXV0
byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFi
bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5VGFibGUodm0sIHN0cnVjdHVyZSwgaW5pdGlhbCwg
bWF4aW11bSk7CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5VGFibGUodm0sIHN0
cnVjdHVyZSwgV1RGTW92ZSh0YWJsZSkpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNjIsMjMgKzU0LDE1IEBAIFN0cnVjdHVy
ZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJsZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtYXhpbXVtKQorSlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFi
bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206OlRhYmxlPiYmIHRhYmxl
KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV90YWJsZShXVEZNb3ZlKHRhYmxl
KSkKIHsKLSAgICBtX3NpemUgPSBpbml0aWFsOwotICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3Np
emUpKTsKLSAgICBtX21heGltdW0gPSBtYXhpbXVtOwotICAgIEFTU0VSVCghbV9tYXhpbXVtIHx8
ICptX21heGltdW0gPj0gbV9zaXplKTsKLQogICAgIC8vIEZJWE1FOiBJdCBtaWdodCBiZSB3b3J0
aCB0cnlpbmcgdG8gcHJlLWFsbG9jYXRlIG1heGltdW0gaGVyZS4gVGhlIHNwZWMgcmVjb21tZW5k
cyBkb2luZyBzby4KICAgICAvLyBCdXQgZm9yIG5vdywgd2UncmUgbm90IGRvaW5nIHRoYXQuCi0g
ICAgbV9mdW5jdGlvbnMgPSBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVGdW5jdGlvbj46Om1hbGxv
YyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
c2l6ZSkpOwotICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8V3JpdGVCYXJyaWVyPEpTT2Jq
ZWN0Pj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1fc2l6ZSkpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7
ICsraSkgewotICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFi
bGVGdW5jdGlvbigpOwotICAgICAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaV0uc2lnbmF0
dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9u
IHRoaXMgaW4gY29tcGlsZWQgY29kZS4KKyAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdy
aXRlQmFycmllcjxKU09iamVjdD4+OjptYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVj
dD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgc2l6ZSgpOyArK2kpCiAgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClb
aV0pIFdyaXRlQmFycmllcjxKU09iamVjdD4oKTsKLSAgICB9CiB9CiAKIHZvaWQgSlNXZWJBc3Nl
bWJseVRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC05OSw3ICs4Myw3IEBAIHZvaWQg
SlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fc2l6ZTsg
KytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5zaXplKCk7ICsr
aSkKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9qc0Z1bmN0aW9ucy5nZXQo
KVtpXSk7CiB9CiAKQEAgLTEwNyw0NyArOTEsNDQgQEAgYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6
Omdyb3codWludDMyX3QgZGVsdGEpCiB7CiAgICAgaWYgKGRlbHRhID09IDApCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBuZXdTaXpl
Q2hlY2tlZCA9IG1fc2l6ZTsKLSAgICBuZXdTaXplQ2hlY2tlZCArPSBkZWx0YTsKLSAgICB1aW50
MzJfdCBuZXdTaXplOwotICAgIGlmIChuZXdTaXplQ2hlY2tlZC5zYWZlR2V0KG5ld1NpemUpID09
IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAobWF4aW11bSgpICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFpc1ZhbGlkU2l6ZShuZXdTaXplKSkKKworICAgIHNpemVfdCBvbGRTaXpl
ID0gc2l6ZSgpOworCisgICAgYXV0byBncmV3ID0gbV90YWJsZS0+Z3JvdyhkZWx0YSk7CisgICAg
aWYgKCFncmV3KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2Z1bmN0aW9ucy5yZWFs
bG9jKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4o
bmV3U2l6ZSkpOwotICAgIG1fanNGdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG5ld1NpemUpKTsKKyAgICBzaXplX3Qg
bmV3U2l6ZSA9IGdyZXcudmFsdWUoKTsKKyAgICBtX2pzRnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9m
KFdyaXRlQmFycmllcjxKU09iamVjdD4pICogbmV3U2l6ZSk7CiAKLSAgICBmb3IgKHVpbnQzMl90
IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kpIHsKLSAgICAgICAgbmV3ICgmbV9mdW5jdGlv
bnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKICAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9u
cy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAgIH0KLSAgICBtX3NpemUg
PSBuZXdTaXplOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0pTT2JqZWN0KiBKU1dlYkFzc2Vt
Ymx5VGFibGU6OmdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRl
eF0uZ2V0KCk7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVp
bnQzMl90IGluZGV4KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAg
ICBtX3RhYmxlLT5jbGVhckZ1bmN0aW9uKGluZGV4KTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgp
W2luZGV4XSA9IFdyaXRlQmFycmllcjxKU09iamVjdD4oKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQo
KVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAgQVNTRVJUKG1fZnVuY3Rp
b25zLmdldCgpW2luZGV4XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFs
aWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgogfQogCiB2b2lk
IEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRleCwg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5k
ZXggPCBtX3NpemUpOworICAgIG1fdGFibGUtPnNldEZ1bmN0aW9uKGluZGV4LCBmdW5jdGlvbi0+
Y2FsbGFibGVGdW5jdGlvbigpLCBmdW5jdGlvbi0+aW5zdGFuY2UoKSk7CiAgICAgbV9qc0Z1bmN0
aW9ucy5nZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9mdW5jdGlv
bnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKTsKIH0KIAogdm9p
ZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgs
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBmdW5jdGlvbikKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+c2V0RnVuY3Rpb24oaW5kZXgsIGZ1
bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCksIGZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAgICBt
X2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBt
X2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKaW5kZXggZGY4M2U5Ny4uNDQ4NzUzMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjksNTcgKzI5LDQyIEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2FzbUxpbWl0cy5oIgorI2luY2x1ZGUgIldh
c21UYWJsZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSBXYXNtIHsKLXN0cnVjdCBDYWxsYWJsZUZ1
bmN0aW9uOwotfQotCiBjbGFzcyBKU1dlYkFzc2VtYmx5VGFibGUgOiBwdWJsaWMgSlNEZXN0cnVj
dGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3Qg
QmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFibGUqIGNyZWF0ZShFeGVjU3RhdGUq
LCBWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMy
X3Q+IG1heGltdW0pOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5VGFibGUqIGNyZWF0ZShFeGVj
U3RhdGUqLCBWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpUYWJsZT4mJik7CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1h
eGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KLSAgICB1aW50MzJfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWlu
dDMyX3Qgc2l6ZSkgeyByZXR1cm4gV2FzbTo6VGFibGU6OmlzVmFsaWRTaXplKHNpemUpOyB9Cisg
ICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFi
bGUtPm1heGltdW0oKTsgfQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Rh
YmxlLT5zaXplKCk7IH0KICAgICBib29sIGdyb3codWludDMyX3QgZGVsdGEpIFdBUk5fVU5VU0VE
X1JFVFVSTjsKLSAgICBKU09iamVjdCogZ2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgpCi0gICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgIHJldHVy
biBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5nZXQoKTsKLSAgICB9Ci0gICAgdm9pZCBjbGVh
ckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KTsKLSAgICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWlu
dDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsKLSAgICB2b2lkIHNldEZ1bmN0aW9u
KFZNJiwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKik7Ci0KLSAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1dlYkFzc2VtYmx5VGFibGUsIG1fc2l6ZSk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlU
YWJsZSwgbV9mdW5jdGlvbnMpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpTRnVu
Y3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9q
c0Z1bmN0aW9ucyk7IH0KKyAgICBKU09iamVjdCogZ2V0RnVuY3Rpb24odWludDMyX3QpOworICAg
IHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYs
IHVpbnQzMl90LCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7CisgICAgdm9pZCBzZXRGdW5jdGlvbihW
TSYsIHVpbnQzMl90LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiopOwogCi0gICAgc3RhdGlj
IGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
dG9wcyBvdXQgYXQgfjM4NCBNQiB3b3J0aCBvZiBkYXRhIGluIHRoaXMgY2xhc3MuCi0gICAgICAg
IHJldHVybiBzaXplIDwgKDEgPDwgMjQpOwotICAgIH0KKyAgICBXYXNtOjpUYWJsZSogdGFibGUo
KSB7IHJldHVybiBtX3RhYmxlLnB0cigpOyB9CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJs
eVRhYmxlKFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gbWF4aW11bSk7CisgICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJl
KiwgUmVmPFdhc206OlRhYmxlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBNYWxsb2NQdHI8V2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7CisgICAgUmVmPFdhc206OlRhYmxlPiBtX3RhYmxl
OwogICAgIE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+PiBtX2pzRnVuY3Rpb25zOwot
ICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1fbWF4aW11bTsKLSAgICB1aW50MzJfdCBtX3Np
emU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dhc21Ub0pTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWNj
YTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Fz
bVRvSlMuY3BwCkBAIC0wLDAgKzEsNjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Fz
bVRvSlMuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlv
bnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgorI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgiCisj
aW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9u
VHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit1c2luZyBKSVQg
PSBDQ2FsbEhlbHBlcnM7CisKK3N0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKEpJ
VCYgaml0LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICAvLyBX
ZSdyZSBjYWxsaW5nIG91dCBvZiB0aGUgY3VycmVudCBXZWJBc3NlbWJseS5JbnN0YW5jZS4gVGhh
dCBJbnN0YW5jZSBoYXMgYSBsaXN0IG9mIGFsbCBpdHMgaW1wb3J0IGZ1bmN0aW9ucy4KKyAgICBq
aXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UocmVzdWx0KTsKKyAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3MocmVzdWx0LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVu
Y3Rpb24oaW1wb3J0SW5kZXgpKSwgcmVzdWx0KTsKK30KKworRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJ
bmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVuc2ln
bmVkIGltcG9ydEluZGV4KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3Qg
cHJvcGVybHkgYWJzdHJhY3QgYXdheSB0aGUgY2FsbGluZyBjb252ZW50aW9uLgorICAgIC8vIEl0
J2QgYmUgc3VwZXIgZWFzeSB0byBkbyBzbzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2OTQwMQorICAgIGNvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUND
ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7CisgICAgY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRp
b24mIGpzQ0MgPSBqc2NDYWxsaW5nQ29udmVudGlvbigpOworICAgIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Cisg
ICAgdW5zaWduZWQgYXJnQ291bnQgPSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOworICAgIEpJ
VCBqaXQ7CisKKyAgICAvLyBOb3RlOiBXYXNtQjNJUkdlbmVyYXRvciBhc3N1bWVzIHRoYXQgdGhp
cyBzdHViIHRyZWF0cyBTUCBhcyBhIGNhbGxlZSBzYXZlLgorICAgIC8vIElmIHdlIGV2ZXIgY2hh
bmdlIHRoaXMsIHdlIHdpbGwgYWxzbyBuZWVkIHRvIGNoYW5nZSBXYXNtQjNJUkdlbmVyYXRvci4K
KworICAgIC8vIEJlbG93LCB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2FsbGluZyBjb252ZW50aW9u
IGlzIGFsd2F5cyBvbiB0aGUgc3RhY2suCisgICAgQVNTRVJUKCFqc0NDLm1fZ3ByQXJncy5zaXpl
KCkpOworICAgIEFTU0VSVCghanNDQy5tX2ZwckFyZ3Muc2l6ZSgpKTsKKworICAgIGppdC5lbWl0
RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTMyKDAp
LCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsgLy8gRklY
TUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjUzMjEKKworICAgIHsKKyAgICAgICAgYm9vbCBoYXNCYWRJNjRVc2Ug
PSBmYWxzZTsKKyAgICAgICAgaGFzQmFkSTY0VXNlIHw9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkg
PT0gSTY0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0Nv
dW50ICYmICFoYXNCYWRJNjRVc2U7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5
cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJn
VHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgor
ICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgICAgIGNhc2UgSTY0OiB7CisgICAgICAgICAgICAg
ICAgaGFzQmFkSTY0VXNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNCYWRJNjRVc2UpIHsKKyAg
ICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAgIGppdC5s
b2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjphcmd1bWVudEdQUjEpOworCisgICAgICAg
ICAgICAvLyBTdG9yZSBDYWxsZWUuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICAgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSklUOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5j
YWxsKCk7CisgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOworCisg
ICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSkgLT4gdm9pZCB7CisgICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywg
KnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJl
KCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3Vt
ZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOworICAgICAgICAgICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOworICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1
c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gc2F2ZXMg
YXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4gV2UgdGhlcmVmb3JlIGRvbid0IG5l
ZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB0aGUgd2FzbSBjYWxs
ZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KKyAgICBSZWdpc3RlclNldCBtaXNzaW5nQ2Fs
bGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIG1pc3NpbmdDYWxs
ZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBBU1NFUlQo
bWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoIU9wdGlvbnM6OnVzZUNh
bGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYXJnQ291bnQgKiBzaXpl
b2YodWludDY0X3QpKTsKKyAgICAgICAgY2hhciogYnVmZmVyID0gYXJnQ291bnQgPyBzdGF0aWNf
Y2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IG51bGxwdHI7CisgICAg
ICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hh
bGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBidWZmZXJPZmZzZXQgPSAwOworICAgICAg
ICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgY29uc3QgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7CisgICAgICAgIGppdC5zdWJQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyAr
K2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50
KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNh
c2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVu
YzoKKyAgICAgICAgICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAgICAgICAgICAg
IEdQUlJlZyBncHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2Fz
bUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21D
Qy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3Vt
ZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAg
ICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAr
K21hcnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwor
ICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6
ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNo
YWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lz
dGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGZwclJl
ZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRG
bG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwg
ZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRv
RG91YmxlKGZwclJlZywgZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRv
NjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3Jh
dGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hh
bGxlZEZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEY2NDogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAg
ICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisg
ICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQ
UnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAv
LyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFy
ZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBS
SW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShK
SVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVn
KTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJl
Zywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQUiwg
YnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJz
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAg
fQorICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGFy
Z0NvdW50KSB7CisgICAgICAgICAgICAvLyBUaGUgR0Mgc2hvdWxkIG5vdCBsb29rIGF0IHRoaXMg
YnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFsdWVzLgorICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFj
dGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgICAgIH0KKworICAgICAgICB1aW50NjRfdCAoKmNhbGxGdW5jKShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCopID0KKyAgICAgICAgICAg
IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjYWxsZWUsIFNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAtPiB1aW50NjRfdCB7IAorICAgICAgICAg
ICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAgICBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJl
SW5kZXgpOworICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgeworICAgICAgICAgICAgICAgICAgICBUeXBlIGFy
Z1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZSBhcmc7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVu
YzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSTMyOgorICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYnVmZmVyW2FyZ051
bV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEYzMjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihidWZmZXJbYXJn
TnVtXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgICAg
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+bWV0aG9kVGFibGUoKnZtKS0+Z2V0Q2Fs
bERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQo
KSwgYXJncyk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCAwKTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlYWxSZXN1bHQ7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBGdW5jOgorICAgICAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgICAg
ICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBW
b2lkOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEkz
MjogeworICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQudG9JbnQzMihleGVjKSkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocmVzdWx0LnRvTnVtYmVyKGV4
ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxSZXN1bHQ7CisgICAgICAg
ICAgICB9OworICAgICAgICAKKyAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5zdG9y
ZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOworICAgICAgICAKKyAgICAgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0Nl
bGwoaml0LCBpbXBvcnRJbmRleCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzID49IDQsICJXZSBy
ZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2FsbCBiZWxvdy4iKTsKKyAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGJ1ZmZlcikpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBhdXRv
IG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVy
czo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisKKyAgICAgICAgLy8gZXhjZXB0aW9uIGhlcmUu
CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICB2b2lkICgqZG9Vbndp
bmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAg
ICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAg
ICAgICB9OworICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAg
ICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgIG5vRXhjZXB0aW9u
LmxpbmsoJmppdCk7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewor
ICAgICAgICBjYXNlIEY2NDogeworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgaml0
Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUik7CisgICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICBq
aXQucmV0KCk7CisKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAoVU5MSUtFTFkobGlu
a0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBjYWxsRnVuYyk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRp
b25DYWxsLCBkb1Vud2luZGluZyk7CisKKyAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0
SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7CisgICAgfQorCisg
ICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVyZSBz
aW5jZSBXYXNtQjNJUkdlbmVyYXRvcgorICAgIC8vIHdpbGwgZG8gdGhlIHN0YWNrIGNoZWNrIGZv
ciB1cy4gV2hlbmV2ZXIgaXQgZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IG1ha2UKKyAgICAvLyBhIGNh
bGwgdG8gdGhpcyB0aHVuaywgaXQnbGwgbWFrZSBzdXJlIGl0cyBzdGFjayBjaGVjayBpbmNsdWRl
cyBzcGFjZQorICAgIC8vIGZvciB1cyBoZXJlLgorCisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVy
T2ZQYXJhbWV0ZXJzID0gYXJnQ291bnQgKyAxOyAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVu
dC4KKyAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisgICAgY29uc3QgdW5z
aWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9m
KFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICBjb25zdCB1bnNpZ25l
ZCBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVy
czo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgLy8gRklY
TUUgbWFrZSB0aGVzZSBsb29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRoZXJlIGFy
ZSBtYW55IGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZv
ciBodWdlIHNpZ25hdHVyZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjU1NDcKKyAgICAKKyAgICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRoZSBpbnRlZ2VyIHBhcmFt
ZXRlcnMsIGZyZWVpbmcgdXAgdGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBhZnRlcndhcmRzLgorICAg
IHsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25l
ZCBtYXJzaGFsbGVkRlBScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0
ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSk7CisgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2Fy
Z051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFy
Z051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
Vm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoK
KyAgICAgICAgICAgIGNhc2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICBjYXNlIEkzMjogewor
ICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNo
YWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAg
IGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNw
aWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2Ny
YXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIw
OworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAgICAgICAgICAgICAgICAg
ICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7IC8vIENsZWFyIG5vbi1pbnQzMiBhbmQgbm9uLXRh
ZyBiaXRzLgorICAgICAgICAgICAgICAgIGppdC5ib3hJbnQzMihncHJSZWcsIEpTVmFsdWVSZWdz
KGdwclJlZyksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlNjQoZ3ByUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
RjMyOgorICAgICAgICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgLy8gU2tpcHBlZDog
aGFuZGxlZCBiZWxvdy4KKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPj0gd2Fz
bUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNp
emVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAg
ICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHsKKyAgICAgICAgLy8gSW50ZWdlciByZWdpc3RlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc3Bp
bGxlZCwgdGhlc2UgYXJlIG5vdyBhdmFpbGFibGUuCisgICAgICAgIEdQUlJlZyBkb3VibGVFbmNv
ZGVPZmZzZXRHUFJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgICAgICBib29sIGhhc01hdGVyaWFs
aXplZERvdWJsZUVuY29kZU9mZnNldCA9IGZhbHNlOworICAgICAgICBhdXRvIG1hdGVyaWFsaXpl
RG91YmxlRW5jb2RlT2Zmc2V0ID0gWyZoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQs
ICZqaXRdIChHUFJSZWcgZGVzdCkgeworICAgICAgICAgICAgaWYgKCFoYXNNYXRlcmlhbGl6ZWRE
b3VibGVFbmNvZGVPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KERvdWJs
ZUVuY29kZU9mZnNldCA9PSAxbGwgPDwgNDgsICJjb2RlZ2VuIGFzc3VtZXMgdGhpcyBiZWxvdyIp
OworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKDEpLCBkZXN0KTsK
KyAgICAgICAgICAgICAgICBqaXQubHNoaWZ0NjQoSklUOjpUcnVzdGVkSW1tMzIoNDgpLCBkZXN0
KTsKKyAgICAgICAgICAgICAgICBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHVuc2lnbmVkIG1hcnNo
YWxsZWRHUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAg
ICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJn
dW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNp
Z25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKworICAgICAgICBhdXRvIG1hcnNoYWxsRlBS
ID0gWyZdIChGUFJSZWcgZnByUmVnKSB7CisgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJl
Zyk7CisgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKKyAg
ICAgICAgICAgIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNl
dEdQUlJlZyk7CisgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVn
LCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZyYW1l
LndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKKyAgICAgICAgICAgIGNhbGxlZUZyYW1l
T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJz
OworICAgICAgICB9OworCisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVt
IDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWdu
YXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAg
ICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICAgICAg
ICAgIGNhc2UgSTMyOgorICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYWJvdmUu
CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdhc21DQy5tX2dwckFyZ3Mu
c2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIp
OworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7CisgICAgICAgICAgICAgICAgY2Fs
bGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRjMyOiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJl
ZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdz
LnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1tt
YXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSBy
ZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBm
cHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5s
b2FkRmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNl
dCksIGZwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0Rmxv
YXRUb0RvdWJsZShmcHJSZWcsIGZwclJlZyk7CisgICAgICAgICAgICAgICAgbWFyc2hhbGxGUFIo
ZnByUmVnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgRjY0OiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAg
ICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBS
c10uZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJl
IGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJ
bmZvOjphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJ
VDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcp
OworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXJzaGFsbEZQUihmcHJSZWcpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
KworICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpyZWdUMDsgLy8gQ2Fs
bGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGggYmVsb3cuCisgICAgQVNTRVJU
KCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBvcnRKU0NlbGxHUFJSZWcpKTsK
KworICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIGltcG9ydEpT
Q2VsbEdQUlJlZyk7CisKKyAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMy
KG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQ
YXlsb2FkT2Zmc2V0KSk7CisgICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVV
bmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgIC8vIEZJ
WE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBubyByZWdp
c3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NDg4CisKKyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5m
b3MuYWRkKCk7CisgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxs
LCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7CisgICAgSklUOjpEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFs
dWUoMCk7CisgICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVj
aywgaW5pdGlhbFJpZ2h0VmFsdWUpOworICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOworICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKKyAgICBzbG93UGF0aC5s
aW5rKCZqaXQpOworICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgorICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgorICAgIEpJ
VDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGRvbmUubGluaygmaml0KTsK
KworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOworCisgICAgc3dp
dGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICAv
LyBEaXNjYXJkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmM6CisgICAgY2FzZSBBbnlm
dW5jOgorICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRzIHdp
dGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBXZWJBc3NlbWJs
eS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJNjQ6IHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICB9CisgICAgY2Fz
ZSBJMzI6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90
SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpKTsKKyAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOworCisgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3Mu
YXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGludDMyX3Qg
KCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsKKyAgICAgICAgfTsKKyAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0kzMik7CisgICAgICAgIH0pOwor
CisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgRjMyOiB7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAg
YXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0g
aml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
LCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAg
ICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAg
ZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsK
KyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0Lm1vdmU2NFRv
RG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7
CisgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVt
cCgpKTsKKworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5k
KGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGZsb2F0ICgqY29udmVy
dFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdikgLT4gZmxvYXQgeyAKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1iZXIoZXhlYykpOworICAgICAg
ICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjMyKTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25l
OworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8g
aXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFu
IGludDMyCisgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVydEludDY0
VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBS
KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUu
bGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
aml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAg
IG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2FsbCA9IGpp
dC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZF
eGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3Rh
dGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91Ymxl
IHsgCisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYu
dG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBjb252ZXJ0VG9GNjQpOworICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmpp
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBpZiAoIWV4Y2VwdGlvbkNoZWNrcy5l
bXB0eSgpKSB7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOworICAgICAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVu
dHJ5RnJhbWUpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
KyAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAgICB2b2lk
ICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9p
ZCB7CisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vu
d2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpOworICAgICAgICB9OworCisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vu
d2luZGluZyk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYg
KFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbChzbG93Q2FsbCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKKyAgICBDb2RlTG9jYXRpb25O
ZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFz
dENhbGwpOworICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9j
YXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0g
JXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsK
K30KKwordm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNl
cHRpb25UeXBlIHR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAg
Vk0qIHZtID0gaW5zdGFuY2UtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisKKyAgICB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKworICAgICAgICBKU09iamVjdCogZXJyb3I7Cisg
ICAgICAgIGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCisgICAgICAg
ICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3I6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1l
RXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBl
KSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAg
ICB9CisKKyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICBBU1NFUlQoISF2bS0+Y2Fs
bEZyYW1lRm9yQ2F0Y2gpOworICAgIEFTU0VSVCghIXZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJv
dyk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhp
cyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRs
ZVVuY2F1Z2h0RXhjZXB0aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUg
ZmllbGQgdG8gbG9hZCB0aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUK
KyAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2lu
dGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4
Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVn
aXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElm
IHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICBiaXR3
aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lz
ZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkpOworICAg
IHJldHVybiB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mYzI0YWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2FzbVRvSlMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJX
YXNtQmluZGluZy5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgorI2luY2x1ZGUgPHd0Zi9C
YWcuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIENhbGxMaW5rSW5mbzsKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiwg
QmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1bnNpZ25l
ZCBpbXBvcnRJbmRleCk7CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSosIFdh
c206OkV4Y2VwdGlvblR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAppbmRleCAwZDI3NzY1Li5jNTg1ZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNjAsNyArNjAsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUg
PSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAogICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5nIHRvIHJ1
biB3aXRoIG1hdGNoZXMgdGhlIG9uZSB3ZSBleHBlY3QuCi0gICAgQVNTRVJUKHdhc21GdW5jdGlv
bi0+aW5zdGFuY2UoKS0+Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5z
dGFuY2UoKS0+bWVtb3J5KCkpKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgp
LT5pbnN0YW5jZSgpLmNvZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3Rh
bmNlKCktPm1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCkpKTsKICAgICB7CiAgICAgICAgIC8vIENo
ZWNrIGlmIHdlIGhhdmUgYSBkaXNhbGxvd2VkIEk2NCB1c2UuCiAKQEAgLTgyLDExICs4MiwxMSBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2Vt
Ymx5RXhlY3V0ZVN0YXJ0LCBXZWJBc3NlbWJseUV4ZWN1dGVFbmQpOwogCiAgICAgVmVjdG9yPEpT
VmFsdWU+IGJveGVkQXJnczsKLSAgICBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCA9IHdhc21G
dW5jdGlvbi0+aW5zdGFuY2UoKTsKLSAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0
byBzdG9yZSB0aGUgY29udGV4dCwgdGhlIGpzCi0gICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3Rz
IHRoZSBXYXNtQ29udGV4dCogYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgotICAgIGlmICghV2FzbTo6
dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgYm94ZWRBcmdzLmFwcGVuZCh3YXNtQ29u
dGV4dCk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IHdhc21GdW5jdGlv
bi0+aW5zdGFuY2UoKTsKKyAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0byBzdG9y
ZSB0aGUgY29udGV4dCwgdGhlIEpTCisgICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3RzIHRoZSBp
bnN0YW5jZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgaWYgKCFXYXNtOjpDb250ZXh0Ojp1
c2VGYXN0VExTKCkpCisgICAgICAgIGJveGVkQXJncy5hcHBlbmQoaW5zdGFuY2UpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgKythcmdJbmRleCkgewogICAgICAgICBKU1ZhbHVlIGFyZyA9IGV4ZWMtPmFyZ3Vt
ZW50KGFyZ0luZGV4KTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rpb24sIGZpcnN0QXJndW1l
bnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKIAogICAgIC8vIEZJWE1FIERvIGF3YXkgd2l0
aCB0aGlzIGVudGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50IGdlbmVy
YXRlZCBieSBCMy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ4
NgotICAgIFdhc206OkNvbnRleHQqIHByZXZXYXNtQ29udGV4dCA9IFdhc206OmxvYWRDb250ZXh0
KHZtKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHByZXZJbnN0YW5jZSA9IHZtLndhc21D
b250ZXh0LmxvYWQoKTsKICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBzdGFjayBjaGVjayBo
ZXJlIGZvciB0aGUgd3JhcHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0CiAgICAgICAgIC8v
IHdhbnQgdG8gZW1pdCBhIHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFwcGVyIGZ1bmN0aW9u
LgpAQCAtMTM3LDIyICsxMzcsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBpZiAo
VU5MSUtFTFkoKHNwIDwgc3RhY2tTcGFjZVVzZWQpIHx8ICgoc3AgLSBzdGFja1NwYWNlVXNlZCkg
PCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZtLnNvZnRTdGFja0xpbWl0KCkpKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVD
b250ZXh0KHZtLCB3YXNtQ29udGV4dCk7CisgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUoaW5zdGFu
Y2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3Rh
bmNlKCkpOwotICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkgPT0gV2FzbTo6bG9h
ZENvbnRleHQodm0pKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpID09IHZt
Lndhc21Db250ZXh0LmxvYWQoKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1F
bnRyeVRvV2FzbSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludCgpLCAmdm0sICZwcm90b0NhbGxG
cmFtZSk7CiAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBpbiBhIHJlZ2lzdGVy
IG9yIG9uIHRoZSBzdGFjayBzaW5jZSBpdCdzIHN0b3JlZCBpbiBWZWN0b3I8SlNWYWx1ZT4uCiAg
ICAgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIHNpbmNlIHRoZSBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBzaG91bGQga2VlcCB0aGUgaW5zdGFuY2UKICAgICAvLyBhbGl2
ZS4gQnV0IGl0J3MgZ29vZCBoeWdpZW5lLgotICAgIHdhc21Db250ZXh0LT51c2UoKTsKLSAgICBp
ZiAocHJldldhc21Db250ZXh0ICE9IHdhc21Db250ZXh0KSB7CisgICAgaW5zdGFuY2UtPnVzZSgp
OworICAgIGlmIChwcmV2SW5zdGFuY2UgIT0gaW5zdGFuY2UpIHsKICAgICAgICAgLy8gVGhpcyBp
cyBqdXN0IGZvciBzb21lIGV4dHJhIHNhZmV0eSBpbnN0ZWFkIG9mIGxlYXZpbmcgYSBjYWNoZWQK
ICAgICAgICAgLy8gdmFsdWUgaW4gdGhlcmUuIElmIHdlIGV2ZXIgZm9yZ2V0IHRvIHNldCB0aGUg
dmFsdWUgdG8gYmUgYSByZWFsCiAgICAgICAgIC8vIGJvdW5kcywgdGhpcyB3aWxsIGZvcmNlIGV2
ZXJ5IHN0YWNrIG92ZXJmbG93IGNoZWNrIHRvIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vIGZpcmUu
Ci0gICAgICAgIHdhc21Db250ZXh0LT5zZXRDYWNoZWRTdGFja0xpbWl0KGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkpOworICAgICAgICBp
bnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVD
b250ZXh0KHZtLCBwcmV2V2FzbUNvbnRleHQpOworICAgIHZtLndhc21Db250ZXh0LnN0b3JlKHBy
ZXZJbnN0YW5jZSwgdm0uc29mdFN0YWNrTGltaXQoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYTlkOGYwZC4uMmZkZDVhNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0zMiwxMiArMzIsMTQgQEAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2lu
Y2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVs
ZS5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNs
dWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAj
aW5jbHVkZSAiV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgpAQCAtNzUsMTAgKzc3LDEw
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVj
dHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4
ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNl
U3RydWN0dXJlKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBp
bnN0YW5jZVN0cnVjdHVyZSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2FzbTo6TW9kdWxl
Pihtb2R1bGUtPm1vZHVsZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKLSAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYywgbW9kdWxlLT5t
b2R1bGUoKS5jb21waWxlU3luYyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSk7CisgICAgaW5zdGFu
Y2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5
bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCAmV2FzbTo6Y3JlYXRl
SlNUb1dhc21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaW5z
dGFuY2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAppbmRleCA2NDk4OWI1Li5kMDQz
NWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcApAQCAtOTYsMTMgKzk2LDE4IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlN
ZW1vcnkoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8V2Fz
bTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbFBhZ2VD
b3VudCwgbWF4aW11bVBhZ2VDb3VudCk7CisgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+
IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1Q
YWdlQ291bnQsCisgICAgICAgIFsmdm1dIChXYXNtOjpNZW1vcnk6Ok5vdGlmeVByZXNzdXJlKSB7
IHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAg
IFsmdm1dIChXYXNtOjpNZW1vcnk6OlN5bmNUcnlUb1JlY2xhaW0pIHsgdm0uaGVhcC5jb2xsZWN0
U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICBbJnZtLCBqc01lbW9yeV0g
KFdhc206Ok1lbW9yeTo6R3Jvd1N1Y2Nlc3MsIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQs
IFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2Fs
bGJhY2sodm0sIG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAgaWYgKCFtZW1v
cnkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0gICAgYXV0byog
anNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRS
ZWYoKm1lbW9yeS5sZWFrUmVmKCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotCisgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWVtb3J5
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCmluZGV4IGU5OTRkYzguLjRmY2E4YzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1lbW9yeVByb3RvdHlwZS5jcHAKQEAgLTc3LDggKzc3LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBl
eGVjKQogICAgIHVpbnQzMl90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVj
LT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogCi0gICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSB0cnVlOwotICAg
IFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhLCBz
aG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOworICAgIFdhc206OlBhZ2VDb3VudCByZXN1
bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRl
eCA5NjEwMjRkLi43NWI1YjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtMTYx
LDExICsxNjEsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1v
ZHVsZUV4cG9ydHMoRXhlY1N0YXRlKiBleGVjKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9u
OjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IHRocm93U2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApLCBzdHJ1Y3R1cmUpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZl
ckZyb21WYWx1ZSh2bSwgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1
bGUoZXhlYywgV1RGTW92ZShzb3VyY2UpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKQEAg
LTE3NSwxNiArMTc3LDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJy
b3IoZXhlYywgc2NvcGUsICJXZWJBc3NlbWJseS5Nb2R1bGUiKSk7CiB9CiAKLUpTVmFsdWUgV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBidWZmZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseU1vZHVs
ZSogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSog
ZXhlYywgVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhl
YywgYnVmZmVyKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGF1
dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJl
KGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVs
ZTo6dmFsaWRhdGVTeW5jKHZtLCBXVEZNb3ZlKHNvdXJjZSkpKTsKKyAgICByZXR1cm4gSlNXZWJB
c3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXYXNtOjpNb2R1
bGU6OnZhbGlkYXRlU3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoYnVmZmVyKSkpOwogfQog
CiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1
bGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKaW5kZXgg
NjAyNWM5OC4uMTNhY2EzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaApAQCAtMzAsOCArMzAs
MTEgQEAKICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKIAorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZTsK
IAogY2xhc3MgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKQEAgLTQ0LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwog
Ci0gICAgc3RhdGljIEpTVmFsdWUgY3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYnVm
ZmVyLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRl
TW9kdWxlKEV4ZWNTdGF0ZSosIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcik7CiAKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5
cGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCBjYjFmZWMxLi4wYTg2NmVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAg
VU5VU0VEX1BBUkFNKHNjb3BlKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCk7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBpbnN0YW5jZS0+Y29kZUJsb2NrKCk7CisgICAgV2FzbTo6Q29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBpbnN0YW5jZS0+aW5zdGFuY2UoKS5jb2RlQmxvY2soKTsKICAgICBjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCk7CiAKICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBtb2R1bGUt
PmV4cG9ydFN5bWJvbFRhYmxlKCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IG1vZHVsZSwKICAgICAgICAgICAgIC8vIFJldHVybiBUb0pTVmFsdWUodikuCiAgICAgICAgICAg
ICBzd2l0Y2ggKGdsb2JhbC50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAg
ICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEkzMkds
b2JhbChleHAua2luZEluZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpT
VmFsdWUoaW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChleHAua2luZEluZGV4KSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STY0OgpA
QCAtMTYwLDExICsxNjAsMTEgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhF
eGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAg
ICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkRjMyR2xvYmFsKGV4cC5r
aW5kSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0
YW5jZS0+aW5zdGFuY2UoKS5sb2FkRjMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAg
ICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxvYWRGNjRHbG9iYWwoZXhw
LmtpbmRJbmRleCkpOworICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGlu
c3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRGNjRHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE3LDEyICsyMTcs
MTIgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjKQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0g
bV9pbnN0YW5jZS0+bW9kdWxlKCk7Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJs
b2NrID0gbV9pbnN0YW5jZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
OworICAgIFdhc206Ok1vZHVsZSYgbW9kdWxlID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5tb2R1
bGUoKTsKKyAgICBXYXNtOjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5zdGFuY2UtPmluc3Rh
bmNlKCkuY29kZUJsb2NrKCk7CisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZUluZm9ybWF0aW9uID0gbW9kdWxlLm1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgSlNXZWJB
c3NlbWJseVRhYmxlKiB0YWJsZSA9IG1faW5zdGFuY2UtPnRhYmxlKCk7CiAKLSAgICBjb25zdCBW
ZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9IG1faW5zdGFuY2UtPm1vZHVsZSgpLT5t
b2R1bGVJbmZvcm1hdGlvbigpLmRhdGE7CisgICAgY29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6
OlB0cj4mIGRhdGEgPSBtb2R1bGVJbmZvcm1hdGlvbi5kYXRhOwogICAgIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIGpzTWVtb3J5ID0gbV9pbnN0YW5jZS0+bWVtb3J5KCk7CiAKICAgICBzdGQ6Om9wdGlv
bmFsPEpTVmFsdWU+IGV4Y2VwdGlvbjsKQEAgLTIzOSw3ICsyMzksNyBAQCBKU1ZhbHVlIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXggPSBlbGVt
ZW50Lm9mZnNldC5pc0dsb2JhbEltcG9ydCgpCi0gICAgICAgICAgICAgICAgPyBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obV9pbnN0YW5jZS0+bG9hZEkzMkdsb2JhbChlbGVtZW50Lm9mZnNldC5nbG9i
YWxJbXBvcnRJbmRleCgpKSkKKyAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90
PihtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoZWxlbWVudC5vZmZzZXQuZ2xv
YmFsSW1wb3J0SW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgOiBlbGVtZW50Lm9mZnNldC5jb25z
dFZhbHVlKCk7CiAKICAgICAgICAgICAgIGZuKGVsZW1lbnQsIHRhYmxlSW5kZXgpOwpAQCAtMjU1
LDcgKzI1NSw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICBmb3IgKGNvbnN0IFdhc206OlNlZ21lbnQ6OlB0ciYg
c2VnbWVudCA6IGRhdGEpIHsKICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IHNlZ21lbnQt
Pm9mZnNldC5pc0dsb2JhbEltcG9ydCgpCi0gICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1
aW50MzJfdD4obV9pbnN0YW5jZS0+bG9hZEkzMkdsb2JhbChzZWdtZW50LT5vZmZzZXQuZ2xvYmFs
SW1wb3J0SW5kZXgoKSkpCisgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
bV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldC5nbG9i
YWxJbXBvcnRJbmRleCgpKSkKICAgICAgICAgICAgICAgICA6IHNlZ21lbnQtPm9mZnNldC5jb25z
dFZhbHVlKCk7CiAKICAgICAgICAgICAgIGZuKG1lbW9yeSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQs
IG9mZnNldCk7CkBAIC0yOTMsNyArMjkzLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgLy8gZm9yIHRoZSBp
bXBvcnQuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1NTEwCiAgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gZWxlbWVu
dC5mdW5jdGlvbkluZGljZXNbaV07Ci0gICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXggPSBtb2R1bGUuc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxv
Y2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBm
dW5jdGlvbkltcG9ydCA9IGpzQ2FzdDxKU09iamVjdCo+KG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0
aW9uKGZ1bmN0aW9uSW5kZXgpKTsKICAgICAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhv
c3RGdW5jdGlvbih2bSwgZnVuY3Rpb25JbXBvcnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKaW5kZXggZTlhNjM0
YS4uMWZiOTQzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZ1
bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZURlZmVycmVkLmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKQEAgLTQwLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIK
ICNpbmNsdWRlICJXYXNtQkJRUGxhbi5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAjaW5jbHVk
ZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgpAQCAtOTQs
NyArOTYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eUNvbXBpbGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOwogICAgIGVs
c2UgewotICAgICAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmModm0sIFdURk1vdmUoc291
cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21p
c2UsIGdsb2JhbE9iamVjdF0gKFZNJiB2bSwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0
JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5j
KCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206
Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNt
OjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICAg
ICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3By
b21pc2UsIGdsb2JhbE9iamVjdCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCAmdm1dICgpIG11
dGFibGUgewogICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKICAgICAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKQEAgLTEzNSw3ICsxMzcsNyBAQCBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZShW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVwog
ewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAvLyBJbiBv
cmRlciB0byBhdm9pZCBwb3RlbnRpYWxseSByZWNvbXBpbGluZyBhIG1vZHVsZS4gV2UgZmlyc3Qg
Z2F0aGVyIGFsbCB0aGUgaW1wb3J0L21lbW9yeSBpbmZvcm1hdGlvbiBwcmlvciB0byBjb21waWxp
bmcgY29kZS4KLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7
CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCksIFdhc206Oklu
c3RhbmNlOjpjcmVhdGUoUmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSkpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2Up
KTsKIAogICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwpAQCAtMTQzLDEz
ICsxNDUsMTMgQEAgc3RhdGljIHZvaWQgaW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1cKICAgICBkZXBlbmRlbmNpZXMuYXBw
ZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBpbnN0YW5jZSkpOwogICAgIHZtLnByb21pc2VEZWZlcnJl
ZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykp
OwogICAgIC8vIE5vdGU6IFRoaXMgY29tcGxldGlvbiB0YXNrIG1heSBvciBtYXkgbm90IGdldCBj
YWxsZWQgaW1tZWRpYXRlbHkuCi0gICAgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlQXN5bmModm0s
IGluc3RhbmNlLT5tZW1vcnlNb2RlKCksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q29kZUJsb2Nr
OjpDYWxsYmFja1R5cGU+KFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZF0g
KFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiByZWZDb2RlQmxvY2spIG11dGFibGUgewor
ICAgIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFu
Y2UtPm1lbW9yeU1vZGUoKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDb2RlQmxvY2s6OkNhbGxi
YWNrVHlwZT4oW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kLCAmdm1dIChS
ZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHJlZkNvZGVCbG9jaykgbXV0YWJsZSB7CiAgICAgICAgIFJl
ZlB0cjxXYXNtOjpDb2RlQmxvY2s+IGNvZGVCbG9jayA9IFdURk1vdmUocmVmQ29kZUJsb2NrKTsK
ICAgICAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlz
ZSwgW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kLCAmdm0sIGNvZGVCbG9j
ayA9IFdURk1vdmUoY29kZUJsb2NrKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICAg
ICAgICAgIHJlc29sdmUodm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGNvZGVC
bG9jay5yZWxlYXNlTm9uTnVsbCgpLCByZXNvbHZlS2luZCk7CiAgICAgICAgIH0pOwotICAgIH0p
KTsKKyAgICB9KSwgJldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Ondhc21Ub0pT
RXhjZXB0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNWYWx1ZSBi
dWZmZXIsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QpCkBAIC0xNjUsNyArMTY3LDcgQEAgc3RhdGlj
IHZvaWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1By
b21pc2VEZWZlcnJlZCogcHIKICAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291
cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBidWZmZXIpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSkpOwogCi0gICAgV2FzbTo6
TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKHZtLCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRh
c2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIGds
b2JhbE9iamVjdF0gKFZNJiB2bSwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVz
dWx0KSBtdXRhYmxlIHsKKyAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21D
b250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpD
YWxsYmFja1R5cGU+KFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgJnZtXSAo
V2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAg
ICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3By
b21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3Vs
dCksICZ2bV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKQEAgLTIxMyw3ICsyMTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgc2l6ZV90IGJ5dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVy
RnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
QkJRUGxhbiBwbGFuKCZ2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplLCBCQlFQbGFuOjpW
YWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7CisgICAgQkJRUGxhbiBwbGFuKCZ2bS53
YXNtQ29udGV4dCwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplLCBCQlFQbGFuOjpWYWxpZGF0
aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQg
dG8gdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNvbWV0aGlu
ZyB3aWxsIE9PTS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY2MDE1CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDEx
ODY1ZjUuLjJjNWJjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcApAQCAtOTAsOCArOTAs
MTUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJB
c3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgfQogICAgIH0KIAorICAgIFJl
ZlB0cjxXYXNtOjpUYWJsZT4gd2FzbVRhYmxlID0gV2FzbTo6VGFibGU6OmNyZWF0ZShpbml0aWFs
LCBtYXhpbXVtKTsKKyAgICBpZiAoIXdhc21UYWJsZSkgeworICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY291bGRuJ3QgY3JlYXRlIFRhYmxl
IikpKSk7CisgICAgfQorCiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIGluaXRp
YWwsIG1heGltdW0pKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJs
eVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2Vi
QXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCB3YXNtVGFibGUucmVsZWFzZU5vbk51bGwoKSkpOwog
fQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJs
eVRhYmxlKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAppbmRleCAwMjFj
NjE4Li42OGU5NTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCkBAIC02Myw3ICs2Myw3IEBA
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6
Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rp
b24tPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6aW5mbygpKSwgIldl
IHNob3VsZCBuZXZlciBkb3VibGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7CiAgICAgU3Ry
aW5nIG5hbWUgPSAiIjsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0
SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMs
IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIHsgc2lnbmF0dXJlSW5kZXgsIGluc3RhbmNlLT5jb2Rl
QmxvY2soKS0+d2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydChpbXBvcnRJbmRleCkgfSk7CisgICAg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIHsgc2ln
bmF0dXJlSW5kZXgsIGluc3RhbmNlLT53YXNtQ29kZUJsb2NrKCkud2FzbVRvSlNDYWxsU3R1YkZv
ckltcG9ydChpbXBvcnRJbmRleCkgfSApOwogICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGluc3RhbmNlKTsKICAgICByZXR1cm4gcmVz
dWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCA0MzFhMWE2Li43OGY1ODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA5
LTI4ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3Nl
bWJseTogbm8gVk0gLyBKUyB2ZXJzaW9uIG9mIGV2ZXJ5dGhpbmcgYnV0IEluc3RhbmNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc0NzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRy
YXMuaDoKKyAgICAgICAgKFdURjo6ZGVmYXVsdF9jb25zdHJ1Y3RfYXQpOiB0aGlzIG1ha2VzIGNv
ZGUgaW4gV2FzbVRhYmxlIG11Y2gKKyAgICAgICAgbW9yZSByZWFkYWJsZSwgYW5kIGlzIGdlbmVy
YWxseSB1c2VmdWwgZm9yIGdlbmVyaWMgY29kZQorCiAyMDE3LTA5LTMwICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbWFrZVdlYWtQdHIgZm9yIGVhc2ll
ciBXZWFrUHRyIGNvbnN0cnVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RkTGli
RXh0cmFzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAppbmRleCAxMmUzOTNhLi5k
N2VmYWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaApAQCAtMTYwLDYgKzE2MCwxMiBAQCBpbmxpbmUg
VG9UeXBlIHNhZmVDYXN0KEZyb21UeXBlIHZhbHVlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
b1R5cGU+KHZhbHVlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBUJiBkZWZh
dWx0X2NvbnN0cnVjdF9hdChUKiBhZGRyKQoreworICAgIHJldHVybiAqbmV3IChhZGRyKSBUKCk7
Cit9CisKIC8vIFJldHVybnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluICdi
aXRzJy4KIGlubGluZSBzaXplX3QgYml0Q291bnQodW5zaWduZWQgYml0cykKIHsKQEAgLTUzNSw2
ICs1NDEsNyBAQCB1c2luZyBXVEY6OkdCOwogdXNpbmcgV1RGOjphcHByb3hpbWF0ZUJpbmFyeVNl
YXJjaDsKIHVzaW5nIFdURjo6YmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjpiaXR3aXNlX2Nhc3Q7
Cit1c2luZyBXVEY6OmRlZmF1bHRfY29uc3RydWN0X2F0OwogdXNpbmcgV1RGOjpjYWxsU3RhdGVs
ZXNzTGFtYmRhOwogdXNpbmcgV1RGOjpjaGVja0FuZFNldDsKIHVzaW5nIFdURjo6ZmluZEJpdElu
V29yZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBmZGUxNjk5Li43ODU2YzJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTctMDktMjggIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBi
dXQgSW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NzQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvd2FzbS9XYXNtTW9kdWxlLmg6IEFkZGVkLiBUaGlzIHVzZWQg
dG8gYmUKKyAgICAgICAgaW5jbHVkZWQgaW4gSlNXZWJBc3NlbWJseU1vZHVsZS5oLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6IFVwZGF0ZSBwb3N0TWVz
c2FnZSBjb2RlCisgICAgICAgIGFjY29yZGluZyB0byBDKysgQVBJIGNoYW5nZXMuCisKIDIwMTct
MTAtMDIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBt
ZW1vcnkgbGVha3MgaW4gUmVuZGVyTXVsdGlDb2x1bW5GbG93CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjViMGI5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaApAQCAtMCwwICsxLDIgQEAK
KyNwcmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dhc21Nb2R1bGUuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCmluZGV4IDk3NWM5YzkuLjc4NDAzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNzksNiArNzksNyBAQAog
I2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1l
L1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg+
CisjaW5jbHVkZSA8d2FzbS9XYXNtTW9kdWxlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
Ci0tIAoyLjEwLjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324306</attachid>
            <date>2017-10-19 15:48:10 -0700</date>
            <delta_ts>2017-10-19 18:42:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-everything-but-Insta.patch</filename>
            <type>text/plain</type>
            <size>432064</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBmMDBmNzk0ZTljOWJiZWJlOGNiZWEwOGFhZDdmZTY4ZGEwYzliMmFkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDE2IE9jdCAyMDE3IDE1OjI1OjEyIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBldmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQoKLS0t
CiBKU1Rlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx
NiArCiBKU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzICAgICAgICAgICAgICAgICB8
ICAgMiArLQogSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgIHwgNDU4ICsrKysrKysrKysrKysrCiAuLi4vSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiAgICAgICB8ICA4OCArKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dCAgICAgICAgICAgICAgICAgIHwgIDEyICstCiAuLi4vSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwICB8ICAgMiArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCAgICAgICAgfCAgMTggKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCAgICAgICAgICB8ICAgNCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCAgICAgICAgICAgfCAgMTAgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCAgICAgICAgICAgIHwgICAy
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwICAgICAgICAgICB8
ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCAgICAgICAgICAg
ICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cCAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaCAgICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvRnJhbWVUcmFjZXJzLmggICB8ICAxNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcCAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIHwgIDI2ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggICB8ICAxMSArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1ZNRW50cnlSZWNvcmQuaCAgfCAgMjAgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCAgICAgIHwgIDMyICstCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oICAgICAgICB8ICA0OCArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwICAgICAgICAgICAgICAgICAgfCAgIDYg
Ky0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgICAgICAgIHwg
ICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwICAgICAgICAg
ICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
ICAgICAgfCAgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAgICAgICAgIHwgIDMyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAgICAgICB8ICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAgICAgIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwICAgICAgICB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtICAgfCAgIDYgKy0KIC4uLi9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtICAgICAgICAgICAgIHwgIDE4ICstCiAuLi4vSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSB8ICAxOSArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCAgICAgICAgICAgfCAgIDEgKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgICAgICAgICAgfCAgIDIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCAgICAgICAgICAgIHwgICAzICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCB8ICAg
OCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAgICAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCAgICAgICAgICAg
ICAgIHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oICAgICAgICAg
ICAgICAgICB8ICAxNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAgICAgICAgICAgfCAgMTggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcCAgIHwgMzg0ICsrKystLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCAgICAgfCAgIDUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCAgICAgICAgIHwgIDIyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oICAgICAgICAgICB8ICAxMyArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmggICAgfCAgMTAgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcCAgICAgICAgIHwgNjAyICstLS0t
LS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgg
ICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJs
b2NrLmNwcCAgICAgICB8ICAzNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVCbG9jay5oICAgICAgICAgfCAgMjQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Db250ZXh0LmNwcCAgICAgICAgIHwgIDMzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29udGV4dC5oICAgICAgICAgICB8ICAzMSArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUVtYmVkZGVyLmggICAgICAgICAgfCAgNTggKysKIC4uLi9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIHwgICAyICstCiAuLi4vSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmggICB8ICAgMiAtCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggICAgICAgICAgICB8ICAgNSArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcCAgICAgICAgfCAgNTggKysKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oICAgICAgICAgIHwgIDg3ICsr
KwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAgICAgfCAx
NTkgKysrLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCAgICAgICAg
ICAgIHwgIDQ0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uY3BwICB8ICAxNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmggfCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnlNb2RlLmNwcCAgICAgIHwgIDQ3ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5TW9kZS5oICAgICAgICB8ICA0NSArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZS5jcHAgICAgICAgICAgfCAgMjcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGUuaCAgICAgICAgICAgIHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8ICAgMyArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmggICAgICAgfCAgNDggKysKIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCAgICAgICAgIHwgIDIxICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oICAgICAgICAgICB8ICAxMCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oICAgICAgICAgfCAgIDcgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCAgICAgICAgICAgIHwgIDM1
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oICAgICAgICAgICAgICB8
ICAyNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAgICAg
ICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaCAg
ICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3Bw
ICAgICAgICAgICB8IDEyMiArKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFi
bGUuaCAgICAgICAgICAgICB8ICA3MyArKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaHVua3MuY3BwICAgICAgICAgIHwgIDU5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmggICAgICAgICAgICB8ICAgNSArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtV29ya2xpc3QuY3BwICAgICAgICB8ICAgNyArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmggICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcCAgICAgICAgIHwgMjI3ICsrKysrKysKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmggICAgICAgICAgIHwgIDQ4ICsrCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCB8ICAgMAog
Li4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBqc30vSlNXZWJBc3NlbWJseS5oICAgfCAgNTAg
Ky0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwICAgICAgICAgICAgIHwg
IDIyICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggICAgICAgICAgICAg
ICB8ICA1NCArLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCAgICAgICAg
ICAgICAgfCAxMjMgKystLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmggfCAgODcgKystCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcCB8ICA3NiArKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuaCAgIHwgIDEzICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCB8ICAzMiArCiAuLi4vSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggICB8ICAyNSArLQogLi4uL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcCAgfCAgNzkgKy0tCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaCB8ICA0MyArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwICAgICAgICAgfCA2NjQgKysrKysrKysr
KysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oICAg
ICAgICAgICB8ICA0OSArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAgfCAgMjYgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAgICAgIHwgICA2ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yLmNwcCAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlQcm90b3R5cGUuY3BwICAgICAgICAgfCAgIDMgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwICAgICAgIHwgIDIwICstCiAuLi4vd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yLmggICAgICAgICB8ICAgNSArLQogLi4uL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwICAgICAgICAgICAgfCAgMjIgKy0KIC4uLi93YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCAgICAgICAgICAgICAgIHwgIDE0ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwICAgICAgICB8ICAgOSArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICAgICAgICAgfCAgIDIgKy0K
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEx
ICsKIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oICAgICAgICAgICAgICAgICAgICAgIHwg
ICA3ICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDEyICsKIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20vV2FzbU1vZHVs
ZS5oIHwgICAyICsKIC4uLi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAgIHwgICAxICsKIDExNiBmaWxlcyBjaGFuZ2VkLCAzMTc1IGluc2VydGlvbnMoKyksIDE3
NjkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUVtYmVkZGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRh
YmxlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1RvV2FzbS5oCiByZW5hbWUgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBq
c30vSlNXZWJBc3NlbWJseS5jcHAgKDEwMCUpCiByZW5hbWUgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20veyA9PiBqc30vSlNXZWJBc3NlbWJseS5oICg2MiUpCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20vV2FzbU1vZHVs
ZS5oCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwpp
bmRleCAyN2MwMmZjLi5jODIwZmU1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE3LTEwLTE5ICBKRiBCYXN0
aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbm8gVk0g
LyBKUyB2ZXJzaW9uIG9mIGV2ZXJ5dGhpbmcgYnV0IEluc3RhbmNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc0NzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAtIEV4Y2VlZGluZyBtYXggb24gbWVtb3J5IGdy
b3d0aCBub3cgcmV0dXJucyBhIHJhbmdlIGVycm9yIGFzIHBlcgorICAgICAgICBzcGVjLiBUaGlz
IGlzIGEgKHZlcnkgbWlub3IpIGJyZWFraW5nIGNoYW5nZTogaXQgdXNlZCB0byB0aHJvdyBPT00K
KyAgICAgICAgZXJyb3IuIFVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyB0ZXN0LgorCisgICAgICAg
ICogd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanM6CisgICAgICAgIChhc3NlcnRFcSk6CisgICAg
ICAgICogd2FzbS9qcy1hcGkvdGFibGUuanM6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKwog
MjAxNy0xMC0xNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBSZWxhbmQgIkFkZCBBYm92ZS9CZWxvdyBjb21wYXJpc29ucyBmb3IgVUludDMyIHBhdHRl
cm5zIgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKaW5kZXggYzI4MDAxZS4uMGY4ZmM5NiAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcworKysgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZvciAobGV0
IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICAgYXNzZXJ0RXEoYnVmZmVyLmJ5dGVMZW5ndGgsIDIq
NjQqMTAyNCk7CiAKICAgICAvLyBUaGlzIHNob3VsZG4ndCBuZXV0ZXIgdGhlIGJ1ZmZlciBzaW5j
ZSBpdCBmYWlscy4KLSAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdyb3coMTAwMCksIEVy
cm9yLCAiT3V0IG9mIG1lbW9yeSIpOyAKKyAgICBhc3NlcnRUaHJvd3MoKCkgPT4gbWVtb3J5Lmdy
b3coMTAwMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNl
ZWQgdGhlIG1lbW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpOwogICAgIGFzc2VydEVxKGJ1
ZmZlci5ieXRlTGVuZ3RoLCAyKjY0KjEwMjQpOwogICAgIGFzc2VydEVxKG1lbW9yeS5idWZmZXIs
IGJ1ZmZlcik7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzIGIv
SlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcwppbmRleCA3MmQ0OTViLi40MTMyODRkIDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvdGFibGUuanMKQEAgLTE2Niw4ICsxNjYsOCBAQCBmdW5jdGlvbiBhc3NlcnRCYWRUYWJs
ZUltcG9ydCh0YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CiAgICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOSAvIDMyOiByZXNpemFibGUgbGltaXRz
IGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdyZWF0ZXIg
dGhhbiBpdHMgbWF4aW11bSA0Mjk0OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCiAgICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNyAvIDQzOiByZXNpemFibGUgbGlt
aXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdyZWF0
ZXIgdGhhbiBpdHMgbWF4aW11bSA0Mjk0OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2lu
aXRpYWw6IDIqKjMxLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQgLyAyNzogVGFibGUncyBpbml0aWFsIHBh
Z2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdz
IGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIGludmFsaWQgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0s
CisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNCAv
IDI3OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcs
IG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyIC8gMzg6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNv
dW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
XSwKICAgICBdOwogCiAgICAgZm9yIChjb25zdCBkIG9mIGJhZERlc2NyaXB0aW9ucykgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggOGZjMzk5NC4uYjM1ZDFhYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYxIEBACisyMDE3LTEwLTE5ICBKRiBCYXN0aWVuICA8amZi
YXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbm8gVk0gLyBKUyB2ZXJz
aW9uIG9mIGV2ZXJ5dGhpbmcgYnV0IEluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc0NzMKKworICAgICAgICBSZXZpZXdlZCBieSBGaWxp
cCBQaXpsby4KKworICAgICAgICBUaGlzIGNoYW5nZSBlbnRhaWxzIGNsZWFuaW5nIHVwIGFuZCBz
cGxpdHRpbmcgYSBidW5jaCBvZiBjb2RlIHdoaWNoIHdlIGhhZAorICAgICAgICBpbnRlcnR3aW5l
ZCBiZXR3ZWVuIEMrKyBjbGFzc2VzIHdoaWNoIHJlcHJlc2VudCBKUyBvYmplY3RzLCBhbmQgcHVy
ZSBDKysKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2JqZWN0cy4gVGhpcyBzcGVjaWZpYyBjaGFu
Z2UgZ29lcyBtb3N0IG9mIHRoZSB3YXkgdG93YXJkcworICAgICAgICBhbGxvd2luZyBKU0MncyBX
ZWJBc3NlbWJseSB0byB3b3JrIHdpdGhvdXQgVk0gLyBKUywgdXAgdG8gYnV0IGV4Y2x1ZGluZwor
ICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgKHRoZXJlJ3MgV2FzbTo6SW5zdGFuY2UsIGJ1
dCBpdCdzIG5vdCAqdGhlKiB0aGluZworICAgICAgICB5ZXQpLiBCZWNhdXNlIG9mIHRoaXMgd2Ug
c3RpbGwgaGF2ZSBhIGZldyBGSVhNRSBpZGVudGlmeWluZyBwbGFjZXMgdGhhdCBuZWVkIHRvCisg
ICAgICAgIGNoYW5nZS4gQSBmb2xsb3ctdXAgY2hhbmdlIHdpbGwgZ28gdGhlIHJlc3Qgb2YgdGhl
IHdheS4KKworICAgICAgICBJIHdlbnQgYWJvdXQgdGhpcyBjaGFuZ2UgaW4gdGhlIHNpbXBsZXN0
IHdheSBwb3NzaWJsZTogZ3JlcCB0aGUKKyAgICAgICAgSmF2YVNjcmlwdENvcmUvd2FzbSBkaXJl
Y3RvcnkgZm9yICJKU1teQ19dIiBhcyB3ZWxsIGFzICJWTSIgYW5kIGV4Y2x1ZGUgdGhlIC9qcy8K
KyAgICAgICAgc3ViLWRpcmVjdG9yeSAod2hpY2ggY29udGFpbnMgdGhlIEpTIGltcGxlbWVudGF0
aW9uIG9mIFdlYkFzc2VtYmx5KS4KKworICAgICAgICBOb25lIG9mIHRoaXMgY2hhbmdlIHJlbW92
ZXMgdGhlIG5lZWQgZm9yIGEgSklUIGVudGl0bGVtZW50IHRvIGJlIGFibGUgdG8gdXNlCisgICAg
ICAgIFdlYkFzc2VtYmx5LiBXZSBkb24ndCBoYXZlIGFuIGludGVycHJldGVyLCB0aGUgcHJvY2Vz
cyB0aGVyZWZvcmUgc3RpbGwgbmVlZHMgdG8KKyAgICAgICAgYmUgYWxsb3dlZCB0byBKSVQgdG8g
dXNlIHRoZXNlIHB1cmUtQysrIEFQSXMuCisKKyAgICAgICAgSW50ZXJlc3RpbmcgdGhpbmdzIHRv
IG5vdGU6CisKKyAgICAgICAgICAtIFJlbW92ZSBWTSBmcm9tIFBsYW4gYW5kIGFzc29jaWF0ZWQg
cGxhY2VzLiBJdCBjYW4ganVzdCBsaXZlIGFzIGEgY2FwdHVyZSBpbgorICAgICAgICAgICAgdGhl
IGNhbGxiYWNrIGxhbWJkYSBpZiBpdCdzIG5lZWRlZC4KKyAgICAgICAgICAtIFdhc206Ok1lbW9y
eSBzaG91bGRuJ3QgcmVxdWlyZSBhIFZNLiBJdCB3YXMgb25seSB1c2VkIHRvIGFzayB0aGUgR0Mg
dG8KKyAgICAgICAgICAgIGNvbGxlY3QuIFdlIG5vdyBpbnN0ZWFkIHBhc3MgdHdvIGxhbWJkYXMg
YXQgY29uc3RydWN0aW9uIHRpbWUgZm9yIHRoaXMKKyAgICAgICAgICAgIHB1cnBvc2U6IG9uZSB0
byBub3RpZnkgb2YgbWVtb3J5IHByZXNzdXJlLCBhbmQgdGhlIG90aGVyIHRvIGFzayBmb3IKKyAg
ICAgICAgICAgIHN5bmNyaG9ub3VzIG1lbW9yeSByZWNsYW1hdGlvbi4gVGhpcyBhbGxvd3Mgd2hv
ZXZlciBjcmVhdGVzIHRoZSBtZW1vcnkgdG8KKyAgICAgICAgICAgIGRpY3RhdGUgaG93IHRvIHJl
YWN0IHRvIGJvdGggdGhlc2UgY2FzZXMsIGFuZCBmb3IgYSBKUyBlbWJlZGRpbmcgdGhhdCdzIHRv
CisgICAgICAgICAgICBjYWxsIHRoZSBHQyAoYXN5bmMgb3Igc3luYywgcmVzcGVjdGl2ZWx5KS4K
KyAgICAgICAgICAtIE1vdmUgZ3JvdyBsb2dpYyBmcm9tIEpTV2ViQXNzZW1ibHlNZW1vcnkgdG8g
V2FzbTo6TWVtb3J5Ojpncm93LiBVc2UgRXhwZWN0ZWQKKyAgICAgICAgICAgIHRoZXJlLCB3aXRo
IGFuIGVudW0gY2xhc3MgZm9yIGZhaWx1cmUgdHlwZXMuCisgICAgICAgICAgLSBFeGNlZWRpbmcg
bWF4IG9uIG1lbW9yeSBncm93dGggbm93IHJldHVybnMgYSByYW5nZSBlcnJvciBhcyBwZXIgc3Bl
Yy4gVGhpcworICAgICAgICAgICAgaXMgYSAodmVyeSBtaW5vcikgYnJlYWtpbmcgY2hhbmdlOiBp
dCB1c2VkIHRvIHRocm93IE9PTSBlcnJvci4gVXBkYXRlIHRoZQorICAgICAgICAgICAgY29ycmVz
cG9uZGluZyB0ZXN0LgorICAgICAgICAgIC0gV2hlbiBnZW5lcmF0aW5nIHRoZSBncm93X21lbW9y
eSBvcGNvZGUsIG5vIG5lZWQgdG8gZ2V0IHRoZSBWTS4gSW5zdGVhZCwKKyAgICAgICAgICAgIHJl
YWNoIGRpcmVjdGx5IGZvciBXYXNtOjpNZW1vcnkgYW5kIGdyb3cgaXQuCisgICAgICAgICAgLSBK
U1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93IGNhbiBub3cgYWx3YXlzIHRocm93IG9uIGZhaWx1cmUs
IGJlY2F1c2UgaXQncyBvbmx5CisgICAgICAgICAgICBldmVyIGNhbGxlZCBmcm9tIEpTIChub3Qg
ZnJvbSBncm93X21lbW9yeSBhcyBiZWZvcmUpLgorICAgICAgICAgIC0gV2FzbTo6TWVtb3J5IG5v
dyB0YWtlcyBhIGNhbGxiYWNrIGZvciBzdWNjZXNzZnVsIGdyb3d0aC4gVGhpcyBhbGxvd3MgSlMK
KyAgICAgICAgICAgIHdyYXBwZXJzIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2hlbiBncm93dGgg
c3VjY2VlZHMgd2l0aG91dCBXYXNtOjpNZW1vcnkKKyAgICAgICAgICAgIGtub3duaW5nIGFueXRo
aW5nIGFib3V0IEpTLiBJdCdsbCBhbHNvIGFsbG93IGNyZWF0aW5nIGEgbGlzdCBvZiBjYWxsYmFj
a3MKKyAgICAgICAgICAgIGZvciB3aGVuIHdlIGFkZCB0aHJlYWQgc3VwcG9ydCAod2UnbGwgd2Fu
dCB0byBub3RpZnkgbWFueSB3cmFwcGVycywgYWxsCisgICAgICAgICAgICB1bmRlciBhIGxvY2sp
LgorICAgICAgICAgIC0gV2FzbTo6TWVtb3J5IGlzIG5vdyBiYWNrIHRvIGJlaW5nIHRoZSBzb3Vy
Y2Ugb2YgdHJ1dGggYWJvdXQgYWRkcmVzcyAvIHNpemUsCisgICAgICAgICAgICB1c2VkIGRpcmVj
dGx5IGJ5IGdlbmVyYXRlZCBjb2RlIGluc3RlYWQgb2YgSlNXZWJBc3NlbWJseU1lbW9yeS4KKyAg
ICAgICAgICAtIE1vdmUgd2FzbVRvSlMgZnJvbSB0aGUgZ2VuZXJhbCBXYXNtQmluZGluZyBoZWFk
ZXIgdG8gaXRzIG93biBoZWFkZXIgdW5kZXIKKyAgICAgICAgICAgIHdhc20vanMuIEl0J3Mgb25s
eSB1c2VkIGJ5IHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAsIGFuZCB1c2VzIFZN
LAorICAgICAgICAgICAgYW5kIHRoZXJlZm9yZSBpc24ndCBnZW5lcmFsIFdlYkFzc2VtYmx5Lgor
ICAgICAgICAgIC0gTWFrZSBXYXNtOjpDb250ZXh0IGFuIGFjdHVhbCB0eXBlIChqdXN0IGEgc3Ry
dWN0IGhvbGRpbmcgYQorICAgICAgICAgICAgSlNXZWJBc3NlbWx5SW5zdGFuY2UgZm9yIG5vdykg
aW5zdGVhZCBvZiBhbiBhbGlhcyBmb3IgdGhhdC4gTm90YWJseSB0aGlzCisgICAgICAgICAgICBk
b2Vzbid0IGFkZCBhbnl0aGluZyB0byB0aGUgQ29udGV4dCBhbmQgZG9lc24ndCBjaGFuZ2Ugd2hh
dCBhY3R1YWxseSBnZXRzCisgICAgICAgICAgICBwYXNzZWQgYXJvdW5kIGluIEpJVCBjb2RlIChm
YXN0IFRMUyBvciByZWdpc3RlcnMpIGJlY2F1c2UgdGhlc2UgY2hhbmdlcworICAgICAgICAgICAg
cG90ZW50aWFsbHkgaW1wYWN0IHBlcmZvcm1hbmNlLiBUaGUgZW50aXJlIHB1cnBvc2Ugb2YgdGhp
cyBjaGFuZ2UgaXMgdG8KKyAgICAgICAgICAgIGFsbG93IHBhc3NpbmcgV2FzbTo6Q29udGV4dCBh
cm91bmQgd2l0aG91dCBoYXZpbmcgdG8ga25vdyBhYm91dCBWTS4gU2luY2UgVk0KKyAgICAgICAg
ICAgIGNvbnRhaW5zIGEgV2FzbTo6Q29udGV4dCB0aGUgSlMgZW1iZWRkaW5nIGlzIGVmZmVjdGl2
ZWx5IHRoZSBzYW1lLCBidXQgd2l0aAorICAgICAgICAgICAgdGhpcyBzZXR1cCBhIG5vbi1KUyBl
bWJlZGRpbmcgaXMgbXVjaCBiZXR0ZXIgb2ZmLgorICAgICAgICAgIC0gTW92ZSBKU1dlYkFzc2Vt
Ymx5IGludG8gdGhlIEpTIGZvbGRlci4KKyAgICAgICAgICAtIE9NR1BsYW46IHVzZSBXYXNtOjpD
b2RlQmxvY2sgZGlyZWN0bHkgaW5zdGVhZCBvZiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLgorICAg
ICAgICAgIC0gd2FzbS0+SlMgc3R1YnMgYXJlIG5vdyBvbiB0aGUgaW5zdGFuY2UncyB0YWlsIGFz
IHJhdyBwb2ludGVycywgaW5zdGVhZCBvZgorICAgICAgICAgICAgYmVpbmcgb24gSlNXZWJBc3Nl
bWJseUNvZGVCbG9jaywgYW5kIGFyZSBub3cgY2FsbGVkIHdhc20tPkVtYmVkZGVyCisgICAgICAg
ICAgICBzdHVicy4gVGhlIG93bmVkIHJlZmVyZW5jZSBpcyBzdGlsbCBvbiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLCBhbmQgaXMgc3RpbGwKKyAgICAgICAgICAgIGNhbGxlZCB3YXNtLT5KUyBzdHVi
LiBUaGlzIG1vdmUgbWVhbnMgdGhhdCB0aGUgZW1iZWRkZXIgbXVzdCwgYWZ0ZXIgY3JlYXRpbmcK
KyAgICAgICAgICAgIGEgV2FzbTo6Q29kZUJsb2NrLCBzb21laG93IGNyZWF0ZSB0aGUgc3R1YnMg
dG8gY2FsbCBiYWNrIGludG8gdGhlCisgICAgICAgICAgICBlbWJlZGRlci4gVGhpcyByZW1vdmVz
IGFuIGluZGlyZWN0aW9uIGluIHRoZSBnZW5lcmF0ZWQgY29kZSBiZWNhdXNlCisgICAgICAgICAg
ICB0aGUgQjMgSVIgZ2VuZXJhdG9yIG5vdyByZWFjaGVzIGludG8gdGhlIGluc3RhbmNlIGluc3Rl
YWQgb2YKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suCisgICAgICAgICAgLSBN
b3ZlIG1vcmUgQ29kZUJsb2NrIHRoaW5ncy4gQ29tcGlsYXRpb24gY29tcGxldGlvbiBpcyBub3cg
bWFya2VkIGJ5IGl0cyBvd24KKyAgICAgICAgICAgIGF0b21pYzxib29sPiBmbGFnIGluc3RlYWQg
b2YgYSBudWxscHRyIHBsYW46IHRoYXQgcmVxdWlyZWQgdXNpbmcgYSBsb2NrLCBhbmQKKyAgICAg
ICAgICAgIHdhcyBjYXVzaW5nIGEgZGVhZGxvY2sgaW4gc3RhY2stdHJhY2UuanMgYmVjYXVzZSBi
ZWZvcmUgbXkgY2hhbmdlcworICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayBkaWQg
aXRzIG93biBjb21wbGV0aW9uIGNoZWNraW5nIHNlcGFyYXRlbHkgZnJvbQorICAgICAgICAgICAg
V2FzbTo6Q29kZUJsb2NrLCB3aXRob3V0IGdldHRpbmcgdGhlIGxvY2suIE5vdyB0aGF0IGV2ZXJ5
dGhpbmcgcG9pbnRzIHRvCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxvY2sgYW5kIHRoZXJlJ3Mg
bm8gY2FjaGVkIGNvbXBsZXRpb24gbWFya2VyLCB0aGUgbG9jayB3YXMgYmVpbmcKKyAgICAgICAg
ICAgIGFjcXVpcmVkIGluIGEgc2FuaXR5LWNoZWNrIGFzc2VydGlvbi4KKyAgICAgICAgICAtIEVt
YmVkZGVyIC0+IFdhc20gd3JhcHBlcnMgYXJlIG5vdyBnZW5lcmF0ZWQgdGhyb3VnaCBhIGZ1bmN0
aW9uIHRoYXQncyBwYXNzZWQKKyAgICAgICAgICAgIGluIGF0IGNvbXBpbGF0aW9uIHRpbWUsIGlu
c3RlYWQgb2YgYmVpbmcgaGFyZC1jb2RlZCBhcyBhIEpTIC0+IFdhc20gd3JhcHBlci4KKyAgICAg
ICAgICAtIFdhc21NZW1vcnkgZG9lbnMndCBuZWVkIHRvIGtub3cgYWJvdXQgZmF1bHQgaGFuZGxp
bmcgdGh1bmtzLiBPbmx5IHRoZSBJUgorICAgICAgICAgICAgZ2VuZXJhdG9yIHNob3VsZCBrbm93
LCBhbmQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBleGNlcHRpb24gdGhyb3dpbmcKKyAgICAg
ICAgICAgIHRodW5rIGlzIGdlbmVyYXRlZCBpZiBhbnkgbWVtb3J5IGlzIHByZXNlbnQgKG5vdGU6
IHdpdGggc2lnbmFsIGhhbmRsaW5nIG5vdAorICAgICAgICAgICAgYWxsIG9mIHRoZW0gZ2VuZXJh
dGUgYW4gZXhjZXB0aW9uIGNoZWNrKS4KKyAgICAgICAgICAtIE1ha2UgZXhjZXB0aW9uIHRocm93
aW5nIHBsdWdnYWJsZTogaW5zdGVhZCBvZiBoYXZpbmcgYSBoYXJkLWNvZGVkCisgICAgICAgICAg
ICBKUy1zcGVjaWZpYyBsYW1iZGEgd2Ugbm93IGhhdmUgYSByZWd1bGFyIEMrKyBmdW5jdGlvbiBi
ZWluZyBjYWxsZWQgZnJvbSBKSVQKKyAgICAgICAgICAgIGNvZGUgd2hlbiBhIFdlYkFzc2VtYmx5
IGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoaXMgYWxsb3dzIGFueSBlbWJlZGRlciB0byBnZXQKKyAg
ICAgICAgICAgIGNhbGxlZCBhcyB0aGV5IHdpc2guIEZvciBub3cgYSBwcm9jZXNzIGNhbiBvbmx5
IGhhdmUgYSBzaW5nbGUgb2YgdGhlc2UKKyAgICAgICAgICAgIGZ1bmN0aW9ucyAoaS5lLiBvbmx5
IG9uZSBlbWJlZGRlciBwZXIgcHJvY2VzcykgYmVjYXVzZSB0aGUgdHJhcCBoYW5kbGVyIGlzIGEK
KyAgICAgICAgICAgIHNpbmdsZXRvbi4gVGhhdCBjYW4gYmUgZml4ZWQgaW4gaW4gIzE3NzQ3NS4K
KyAgICAgICAgICAtIENyZWF0ZSBXYXNtRW1iZWRkZXIuaCB3aGVyZSBhbGwgZW1iZWRkZXIgcGx1
Z2dpbmcgd2lsbCBsaXZlLgorICAgICAgICAgIC0gU3BsaXQgdXAgSlNXZWJBc3NlbWJseVRhYmxl
IGludG8gV2FzbTo6VGFibGUgd2hpY2ggaXMKKyAgICAgICAgICAgIHJlZmNvdW50ZWQuIEpTV2Vi
QXNzZW1ibHlUYWJsZSBub3cgb25seSBjb250YWlucyB0aGUgSlMgZnVuY3Rpb25zIGluIHRoZQor
ICAgICAgICAgICAgdGFibGUsIGFuZCBXYXNtOjpUYWJsZSBpcyB3aGF0J3MgdXNlZCBieSB0aGUg
SklUIGNvZGUgdG8gbG9va3VwIHdoZXJlIHRvCisgICAgICAgICAgICBjYWxsIGFuZCBkbyB0aGUg
aW5zdGFuY2UgY2hlY2sgKGZvciBjb250ZXh0IHN3aXRjaCkuIE5vdGUgdGhhdCB0aGlzIGNyZWF0
ZXMKKyAgICAgICAgICAgIGFuIGV4dHJhIGFsbG9jYXRpb24gZm9yIGFsbCB0aGUgaW5zdGFuY2Vz
IGluIFdhc206OlRhYmxlLCBhbmQgaW4gZXhjaGFuZ2UKKyAgICAgICAgICAgIHJlbW92ZXMgYW4g
aW5kaXJlY3Rpb24gaW4gSklUIGNvZGUgYmVjYXVzZSB0aGUgaW5zdGFuY2UgdXNlZCB0byBiZSBv
YnRhaW5lZAorICAgICAgICAgICAgb2ZmIG9mIHRoZSBKUyBmdW5jdGlvbi4gQWxzbyBub3RlIHRo
YXQgaXQncyB0aGUgZW1iZWRkZXIgdGhhbiBrZWVwcyB0aGUKKyAgICAgICAgICAgIGluc3RhbmNl
cyBhbGl2ZSwgbm90IFdhc206OlRhYmxlICh3aGljaCBob2xkcyBhIGR1bWIgcG9pbnRlciB0byB0
aGUKKyAgICAgICAgICAgIGluc3RhbmNlKSwgYmVjYXVzZSBkb2luZyBvdGhlcndpc2Ugd291bGQg
Y2F1c2UgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICAgICAgICAgLSBBZGQgV2FzbUluc3RhbmNlLiBJ
dCBkb2Vzbid0IGRvIG11Y2ggZm9yIG5vdywgb3ducyBnbG9iYWxzLgorICAgICAgICAgICAtIEpT
V2ViQXNzZW1ibHkgaW5zdGFuY2Ugbm93IGRvZXNuJ3QganVzdCBjb250YWluIHRoZSBpbXBvcnRl
ZCBmdW5jdGlvbnMgYXMKKyAgICAgICAgICAgICBKU09iamVjdHMsIGl0IGFsc28gaGFzIHRoZSBj
b3JyZXNwb25kaW5nIGltcG9ydCdzIGluc3RhbmNlIGFuZCB3YXNtCisgICAgICAgICAgICAgZW50
cnlwb2ludC4gVGhpcyB0cmlwbGVzIHRoZSBzcGFjZSBhbGxvY2F0ZWQgcGVyIGluc3RhbmNlJ3Mg
aW1wb3J0ZWQKKyAgICAgICAgICAgICBmdW5jdGlvbiwgYnV0IHRoZXJlIHNob3VsZG4ndCBiZSB0
aGF0IG1hbnkgaW1wb3J0cy4gVGhpcyBoYXMgdHdvIHVwc2lkZXM6IGl0CisgICAgICAgICAgICAg
Y3JlYXRlcyBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYW5kIG1ha2VzIGlzIGVhc2llciB0byBk
aXNhc3NvY2lhdGUKKyAgICAgICAgICAgICBlbWJlZGRlci1zcGVjaWZpYyB0aGluZ3MgZnJvbSBl
bWJlZGRlci1uZXV0cmFsIHRoaW5ncy4gVGhlIHNtYWxsIC8gZmFzdGVyCisgICAgICAgICAgICAg
d2luIGlzIGluIHR3byBwbGFjZXM6IEIzIElSIGdlbmVyYXRvciBvbmx5IG5lZWRzIG9mZnNldE9m
SW1wb3J0RnVuY3Rpb24gZm9yCisgICAgICAgICAgICAgdGhlIGNhbGwgb3Bjb2RlICh3aGVuIHRo
ZSBjYWxsZWQgaW5kZXggaXMgYW4gaW1wb3J0KSB0byBrbm93IHdoZXRoZXIgdGhlCisgICAgICAg
ICAgICAgaW1wb3J0IGlzIHdhc20tPndhc20gb3Igd2FzbS0+ZW1iZWRkZXIgKHRoaXMgaXNuJ3Qg
a25vd24gYXQgY29tcGlsZS10aW1lCisgICAgICAgICAgICAgYmVjYXVzZSBpdCdzIGRlcGVuZGVu
dCBvbiB0aGUgaW1wb3J0IG9iamVjdCksIHRoaXMgaXMgbm93IGRvbmUgYnkgc2VlaW5nIGlmCisg
ICAgICAgICAgICAgdGhhdCBpbXBvcnQgZnVuY3Rpb24gaGFzIGFuIGFzc29jaWF0ZWQgdGFyZ2V0
IGluc3RhbmNlIChvbmx5IHdhc20tPndhc20KKyAgICAgICAgICAgICBkb2VzKTsgdGhlIG90aGVy
IHBsYWNlIGlzIHdhc21CaW5kaW5nIHdoaWNoIHVzZXMgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbiB0
bworICAgICAgICAgICAgIGZpZ3VyZSBvdXQgdGhlIHdhc20tPndhc20gdGFyZ2V0IGluc3RhbmNl
LCBhbmQgdGhlbiBnZXRzCisgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0
T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB0byBkbyBhIHRhaWwKKyAgICAgICAgICAgICBj
YWxsLiBUaGUgZGlzYXNzb2NpYXRpb24gY29tZXMgYmVjYXVzZSB0aGUgdGFyZ2V0IGluc3RhbmNl
IGNhbiBiZQorICAgICAgICAgICAgIFdhc206Okluc3RhbmNlIG9uY2Ugd2UgY2hhbmdlIHdoYXQg
dGhlIENvbnRleHQgaXMsIGFuZAorICAgICAgICAgICAgIFdhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uIGlzIGFscmVhZHkgZW1iZWRkZXItaW5kZXBlbmRlbnQuIEFzIGEgbmV4dCBzdGVwIEkKKyAg
ICAgICAgICAgICBjYW4gbW92ZSB0aGlzIHRhaWwgYWxsb2NhdGlvbiBmcm9tIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSB0byBXYXNtOjpJbnN0YW5jZSwKKyAgICAgICAgICAgICBhbmQgbGVhdmUgaW1w
b3J0RnVuY3Rpb24gaW4gYXMgYW4gb3BhcXVlIHBvaW50ZXIgd2hpY2ggaXMgZW1iZWRkZXItc3Bl
Y2lmaWMsCisgICAgICAgICAgICAgYW5kIGluIEpTIHdpbGwgcmVtYWluIFdyaXRlQmFycmllcjxK
U09iamVjdD4uCisgICAgICAgICAgIC0gUmVuYW1lIFZNRW50cnlGcmFtZSB0byBFbnRyeUZyYW1l
LCBhbmQgaW4gbWFueSBwbGFjZXMgcGFzcyBhIHBvaW50ZXIgdG8gaXQKKyAgICAgICAgICAgICBh
cm91bmQgaW5zdGVhZCBvZiBWTS4gVGhpcyBpcyBhIGZpcnN0IHN0ZXAgaW4gYWxsb3dpbmcgZW50
cnkgZnJhbWVzIHdoaWNoCisgICAgICAgICAgICAgYXJlbid0IHN0b3JlZCBvbiBWTSwgYnV0IHdo
aWNoIGFyZSBpbnN0ZWFkIHN0b3JlZCBpbiBhbiBlbWJlZGRlci1zcGVjaWZpYworICAgICAgICAg
ICAgIGxvY2F0aW9uLiBUaGF0IGNoYW5nZSB3b24ndCByZWFsbHkgYWZmZWN0IEpTIGV4Y2VwdCB0
aHJvdWdoIGNvZGUgY2h1cm4sIGJ1dAorICAgICAgICAgICAgIHdpbGwgYWxsb3cgV2ViQXNzZW1i
bHkgdG8gdXNlIHNvbWUgbWFjaGluZXJ5IGluIGEgZ2VuZXJpYyBtYW5uZXIgd2l0aG91dAorICAg
ICAgICAgICAgIGhhdmluZyBhIFZNLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBi
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVy
YXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogZGVi
dWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcE91dE9mRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlcjo6dW53aW5kRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlk
RXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6Cisg
ICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJl
T1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFeGl0Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAo
SlNDOjpERkc6Om9zckVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21w
aWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRM
TGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxv
d2VyKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0
KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6
OkNhbGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0Nh
bGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVPckVudHJ5RnJhbWUg
Y29uc3QpOgorICAgICAgICAqIGludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5oOgorICAgICAgICAo
SlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXI6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcik6CisgICAg
ICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlOjpOYXRpdmVDYWxsRnJh
bWVUcmFjZXJXaXRoUmVzdG9yZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlOjp+TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUpOgorICAgICAg
ICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VW53aW5kRnVu
Y3Rvcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUpOgorICAgICAgICAo
SlNDOjpTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUpOgorICAgICAgICAoSlNDOjpT
dGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9T
dGFja1Zpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVy
SXNFbnRyeUZyYW1lIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9WTUVudHJ5UmVjb3Jk
Lmg6CisgICAgICAgIChKU0M6OlZNRW50cnlSZWNvcmQ6OnByZXZUb3BFbnRyeUZyYW1lKToKKyAg
ICAgICAgKEpTQzo6Vk1FbnRyeVJlY29yZDo6dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUpOgorICAg
ICAgICAoSlNDOjpFbnRyeUZyYW1lOjp2bUVudHJ5UmVjb3JkT2Zmc2V0KToKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVySW1wbCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklU
RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAq
IGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2Vu
ZXJhdG9yKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25EdW1wQ2FsbEZy
YW1lKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVu
a3MuY3BwOgorICAgICAgICAoSlNDOjp2bUVudHJ5UmVjb3JkKToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206
CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRl
RGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAg
ICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxr
ZXI6OkZyYW1lV2Fsa2VyKToKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OmFkdmFuY2VUb1Bh
cmVudEZyYW1lKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcyk6CisgICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6VGhyb3dTY29wZTo6flRocm93U2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjp0b3BFbnRyeUZyYW1l
T2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpp
c1NhbmVGcmFtZSk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtw
b2ludHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3Rh
Y2spOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206
OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgor
ICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQ
bGFuOjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0
aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAg
ICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9X
YXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmg6CisgICAgICAgICogd2FzbS9XYXNt
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6
Oldhc206OkNvZGVCbG9jazo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29k
ZUJsb2NrOjpzZXRDb21waWxhdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2Rl
QmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFN0
dWJzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjphbGxvY2F0aW9uU2l6ZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6aW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVk
ZGVyU3R1Yik6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbVRvSlNDYWxsU3R1
YkZvckltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Y29tcGlsYXRpb25G
aW5pc2hlZCk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6anNFbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9j
azo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAg
KiB3YXNtL1dhc21Db250ZXh0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4dDo6dXNl
RmFzdFRMUyk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRleHQ6OmxvYWQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpDb250ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNtQ29u
dGV4dC5oOgorICAgICAgICAqIHdhc20vV2FzbUVtYmVkZGVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmguCisgICAgICAgICogd2FzbS9XYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dh
c21JbnN0YW5jZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Oklu
c3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6On5JbnN0YW5jZSk6CisgICAg
ICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpleHRyYU1lbW9yeUFsbG9jYXRlZCBjb25zdCk6Cisg
ICAgICAgICogd2FzbS9XYXNtSW5zdGFuY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206
Okluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6ZmluYWxp
emVDcmVhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjptb2R1bGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SW5zdGFuY2U6Om1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjp0YWJs
ZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpsb2FkSTMyR2xvYmFsIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmxvYWRJNjRHbG9iYWwgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6bG9hZEYzMkdsb2JhbCBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjpsb2FkRjY0R2xvYmFsIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW5zdGFuY2U6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0
YW5jZTo6Y2FjaGVkU3RhY2tMaW1pdCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpzZXRDYWNoZWRTdGFja0xpbWl0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL1dh
c21NZW1vcnkuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSk6
CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKToKKyAgICAgICAgKiB3
YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJ
bmZvOjpQaW5uZWRSZWdpc3RlckluZm8pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9y
bWF0aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6dG9TYXZl
IGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlNb2RlLmNwcDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oLgorICAg
ICAgICAoSlNDOjpXYXNtOjptYWtlU3RyaW5nKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlN
b2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNp
Z25hbEhhbmRsZXIuaC4KKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjptYWtlVmFsaWRhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjp2YWxpZGF0ZVN5bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlk
YXRlQXN5bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZTo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21N
b2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAqIHdh
c20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFu
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6cnVuRm9ySW5kZXgpOgorICAgICAgICAq
IHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21QYWdlQ291bnQuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAg
ICAgIChKU0M6Oldhc206OlBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyk6CisgICAgICAgIChKU0M6
Oldhc206OlBsYW46OmFkZENvbXBsZXRpb25UYXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxh
bjo6dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdCk6CisgICAgICAgICogd2FzbS9XYXNt
UGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpkb250RmluYWxpemUpOgorICAgICAg
ICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJl
Lmg6CisgICAgICAgICogd2FzbS9XYXNtVGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6VGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjp+VGFibGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6VGFibGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpjbGVhckZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3
YXNtL1dhc21UYWJsZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5VGFibGUuaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1heGlt
dW0gY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OlRhYmxlOjpvZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6
b2Zmc2V0T2ZJbnN0YW5jZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZFNp
emUpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OnRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldh
c206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206
OlRodW5rczo6c2V0VGhyb3dXYXNtRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGh1
bmtzOjp0aHJvd1dhc21FeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgor
ICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29y
a2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRleHQpOgorICAgICAgICAqIHdhc20vV2FzbVdvcmts
aXN0Lmg6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNU
b1dhc20uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRp
bmcuaC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAuCisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9KU1dlYkFzc2VtYmx5LmguCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9jayk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6
CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjppbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dGFibGUp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OndlYkFzc2VtYmx5VG9KU0Nh
bGxlZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhaWwpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uSW5mbyk6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtRW50
cnlwb2ludCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJ
bXBvcnRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1w
b3J0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmludGVy
bmFsTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp3YXNtQ29k
ZUJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZldhc21UYWJsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mR2xvYmFscyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZXYXNtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZldhc21NZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNhY2hlZFN0YWNrTGltaXQgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnNldENhY2hlZFN0YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Ondhc21NZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Ondhc21Nb2R1bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmFs
bG9jYXRpb25TaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjptb2R1
bGUgY29uc3QpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlNZW1vcnk6OmFkb3B0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlNZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93
U3VjY2Vzc0NhbGxiYWNrKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnku
aDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJbmZvcm1hdGlvbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmV4cG9ydFN5bWJvbFRhYmxlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVs
ZTo6Y2FsbGVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlKToKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJs
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2Vt
Ymx5VGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseVRhYmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZSk6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6bWF4aW11bSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5j
cHAuCisgICAgICAgIChKU0M6Oldhc206Om1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KU0V4
Y2VwdGlvbik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJseUZ1
bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OndlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eU1vZHVsZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNy
ZWF0ZU1vZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlDb21w
aWxlRnVuYyk6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29t
cGlsZUFuZEluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1
bmMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTctMTAtMTUgIFl1c3VrZSBT
dXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gUGVyZm9ybSBt
b2R1bGUgc3BlY2lmaWVyIHZhbGlkYXRpb24gYXQgcGFyc2luZyB0aW1lCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGU3ZjUwYjkuLjVlOGY5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCQk3OUM0QjE1RTFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUMxQkEyMTU4RjAwRkQ1
OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUNGQzZGMDFDMzNCMTAw
MDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5n
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTkxQzExMDZBOTAwQ0VD
QTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk3OURBRTI3QTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2Vw
dGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovOyB9Owor
CQk3OURBRTI3QTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIw
MEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5REZDQkRCMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNP
d25Qcm9wZXJ0eUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OURGQ0JEQTFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RUUw
QzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTQ2MCw3ICsxNDYwLDYgQEAKIAkJQUQyRkNDMjAxREI1OUNCMjAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzE0MURCNTlDNTkwMEIzRTczNiAv
KiBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IubHV0LmggKi87IH07CiAJCUFEMkZDQzIxMURC
NTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMTUxREI1OUM1OTAw
QjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUubHV0LmggKi87IH07CiAJCUFEMkZD
QzJEMURCODM4RkQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMjcxREI4MzhDNDAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggKi87IH07Ci0JCUFEMkZDQzMxMURCODNENDkw
MEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJs
eS5oICovOyB9OwogCQlBRDQxMkIzNDFFN0IyRTlFMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDEyQjMyMUU3
QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENDI1MjUxMUU1RDBFMTQwMDlEMkE5NyAvKiBGdWxs
Q29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUQ0MjUyNTAxRTVEMERFQjAwOUQyQTk3IC8qIEZ1bGxDb2RlT3JpZ2luLmggKi87IH07CiAJ
CUFENDkzN0M0MUREQkU2MTQwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3QzIxRERCRTYw
QTAwNzdDODA3IC8qIEFic3RyYWN0TW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NjgsNiArMTQ2NywxMyBAQAogCQlBRDQ5
MzdENDFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3Q0ExREREMjczNDAwNzdD
ODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAqLzsgfTsKIAkJQUQ0QjFERkExREYyNDRFMjAw
NzFBRTMyIC8qIFdhc21CaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBRDRCMURGODFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCAq
LzsgfTsKIAkJQUQ1QjQxNkYxRUJBRkI3NzAwOEVGQTQzIC8qIFdhc21OYW1lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVCNDE2RTFFQkFGQjY1MDA4
RUZBNDMgLyogV2FzbU5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlBRDVDMzZERDFGNjg4QjY1MDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZEQzFG
Njg4QjVGMDAwQkNBQUYgLyogV2FzbUVtYmVkZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RTIxRjY5OUVDMDAwMEJDQUFGIC8qIFdh
c21JbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkU2MUY2OUVDOTEw
MDBCQ0FBRiAvKiBXYXNtVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFQTFG
NzVBRDZBMDAwQkNBQUYgLyogSlNUb1dhc20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFEOERENkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMz
NkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREQwOUFGMzFGNjI0ODJFMDAxMzEzQzIgLyog
SlNXZWJBc3NlbWJseS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREMDlBRUUxRjVGNjIzRjAw
MTMxM0MyIC8qIFdhc21Ub0pTLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUYxRjdBMjYzQTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZF
RTFGN0EyNjI5MDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDc0MzhDMDFFMDQ1N0E0MDBGRDBDMkEg
LyogV2FzbVNpZ25hdHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDg2QTkzRTFB
QTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdl
YWtHQ01hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBRDhGRjM5ODFFQjVCREIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDhGRjM5NTFF
QjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQxNjQsOSArNDE3MCwyNSBAQAogCQlBRDJG
Q0MxNTFEQjU5QzU5MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5sdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlw
ZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMjYxREI4MzhDNDAw
QjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDsgcGF0aCA9IGpzL1dlYkFz
c2VtYmx5UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQyRkND
MjcxREI4MzhDNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHBhdGggPSBqcy9X
ZWJBc3NlbWJseVByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDJG
Q0MyRTFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkFzc2VtYmx5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJBc3NlbWJseS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2Fz
bUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRm9y
bWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNDcxRjRCQTc4NjAw
NjY5OTEyIC8qIFdBQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUJhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNEExRjRERTY4QzAwNjY5OTEyIC8qIFdBSW5zdGFuY2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0FJbnN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBRDNGMUU0QjFGNERFNjhDMDA2Njk5MTIgLyogV0FUYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTRDMUY0REU2
OEMwMDY2OTkxMiAvKiBXQU1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1lbW9yeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU1MjFGNEY0QUU1MDA2Njk5MTIgLyogV0FN
ZW1vcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FNZW1vcnkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBRDNGMUU1MzFGNEY0QUU1MDA2Njk5MTIgLyogV0FNb2R1bGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0FNb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDNGMUU1NDFGNEY0QUU1MDA2Njk5MTIgLyogV0FJbnN0YW5jZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXQUluc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQUQzRjFFNTUxRjRGNEFFNTAwNjY5OTEyIC8qIFdBVGFibGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0FUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY0
MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUV4Y2Vw
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2NTFGNTBFNTdGMDA2
Njk5MTIgLyogV0FFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FFeGNlcHRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5
MTIgLyogV0FNZW1vcnlEZXNjcmlwdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBTWVtb3J5
RGVzY3JpcHRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTY5MUY1
NDdDQjYwMDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FN
ZW1vcnlEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTZB
MUY1NDdDQjYwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUlt
cG9ydE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU2QjFGNTQ3
Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FUYWJs
ZURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkMxRjU0
N0NCODAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
SW1wb3J0T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQzRjFFNkQx
RjU0N0NCODAwNjY5OTEyIC8qIFdBVGFibGVEZXNjcmlwdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdBVGFibGVEZXNjcmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUQzRjFFNzAxRjU0QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0FGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU3MTFGNTRD
M0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQUZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0MTJCMzExRTdCMkU4QTAw
OEFGMTU3IC8qIFdhc21Db250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdhc21Db250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0
MTJCMzIxRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFENDEyQjM1MUU3QjU3QzAwMDhBRjE1NyAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2VJZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2VJZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDE4
MSwxNSArNDIwMywyOCBAQAogCQlBRDRCMURGNzFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUJpbmRpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDRCMURGODFERjI0NEQ3MDA3MUFF
MzIgLyogV2FzbUJpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Fz
bUJpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1QjQxNkUxRUJBRkI2
NTAwOEVGQTQzIC8qIFdhc21OYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21OYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRDMUY2ODhC
NUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUVtYmVkZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FB
RiAvKiBXYXNtSW5zdGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUluc3RhbmNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFG
IC8qIFdhc21JbnN0YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5zdGFuY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2RTMxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21U
YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVGFibGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21UYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDVDMzZFRTFGN0EyNjI5MDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbU1lbW9yeU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1
QzM2RjAxRjdBMjZCRjAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdhc21NZW1vcnlNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVNpZ25hdHVyZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0
dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TaWduYXR1cmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8q
IFdlYWtHQ01hcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a0dDTWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDhERDZDRjFG
NjcwODlGMDAwNEVCNTIgLyogSlNUb1dhc20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNUb1dhc20uaDsg
cGF0aCA9IGpzL0pTVG9XYXNtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEOERE
NkQwMUY2NzA4QTMwMDA0RUI1MiAvKiBKU1RvV2FzbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1RvV2FzbS5jcHA7IHBhdGggPSBqcy9KU1RvV2FzbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUluZGV4T3JOYW1lLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNt
SW5kZXhPck5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Fz
bUluZGV4T3JOYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ5RTg1MkUx
RThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOyBwYXRoID0ganMv
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REI2RjY3QzFFMTVENzUwMDA4MkYzODQgLyogV2FzbVBhZ2VDb3VudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtUGFnZUNvdW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5
VG9KU0NhbGxlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJB
c3NlbWJseVRvSlNDYWxsZWUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4
IC8qIFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXZWJBc3NlbWJseVRvSlNDYWxsZWUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBREQwOUFFRTFGNUY2MjNGMDAx
MzEzQzIgLyogV2FzbVRvSlMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2FzbVRvSlMuaDsgcGF0aCA9IGpz
L1dhc21Ub0pTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUVGMUY1RjYy
M0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXYXNtVG9KUy5j
cHA7IHBhdGggPSBqcy9XYXNtVG9KUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUFERDA5QUYyMUY2MjQ4MjkwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEpTV2ViQXNzZW1ibHkuY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAv
KiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHkuaDsgcGF0aCA9
IGpzL0pTV2ViQXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZB
NDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREOEZBNDQxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1l
U2VjdGlvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
RERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00MTk5LDYgKzQyMzQsOCBAQAogCQlBREU4MDI5NjFFMDhGMUM5MDA1OERFNzgg
LyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwOyBwYXRo
ID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBREU4MDI5NzFFMDhGMUM5MDA1OERFNzggLyogV2ViQXNzZW1ibHlMaW5r
RXJyb3JQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNz
ZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5TGlua0Vycm9y
UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjlEMUUwOEYy
MjYwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3Ry
dWN0b3IuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY3MUY0N0E3QjgwMDY0NTFEMyAv
KiBXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBREZDMzBGOTFGNDdBOEMwMDA2NDUxRDMgLyogV0FNb2R1bGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0FNb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjU5Rjg5MzcxODkxQUQzMzAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlGODkzODE4OTFBREI1MDBE
NUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTY1NSw2
ICs1NjkyLDI2IEBACiAJCQkJODZGM0VFQjYxNjg1NUE1QjAwNzdCOTJBIC8qIE9iamNSdW50aW1l
RXh0cmFzLmggKi8sCiAJCQkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmNwcCAqLywKIAkJCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJp
bmcuaCAqLywKKwkJCQlBRDNGMUU0NzFGNEJBNzg2MDA2Njk5MTIgLyogV0FCYXNlLmggKi8sCisJ
CQkJQUQzRjFFNjUxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmNwcCAqLywKKwkJCQlB
RDNGMUU2NDFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNlcHRpb24uaCAqLywKKwkJCQlBRDNGMUU3
MTFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5jcHAgKi8sCisJCQkJQUQzRjFFNzAxRjU0
QzNBQTAwNjY5OTEyIC8qIFdBRnVuY3Rpb24uaCAqLywKKwkJCQlBRDNGMUU2QzFGNTQ3Q0I4MDA2
Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuY3BwICovLAorCQkJCUFEM0YxRTZBMUY1NDdDQjYwMDY2
OTkxMiAvKiBXQUltcG9ydE9iamVjdC5oICovLAorCQkJCUFEM0YxRTU0MUY0RjRBRTUwMDY2OTkx
MiAvKiBXQUluc3RhbmNlLmNwcCAqLywKKwkJCQlBRDNGMUU0QTFGNERFNjhDMDA2Njk5MTIgLyog
V0FJbnN0YW5jZS5oICovLAorCQkJCUFEM0YxRTUyMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1lbW9y
eS5jcHAgKi8sCisJCQkJQUQzRjFFNEMxRjRERTY4QzAwNjY5OTEyIC8qIFdBTWVtb3J5LmggKi8s
CisJCQkJQUQzRjFFNjgxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5jcHAg
Ki8sCisJCQkJQUQzRjFFNjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5o
ICovLAorCQkJCUFEM0YxRTUzMUY0RjRBRTUwMDY2OTkxMiAvKiBXQU1vZHVsZS5jcHAgKi8sCisJ
CQkJQURGQzMwRjkxRjQ3QThDMDAwNjQ1MUQzIC8qIFdBTW9kdWxlLmggKi8sCisJCQkJQUQzRjFF
NTUxRjRGNEFFNTAwNjY5OTEyIC8qIFdBVGFibGUuY3BwICovLAorCQkJCUFEM0YxRTRCMUY0REU2
OEMwMDY2OTkxMiAvKiBXQVRhYmxlLmggKi8sCisJCQkJQUQzRjFFNkQxRjU0N0NCODAwNjY5OTEy
IC8qIFdBVGFibGVEZXNjcmlwdG9yLmNwcCAqLywKKwkJCQlBRDNGMUU2QjFGNTQ3Q0I4MDA2Njk5
MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuaCAqLywKKwkJCQlBREZDMzBGNzFGNDdBN0I4MDA2NDUx
RDMgLyogV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1REUzRDBGNDBERDhEREZCMDA0Njg3MTQgLyog
V2ViS2l0QXZhaWxhYmlsaXR5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IEFQSTsKQEAgLTYwMTQs
OCArNjA3MSw2IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUFE
MkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLywKLQkJCQlBRDJGQ0MyRTFEQjgzOUY3MDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8sCi0JCQkJQUQyRkNDMkYxREI4MzlGNzAwQjNF
NzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYg
LyogV2FzbUIzSVJHZW5lcmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFC
NiAvKiBXYXNtQjNJUkdlbmVyYXRvci5oICovLAogCQkJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5
RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8sCkBAIC02MDMxLDYgKzYwODYsNyBAQAogCQkJCTUyNkFD
NEI1MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8sCiAJCQkJQUQ0MTJCMzEx
RTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmNwcCAqLywKIAkJCQlBRDQxMkIzMjFFN0Iy
RThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuaCAqLywKKwkJCQlBRDVDMzZEQzFGNjg4QjVGMDAw
QkNBQUYgLyogV2FzbUVtYmVkZGVyLmggKi8sCiAJCQkJNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFB
IC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi8sCiAJCQkJNTM4MUI5MzYxRTYwRTk2NjAwOTBGNzk0
IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovLAogCQkJCTUzODFCOTM4MUU2MEU5N0Qw
MDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmggKi8sCkBAIC02MDM5LDYgKzYwOTUs
OCBAQAogCQkJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIu
aCAqLywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNw
cCAqLywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmgg
Ki8sCisJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8s
CisJCQkJQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovLAogCQkJ
CUFEMDA2NTlEMUVDQUM3RkUwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggKi8sCiAJCQkJNTNFOUUw
QTkxRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5jcHAgKi8sCiAJCQkJNTNF
OUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovLApAQCAtNjA0
Niw2ICs2MTA0LDggQEAKIAkJCQk1MzU1NTcxMzFEOUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1lbW9y
eS5oICovLAogCQkJCTc5Qjc1OTcxMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3Jt
YXRpb24uY3BwICovLAogCQkJCTc5Qjc1OTcyMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5
SW5mb3JtYXRpb24uaCAqLywKKwkJCQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1l
bW9yeU1vZGUuY3BwICovLAorCQkJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVt
b3J5TW9kZS5oICovLAogCQkJCTc5MDA4MTM2MUU5NUE4RUMwMDUyRDdDRCAvKiBXYXNtTW9kdWxl
LmNwcCAqLywKIAkJCQk3OTAwODEzNzFFOTVBOEVDMDA1MkQ3Q0QgLyogV2FzbU1vZHVsZS5oICov
LAogCQkJCTUzRTc3N0UxMUU5MkUyNjUwMDdDQkVDNCAvKiBXYXNtTW9kdWxlSW5mb3JtYXRpb24u
Y3BwICovLApAQCAtNjA2Nyw2ICs2MTI3LDggQEAKIAkJCQk1M0Y0MEU4NDFENThGOTc3MDA5OUEx
QjYgLyogV2FzbVNlY3Rpb25zLmggKi8sCiAJCQkJQUQ3NDM4QkUxRTA0NTc5MjAwRkQwQzJBIC8q
IFdhc21TaWduYXR1cmUuY3BwICovLAogCQkJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBX
YXNtU2lnbmF0dXJlLmggKi8sCisJCQkJQUQ1QzM2RTMxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21U
YWJsZS5jcHAgKi8sCisJCQkJQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5o
ICovLAogCQkJCTUyNTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLywK
IAkJCQk1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovLAogCQkJCTUz
RTlFMEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLywKQEAgLTc2Nzgs
NiArNzc0MCwxMCBAQAogCQlBRDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUFEOERENkQwMUY2NzA4QTMw
MDA0RUI1MiAvKiBKU1RvV2FzbS5jcHAgKi8sCisJCQkJQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUy
IC8qIEpTVG9XYXNtLmggKi8sCisJCQkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2Vi
QXNzZW1ibHkuY3BwICovLAorCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFz
c2VtYmx5LmggKi8sCiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suY3BwICovLAogCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmggKi8sCiAJCQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8q
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8sCkBAIC03Njk3LDYgKzc3NjMs
OCBAQAogCQkJCUFEMkZDQkFEMURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yLmggKi8sCiAJCQkJQUQyRkNCQUUxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlUYWJsZS5jcHAgKi8sCiAJCQkJQUQyRkNCQUYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlUYWJsZS5oICovLAorCQkJCUFERDA5QUVGMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9K
Uy5jcHAgKi8sCisJCQkJQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmggKi8s
CiAJCQkJQUQyRkNCQjAxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
Q29uc3RydWN0b3IuY3BwICovLAogCQkJCUFEMkZDQkIxMURCNThEQTQwMEIzRTczNiAvKiBXZWJB
c3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJQUQyRkNCQjIxREI1OERB
NDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcCAqLywKQEAg
LTc5NzIsNiArODA0MCw3IEBACiAJCQkJMEZFQzg1QkIxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5z
ZXJ0aW9uU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERjY3RDIxRDlDNkQyNzAw
MUI5ODI1IC8qIEIzS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAw
QjVBRjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
RDVDMzZFQzFGNzVBRDdDMDAwQkNBQUYgLyogV2FzbVRvSlMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzE5REEwNDFDMUJFNDBEMDAxRDI2MEIgLyogQjNMb3dlck1hY3Jvc0FmdGVyT3B0
aW1pemF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDYyLDYgKzgxMzEsNyBAQAog
CQkJCUUzMjhEQUVCMUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRlY29kZVJld3JpdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VE
ZWYuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dl
YkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUg
LyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4
MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUMzQzYwMUYzNzlG
NTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCBpbiBIZWFkZXJzICovLApAQCAtODI2Niw2
ICs4MzM2LDcgQEAKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdOdWxs
QWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTcxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCUFENUMzNkREMUY2ODhCNjUwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI5Q0U5MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhERjgyMDAyQjJBRDcg
LyogREZHT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkYxQzkwQzU1QjAw
NDgwMTUxIC8qIERGR09wSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC04Mzc2LDggKzg0NDcsMTAg
QEAKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25S
YW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkVBMUY3NUFENkEwMDBCQ0FBRiAv
KiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzNDNTcxRjMzQTQ1MzAwRjU5QjZD
IC8qIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0E4QUYzODE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAq
LywKKwkJCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0MzE3RUE5RjU5MDBBQkIyMTcgLyogRlBSSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTM0RURCRjcxREI1RkZDOTAwREM4N0E1IC8qIEZyYW1lVHJh
Y2Vycy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzgwLDcgKzg4NTMsNiBAQAogCQkJCUE3NDgyQjkz
MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBCMjg2QjFFQjhFNkNGMDAwRUI1RDIgLyogSlNXZWFrUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQUQyRkNDMzExREI4M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5RSAvKiBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVGRDQ4NDFFQkMw
NDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBp
bGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTczLDYgKzkwNDUsNyBAQAogCQkJCUJDRDIw
MkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGN0MzOUZCMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTcxMkI0MTExQzdCMjM1MDA3QTUzMTUgLyogUmVnRXhwS2V5Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QjBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhw
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdDMzlGRDFDOEY2NTk1MDA0ODAxNTEgLyog
UmVnRXhwT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzQwRTE3MDZB
NzAwMkM3RTgyIC8qIFJlZ0V4cFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTQ0LDYg
KzkyMTcsNyBAQAogCQkJCTBGRTA1MDJEMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVn
aXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUZCMzkzMUUxNzdBNzIwMEE5QkU1MCAvKiBW
aXNpdGluZ1RpbWVvdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkVGMUY3QTI2M0EwMDBC
Q0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NTJBQTExREY3
ODYwOTAwRTA2RkJEIC8qIFZpc2l0UmFjZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MjAwRTE2RjVDRDAwQjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NThEM0E1NjE5
NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKaW5kZXggZmE4M2YzYy4uMmVkODNkZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dApAQCAtOTM4LDcgKzkzOCw2IEBAIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5
cGUuY3BwCiB0b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNwZWN0b3Iu
Y3BwCiAKLXdhc20vSlNXZWJBc3NlbWJseS5jcHAKIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CiB3YXNtL1dhc21CQlFQbGFuLmNwcAogd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTk0NiwxMiAr
OTQ1LDE2IEBAIHdhc20vV2FzbUNhbGxlZS5jcHAKIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9u
LmNwcAogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAogd2FzbS9XYXNtQ29udGV4dC5jcHAKK3dhc20v
V2FzbUVtYmVkZGVyLmgKIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKIHdhc20vV2Fz
bUZvcm1hdC5jcHAKIHdhc20vV2FzbUluZGV4T3JOYW1lLmNwcAord2FzbS9XYXNtSW5zdGFuY2Uu
Y3BwCit3YXNtL1dhc21JbnN0YW5jZS5oCiB3YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKIHdh
c20vV2FzbU1lbW9yeS5jcHAKIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAord2FzbS9X
YXNtTWVtb3J5TW9kZS5jcHAKIHdhc20vV2FzbU1vZHVsZS5jcHAKIHdhc20vV2FzbU1vZHVsZUlu
Zm9ybWF0aW9uLmNwcAogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtOTYxLDEwICs5NjQs
MTUgQEAgd2FzbS9XYXNtT3Bjb2RlT3JpZ2luLmNwcAogd2FzbS9XYXNtUGFnZUNvdW50LmNwcAog
d2FzbS9XYXNtUGxhbi5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAKK3dhc20vV2FzbVRhYmxl
LmNwcAord2FzbS9XYXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcAogd2FzbS9XYXNtVmFs
aWRhdGUuY3BwCiB3YXNtL1dhc21Xb3JrbGlzdC5jcHAKIAord2FzbS9qcy9KU1RvV2FzbS5jcHAK
K3dhc20vanMvSlNUb1dhc20uaAord2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCkBAIC05
NzQsNiArOTgyLDggQEAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmNw
cAord2FzbS9qcy9XYXNtVG9KUy5oCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29u
c3RydWN0b3IuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNw
cAogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggMTU1Zjc1Zi4u
ZGE0OGM5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgQ2FsbFNpdGVJbmRleCBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6Om9yaWdpbmFsQ2FsbFNpdGVJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IHN0dWIKIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25I
YW5kbGVyKCkKIHsKICAgICByZXN0b3JlU2NyYXRjaCgpOwotICAgIGppdC0+Y29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihtX3ZtKTsKKyAgICBqaXQtPmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0udG9wRW50cnlGcmFt
ZSk7CiAgICAgaWYgKG5lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oKSkgewogICAg
ICAgICAvLyBUbyB0aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiBo
YW5kbGluZwogICAgICAgICAvLyBjYWxsIHNpdGUsIHRoZXkgd2lsbCBleHBlY3QgdGhlIE9TUiBl
eGl0IHRvIGJlIGFycml2ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwCmluZGV4IDM0OGM2OGMuLjc3MTZlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKICAqCkBAIC02NTIsOCArNjUyLDggQEAgdm9pZCBEZWJ1Z2dlcjo6c3RlcE91dE9mRnVuY3Rp
b24oKQogICAgIGlmICghbV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRy
eUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBtX3Bh
dXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJhbWUt
PmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSkgOiBudWxscHRyOworICAgIEVudHJ5RnJhbWUq
IHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgbV9wYXVzZU9uQ2FsbEZy
YW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSh0b3BFbnRyeUZyYW1lKSA6IG51bGxwdHI7CiAgICAgbV9wYXVzZU9uU3RlcE91dCA9IHRydWU7
CiAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG5vdGlmeURv
bmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKQEAgLTgzMSw4ICs4MzEsOCBAQCB2b2lkIERl
YnVnZ2VyOjpyZXR1cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3Vy
cmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BW
TUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUp
OworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBSZXR1cm5pbmcgZnJvbSBhIGNhbGwsIHRoZXJl
IHdhcyBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbiBvbiB0aGUgc3RhdGVtZW50IHdlIGFyZSByZXR1
cm5pbmcgdG8uCiAgICAgbV9wYXN0Rmlyc3RFeHByZXNzaW9uSW5TdGF0ZW1lbnQgPSB0cnVlOwpA
QCAtODU2LDggKzg1Niw4IEBAIHZvaWQgRGVidWdnZXI6OnVud2luZEV2ZW50KENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZy
YW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNh
bGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFt
ZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9j
dXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIFRy
ZWF0IHN0ZXBwaW5nIG92ZXIgYW4gZXhjZXB0aW9uIGxvY2F0aW9uIGxpa2UgYSBzdGVwLW91dC4K
ICAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkKQEAgLTg4
Niw4ICs4ODYsOCBAQCB2b2lkIERlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSBtX3ZtLnRvcFZNRW50cnlG
cmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSh0b3BWTUVudHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJh
bWUgPSBtX3ZtLnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1f
Y3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAKICAgICAvLyBS
ZXR1cm5pbmcgZnJvbSBhIHByb2dyYW0sIGNvdWxkIGJlIGV2YWwoKSwgdGhlcmUgd2FzIGF0IGxl
YXN0IG9uZSBleHByZXNzaW9uIG9uIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIHJldHVybmluZyB0by4K
ICAgICBtX3Bhc3RGaXJzdEV4cHJlc3Npb25JblN0YXRlbWVudCA9IHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDkyNjk3YjMuLjMwNjU1
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBA
IC0xNDksNyArMTQ5LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRs
ZXJzKCkKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVt
cHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2su
bGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9v
a3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50
cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CkBAIC0xNjksNyArMTY5
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICBp
ZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVj
a3MubGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8g
bG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFu
ZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
dm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCmluZGV4IDU4M2JmOTguLjAyMWVhYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzE3LDcgKzMxNyw3IEBAIHZv
aWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2Nr
LCB1bnNpZ25lZCBieXRlY29kZUluCiAgICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMg
PSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6
OmFsbEZQUnMoKSk7CiAKICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gcmVnaXN0ZXJTYXZl
TG9jYXRpb25zLT5zaXplKCk7Ci0gICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJl
Y29yZCh2bS0+dG9wVk1FbnRyeUZyYW1lKTsKKyAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2
bUVudHJ5UmVjb3JkKHZtLT50b3BFbnRyeUZyYW1lKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgY3Vy
cmVudEVudHJ5ID0gcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKTsKICAgICAgICAgaWYgKGRv
bnRTYXZlUmVnaXN0ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5kZXggZDQzMDM5OC4uZGU2YTNkMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNiw3ICsxMjYsNyBAQCBz
dGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoQ29udGV4dCYgY29udGV4dAogICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0
ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgdW5zaWduZWQgcmVnaXN0
ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7CiAKLSAgICBWTUVudHJ5UmVjb3JkKiBl
bnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICBWTUVu
dHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7
CiAgICAgdWludHB0cl90KiBjYWxsZWVTYXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3QqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7CiAKICAgICAv
LyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIHZv
aWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0
JiBjb250ZXh0KQogICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7CiAgICAgYXV0byYg
c3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7CiAKLSAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29y
ZCA9IHZtRW50cnlSZWNvcmQodm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICBWTUVudHJ5UmVjb3Jk
KiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7CiAgICAgdm9p
ZCogY2FsbGVlU2F2ZUJ1ZmZlciA9IGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0ZXJzQnVm
ZmVyOwogCiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06Omdl
dEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKQEAgLTEwNDQsNyArMTA0NCw3IEBAIHZv
aWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7CiAgICAgICAgICAg
ICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNlIHdlIGFycml2
ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgogICAgICAgICAgICAgLy8gU28sIHdlIG11c3Qg
cmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAgICAgICAgIGpp
dC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZt
KTsKKyAgICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgICAgIGppdC5sb2FkUHRy
KHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CiAgICAgICAgIH0KICAgICAgICAgaml0LmFkZFB0cigKQEAgLTEzOTYsNyArMTM5Niw3
IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwg
Y29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hl
Y2tSZWdpc3RlcnMoKTsKIAogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAg
ICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSk7CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252
ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAppbmRleCBiOWU0YWNmLi43NDViMjYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC0xNDMsNyArMTQzLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oREZHVW5yZWFzb25hYmxlT1NSRW50cnlKdW1wRGVzdGluYXRp
b24pOwogCiAgICAgb2subGluaygmaml0KTsKLSAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUp
OwogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAKaW5kZXggZmYyY2U1Ni4uZmYyNDY3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBz
dGF0ZSwgU2FmZXBvaW50OjpSZXN1bHQmIHNhZmVwb2ludFJlc3VsdCkKIAogICAgIC8vIEVtaXQg
dGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgogICAgICpzdGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0
LmxhYmVsKCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0pOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwog
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCmluZGV4IDdjMDE4MWQuLjJhMWViNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBsaW5rKFN0
YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlDaGVj
ayA9IGppdC5jYWxsKCk7CiAKICAgICAgICAgICAgIGF1dG8gbm9FeGNlcHRpb24gPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbk9yRXF1YWwsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgICAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CisgICAg
ICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0udG9wRW50cnlGcmFtZSk7CiAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBFeGNlcHRpb25IYW5k
bGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAzYmE0NWFmLi4zNzQ5ZGQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yNjQsNyAr
MjY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJ
bmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCmluZGV4IDhlMDgxZDcuLjFjN2U2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODYsNyArMTg2LDcgQEAgc3RhdGlj
IHZvaWQgY29tcGlsZVN0dWIoCiAgICAgLy8gVGhlIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8g
aXMgcmVzdGFibGlzaCBvdXIgZnJhbWUgaW4gdGhlIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgogICAg
IGlmIChleGl0LmlzR2VuZXJpY1Vud2luZEhhbmRsZXIoKSkgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOyAvLyBUaGUgZmlyc3QgdGltZSB3ZSBoaXQgdGhp
cyBleGl0LCBsaWtlIGF0IGFsbCBvdGhlciB0aW1lcywgdGhpcyBmaWVsZCBzaG91bGQgYmUgbm9u
LW51bGwuCi0gICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgICAgICBq
aXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgTWFjcm9Bc3NlbWJs
ZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtNDEyLDggKzQx
Miw4IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiB2bUNhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
ICAgICBSZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCk7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAg
ICAgaml0LmxvYWRQdHIoJnZtLT50b3BWTUVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6
OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICAgICAgaml0LmxvYWRQdHIoJnZtLT50b3BFbnRyeUZyYW1lLCBHUFJJbmZvOjpyZWdUMSk7Cisg
ICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6
Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAg
IH0KIAogICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgp
OyByZWcgPSByZWcubmV4dCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuY3BwCmluZGV4IDlmYTI5ZDAuLmJlNjFhNGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMy0yMDE0LCAyMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgogI2luY2x1ZGUg
Ildhc21Db250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CkBAIC0y
MTcsNyArMjE4LDcgQEAgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6d2FzbUF3YXJlTGV4aWNh
bEdsb2JhbE9iamVjdChWTSYgdm0pCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIGlmICgh
Y2FsbGVlKCkuaXNXYXNtKCkpCiAgICAgICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7
Ci0gICAgcmV0dXJuIFdhc206OmxvYWRDb250ZXh0KHZtKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
cmV0dXJuIHZtLndhc21Db250ZXh0LmxvYWQoKS0+Z2xvYmFsT2JqZWN0KCk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgcmV0dXJuIGxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAg
LTIzNywyNCArMjM4LDI0IEBAIGJvb2wgQ2FsbEZyYW1lOjppc0FueVdhc21DYWxsZWUoKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKFZN
RW50cnlGcmFtZSomIGN1cnJWTUVudHJ5RnJhbWUpCitDYWxsRnJhbWUqIENhbGxGcmFtZTo6Y2Fs
bGVyRnJhbWUoRW50cnlGcmFtZSomIGN1cnJFbnRyeUZyYW1lKQogewotICAgIGlmIChjYWxsZXJG
cmFtZU9yVk1FbnRyeUZyYW1lKCkgPT0gY3VyclZNRW50cnlGcmFtZSkgewotICAgICAgICBWTUVu
dHJ5UmVjb3JkKiBjdXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyclZNRW50cnlG
cmFtZSk7Ci0gICAgICAgIGN1cnJWTUVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJl
dlRvcFZNRW50cnlGcmFtZSgpOworICAgIGlmIChjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpID09
IGN1cnJFbnRyeUZyYW1lKSB7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVj
b3JkID0gdm1FbnRyeVJlY29yZChjdXJyRW50cnlGcmFtZSk7CisgICAgICAgIGN1cnJFbnRyeUZy
YW1lID0gY3VyclZNRW50cnlSZWNvcmQtPnByZXZUb3BFbnRyeUZyYW1lKCk7CiAgICAgICAgIHJl
dHVybiBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcENhbGxGcmFtZSgpOwogICAgIH0KLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPckVudHJ5
RnJhbWUoKSk7CiB9CiAKLVNVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2Fm
ZUNhbGxlckZyYW1lKFZNRW50cnlGcmFtZSomIGN1cnJWTUVudHJ5RnJhbWUpCitTVVBQUkVTU19B
U0FOIENhbGxGcmFtZSogQ2FsbEZyYW1lOjp1bnNhZmVDYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYg
Y3VyckVudHJ5RnJhbWUpCiB7Ci0gICAgaWYgKHVuc2FmZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJh
bWUoKSA9PSBjdXJyVk1FbnRyeUZyYW1lKSB7Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJW
TUVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAg
Y3VyclZNRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wVk1FbnRy
eUZyYW1lKCk7CisgICAgaWYgKHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0gY3Vy
ckVudHJ5RnJhbWUpIHsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQg
PSB2bUVudHJ5UmVjb3JkKGN1cnJFbnRyeUZyYW1lKTsKKyAgICAgICAgY3VyckVudHJ5RnJhbWUg
PSBjdXJyVk1FbnRyeVJlY29yZC0+dW5zYWZlUHJldlRvcEVudHJ5RnJhbWUoKTsKICAgICAgICAg
cmV0dXJuIGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wQ2FsbEZyYW1lKCk7CiAgICAg
fQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPih1bnNhZmVDYWxsZXJGcmFtZU9y
Vk1FbnRyeUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPih1bnNh
ZmVDYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsKIH0KIAogU291cmNlT3JpZ2luIENhbGxGcmFt
ZTo6Y2FsbGVyU291cmNlT3JpZ2luKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaAppbmRleCA2MjMwOWEwLi42ZDVkNzIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC0xNDEsMTIgKzE0MSwxMiBA
QCBuYW1lc3BhY2UgSlNDICB7CiAKICAgICAgICAgQ2FsbEZyYW1lJiBvcGVyYXRvcj0oY29uc3Qg
UmVnaXN0ZXImIHIpIHsgKnN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcykgPSByOyByZXR1cm4g
KnRoaXM7IH0KIAotICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4oY2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpKTsg
fQotICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1
cm4gY2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9Ci0gICAgICAgIFNVUFBSRVNTX0FT
QU4gdm9pZCogdW5zYWZlQ2FsbGVyRnJhbWVPclZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IHVuc2FmZUNhbGxlckZyYW1lQW5kUEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbEZyYW1lKj4o
Y2FsbGVyRnJhbWVPckVudHJ5RnJhbWUoKSk7IH0KKyAgICAgICAgdm9pZCogY2FsbGVyRnJhbWVP
ckVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJh
bWU7IH0KKyAgICAgICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yRW50
cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHVuc2FmZUNhbGxlckZyYW1lQW5kUEMoKS5jYWxsZXJG
cmFtZTsgfQogCi0gICAgICAgIENhbGxGcmFtZSogdW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZy
YW1lKiYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
KFZNRW50cnlGcmFtZSomKTsKKyAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVDYWxsZXJGcmFtZShF
bnRyeUZyYW1lKiYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lKEVudHJ5RnJhbWUqJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU291cmNl
T3JpZ2luIGNhbGxlclNvdXJjZU9yaWdpbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvRnJhbWVUcmFjZXJzLmgKaW5kZXggYzViNmI4My4uNzZhY2Q2NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ZyYW1lVHJhY2Vycy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgVk1FbnRyeUZyYW1lOwor
c3RydWN0IEVudHJ5RnJhbWU7CiAKIGNsYXNzIFN1c3BlbmRFeGNlcHRpb25TY29wZSB7CiBwdWJs
aWM6CkBAIC03NCwzMyArNzQsMzMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKHZt
KTsKICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZSk7Ci0gICAgICAgIEFTU0VSVChyZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odm0tPnRv
cFZNRW50cnlGcmFtZSkpOworICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbEZyYW1lKSA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZtLT50b3BFbnRyeUZyYW1lKSk7
CiAgICAgICAgIHZtLT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgfQogfTsKIAogY2xh
c3MgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgewogcHVibGljOgotICAgIEFMV0FZ
U19JTkxJTkUgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUoVk0qIHZtLCBWTUVudHJ5
RnJhbWUqIHZtRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAgQUxXQVlTX0lO
TElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZShWTSogdm0sIEVudHJ5RnJhbWUq
IEVudHJ5RnJhbWUsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICA6IG1fdm0odm0pCiAg
ICAgewogICAgICAgICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAg
ICAgICAgbV9zYXZlZFRvcFZNRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CisgICAg
ICAgIG1fc2F2ZWRUb3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1f
c2F2ZWRUb3BDYWxsRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwotICAgICAgICB2bS0+dG9wVk1F
bnRyeUZyYW1lID0gdm1FbnRyeUZyYW1lOworICAgICAgICB2bS0+dG9wRW50cnlGcmFtZSA9IEVu
dHJ5RnJhbWU7CiAgICAgICAgIHZtLT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgfQog
CiAgICAgQUxXQVlTX0lOTElORSB+TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUoKQog
ICAgIHsKLSAgICAgICAgbV92bS0+dG9wVk1FbnRyeUZyYW1lID0gbV9zYXZlZFRvcFZNRW50cnlG
cmFtZTsKKyAgICAgICAgbV92bS0+dG9wRW50cnlGcmFtZSA9IG1fc2F2ZWRUb3BFbnRyeUZyYW1l
OwogICAgICAgICBtX3ZtLT50b3BDYWxsRnJhbWUgPSBtX3NhdmVkVG9wQ2FsbEZyYW1lOwogICAg
IH0KIAogcHJpdmF0ZToKICAgICBWTSogbV92bTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fc2F2ZWRU
b3BWTUVudHJ5RnJhbWU7CisgICAgRW50cnlGcmFtZSogbV9zYXZlZFRvcEVudHJ5RnJhbWU7CiAg
ICAgQ2FsbEZyYW1lKiBtX3NhdmVkVG9wQ2FsbEZyYW1lOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggM2QwMTFhZC4u
NzQ1YTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCkBAIC02NTMsOSArNjUzLDkgQEAgcHVibGljOgogCiAgICAgICAgIG5vdGlm
eURlYnVnZ2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCi0gICAgICAgIGNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRvcik7CisgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3Ip
OwogCi0gICAgICAgIGJvb2wgc2hvdWxkU3RvcFVud2luZGluZyA9IHZpc2l0b3ItPmNhbGxlcklz
Vk1FbnRyeUZyYW1lKCk7CisgICAgICAgIGJvb2wgc2hvdWxkU3RvcFVud2luZGluZyA9IHZpc2l0
b3ItPmNhbGxlcklzRW50cnlGcmFtZSgpOwogICAgICAgICBpZiAoc2hvdWxkU3RvcFVud2luZGlu
ZykKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKQEAgLTY2Myw3ICs2
NjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihTdGFja1Zpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcihTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiAgICAgewogI2lmIEVOQUJMRShKSVQp
ICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCogY3VycmVudENhbGxlZVNhdmVzID0gdmlzaXRvci0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOwpAQCAtNjc2LDcgKzY3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIGludHB0cl90
KiBmcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3QqPihtX2NhbGxGcmFtZS0+cmVnaXN0
ZXJzKCkpOwogCiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjdXJyZW50Q2FsbGVl
U2F2ZXMtPnNpemUoKTsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJl
Y29yZChtX3ZtLnRvcFZNRW50cnlGcmFtZSk7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIHJlY29y
ZCA9IHZtRW50cnlSZWNvcmQobV92bS50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewogICAgICAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCBjdXJyZW50RW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmF0KGkpOwogICAg
ICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpA
QCAtNzAyLDcgKzcwMiw3IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6
OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVu
d2luZEZyb21DYWxsZXJGcmFtZSkgewotICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZU9yVk1FbnRyeUZyYW1lKCkgPT0gdm0udG9wVk1FbnRyeUZyYW1lKQorICAgICAgICBpZiAoY2Fs
bEZyYW1lLT5jYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpID09IHZtLnRvcEVudHJ5RnJhbWUpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IDg1ZDE0N2EuLmQwODJiNjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDQsMTggKzQ0LDE4IEBAIFN0YWNrVmlzaXRvcjo6U3RhY2tWaXNpdG9yKENh
bGxGcmFtZSogc3RhcnRGcmFtZSwgVk0qIHZtKQogICAgIENhbGxGcmFtZSogdG9wRnJhbWU7CiAg
ICAgaWYgKHN0YXJ0RnJhbWUpIHsKICAgICAgICAgQVNTRVJUKHZtKTsKLSAgICAgICAgbV9mcmFt
ZS5tX1ZNRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIG1fZnJhbWUu
bV9lbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgICAgIHRvcEZyYW1lID0gdm0t
PnRvcENhbGxGcmFtZTsKICAgICAgICAgCi0gICAgICAgIGlmICh0b3BGcmFtZSAmJiBzdGF0aWNf
Y2FzdDx2b2lkKj4obV9mcmFtZS5tX1ZNRW50cnlGcmFtZSkgPT0gc3RhdGljX2Nhc3Q8dm9pZCo+
KHRvcEZyYW1lKSkgewotICAgICAgICAgICAgdG9wRnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJh
bWUubV9WTUVudHJ5RnJhbWUpLT5tX3ByZXZUb3BDYWxsRnJhbWU7Ci0gICAgICAgICAgICBtX2Zy
YW1lLm1fVk1FbnRyeUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1l
KS0+bV9wcmV2VG9wVk1FbnRyeUZyYW1lOworICAgICAgICBpZiAodG9wRnJhbWUgJiYgc3RhdGlj
X2Nhc3Q8dm9pZCo+KG1fZnJhbWUubV9lbnRyeUZyYW1lKSA9PSBzdGF0aWNfY2FzdDx2b2lkKj4o
dG9wRnJhbWUpKSB7CisgICAgICAgICAgICB0b3BGcmFtZSA9IHZtRW50cnlSZWNvcmQobV9mcmFt
ZS5tX2VudHJ5RnJhbWUpLT5tX3ByZXZUb3BDYWxsRnJhbWU7CisgICAgICAgICAgICBtX2ZyYW1l
Lm1fZW50cnlGcmFtZSA9IHZtRW50cnlSZWNvcmQobV9mcmFtZS5tX2VudHJ5RnJhbWUpLT5tX3By
ZXZUb3BFbnRyeUZyYW1lOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9mcmFt
ZS5tX1ZNRW50cnlGcmFtZSA9IDA7CisgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gMDsK
ICAgICAgICAgdG9wRnJhbWUgPSAwOwogICAgIH0KLSAgICBtX2ZyYW1lLm1fY2FsbGVySXNWTUVu
dHJ5RnJhbWUgPSBmYWxzZTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVySXNFbnRyeUZyYW1lID0gZmFs
c2U7CiAgICAgcmVhZEZyYW1lKHRvcEZyYW1lKTsKIAogICAgIC8vIEZpbmQgdGhlIGZyYW1lIHRo
ZSBjYWxsZXIgd2FudHMgdG8gc3RhcnQgdW53aW5kaW5nIGZyb20uCkBAIC03NSwxNCArNzUsMTQg
QEAgdm9pZCBTdGFja1Zpc2l0b3I6OmdvdG9OZXh0RnJhbWUoKQogICAgICAgICAgICAgICAgIHJl
YWRJbmxpbmVkRnJhbWUobV9mcmFtZS5jYWxsRnJhbWUoKSwgJmlubGluZUNhbGxGcmFtZS0+ZGly
ZWN0Q2FsbGVyKTsKICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX2ZyYW1lLmlu
bGluZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9mcmFtZS5tX1ZN
RW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWU7CisgICAgICAgICAgICBt
X2ZyYW1lLm1fZW50cnlGcmFtZSA9IG1fZnJhbWUubV9jYWxsZXJFbnRyeUZyYW1lOwogICAgICAg
ICAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUoKSk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCBjYWxsZXJD
b2RlT3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKLSAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50
cnlGcmFtZTsKKyAgICBtX2ZyYW1lLm1fZW50cnlGcmFtZSA9IG1fZnJhbWUubV9jYWxsZXJFbnRy
eUZyYW1lOwogICAgIHJlYWRGcmFtZShtX2ZyYW1lLmNhbGxlckZyYW1lKCkpOwogfQogCkBAIC0x
NTIsOSArMTUyLDkgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmkKIHsKICAgICBtX2ZyYW1lLm1f
Y2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKLSAgICBt
X2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX1ZNRW50cnlGcmFtZTsKLSAg
ICBtX2ZyYW1lLm1fY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKG1fZnJhbWUu
bV9DYWxsZXJWTUVudHJ5RnJhbWUpOwotICAgIG1fZnJhbWUubV9jYWxsZXJJc1ZNRW50cnlGcmFt
ZSA9IG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWUgIT0gbV9mcmFtZS5tX1ZNRW50cnlGcmFt
ZTsKKyAgICBtX2ZyYW1lLm1fY2FsbGVyRW50cnlGcmFtZSA9IG1fZnJhbWUubV9lbnRyeUZyYW1l
OworICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUobV9m
cmFtZS5tX2NhbGxlckVudHJ5RnJhbWUpOworICAgIG1fZnJhbWUubV9jYWxsZXJJc0VudHJ5RnJh
bWUgPSBtX2ZyYW1lLm1fY2FsbGVyRW50cnlGcmFtZSAhPSBtX2ZyYW1lLm1fZW50cnlGcmFtZTsK
ICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSBmYWxzZTsKIAogICAgIENhbGxlZUJpdHMgY2Fs
bGVlID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIFN0YWNr
VmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgSW5kZW50ZXIgaW5kZW50LCBz
dGQ6OmZ1bmN0aW9uPAogCiAgICAgICAgICAgICBpbmRlbnQtLTsKICAgICAgICAgfQotICAgICAg
ICBvdXQucHJpbnQoaW5kZW50LCAidm1FbnRyeUZyYW1lOiAiLCBSYXdQb2ludGVyKHZtRW50cnlG
cmFtZSgpKSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChpbmRlbnQsICJFbnRyeUZyYW1lOiAi
LCBSYXdQb2ludGVyKG1fZW50cnlGcmFtZSksICJcbiIpOwogICAgICAgICBpbmRlbnQtLTsKICAg
ICB9CiAgICAgb3V0LnByaW50KGluZGVudCwgIn1cbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCmluZGV4IDhhZDA5NDAuLmUyYTEzNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBzaXplX3QgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7IH0KLSAgICAgICAgYm9vbCBjYWxsZXJJc1ZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGVySXNWTUVudHJ5RnJhbWU7IH0KKyAgICAgICAgYm9vbCBjYWxsZXJJc0VudHJ5
RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlcklzRW50cnlGcmFtZTsgfQogICAgICAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJGcmFtZTsgfQog
ICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9CiAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7
IH0KQEAgLTk3LDcgKzk3LDYgQEAgcHVibGljOgogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgICAgIENsb25lZEFyZ3VtZW50cyogY3Jl
YXRlQXJndW1lbnRzKCk7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9WTUVudHJ5RnJhbWU7IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxGcmFtZTsgfQogICAgICAgICAKICAgICAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiwgSW5kZW50ZXIgPSBJbmRlbnRlcigpKSBjb25zdDsKQEAgLTEx
NCw4ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogbV9pbmxpbmVD
YWxsRnJhbWU7CiAjZW5kaWYKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKLSAgICAg
ICAgVk1FbnRyeUZyYW1lKiBtX1ZNRW50cnlGcmFtZTsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiBt
X0NhbGxlclZNRW50cnlGcmFtZTsKKyAgICAgICAgRW50cnlGcmFtZSogbV9lbnRyeUZyYW1lOwor
ICAgICAgICBFbnRyeUZyYW1lKiBtX2NhbGxlckVudHJ5RnJhbWU7CiAgICAgICAgIENhbGxGcmFt
ZSogbV9jYWxsZXJGcmFtZTsKICAgICAgICAgQ2FsbGVlQml0cyBtX2NhbGxlZTsKICAgICAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKQEAgLTEyMyw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHNpemVfdCBtX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICB1bnNpZ25l
ZCBtX2J5dGVjb2RlT2Zmc2V0OwogICAgICAgICBXYXNtOjpJbmRleE9yTmFtZSBtX3dhc21GdW5j
dGlvbkluZGV4T3JOYW1lOwotICAgICAgICBib29sIG1fY2FsbGVySXNWTUVudHJ5RnJhbWUgOiAx
OworICAgICAgICBib29sIG1fY2FsbGVySXNFbnRyeUZyYW1lIDogMTsKICAgICAgICAgYm9vbCBt
X2lzV2FzbUZyYW1lIDogMTsKIAogICAgICAgICBmcmllbmQgY2xhc3MgU3RhY2tWaXNpdG9yOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1ZNRW50cnlSZWNv
cmQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgK
aW5kZXggZjM2YzJiZS4uMDEwM2E3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1ZNRW50cnlSZWNvcmQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXN0cnVjdCBWTUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIGNs
YXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIFZNOwogCkBAIC00MCw3ICs0MCw3IEBAIHN0cnVjdCBWTUVu
dHJ5UmVjb3JkIHsKICAgICAgKi8KICAgICBWTSogbV92bTsKICAgICBFeGVjU3RhdGUqIG1fcHJl
dlRvcENhbGxGcmFtZTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fcHJldlRvcFZNRW50cnlGcmFtZTsK
KyAgICBFbnRyeUZyYW1lKiBtX3ByZXZUb3BFbnRyeUZyYW1lOwogCiAjaWYgRU5BQkxFKEpJVCkg
JiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaW50cHRyX3QgY2Fs
bGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcltOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSU107
CkBAIC00OSwyMCArNDksMjAgQEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgIEV4ZWNTdGF0
ZSogcHJldlRvcENhbGxGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcENhbGxGcmFtZTsgfQogICAg
IFNVUFBSRVNTX0FTQU4gRXhlY1N0YXRlKiB1bnNhZmVQcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1
cm4gbV9wcmV2VG9wQ2FsbEZyYW1lOyB9CiAKLSAgICBWTUVudHJ5RnJhbWUqIHByZXZUb3BWTUVu
dHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BWTUVudHJ5RnJhbWU7IH0KLSAgICBTVVBQUkVT
U19BU0FOIFZNRW50cnlGcmFtZSogdW5zYWZlUHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJu
IG1fcHJldlRvcFZNRW50cnlGcmFtZTsgfQorICAgIEVudHJ5RnJhbWUqIHByZXZUb3BFbnRyeUZy
YW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wRW50cnlGcmFtZTsgfQorICAgIFNVUFBSRVNTX0FTQU4g
RW50cnlGcmFtZSogdW5zYWZlUHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BF
bnRyeUZyYW1lOyB9CiB9OwogCi1leHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNv
cmQoVk1FbnRyeUZyYW1lKik7CitleHRlcm4gIkMiIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNv
cmQoRW50cnlGcmFtZSopOwogCi1zdHJ1Y3QgVk1FbnRyeUZyYW1lIHsKK3N0cnVjdCBFbnRyeUZy
YW1lIHsKICNpZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICBzdGF0aWMgcHRyZGlmZl90IHZtRW50cnlSZWNvcmRPZmZzZXQoKQogICAgIHsK
LSAgICAgICAgVk1FbnRyeUZyYW1lKiBmYWtlVk1FbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2Fz
dDxWTUVudHJ5RnJhbWUqPigweDEwMDApOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQg
PSB2bUVudHJ5UmVjb3JkKGZha2VWTUVudHJ5RnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiBm
YWtlRW50cnlGcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RW50cnlGcmFtZSo+KDB4MTAwMCk7Cisg
ICAgICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZUVudHJ5RnJh
bWUpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKLSAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIq
PihmYWtlVk1FbnRyeUZyYW1lKSk7CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZWNvcmQpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFrZUVudHJ5RnJhbWUpKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZz
ZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmlu
ZGV4IGU3YWY3NzcuLmZmNzVlNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAKQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdFJhbmRvbVRodW5rKFZNJiB2bSwgR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRj
aDEsCiB9CiAjZW5kaWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0pCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NB
VkVTX1JFR0lTVEVSUyA+IDAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2
ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwpAQCAtNjA1LDggKzYw
NSw4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtCiAgICAgfQogICAgIEFTU0VSVChzY3JhdGNo
ICE9IEludmFsaWRHUFJSZWcpOwogCi0gICAgbG9hZFB0cigmdm0udG9wVk1FbnRyeUZyYW1lLCBz
Y3JhdGNoKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2
ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0cigmdG9wRW50
cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpj
YWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsKIAogICAgIC8vIFJl
c3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBleGNlcHQgZm9yIHRoZSBzY3JhdGNoLgogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKQEAgLTYyNyw3ICs2Mjcs
NyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bQogICAgIEFTU0VSVChzY3JhdGNoID09IGVudHJ5
LnJlZygpLmdwcigpKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgZW50cnkub2Zmc2V0
KCkpLCBzY3JhdGNoKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURf
UEFSQU0odG9wRW50cnlGcmFtZSk7CiAjZW5kaWYKIH0KIApAQCAtNzc4LDQxICs3NzgsNDEgQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oVk0mIHZtLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmUKIH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLXZv
aWQgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRzdCkKK3ZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJSZWcgZHN0KQogewogI2lm
IEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0
KCkpIHsKKyAgICBpZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgIGxv
YWRGcm9tVExTUHRyKGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RGX1dBU01fQ09OVEVYVF9LRVkpLCBk
c3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShXYXNtOjpQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLndhc21Db250ZXh0UG9pbnRlciwgZHN0KTsKKyAgICBtb3Zl
KFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50
ZXIsIGRzdCk7CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0KEdQ
UlJlZyBzcmMpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNl
KEdQUlJlZyBzcmMpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6
dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0
VExTKCkpIHsKICAgICAgICAgc3RvcmVUb1RMU1B0cihzcmMsIGZhc3RUTFNPZmZzZXRGb3JLZXko
V1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgot
ICAgIG1vdmUoc3JjLCBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLndhc21Db250ZXh0
UG9pbnRlcik7CisgICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCku
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwogfQogCi1ib29sIEFzc2VtYmx5SGVscGVyczo6
bG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCitib29sIEFzc2VtYmx5
SGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVy
KCkKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExT
Rm9yQ29udGV4dCgpKQorICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAg
ICAgIHJldHVybiBsb2FkRnJvbVRMU1B0ck5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNl
bmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3Jl
V2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxw
ZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkK
IHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9y
Q29udGV4dCgpKQorICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAg
IHJldHVybiBzdG9yZVRvVExTUHRyTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlm
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODc1LDEwICs4NzUsMTAgQEAgdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmRlYnVnQ2FsbChWTSYgdm0sIFZfRGVidWdPcGVyYXRpb25fRVBQIGZ1bmN0aW9uLCB2
b2lkKiBhcmcKICAgICB9CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNC
dWZmZXIpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKIHsKICNpZiBO
VU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgY2Fs
bGVlU2F2ZXNCdWZmZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgY2FsbGVlU2F2ZXNCdWZmZXIpOwogCiAg
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxl
ZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVy
cyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggZTFlNGE1Yi4uZTUzMjVmOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0zNjAsMjggKzM2MCwy
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKEdQUlJlZyB2bUdQUikKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyh2bUdQUiwgVk06OnRv
cFZNRW50cnlGcmFtZU9mZnNldCgpKSwgdm1HUFIpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNU
b1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh2bUdQUik7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyh2bUdQUiwgVk06OnRvcEVudHJ5RnJhbWVPZmZzZXQoKSksIHZtR1BSKTsKKyAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZt
R1BSKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh2bUdQUik7CiAjZW5kaWYKICAgICB9
CiAKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoVk0mIHZtLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQorICAgIHZvaWQgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5
RnJhbWUsIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1c2VkUmVn
aXN0ZXJzLmdldEZyZWVHUFIoMCk7Ci0gICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFt
ZSwgdGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRl
bXAxKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXJJbXBsKHRlbXAxKTsKICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgICAg
IFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHVzZWRS
ZWdpc3RlcnMpOwogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mKTsKKyAgICB2b2lkIHJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomKTsK
IAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQor
ICAgIHZvaWQgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lLCBjb25zdCBUZW1wUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSB9KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDAp
OwpAQCAtMzkyLDggKzM5Miw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygp
KTsKIAogICAgICAgICAvLyBDb3B5IHNhdmVkIGNhbGxlZVNhdmVzIG9uIHN0YWNrIG9yIHVuc2F2
ZWQgY2FsbGVlU2F2ZXMgaW4gcmVnaXN0ZXIgdG8gdm0gY2FsbGVlU2F2ZSBidWZmZXIKLSAgICAg
ICAgbG9hZFB0cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0
KCkpLCB0ZW1wMSk7CisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKKyAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
QnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7CiAKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
ICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9IGNvZGVC
bG9jaygpLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC00MDEsMTIgKzQwMSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6
ZSgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBp
KyspIHsKLSAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgdm1FbnRyeSA9IGFsbENhbGxlZVNh
dmVzLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQodm1FbnRy
eS5yZWcoKSkpCisgICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVl
U2F2ZXMtPmF0KGkpOworICAgICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRy
eS5yZWcoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0KiBjdXJyZW50RnJhbWVFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+ZmluZCh2
bUVudHJ5LnJlZygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGN1cnJlbnRGcmFt
ZUVudHJ5ID0gY3VycmVudENhbGxlZVNhdmVzLT5maW5kKGVudHJ5LnJlZygpKTsKIAotICAgICAg
ICAgICAgaWYgKHZtRW50cnkucmVnKCkuaXNHUFIoKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5
LnJlZygpLmlzR1BSKCkpIHsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVnVG9TdG9yZTsKICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gTG9hZCBjYWxsZWVTYXZlIGZyb20gc3RhY2sgaW50byB0ZW1wIHJlZ2lzdGVyCkBAIC00
MTQsOSArNDE0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRGcmFtZUVudHJ5LT5vZmZzZXQoKSksIHJl
Z1RvU3RvcmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAv
LyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIHJl
Z1RvU3RvcmUgPSB2bUVudHJ5LnJlZygpLmdwcigpOworICAgICAgICAgICAgICAgICAgICByZWdU
b1N0b3JlID0gZW50cnkucmVnKCkuZ3ByKCk7CiAKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihy
ZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgICAg
ICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0ZW1wMSwgZW50cnkub2Zmc2V0KCkp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwUmVnVG9T
dG9yZTsKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lRW50cnkpIHsKQEAgLTQyNSwx
MyArNDI1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbG9hZERvdWJsZShBZGRy
ZXNzKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50RnJhbWVFbnRyeS0+b2Zmc2V0KCkpLCBm
cFJlZ1RvU3RvcmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICAvLyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAg
IGZwUmVnVG9TdG9yZSA9IHZtRW50cnkucmVnKCkuZnByKCk7CisgICAgICAgICAgICAgICAgICAg
IGZwUmVnVG9TdG9yZSA9IGVudHJ5LnJlZygpLmZwcigpOwogCi0gICAgICAgICAgICAgICAgc3Rv
cmVEb3VibGUoZnBSZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAxLCB2bUVudHJ5Lm9mZnNldCgpKSk7
CisgICAgICAgICAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUb1N0b3JlLCBBZGRyZXNzKHRlbXAx
LCBlbnRyeS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQotICAg
ICAgICBVTlVTRURfUEFSQU0odm0pOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFt
ZSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKICNlbmRpZgogICAgIH0K
QEAgLTE2NDYsMTQgKzE2NDYsMTQgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCi0gICAgdm9pZCBsb2FkV2FzbUNvbnRleHQoR1BSUmVnIGRzdCk7Ci0gICAgdm9p
ZCBzdG9yZVdhc21Db250ZXh0KEdQUlJlZyBzcmMpOwotICAgIHN0YXRpYyBib29sIGxvYWRXYXNt
Q29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdG9y
ZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOworICAgIHZvaWQgbG9hZFdh
c21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIGRzdCk7CisgICAgdm9pZCBzdG9yZVdhc21Db250ZXh0
SW5zdGFuY2UoR1BSUmVnIHNyYyk7CisgICAgc3RhdGljIGJvb2wgbG9hZFdhc21Db250ZXh0SW5z
dGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgc3RhdGljIGJvb2wgc3RvcmVX
YXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAK
IHByb3RlY3RlZDoKLSAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxl
ZVNhdmVzQnVmZmVyKTsKIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJs
b2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IDRhNGJiOGQuLjZhZjQ1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTExMSw3
ICsxMTEsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9u
czo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJU
KCFtX2J5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBjb3B5Q2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGlt
aXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRl
c3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKQEAgLTg4OSw3ICs4ODksNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgaWYgKCFtX2V4Y2VwdGlv
bkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRv
cEVudHJ5RnJhbWUpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2Fs
bGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRo
ZSBDYWxsRnJhbWUqKS4KIApAQCAtOTA5LDcgKzkwOSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICAgICAgbV9leGNlcHRpb25IYW5kbGVyID0gbGFi
ZWwoKTsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3MubGluayh0aGlzKTsKIAotICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+
dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBw
YXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSop
LgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAppbmRleCBj
YTJkYjhjLi5mMjAxOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Niw4ICs1Niw4IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChWTSog
dm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKICAgICAK
ICAgICBFeGVjU3RhdGUqIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZTsKICAgICBp
ZiAodW53aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIFZNRW50
cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICAgICAg
c2hhZG93Q2hpY2tlblRvcEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BWTUVudHJ5
RnJhbWUpOworICAgICAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5
RnJhbWU7CisgICAgICAgIHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgfQogICAgIHZtLT5zaGFkb3dDaGlja2VuKCkubG9n
KCp2bSwgc2hhZG93Q2hpY2tlblRvcEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93
UGFja2V0KCkpOwogICAgIApAQCAtODQsNyArODQsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0q
IHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAg
fSBlbHNlCiAgICAgICAgIGNhdGNoUm91dGluZSA9IExMSW50OjpnZXRDb2RlUHRyKGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uKTsKICAgICAKLSAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oY2FsbEZyYW1lKSA8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BWTUVudHJ5RnJh
bWUpKTsKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbEZyYW1lKSA8IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZtLT50b3BFbnRyeUZyYW1lKSk7CiAKICAgICB2bS0+Y2Fs
bEZyYW1lRm9yQ2F0Y2ggPSBjYWxsRnJhbWU7CiAgICAgdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRo
cm93ID0gY2F0Y2hSb3V0aW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKaW5kZXggNWYzMWU2Ny4uZDQ1NGVmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCkBAIC00NjAsNyArNDYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFTU0VSVChyZWdUMCA9PSBy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QwKTsKICAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KnZtKCkpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92
bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC05NTcsNyArOTU3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGkKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1l
T3JSZWdpc3RlclRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAg
ICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgICAgIEp1bXAgbm9PcHRp
bWl6ZWRFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IDUwOWE5ODUu
LmIyZjYwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTc3MCw3ICs3NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJu
VmFsdWVHUFIpOwotICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKCkpOworICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0oKSk7CkBAIC04MzEsNyArODMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RvX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2UKIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5z
IHRoZSBjYWxsRnJhbWUgZm9yIHRoZSBoYW5kbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggNDhjYjZlZC4uMDY1NTAwNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xMDMsMTQgKzEwMywxNCBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IoRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqCiAgICAgVk0qIHZtID0gY29kZUJsb2NrLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5
RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50
cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICBpZiAoIWNh
bGxlckZyYW1lKSB7CiAgICAgICAgIGNhbGxlckZyYW1lID0gZXhlYzsKLSAgICAgICAgdm1FbnRy
eUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKKyAgICAgICAgZW50cnlGcmFtZSA9IHZtLT50
b3BFbnRyeUZyYW1lOwogICAgIH0KIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0
b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFt
ZSk7CiAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVyRnJhbWUsIHNjb3BlKTsKIH0K
IApAQCAtMTIwLDEwICsxMjAsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93
RGl2aWRlRXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5
RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50
cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxs
ZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZt
LCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9y
U2NvcGUoKnZtKTsKICAgICB0aHJvd0V4Y2VwdGlvbihjYWxsZXJGcmFtZSwgc2NvcGUsIGNyZWF0
ZUVycm9yKGNhbGxlckZyYW1lLCBBU0NJSUxpdGVyYWwoIkRpdmlzaW9uIGJ5IHplcm8gb3IgZGl2
aXNpb24gb3ZlcmZsb3cuIikpKTsKIH0KQEAgLTEzMywxMCArMTMzLDEwIEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25UaHJvd091dE9mQm91bmRzQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBl
eGVjKQogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZt
LT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNh
bGxlckZyYW1lKHZtRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZt
LT50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxs
ZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0
b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCBlbnRyeUZyYW1lLCBjYWxsZXJGcmFt
ZSk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoKnZtKTsKICAgICB0aHJvd0V4
Y2VwdGlvbihjYWxsZXJGcmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxlckZyYW1lLCBBU0NJ
SUxpdGVyYWwoIk91dC1vZi1ib3VuZHMgYWNjZXNzLiIpKSk7CiB9CkBAIC0xNDksOSArMTQ5LDkg
QEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKEV4ZWNTdGF0
ZSogZXhlYykKIAogICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhz
Ojphcml0eUNoZWNrRm9yKGV4ZWMsICp2bSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChtaXNzaW5n
QXJnQ291bnQgPCAwKSB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0t
PnRvcFZNRW50cnlGcmFtZTsKLSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMt
PmNhbGxlckZyYW1lKHZtRW50cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
cldpdGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAg
ICAgIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAg
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwor
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5
RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2Fs
bGVyRnJhbWUsIHNjb3BlKTsKICAgICB9CiAKQEAgLTE2NSw5ICsxNjUsOSBAQCBpbnQzMl90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4ZWMp
CiAKICAgICBpbnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlD
aGVja0ZvcihleGVjLCAqdm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgIGlmIChtaXNzaW5nQXJn
Q291bnQgPCAwKSB7Ci0gICAgICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRv
cFZNRW50cnlGcmFtZTsKLSAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNh
bGxlckZyYW1lKHZtRW50cnlGcmFtZSk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldp
dGhSZXN0b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7CisgICAgICAg
IEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgQ2Fs
bEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOworICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJh
bWUsIGNhbGxlckZyYW1lKTsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbGVy
RnJhbWUsIHNjb3BlKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAppbmRleCBmYjg3ZTAwLi5mMWRkZTc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC02Niw3ICs2Niw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IoVk0qIHZtKQogICAgIC8vIGV2ZW4gdGhvdWdoIHdlIHdvbid0IHVzZSBpdC4KICAgICBqaXQu
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7CiAKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigqdm0pOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBqaXQuc2V0dXBBcmd1bWVu
dHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7CkBAIC0zNjMsNyArMzYzLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVGb3JHZW5lcmF0b3IoVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGsKICAgICAvLyBI
YW5kbGUgYW4gZXhjZXB0aW9uCiAgICAgZXhjZXB0aW9uSGFuZGxlci5saW5rKCZqaXQpOwogCi0g
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZt
KTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0tPnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKIAogI2lmIENQVShYODYpICYmIFVT
RShKU1ZBTFVFMzJfNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGQzZWUyOGQuLjY1ODFmOTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0yMDQ3LDggKzIwNDcsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGRFcnIoRXhlY1N0YXRlKiBleGVjKSB7IHJl
dHVybiBwcmludAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBDYWxs
RnJhbWUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
Vk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSB2bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAg
RXhlY1N0YXRlKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFt
ZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IHZtLnRvcEVudHJ5RnJhbWU7Cisg
ICAgRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJh
bWUpOwogICAgIGlmIChjYWxsZXJGcmFtZSkKICAgICAgICAgdm0uaW50ZXJwcmV0ZXItPmR1bXBD
YWxsRnJhbWUoY2FsbGVyRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAppbmRleCA1NGNlYTMyLi44YTBlMWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTQ4MSwxMyArNDgxLDEzIEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHN0YWNrX2NoZWNrKQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBWTUVudHJ5
RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICBFbnRy
eUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgaWYg
KCFjYWxsZXJGcmFtZSkgewogICAgICAgICBjYWxsZXJGcmFtZSA9IGV4ZWM7Ci0gICAgICAgIHZt
RW50cnlGcmFtZSA9IHZtLnRvcFZNRW50cnlGcmFtZTsKKyAgICAgICAgdG9wRW50cnlGcmFtZSA9
IHZtLnRvcEVudHJ5RnJhbWU7CiAgICAgfQotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhS
ZXN0b3JlIHRyYWNlcigmdm0sIHZtRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcigmdm0sIHRvcEVudHJ5RnJhbWUsIGNh
bGxlckZyYW1lKTsKIAogICAgIExMSU5UX1NFVF9QQ19GT1JfU1RVQlMoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKaW5kZXggMzZmNjQ4Ni4uNTI5Njdl
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTE2LDcgKzExNiw3IEBAIEVuY29kZWRKU1ZhbHVlIHZtRW50cnlUb05hdGl2ZSh2b2lk
KiBleGVjdXRhYmxlQWRkcmVzcywgVk0qIHZtLCBQcm90b0NhbGxGcmFtZSoKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLWV4dGVybiAiQyIgVk1FbnRyeVJlY29yZCog
dm1FbnRyeVJlY29yZChWTUVudHJ5RnJhbWUqIGVudHJ5RnJhbWUpCitleHRlcm4gIkMiIFZNRW50
cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoRW50cnlGcmFtZSogZW50cnlGcmFtZSkKIHsKICAgICAv
LyBUaGUgQyBMb29wIGRvZXNuJ3QgaGF2ZSBhbnkgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLCBzbyB0
aGUgVk1FbnRyeVJlY29yZCBpcyBhbGxvY2F0ZWQgYXQgdGhlIGJhc2Ugb2YgdGhlIGZyYW1lLgog
ICAgIGludHB0cl90IHN0YWNrQWxpZ25tZW50ID0gc3RhY2tBbGlnbm1lbnRCeXRlcygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CmluZGV4IGFiODg4ZDMuLjVkYWQxMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTY1OSw3ICs2NTksNyBAQCBlbmQK
IAogbWFjcm8gY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSwgdGVtcCkKICAgICBpZiBBUk02NCBvciBYODZfNjQgb3IgWDg2XzY0X1dJTgotICAgICAgICBs
b2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwgdGVtcAorICAgICAgICBsb2FkcCBWTTo6dG9w
RW50cnlGcmFtZVt2bV0sIHRlbXAKICAgICAgICAgdm1FbnRyeVJlY29yZCh0ZW1wLCB0ZW1wKQog
ICAgICAgICBsZWFwIFZNRW50cnlSZWNvcmQ6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJbdGVt
cF0sIHRlbXAKICAgICAgICAgaWYgQVJNNjQKQEAgLTcwMSw3ICs3MDEsNyBAQCBlbmQKIAogbWFj
cm8gcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
LCB0ZW1wKQogICAgIGlmIEFSTTY0IG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCi0gICAgICAgIGxv
YWRwIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dLCB0ZW1wCisgICAgICAgIGxvYWRwIFZNOjp0b3BF
bnRyeUZyYW1lW3ZtXSwgdGVtcAogICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAsIHRlbXApCiAg
ICAgICAgIGxlYXAgVk1FbnRyeVJlY29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlclt0ZW1w
XSwgdGVtcAogICAgICAgICBpZiBBUk02NApAQCAtMTE0NCw3ICsxMTQ0LDcgQEAgaWYgbm90IENf
TE9PUAogICAgICAgICBzdG9yZXAgYWRkcmVzcywgVk06Om1fbGFzdFN0YWNrVG9wW3ZtXQogICAg
ICAgICByZXQKICAgICAKLSAgICAjIFZNRW50cnlSZWNvcmQqIHZtRW50cnlSZWNvcmQoY29uc3Qg
Vk1FbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQorICAgICMgVk1FbnRyeVJlY29yZCogdm1FbnRyeVJl
Y29yZChjb25zdCBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lKQogICAgIGdsb2JhbCBfdm1FbnRyeVJl
Y29yZAogICAgIF92bUVudHJ5UmVjb3JkOgogICAgICAgICBpZiBYODYgb3IgWDg2X1dJTgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQppbmRleCA0YTQ3NTgyLi4wZTcxMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAt
MTI1LDggKzEyNSw4IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBzdG9yZXAgdm0s
IFZNRW50cnlSZWNvcmQ6Om1fdm1bc3BdCiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2bV0s
IHQ0CiAgICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3Bd
Ci0gICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBW
TUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdCisgICAgbG9hZHAgVk06OnRv
cEVudHJ5RnJhbWVbdm1dLCB0NAorICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2
VG9wRW50cnlGcmFtZVtzcF0KIAogICAgICMgQWxpZ24gc3RhY2sgcG9pbnRlcgogICAgIGlmIFg4
Nl9XSU4gb3IgTUlQUwpAQCAtMTg5LDggKzE4OSw4IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2Fs
bCkKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ZtW3NwXSwgdDUKICAgICBsb2FkcCBWTUVu
dHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3BdLCB0NAogICAgIHN0b3JlcCB0NCwgVk06
OnRvcENhbGxGcmFtZVt0NV0KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVu
dHJ5RnJhbWVbc3BdLCB0NAotICAgIHN0b3JlcCB0NCwgVk06OnRvcFZNRW50cnlGcmFtZVt0NV0K
KyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3NwXSwgdDQKKyAg
ICBzdG9yZXAgdDQsIFZNOjp0b3BFbnRyeUZyYW1lW3Q1XQogCiAgICAgaWYgQVJNdjcKICAgICAg
ICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHQ1CkBAIC0yNDEsNyArMjQxLDcg
QEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogCiAuY29weUFyZ3NEb25lOgogICAgIHN0b3Jl
cCBzcCwgVk06OnRvcENhbGxGcmFtZVt2bV0KLSAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wVk1FbnRy
eUZyYW1lW3ZtXQorICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXQogCiAgICAg
bWFrZUNhbGwoZW50cnksIHQzLCB0NCkKIApAQCAtMjU1LDggKzI1NSw4IEBAIG1hY3JvIGRvVk1F
bnRyeShtYWtlQ2FsbCkKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ZtW3NwXSwgdDUKICAg
ICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3BdLCB0NAogICAgIHN0
b3JlcCB0NCwgVk06OnRvcENhbGxGcmFtZVt0NV0KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjpt
X3ByZXZUb3BWTUVudHJ5RnJhbWVbc3BdLCB0NAotICAgIHN0b3JlcCB0NCwgVk06OnRvcFZNRW50
cnlGcmFtZVt0NV0KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1l
W3NwXSwgdDQKKyAgICBzdG9yZXAgdDQsIFZNOjp0b3BFbnRyeUZyYW1lW3Q1XQogCiAgICAgaWYg
QVJNdjcKICAgICAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHQ1CkBAIC0z
MjQsOCArMzI0LDggQEAgX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIFZNRW50
cnlSZWNvcmQ6Om1fdm1bc3BdLCB0MwogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRv
cENhbGxGcmFtZVtzcF0sIHQ1CiAgICAgc3RvcmVwIHQ1LCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQot
ICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0sIHQ1Ci0g
ICAgc3RvcmVwIHQ1LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3QzXQorICAgIGxvYWRwIFZNRW50cnlS
ZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NQorICAgIHN0b3JlcCB0NSwgVk06OnRv
cEVudHJ5RnJhbWVbdDNdCiAKICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNmciwgQ2FsbGVl
UmVnaXN0ZXJTYXZlU2l6ZSwgdDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggODVjNzdkMi4uOTc3MTQwOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KQEAgLTEyOSw4ICsxMjksOCBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAg
ICAgc3RvcmVwIHZtLCBWTUVudHJ5UmVjb3JkOjptX3ZtW3NwXQogICAgIGxvYWRwIFZNOjp0b3BD
YWxsRnJhbWVbdm1dLCB0NAogICAgIHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9w
Q2FsbEZyYW1lW3NwXQotICAgIGxvYWRwIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dLCB0NAotICAg
IHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3NwXQorICAg
IGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwgdDQKKyAgICBzdG9yZXAgdDQsIFZNRW50cnlS
ZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdCiAKICAgICBsb2FkaSBQcm90b0NhbGxGcmFt
ZTo6cGFkZGVkQXJnQ291bnRbcHJvdG9DYWxsRnJhbWVdLCB0NAogICAgIGFkZHAgQ2FsbEZyYW1l
SGVhZGVyU2xvdHMsIHQ0LCB0NApAQCAtMTcxLDggKzE3MSw4IEBAIG1hY3JvIGRvVk1FbnRyeSht
YWtlQ2FsbCkKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ZtW3Q0XSwgdm0KICAgICBsb2Fk
cCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbdDRdLCBleHRyYVRlbXBSZWcKICAg
ICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQotICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0NF0sIGV4dHJhVGVtcFJlZwotICAg
IHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAgbG9hZHAg
Vk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0NF0sIGV4dHJhVGVtcFJlZworICAg
IHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXQogCiAgICAgc3VicCBj
ZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHNwCiAKQEAgLTIyMCw3ICsyMjAsNyBAQCBtYWNy
byBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgZWxzZQogICAgICAgICBzdG9yZXAgc3AsIFZNOjp0
b3BDYWxsRnJhbWVbdm1dCiAgICAgZW5kCi0gICAgc3RvcmVwIGNmciwgVk06OnRvcFZNRW50cnlG
cmFtZVt2bV0KKyAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wRW50cnlGcmFtZVt2bV0KIAogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KGV4dHJhVGVtcFJlZywgMHhiYWQwZGMwMikKIApAQCAt
MjM2LDggKzIzNiw4IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBsb2FkcCBWTUVu
dHJ5UmVjb3JkOjptX3ZtW3Q0XSwgdm0KICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZU
b3BDYWxsRnJhbWVbdDRdLCB0MgogICAgIHN0b3JlcCB0MiwgVk06OnRvcENhbGxGcmFtZVt2bV0K
LSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BWTUVudHJ5RnJhbWVbdDRdLCB0Mgot
ICAgIHN0b3JlcCB0MiwgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0KKyAgICBsb2FkcCBWTUVudHJ5
UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3Q0XSwgdDIKKyAgICBzdG9yZXAgdDIsIFZNOjp0
b3BFbnRyeUZyYW1lW3ZtXQogCiAgICAgc3VicCBjZnIsIENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUs
IHNwCiAKQEAgLTI3Niw3ICsyNzYsNiBAQCBtYWNybyBtYWtlSG9zdEZ1bmN0aW9uQ2FsbChlbnRy
eSwgdGVtcCkKICAgICBlbmQKIGVuZAogCi0KIF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAg
ICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKQEAg
LTI5MSw4ICsyOTAsOCBAQCBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV92bVt0Ml0sIHQzCiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2
VG9wQ2FsbEZyYW1lW3QyXSwgZXh0cmFUZW1wUmVnCiAgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywg
Vk06OnRvcENhbGxGcmFtZVt0M10KLSAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BW
TUVudHJ5RnJhbWVbdDJdLCBleHRyYVRlbXBSZWcKLSAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBW
TTo6dG9wVk1FbnRyeUZyYW1lW3QzXQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRv
cEVudHJ5RnJhbWVbdDJdLCBleHRyYVRlbXBSZWcKKyAgICBzdG9yZXAgZXh0cmFUZW1wUmVnLCBW
TTo6dG9wRW50cnlGcmFtZVt0M10KIAogICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVT
aXplLCBzcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBh
MzdlMjQ2Li44YmRmMGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKQEAgLTE0NCw2ICsxNDQsNyBAQCB2b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAg
IG1fdm0tPnNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeShwKTsKIAogICAgIG1fdm0tPnNldExhc3RT
dGFja1RvcCh0aHJlYWQuc2F2ZWRMYXN0U3RhY2tUb3AoKSk7CisgICAgQVNTRVJUKHRocmVhZC5z
dGFjaygpLmNvbnRhaW5zKG1fdm0tPmxhc3RTdGFja1RvcCgpKSk7CiAKICAgICBtX3ZtLT5oZWFw
Lm1hY2hpbmVUaHJlYWRzKCkuYWRkQ3VycmVudFRocmVhZCgpOwogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYjBi
Njk0Mi4uYWU5NzdiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAKQEAgLTQwNiw3ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRp
b25zKCkKICAgICAgICAgT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSA9IGZhbHNlOwogCiAgICAg
aWYgKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseSgpKQotICAgICAgICBPcHRpb25zOjp1c2VXZWJB
c3NlbWJseUZhc3RUTFMoKSA9IGZhbHNlOworICAgICAgICBPcHRpb25zOjp1c2VGYXN0VExTRm9y
V2FzbUNvbnRleHQoKSA9IGZhbHNlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGVjNDg0NTUuLjVkOTRhMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQ2OCw4ICs0NjgsNyBA
QCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJB
c3NlbWJseUZhc3RNZW1vcnlSZWR6b25lUGFnZXMsIDEyOCwgTm9ybWFsLCAiV2ViQXNzZW1ibHkg
ZmFzdCBtZW1vcmllcyB1c2UgNEdpQiB2aXJ0dWFsIGFsbG9jYXRpb25zLCBwbHVzIGEgcmVkem9u
ZSAoY291bnRlZCBhcyBtdWx0aXBsZSBvZiA2NEtpQiBXZWJBc3NlbWJseSBwYWdlcykgYXQgdGhl
IGVuZCB0byBjYXRjaCByZWcraW1tIGFjY2Vzc2VzIHdoaWNoIGV4Y2VlZCAzMi1iaXQsIGFueXRo
aW5nIGJleW9uZCB0aGUgcmVkem9uZSBpcyBleHBsaWNpdGx5IGJvdW5kcy1jaGVja2VkIikgXAog
ICAgIHYoYm9vbCwgY3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3Jt
YWwsICJJZiB0cnVlLCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9y
eSBmb3Igd2FzbS4iKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4TnVtV2ViQXNzZW1ibHlGYXN0TWVt
b3JpZXMsIDQsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlV2ViQXNzZW1ibHlG
YXN0VExTLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHRyeSB0byB1c2UgZmFzdCB0
aHJlYWQtbG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0u
IikgXAotICAgIHYoYm9vbCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWws
ICJJZiB0cnVlIChhbmQgZmFzdCBUTFMgaXMgZW5hYmxlZCksIHdlIHdpbGwgc3RvcmUgY29udGV4
dCBpbiBmYXN0IFRMUy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikg
XAorICAgIHYoYm9vbCwgdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJ
ZiB0cnVlLCB3ZSB3aWxsIHN0b3JlIGNvbnRleHQgaW4gZmFzdCBUTFMuIElmIGZhbHNlLCB3ZSB3
aWxsIHBpbiBpdCB0byBhIHJlZ2lzdGVyLiIpIFwKICAgICB2KGJvb2wsIHVzZUNhbGxJQ3NGb3JX
ZWJBc3NlbWJseVRvSlNDYWxscywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2Ug
Q2FsbExpbmtJbmZvIHRvIGlubGluZSBjYWNoZSBXYXNtIHRvIEpTIGNhbGxzLiIpIFwKICAgICB2
KGJvb2wsIHVzZU9iamVjdFJlc3RTcHJlYWQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdp
bGwgZW5hYmxlIE9iamVjdCBSZXN0L1NwcmVhZCBmZWF0dXJlLiIpIFwKICAgICB2KGJvb2wsIHVz
ZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2ls
bCB1c2Ugb3VyIG5vcm1hbCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGluZy4gSWYgZmFsc2UsIHRo
ZSBhbGxvY2F0aW9uIHByb2ZpbGUgd2lsbCBhbHdheXMgY2xhaW0gdG8gYmUgdW5kZWNpZGVkLiIp
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAppbmRleCBhNGJlOTViLi4zYmNmNmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJs
aWM6CiAgICAgRnJhbWVXYWxrZXIoVk0mIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGNvZGVCbG9ja1NldExvY2tlciwgY29uc3QgQWJzdHJhY3RMb2NrZXIm
IG1hY2hpbmVUaHJlYWRzTG9ja2VyKQogICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9j
YWxsRnJhbWUoY2FsbEZyYW1lKQotICAgICAgICAsIG1fdm1FbnRyeUZyYW1lKHZtLnRvcFZNRW50
cnlGcmFtZSkKKyAgICAgICAgLCBtX2VudHJ5RnJhbWUodm0udG9wRW50cnlGcmFtZSkKICAgICAg
ICAgLCBtX2NvZGVCbG9ja1NldExvY2tlcihjb2RlQmxvY2tTZXRMb2NrZXIpCiAgICAgICAgICwg
bV9tYWNoaW5lVGhyZWFkc0xvY2tlcihtYWNoaW5lVGhyZWFkc0xvY2tlcikKICAgICB7CkBAIC0x
MzAsNyArMTMwLDcgQEAgcHJvdGVjdGVkOgogICAgIFNVUFBSRVNTX0FTQU4KICAgICB2b2lkIGFk
dmFuY2VUb1BhcmVudEZyYW1lKCkKICAgICB7Ci0gICAgICAgIG1fY2FsbEZyYW1lID0gbV9jYWxs
RnJhbWUtPnVuc2FmZUNhbGxlckZyYW1lKG1fdm1FbnRyeUZyYW1lKTsKKyAgICAgICAgbV9jYWxs
RnJhbWUgPSBtX2NhbGxGcmFtZS0+dW5zYWZlQ2FsbGVyRnJhbWUobV9lbnRyeUZyYW1lKTsKICAg
ICB9CiAKICAgICBib29sIGlzQXRUb3AoKSBjb25zdApAQCAtMTg4LDcgKzE4OCw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIFZNJiBtX3ZtOwogICAgIEV4ZWNTdGF0ZSogbV9jYWxsRnJhbWU7Ci0gICAg
Vk1FbnRyeUZyYW1lKiBtX3ZtRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBtX2VudHJ5RnJh
bWU7CiAgICAgY29uc3QgQWJzdHJhY3RMb2NrZXImIG1fY29kZUJsb2NrU2V0TG9ja2VyOwogICAg
IGNvbnN0IEFic3RyYWN0TG9ja2VyJiBtX21hY2hpbmVUaHJlYWRzTG9ja2VyOwogICAgIGJvb2wg
bV9iYWlsaW5nT3V0IHsgZmFsc2UgfTsKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIFNhbXBsaW5n
UHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKQogICAgICAgICAgICAgICAg
IC8vIFdlIHJldXNlIExMSW50IENvZGVCbG9ja3MgZm9yIHRoZSBiYXNlbGluZSBKSVQsIHNvIHdl
IG5lZWQgdG8gY2hlY2sgZm9yIGJvdGggaml0IHR5cGVzLgogICAgICAgICAgICAgICAgIC8vIFRo
aXMgbWlnaHQgYWxzbyBiZSBmYWxzZSBmb3IgdmFyaW91cyByZWFzb25zIChrbm93biBhbmQgdW5r
bm93biksIGV2ZW4gdGhvdWdoCiAgICAgICAgICAgICAgICAgLy8gaXQncyBzdXBlciB1bmxpa2Vs
eS4gT25lIHJlYXNvbiB0aGF0IHRoaXMgY2FuIGJlIGZhbHNlIGlzIHdoZW4gd2UgdGhyb3cgZnJv
bSBhIERGRyBmcmFtZSwKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2UgZW5kIHVwIGhhdmluZyB0
byB1bndpbmQgcGFzdCBhIFZNRW50cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAgZXhlY3V0aW5nCisg
ICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZpbmcgdG8gdW53aW5kIHBhc3QgYW4g
RW50cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAgZXhlY3V0aW5nCiAgICAgICAgICAgICAgICAgLy8g
aW5zaWRlIHRoZSBMTEludCdzIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uLiBTbyB3ZSBqdXN0IHBy
b3RlY3QgYWdhaW5zdCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gYnkgaWdub3JpbmcgaXQuCiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwCmluZGV4IDA2ZTkzMDMuLjRjNjVkNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDEz
ICs1NywxMyBAQCBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiAKICAgICBib29sIHdpbGxCZUhh
bmRsZUJ5TExJbnRPckpJVCA9IGZhbHNlOwogICAgIHZvaWQqIHByZXZpb3VzU2NvcGUgPSBtX3By
ZXZpb3VzU2NvcGU7Ci0gICAgdm9pZCogdG9wVk1FbnRyeUZyYW1lID0gbV92bS50b3BWTUVudHJ5
RnJhbWU7CisgICAgdm9pZCogdG9wRW50cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKIAot
ICAgIC8vIElmIHRoZSB0b3BWTUVudHJ5RnJhbWUgd2FzIHB1c2hlZCBvbiB0aGUgc3RhY2sgYWZ0
ZXIgdGhlIHByZXZpb3VzU2NvcGUgd2FzIGluc3RhbnRpYXRlZCwKKyAgICAvLyBJZiB0aGUgdG9w
RW50cnlGcmFtZSB3YXMgcHVzaGVkIG9uIHRoZSBzdGFjayBhZnRlciB0aGUgcHJldmlvdXNTY29w
ZSB3YXMgaW5zdGFudGlhdGVkLAogICAgIC8vIHRoZW4gdGhpcyB0aHJvd1Njb3BlIHdpbGwgYmUg
cmV0dXJuaW5nIHRvIExMSU5UIG9yIEpJVCBjb2RlIHRoYXQgYWx3YXlzIGRvIGFuIGV4Y2VwdGlv
bgogICAgIC8vIGNoZWNrLiBJbiB0aGF0IGNhc2UsIHNraXAgdGhlIHNpbXVsYXRlZCB0aHJvdyBi
ZWNhdXNlIHRoZSBMTEludCBhbmQgSklUIHdpbGwgYmUKICAgICAvLyBjaGVja2luZyBmb3IgdGhl
IGV4Y2VwdGlvbiB0aGVpciBvd24gd2F5IGluc3RlYWQgb2YgY2FsbGluZyBUaHJvd1Njb3BlOjpl
eGNlcHRpb24oKS4KLSAgICBpZiAodG9wVk1FbnRyeUZyYW1lICYmIHByZXZpb3VzU2NvcGUgPiB0
b3BWTUVudHJ5RnJhbWUpCisgICAgaWYgKHRvcEVudHJ5RnJhbWUgJiYgcHJldmlvdXNTY29wZSA+
IHRvcEVudHJ5RnJhbWUpCiAgICAgICAgIHdpbGxCZUhhbmRsZUJ5TExJbnRPckpJVCA9IHRydWU7
CiAgICAgCiAgICAgaWYgKCF3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKaW5kZXggZDRiMDY0ZC4uZGNkNGU5NCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTg1LDcgKzE4NSw3IEBAIFZNOjpWTShWTVR5cGUgdm1U
eXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNlbmRpZgogICAgICwgdm1UeXBlKHZtVHlwZSkKICAg
ICAsIGNsaWVudERhdGEoMCkKLSAgICAsIHRvcFZNRW50cnlGcmFtZShudWxscHRyKQorICAgICwg
dG9wRW50cnlGcmFtZShudWxscHRyKQogICAgICwgdG9wQ2FsbEZyYW1lKENhbGxGcmFtZTo6bm9D
YWxsZXIoKSkKICAgICAsIHByb21pc2VEZWZlcnJlZFRpbWVyKHN0ZDo6bWFrZV91bmlxdWU8UHJv
bWlzZURlZmVycmVkVGltZXI+KCp0aGlzKSkKICAgICAsIG1fYXRvbWljU3RyaW5nVGFibGUodm1U
eXBlID09IERlZmF1bHQgPyBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9taWNTdHJpbmdUYWJsZSgpIDog
bmV3IEF0b21pY1N0cmluZ1RhYmxlKQpAQCAtMzcwLDcgKzM3MCw3IEBAIFZNOjp+Vk0oKQogICAg
IHByb21pc2VEZWZlcnJlZFRpbWVyLT5zdG9wUnVubmluZ1Rhc2tzKCk7CiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgIGlmIChXYXNtOjpleGlzdGluZ1dvcmtsaXN0T3JOdWxsKCkpCi0gICAg
ICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBsYW5zRm9yVk0oKnRoaXMpOworICAg
ICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLnN0b3BBbGxQbGFuc0ZvckNvbnRleHQod2FzbUNv
bnRleHQpOwogI2VuZGlmCiAgICAgaWYgKFVOTElLRUxZKG1fd2F0Y2hkb2cpKQogICAgICAgICBt
X3dhdGNoZG9nLT53aWxsRGVzdHJveVZNKHRoaXMpOwpAQCAtNzY3LDExICs3NjcsMTIgQEAgdm9p
ZCBsb2dTYW5pdGl6ZVN0YWNrKFZNKiB2bSkKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZVNh
bml0aXplU3RhY2soKSAmJiB2bS0+dG9wQ2FsbEZyYW1lKSB7CiAgICAgICAgIGludCBkdW1teTsK
KyAgICAgICAgYXV0byYgc3RhY2tCb3VuZHMgPSBUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpOwog
ICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIlNhbml0aXppbmcgc3RhY2sgd2l0aCB0b3Ag
Y2FsbCBmcmFtZSBhdCAiLCBSYXdQb2ludGVyKHZtLT50b3BDYWxsRnJhbWUpLAorICAgICAgICAg
ICAgIlNhbml0aXppbmcgc3RhY2sgZm9yIFZNID0gIiwgUmF3UG9pbnRlcih2bSksICIgd2l0aCB0
b3AgY2FsbCBmcmFtZSBhdCAiLCBSYXdQb2ludGVyKHZtLT50b3BDYWxsRnJhbWUpLAogICAgICAg
ICAgICAgIiwgY3VycmVudCBzdGFjayBwb2ludGVyIGF0ICIsIFJhd1BvaW50ZXIoJmR1bW15KSwg
IiwgaW4gIiwKLSAgICAgICAgICAgIHBvaW50ZXJEdW1wKHZtLT50b3BDYWxsRnJhbWUtPmNvZGVC
bG9jaygpKSwgIiBhbmQgbGFzdCBjb2RlIG9yaWdpbiA9ICIsCi0gICAgICAgICAgICB2bS0+dG9w
Q2FsbEZyYW1lLT5jb2RlT3JpZ2luKCksICJcbiIpOworICAgICAgICAgICAgcG9pbnRlckR1bXAo
dm0tPnRvcENhbGxGcmFtZS0+Y29kZUJsb2NrKCkpLCAiLCBsYXN0IGNvZGUgb3JpZ2luID0gIiwK
KyAgICAgICAgICAgIHZtLT50b3BDYWxsRnJhbWUtPmNvZGVPcmlnaW4oKSwgIiwgbGFzdCBzdGFj
ayB0b3AgPSAiLCBSYXdQb2ludGVyKHZtLT5sYXN0U3RhY2tUb3AoKSksICIsIGluIHN0YWNrIHJh
bmdlIFsiLCBSYXdQb2ludGVyKHN0YWNrQm91bmRzLm9yaWdpbigpKSwgIiwgIiwgUmF3UG9pbnRl
cihzdGFja0JvdW5kcy5lbmQoKSksICJdXG4iKTsKICAgICB9CiB9CiAKQEAgLTkyMSw2ICs5MjIs
MTEgQEAgdm9pZCBRdWV1ZWRUYXNrOjpydW4oKQogdm9pZCBzYW5pdGl6ZVN0YWNrRm9yVk0oVk0q
IHZtKQogewogICAgIGxvZ1Nhbml0aXplU3RhY2sodm0pOworICAgIGlmICh2bS0+dG9wQ2FsbEZy
YW1lKSB7CisgICAgICAgIGF1dG8mIHN0YWNrQm91bmRzID0gVGhyZWFkOjpjdXJyZW50KCkuc3Rh
Y2soKTsKKyAgICAgICAgQVNTRVJUKHZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdGFja0JvdW5kcywgc3RhY2tCb3VuZHMuY29udGFp
bnModm0tPmxhc3RTdGFja1RvcCgpKSk7CisgICAgfQogI2lmICFFTkFCTEUoSklUKQogICAgIHZt
LT5pbnRlcnByZXRlci0+Y2xvb3BTdGFjaygpLnNhbml0aXplU3RhY2soKTsKICNlbHNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCAyOTZmNTFhLi4yZjc5OTY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJUZW1wbGF0
ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVk
ZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hw
b2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1ZGUg
PHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgpAQCAtMzI5LDE0ICszMzAsMTUgQEAgcHVibGljOgog
CiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwotICAgIFZN
RW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJh
bWU7CiAgICAgLy8gTk9URTogV2hlbiB0aHJvd2luZyBhbiBleGNlcHRpb24gd2hpbGUgcm9sbGlu
ZyBiYWNrIHRoZSBjYWxsIGZyYW1lLCB0aGlzIG1heSBiZSBlcXVhbCB0bwotICAgIC8vIHRvcFZN
RW50cnlGcmFtZS4KKyAgICAvLyB0b3BFbnRyeUZyYW1lLgogICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBhIHZvaWQqLCBiZWNhdXNlIGl0IG1pZ2h0IG5vdCBwb2ludCB0byBhIENhbGxGcmFt
ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNDQx
CiAgICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWUgeyBudWxscHRyIH07Ci0gICAgLy8gRklYTUU6
IFNhdmUgdGhpcyBzdGF0ZSBlbHNld2hlcmUgdG8gYWxsb3cgUElDLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NzczCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiB3YXNtQ29udGV4dCB7IG51bGxwdHIgfTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
V2FzbTo6Q29udGV4dCB3YXNtQ29udGV4dDsKKyNlbmRpZgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVSYXJl
RGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3JTdHJ1Y3R1cmU7CkBAIC01MDIsOSArNTA0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHB0cmRpZmZfdCB0b3BWTUVudHJ5RnJhbWVPZmZzZXQoKQorICAgIHN0YXRp
YyBwdHJkaWZmX3QgdG9wRW50cnlGcmFtZU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFZNLCB0b3BWTUVudHJ5RnJhbWUpOworICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFZNLCB0b3BFbnRyeUZyYW1lKTsKICAgICB9CiAKICAgICB2b2lkIHJlc3Rv
cmVQcmV2aW91c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24o
ZXhjZXB0aW9uKTsgfQpAQCAtNzc4LDcgKzc4MCw3IEBAIHByaXZhdGU6CiAjaWYgIUVOQUJMRShK
SVQpCiAgICAgdm9pZCogbV9jbG9vcFN0YWNrTGltaXQgeyBudWxscHRyIH07CiAjZW5kaWYKLSAg
ICB2b2lkKiBtX2xhc3RTdGFja1RvcDsKKyAgICB2b2lkKiBtX2xhc3RTdGFja1RvcCB7IG51bGxw
dHIgfTsKIAogICAgIEV4Y2VwdGlvbiogbV9leGNlcHRpb24geyBudWxscHRyIH07CiAgICAgRXhj
ZXB0aW9uKiBtX2xhc3RFeGNlcHRpb24geyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGUyMzZlZDMuLmEyMGQwOTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC04OSw3ICs4OSw3IEBAIGlubGlu
ZSBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxsRnJhbWUqIHRvcENhbGxGcmFt
ZSkKICAgICByZXR1cm4gdG9wQ2FsbEZyYW1lOwogfQogCi1zdGF0aWMgYm9vbCBpc1NhbmVGcmFt
ZShDYWxsRnJhbWUqIGZyYW1lLCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBWTUVudHJ5RnJhbWUq
IGVudHJ5RnJhbWUsIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzKQorc3RhdGljIGJvb2wgaXNTYW5l
RnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgRW50cnlGcmFt
ZSogZW50cnlGcmFtZSwgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMpCiB7CiAgICAgaWYgKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZyYW1lKSA+PSByZWludGVycHJldF9jYXN0PHZvaWQqPihlbnRy
eUZyYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIxLDE4ICsxMjEsMTggQEAgdm9p
ZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRl
eHQsIFN0YWNrQm91bmRzIHN0YWMKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGZvdW5kQ29kZUJs
b2NrID0gbnVsbHB0cjsKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLnRvcFZN
RW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFt
ZTsKIAogICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjYWxsZWUgdG8gc3RhcnQgd2l0aC4gU28sIHVz
ZSB0aGUgZW5kIG9mIHRoZSBzdGFjayB0byBrZWVwIHRoZQogICAgIC8vIGlzU2FuZUZyYW1lKCkg
Y2hlY2tlciBiZWxvdyBoYXBweSBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi4gSXQgd2lsbCBzdGls
bCBjaGVjawogICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlzIGluIHRoZSBzdGFj
a0JvdW5kcy4KICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxD
YWxsRnJhbWUqPihzdGFja0JvdW5kcy5lbmQoKSk7CiAKLSAgICBpZiAoIXZtRW50cnlGcmFtZSB8
fCAhY2FsbEZyYW1lKQorICAgIGlmICghZW50cnlGcmFtZSB8fCAhY2FsbEZyYW1lKQogICAgICAg
ICByZXR1cm47IC8vIE5vdCBydW5uaW5nIEpTIGNvZGUuIExldCB0aGUgU2lnbmFsU2VuZGVyIHRy
eSBhZ2FpbiBsYXRlci4KIAogICAgIGRvIHsKLSAgICAgICAgaWYgKCFpc1NhbmVGcmFtZShjYWxs
RnJhbWUsIGNhbGxlZUZyYW1lLCB2bUVudHJ5RnJhbWUsIHN0YWNrQm91bmRzKSkKKyAgICAgICAg
aWYgKCFpc1NhbmVGcmFtZShjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBlbnRyeUZyYW1lLCBzdGFj
a0JvdW5kcykpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRy
eSBhZ2FpbiBsYXRlci4KIAogICAgICAgICBDb2RlQmxvY2sqIGNhbmRpZGF0ZUNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC0xNDIsOSArMTQyLDkgQEAgdm9pZCBWTVRyYXBz
Ojp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKFNpZ25hbENvbnRleHQmIGNvbnRleHQsIFN0YWNr
Qm91bmRzIHN0YWMKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1l
OwotICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKHZtRW50cnlGcmFt
ZSk7CisgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoZW50cnlGcmFt
ZSk7CiAKLSAgICB9IHdoaWxlIChjYWxsRnJhbWUgJiYgdm1FbnRyeUZyYW1lKTsKKyAgICB9IHdo
aWxlIChjYWxsRnJhbWUgJiYgZW50cnlGcmFtZSk7CiAKICAgICBpZiAoIWZvdW5kQ29kZUJsb2Nr
KSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIGp1c3QgZW50ZXJlZCB0aGUgZnJhbWUgYW5kIHRo
ZSBjb2RlQmxvY2sgcG9pbnRlciBpcyBub3QKQEAgLTE4MSwxNyArMTgxLDE3IEBAIHZvaWQgVk1U
cmFwczo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKExvY2tlcjxMb2NrPiYsIEV4ZWNTdGF0
ZSogdG9wQ2FsbEZyYW1lCiAKICAgICBtX25lZWRUb0ludmFsaWRhdGVkQ29kZUJsb2NrcyA9IGZh
bHNlOwogCi0gICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bSgpLnRvcFZNRW50cnlG
cmFtZTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0oKS50b3BFbnRyeUZyYW1lOwog
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdG9wQ2FsbEZyYW1lOwogCi0gICAgaWYgKCF2bUVu
dHJ5RnJhbWUpCisgICAgaWYgKCFlbnRyeUZyYW1lKQogICAgICAgICByZXR1cm47IC8vIE5vdCBy
dW5uaW5nIEpTIGNvZGUuIE5vdGhpbmcgdG8gaW52YWxpZGF0ZS4KIAogICAgIHdoaWxlIChjYWxs
RnJhbWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwogICAgICAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChjb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmpldHRpc29u
KFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvVk1UcmFwcyk7Ci0gICAgICAgIGNhbGxGcmFtZSA9IGNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICAgICAgY2FsbEZyYW1lID0g
Y2FsbEZyYW1lLT5jYWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCBiYWM4
ZGMxLi40NTAzY2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCkBAIC00OSw4ICs0OSw2IEBACiAjaW5jbHVkZSAiQjNXYXNtQm91bmRz
Q2hlY2tWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5j
bHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUg
Ildhc21DYWxsaW5nQ29udmVudGlvbi5oIgpAQCAtMTc4LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0g
d2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgVGllclVwQ291bnQqKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVp
bnQzMl90KTsKQEAgLTI0Nyw3ICsyNDUsNyBAQCBwcml2YXRlOgogCiAgICAgaW50MzJfdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVp
bnQzMl90KTsKIAotICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVyZSYsIEJhc2lj
QmxvY2sqLCBWYWx1ZSopOworICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJv
Y2VkdXJlJiwgQmFzaWNCbG9jayosIFZhbHVlKik7CiAgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFZhbHVlKiBpbnN0YW5jZSwg
UHJvY2VkdXJlJiwgQmFzaWNCbG9jayopOwogCiAgICAgT3JpZ2luIG9yaWdpbigpOwpAQCAtMjY3
LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgSW5zZXJ0aW9uU2V0IG1fY29uc3RhbnRJbnNlcnRp
b25WYWx1ZXM7CiAgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsK
ICAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9OwotICAgIEdQUlJl
ZyBtX3dhc21Db250ZXh0R1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21D
b250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgYm9vbCBtX21ha2VzQ2Fs
bHMgeyBmYWxzZSB9OwogCiAgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1ZSB7IG51bGxwdHIgfTsg
Ly8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2
YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2VkLgpAQCAtMjkxLDM3ICsyODksMzcgQEAgaW50
MzJfdCBCM0lSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBl
JiBwdHIsIHVpbnQzMl90IG9mZnMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIEIzSVJH
ZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sq
IGJsb2NrLCBWYWx1ZSogYXJnKQordm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZShQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogYXJn
KQogewotICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKENvbnRleHQ6
OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBi
bG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigp
KTsKLSAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9T
Y3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQogICAgICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwog
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXIpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRl
eHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVdhc21Db250ZXh0KHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigp
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklY
TUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVy
IGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNh
bGxlciBzaWRlLgorICAgIC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVy
cyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3
ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgogICAgIC8vIFRoaXMgcHJl
dmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0
YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0g
YmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4o
KSk7CiAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwogICAgIGVmZmVjdHMu
d3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6
dG9wKCk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7Ci0gICAgcGF0Y2hwb2lu
dC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEdQUikpOworICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikp
OwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOwotICAgIEdQUlJlZyB3YXNtQ29udGV4dEdQUiA9IG1fd2FzbUNvbnRleHRHUFI7
CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFI7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKLSAgICAgICAgaml0
Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0R1BSKTsKKyAgICAgICAgaml0Lm1vdmUo
cGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogICAgIH0pOwogfQogCi1C
M0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1l
bW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKK0IzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCBDb21w
aWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVy
VXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQog
ICAgIDogbV9pbmZvKGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRp
b25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKQEAgLTMzOSw5ICszMzcsOSBAQCBCM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUm
IHByb2NlZHVyZQogICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBv
aW50ZXI7CiAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CiAKLSAgICBt
X3dhc21Db250ZXh0R1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dFBvaW50ZXI7Ci0gICAgaWYg
KCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV93
YXNtQ29udGV4dEdQUik7CisgICAgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVn
cy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKyAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RU
TFMoKSkKKyAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQ
Uik7CiAKICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKICAgICAgICAg
QVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CkBAIC0zNTAs
NiArMzQ4LDkgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIG1fcHJvYy5w
aW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CiAgICAgfQogCisgICAgaWYgKHRocm93
V2FzbUV4Y2VwdGlvbikKKyAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21F
eGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKKwogICAgIGlmIChpbmZvLm1lbW9yeSkgewog
ICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKQEAgLTM2Myw2ICszNjQsMTkgQEAg
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMt
PmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5
QWNjZXNzKTsKICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAg
ICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgICAgIC8vIE1vc3Qg
bWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0Cisg
ICAgICAgICAgICAvLyBleGNlcHRpb24gY2hlY2sgYmVjYXVzZSB0aGV5IGNhbiByZWx5IG9uIGZh
dWx0IGhhbmRsaW5nIHRvIGRldGVjdAorICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBhY2Nl
c3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZQorICAgICAgICAg
ICAgLy8gdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAgICAgd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUoJmNvbXBpbGF0aW9uLT5jYWxsZWVN
b3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKQEAgLTM3Mywx
MiArMzg3LDEyIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgIG1faW5zdGFuY2VW
YWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVjazsKICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5h
cHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0No
ZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAg
ICAgIGlmICghdXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0IHJlZ2lzdGVyIGFu
ZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxl
ciBzaWRlLgorICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0
SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVz
dG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCiAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRz
IHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUg
cGlubmVkIHJlZ2lzdGVyLgogICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3Rz
LndyaXRlc1Bpbm5lZCA9IGZhbHNlOwogICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5l
ZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVj
ay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEdQUik7Cisg
ICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJl
cDo6cmVnKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAgICAgICAgIH0KICAgICAgICAgc3Rh
Y2tPdmVyZmxvd0NoZWNrLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOwogICAgICAgICBzdGFj
a092ZXJmbG93Q2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKQEAgLTQwMSw3ICs0MTUs
NyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgYm9vbCBuZWVkVW5kZXJm
bG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6OnJl
c2VydmVkWm9uZVNpemUoKTsKICAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNrID0g
bV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVudENoZWNrU2l6ZSB8
fCBuZWVkVW5kZXJmbG93Q2hlY2s7CiAKLSAgICAgICAgICAgIEdQUlJlZyBjb250ZXh0ID0gdXNl
RmFzdFRMU0ZvckNvbnRleHQoKSA/IHBhcmFtc1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRHUFI7
CisgICAgICAgICAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRM
UygpID8gcGFyYW1zWzBdLmdwcigpIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogCiAgICAg
ICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hl
Y2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCiAgICAgICAgICAgICAvLyBjZXJ0YWlu
IGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNo
ZWNrLgpAQCAtNDExLDEwICs0MjUsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwogICAgICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7CiAKLSAgICAg
ICAgICAgICAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWRXYXNtQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250
ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKIAotICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hl
ZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIGZw
LCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92
ZXJmbG93OwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5kZXJmbG93Q2hlY2sp
KQpAQCAtNDIzLDEwICs0MzcsMTAgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVM
b2NhdGlvbkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dG
cm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiB1c2VGYXN0VExTRm9y
Q29udGV4dCgpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUg
JiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZs
b3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0
byBiZSBjb3JyZWN0LgotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0TmVl
ZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21D
b250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0
SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGpp
dC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRl
ci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBiZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0
aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRp
YWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCiAg
ICAgICAgICAgICB9CkBAIC00MzgsNyArNDUyLDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVy
YXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUK
IAogdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25z
dCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBWYWx1ZSogaW5zdGFuY2UsIFByb2NlZHVyZSYg
cHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7Ci0gICAgcmVzdG9yZVdhc21Db250ZXh0KHByb2Ms
IGJsb2NrLCBpbnN0YW5jZSk7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywg
YmxvY2ssIGluc3RhbmNlKTsKIAogICAgIGlmICghIW1lbW9yeSkgewogICAgICAgICBjb25zdCBQ
aW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KTsKQEAgLTQ1OCwxMiArNDcyLDEyIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFz
c2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yCiAKICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsK
LSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0u
Z3ByKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFt
c1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSks
IGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRS
ZWdzLT5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+
PSAxKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRo
ZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1
YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVt
b3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJB
c3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIE1lbW9yeTo6
b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIE1lbW9yeTo6b2Zm
c2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIGppdC5hZGQ2
NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNp
emVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKICAgICAg
ICAgfSk7CkBAIC01NDEsMjQgKzU1NSwyMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFVucmVh
Y2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dN
ZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKLSAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkgKENvbnRleHQqLCBpbnQz
Ml90KSA9IFtdIChDb250ZXh0KiB3YXNtQ29udGV4dCwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJf
dCB7Ci0gICAgICAgIFZNJiB2bSA9ICp3YXNtQ29udGV4dC0+dm0oKTsKLSAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIHdhc21NZW1vcnkgPSB3YXNtQ29udGV4dC0+bWVtb3J5KCk7Ci0KKyAgICBpbnQzMl90
ICgqZ3Jvd01lbW9yeSkoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7
CiAgICAgICAgIGlmIChkZWx0YSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAg
ICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSBmYWxzZTsKLSAgICAgICAg
Ly8gZ3JvdygpIGRvZXMgbm90IHJlcXVpcmUgRXhlY1N0YXRlKiBpZiBpdCBkb2Vzbid0IHRocm93
IGV4Y2VwdGlvbnMuCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG51bGxwdHI7Ci0gICAgICAg
IFBhZ2VDb3VudCByZXN1bHQgPSB3YXNtTWVtb3J5LT5ncm93KHZtLCBleGVjLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oZGVsdGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwotICAg
ICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5j
ZS0+aW50ZXJuYWxNZW1vcnkoKS5ncm93KFBhZ2VDb3VudChkZWx0YSkpOworICAgICAgICBpZiAo
IWdyb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgorICAgICAgICAg
ICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CisgICAgICAg
ICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToKKyAg
ICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5wYWdlQ291bnQoKTsKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVl
KCkucGFnZUNvdW50KCk7CiAgICAgfTsKIAogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCkBAIC01NzIsMTMg
KzU4NCwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5
cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3Rh
bmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZk1lbW9yeSgpKSk7CisgICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSkpOwogCi0gICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4obnVsbHB0cikt
Pm1lbW9yeSgpLT5tZW1vcnkoKS5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdl
biByZWxpZXMgb24gdGhpcyBzaXplIik7Ci0gICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwg
bWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZz
ZXRPZlNpemUoKSkpOworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHN0YXRpY19j
YXN0PE1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29k
ZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4o
KSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihNZW1vcnk6Om9mZnNldE9mU2l6ZSgp
KSk7CiAgICAgCiAgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKLSAgICBz
dGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMSA8PCBzaGlmdFZhbHVlLCAiVGhp
cyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgc3Rh
dGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRo
aXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOwogICAgIFZh
bHVlKiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
WlNociwgb3JpZ2luKCksCiAgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CiAKQEAgLTEwNjks
MTQgKzEwODEsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBtX21heE51bUpT
Q2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIAogICAgICAgICAvLyBGSVhNRSBpbXBvcnRz
IGNhbiBiZSBsaW5rZWQgaGVyZSwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwg
YmVjYXVzZSBhbGwgaW1wb3J0IHN0dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0
aW9uIHN0YXJ0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2
MgotICAgICAgICBWYWx1ZSogZnVuY3Rpb25JbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBp
bnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICBWYWx1ZSog
anNUeXBlT2ZJbXBvcnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQ4Wiwgb3JpZ2luKCksIGZ1bmN0aW9uSW1wb3J0LCBzYWZlQ2FzdDxpbnQzMl90
PihKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSk7Ci0gICAgICAgIFZhbHVlKiBpc1dhc21D
YWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3Jp
Z2luKCksIGpzVHlwZU9mSW1wb3J0LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKyAgICAg
ICAgVmFsdWUqIHRhcmdldEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VW
YWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
VGFyZ2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFsdWUqIGlzV2FzbUNh
bGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBv
cmlnaW4oKSwgdGFyZ2V0SW5zdGFuY2UsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCAwKSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogaXNX
YXNtQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgQmFzaWNCbG9jayogaXNKU0Js
b2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJC
bG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBtX3Byb2MuYWRkQmxvY2soKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBG
cmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNKU0Jsb2NrKSk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBC
Mzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJs
b2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlzRW1iZWRkZXJCbG9jaykpOwogCiAgICAgICAgIFZhbHVl
KiB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3By
b2MsIGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAg
ICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTA5Nywx
NSArMTEwOCwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIFVwc2lsb25WYWx1
ZSogd2FzbUNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6
IGlzV2FzbUJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3
YXNtQ2FsbFJlc3VsdCk7CiAgICAgICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIAotICAgICAgICAvLyBG
SVhNRTogTGV0cyByZW1vdmUgdGhpcyBpbmRpcmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmll
bmRseSBJQworICAgICAgICAvLyBGSVhNRTogTGV0J3MgcmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24g
YnkgY3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkgSUMKICAgICAgICAgLy8gZm9yIGNhbGxzIG91dCB0
byBKUy4gVGhpcyBzaG91bGRuJ3QgYmUgdGhhdCBoYXJkIHRvIGRvLiBXZSBjb3VsZCBwcm9iYWJs
eQotICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIElDIHRvIGJlIG92ZXIgV2FzbTo6Q29udGV4dCou
CisgICAgICAgIC8vIGltcGxlbWVudCB0aGUgSUMgdG8gYmUgb3ZlciBDb250ZXh0Ki4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDM3NQotICAg
ICAgICBWYWx1ZSogY29kZUJsb2NrID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywKLSAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0
YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZDb2RlQmxvY2soKSkpOwotICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9uID0gaXNK
U0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKLSAgICAgICAgICAgIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIHNhZmVDYXN0PGludDMyX3Q+KEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6Om9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKGZ1bmN0aW9u
SW5kZXgpKSk7Ci0gICAgICAgIFZhbHVlKiBqc0NhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBpc0pTQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0Iz
VHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgVmFsdWUqIGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1i
ZWRkZXJCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCisgICAgICAgICAgICBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHVi
RXhlY3V0YWJsZUFkZHJlc3MoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgVmFsdWUqIGVtYmVk
ZGVyQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2Ms
IGlzRW1iZWRkZXJCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAog
ICAgICAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CkBAIC0xMTE5
LDggKzExMjgsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgICAg
IGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCkpOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIFVwc2lsb25WYWx1ZSog
anNDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0pT
QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGpzQ2FsbFJl
c3VsdCk7Ci0gICAgICAgIGlzSlNCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywg
SnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFVwc2lsb25WYWx1ZSogZW1i
ZWRkZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBp
c0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IGVtYmVkZGVyQ2FsbFJlc3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKICAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CiAKQEAgLTExMjksNyArMTEzOCw3
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBy
ZXN1bHQgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNU
eXBlKHJldHVyblR5cGUpLCBvcmlnaW4oKSk7CiAgICAgICAgICAgICB3YXNtQ2FsbFJlc3VsdFVw
c2lsb24tPnNldFBoaShyZXN1bHQpOwotICAgICAgICAgICAganNDYWxsUmVzdWx0VXBzaWxvbi0+
c2V0UGhpKHJlc3VsdCk7CisgICAgICAgICAgICBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uLT5z
ZXRQaGkocmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhh
dmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBo
YXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCkBAIC0xMTY1LDE3ICsxMTc0LDE3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8RXhwcmVzc2lvCiAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heCht
X21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgp
KSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOwotICAgIEV4
cHJlc3Npb25UeXBlIGpzRnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFu
Y2VzQnVmZmVyOwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXpl
OwogICAgIHsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAotICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSkpOworICAgICAgICAgICAgaW5zdGFu
Y2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mV2FzbVRhYmxlKCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNX
ZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7Ci0gICAgICAgIGpzRnVuY3Rp
b25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVD
YXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1bmN0aW9ucygpKSk7
CisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFibGU6Om9mZnNldE9mRnVu
Y3Rpb25zKCkpKTsKKyAgICAgICAgaW5zdGFuY2VzQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihUYWJsZTo6b2Zmc2V0T2ZJ
bnN0YW5jZXMoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9y
aWdpbigpLAotICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1i
bHlUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxp
bnQzMl90PihUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKICAgICB9CiAKICAgICAvLyBDaGVjayB0
aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHZhbGlkLgpAQCAtMTE5NSw2ICsxMjA0LDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1
bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9y
aWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBvZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sg
dGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBp
c24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0
aWFsaXplZC4KKyAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNh
biBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgg
aXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAogICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKENhbGxhYmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9
PSBzaXplb2YodWludDMyX3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTMyIik7CiAgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwgY2FsbGFibGVG
dW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rp
b24sIHNpZ25hdHVyZUluZGV4KSkpOwogICAgIHsKQEAgLTEyMjMsMTkgKzEyMzMsMTcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICB7CiAgICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCiAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwg
b3JpZ2luKCksIGNhbGxlZUluZGV4KSwKLSAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBl
KCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSkpOwotICAgICAgICBWYWx1ZSoganNP
YmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBqc0Z1bmN0aW9uQnVmZmVy
LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihJ
bnN0YW5jZSopKSk7CisgICAgICAgIFZhbHVlKiBuZXdDb250ZXh0SW5zdGFuY2UgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkpOwogCiAg
ICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAg
ICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBtX3Byb2MuYWRkQmxvY2soKTsKIAot
ICAgICAgICBWYWx1ZSogbmV3Q29udGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAg
ICAgICBqc09iamVjdCwgc2FmZUNhc3Q8aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6
Om9mZnNldE9mSW5zdGFuY2UoKSkpOwotICAgICAgICBWYWx1ZSogaXNTYW1lQ29udGV4dCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAot
ICAgICAgICAgICAgbmV3Q29udGV4dCwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgVmFsdWUq
IGlzU2FtZUNvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAorICAgICAgICAgICAgbmV3Q29udGV4dEluc3RhbmNl
LCBpbnN0YW5jZVZhbHVlKCkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksCi0gICAgICAgICAgICBpc1Nh
bWVDb250ZXh0LCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2Nr
KGRvQ29udGV4dFN3aXRjaCkpOworICAgICAgICAgICAgaXNTYW1lQ29udGV4dEluc3RhbmNlLCBG
cmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3
aXRjaCkpOwogCiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29udGV4
dFN3aXRjaC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3Jp
Z2luKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7
CkBAIC0xMjQzLDI2ICsxMjUxLDI2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGly
ZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmcpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9T
Y3JhdGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29udGV4
dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChu
ZXdDb250ZXh0SW5zdGFuY2UsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
ICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAg
ICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgb2xkQ29udGV4dCA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdwcigpOwogICAgICAgICAgICAgY29u
c3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKTsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJh
c2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHQgIT0gYmFzZU1l
bW9yeSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xk
Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5
KTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MobmV3Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsK
LSAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KG5ld0NvbnRleHQpOwotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHQsIENvbnRleHQ6
Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSou
CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJ
bnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQo
KSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8g
TWVtb3J5Ki4KICAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7CiAgICAg
ICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwot
ICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0
KTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29u
dGV4dEluc3RhbmNlKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNl
dCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZz
ZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc21NZW1vcnk6OnZvaWQqLgorICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIE1lbW9y
eTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkg
c2l6ZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
TWVtb3J5LCBNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5
Ojp2b2lkKi4KICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CiAKQEAg
LTEzMzksMTk0ICsxMzQ3LDYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3Rv
cjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3MKICAgICBkYXRhTG9n
TG4oKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1v
cnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCi17Ci0gICAgQ0NhbGxIZWxwZXJz
JiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKLQotICAgIGF1dG8g
cmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwotICAgIGppdC5l
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotCi0gICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNv
ZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEK
LSAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdp
dGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtl
ZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2Fs
bGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOwotICAg
IH0pOwotCi0gICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKTsKLSAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdz
LnRvU2F2ZShtb2RlKTsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCB0b1Nh
dmVTaXplID0gdG9TYXZlLm51bWJlck9mU2V0R1BScygpOwotICAgIC8vIFRoZXkgc2hvdWxkIGFs
bCBiZSBjYWxsZWUgc2F2ZXMuCi0gICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKLSAgICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09
IHRvU2F2ZVNpemUpOwotI2VuZGlmCi0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3Rl
cnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpG
cmFtZVBvaW50ZXJCYXNlZCk7Ci0gICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdp
c3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwotCi0gICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUg
PSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7Ci0gICAgdG90YWxGcmFt
ZVNpemUgKz0gV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwotICAg
IHRvdGFsRnJhbWVTaXplIC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKLSAgICB1bnNpZ25l
ZCBudW1HUFJzID0gMDsKLSAgICB1bnNpZ25lZCBudW1GUFJzID0gMDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAg
IHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7Ci0gICAgICAgIGNhc2UgV2FzbTo6STY0
OgotICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAg
dG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVtR1BSczsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgY2Fz
ZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXpl
ICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXpl
KTsKLSAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFt
ZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8g
V2Ugc2F2ZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5
IG9yIG5vdC4KLSAgICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBh
cyBhIHNjcmF0Y2guIFRoYXQgc2FpZCwKLSAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9n
cmFtcyB1c2UgbWVtb3J5LCBzbyBpdCdzIG5vdCByZWFsbHkKLSAgICAvLyB3b3J0aCBvcHRpbWl6
aW5nIGZvciB0aGUgY2FzZSB0aGF0IHRoZXkgZG9uJ3QuCi0gICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BS
UmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwotICAgICAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihyZWcsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7
Ci0gICAgfQotCi0gICAgR1BSUmVnIHdhc21Db250ZXh0R1BSID0gcGlubmVkUmVncy53YXNtQ29u
dGV4dFBvaW50ZXI7Ci0KLSAgICB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxs
ZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOwotICAgICAgICBudW1HUFJzID0gMDsKLSAgICAgICAgbnVtRlBScyA9IDA7Ci0gICAg
ICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHNldCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0aGlz
LiBTbwotICAgICAgICAvLyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cgc2lu
Y2Ugd2Ugc2F2ZWQgaXQgYWJvdmUuCi0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcGlubmVk
UmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKLQotICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0g
ICAgICAgIC8vIHZtRW50cnlUb1dhc20gcGFzc2VzIFdhc206OkNvbnRleHQqIGFzIHRoZSBmaXJz
dCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCi0gICAgICAgIC8vIG5vdCB1c2luZyBmYXN0IFRMUyB0
byBob2xkIHRoZSBXYXNtOjpDb250ZXh0Ki4KLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29u
dGV4dCgpKSB7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNvbnRleHRHUFIpOwot
ICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewotICAgICAgICAgICAgY2FzZSBXYXNtOjpJMzI6
Ci0gICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKLSAgICAgICAgICAgICAgICBpZiAobnVtR1BS
cyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBX
YXNtOjpJMzIpCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICArK251bUdQUnM7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6
RjY0OgotICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlv
bigpLm1fZnByQXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVy
ZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6
ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnBy
QXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICArK251bUZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoISFpbmZvLm1lbW9yeSkgewotICAg
ICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0K
LSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0R1BSLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGJhc2VNZW1vcnkpOwotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAg
ICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKLSAg
ICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1l
cyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJz
IHJlbGF0aXZlIHRvIDAuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVS
ZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5
LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0g
ICAgfQotCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNo
YWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rp
b25JbmRleCArIGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlv
bkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNw
YWNlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1
bmN0aW9uSW5kZXhTcGFjZSB9KTsKLSAgICB9KTsKLQotCi0gICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKLSAgICAgICAgR1BS
UmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwotICAgICAgICBBU1NFUlQocmVnICE9
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJl
Z0F0T2Zmc2V0Lm9mZnNldCgpOwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7Ci0gICAgfQot
Ci0gICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBXYXNtOjpG
MzI6Ci0gICAgICAgIGppdC5tb3ZlRmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2FzbTo6
RjY0OgotICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7
Ci0gICAgaml0LnJldCgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogYXV0byBCM0lSR2Vu
ZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KIHsKICAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1f
cGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdP
ZmZzZXQoKSk7CkBAIC0xNTM0LDcgKzEzNTQsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdp
bigpIC0+IE9yaWdpbgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwog
fQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBj
b25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVt
b3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlv
bkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25N
b2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQq
IHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBh
dXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAt
MTU1OCwxMSArMTM3OCwxMSBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/IE9w
dGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlv
bnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJh
dG9yIGNvbnRleHQoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7
Ci0gICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0
aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOworICAgIEIzSVJHZW5l
cmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRp
ZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBh
cnNlKCkpOwogCi0gICAgY29udGV4dC5pbnNlcnRDb25zdGFudHMoKTsKKyAgICBpckdlbmVyYXRv
ci5pbnNlcnRDb25zdGFudHMoKTsKIAogICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgp
OwogICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggZTJjNmFkYi4uNjliZTQ0OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlw
cm9kdWN0cy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIldhc21FbWJl
ZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5m
b3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKQEAgLTU0LDkgKzU1LDcg
QEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpP
cGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7CiB9OwogCi1FeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwor
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9u
ID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAyMmVkZDE2Li5kMGVhZmExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yOSw4ICsy
OSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlv
bi5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcu
aCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCkBAIC01MywyMSArNTEsMjEgQEAgbmFtZXNwYWNl
IFdhc21CQlFQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OwogfQogCi1CQlFQbGFuOjpCQlFQbGFuKFZNKiB2bSwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBp
bmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQmFzZSh2
bSwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywg
Q29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJl
ZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAg
OiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIFdURk1vdmUoY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9zdGF0ZShT
dGF0ZTo6VmFsaWRhdGVkKQogICAgICwgbV9hc3luY1dvcmsod29yaykKIHsKIH0KIAotQkJRUGxh
bjo6QkJRUGxhbihWTSogdm0sIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdv
cmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJCUVBsYW4odm0sIGFkb3B0UmVmKCpu
ZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSksIHdvcmssIFdURk1vdmUodGFz
aykpCitCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYm
IHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24g
dGhyb3dXYXNtRXhjZXB0aW9uKQorICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigqbmV3
IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRhc2sp
LCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKIHsK
ICAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0q
IHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29y
ayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKHZtLCBzb3VyY2UsIHNv
dXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29u
dGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBBc3luY1dv
cmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBzb3Vy
Y2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKICAgICAsIG1fc3RhdGUoU3RhdGU6Oklu
aXRpYWwpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewpAQCAtMjY5LDcgKzI2Nyw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAK
ICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVw
ID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rp
b25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOworICAg
ICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBp
bGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVu
Z3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0s
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFN
b2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAg
ICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTI4NSw3ICsyODMsNyBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogCiAg
ICAgICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5k
ZXgpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVu
Y3Rpb25JbmRleCwgY3JlYXRlSlNUb1dhc21XcmFwcGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5j
dGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbklu
ZGV4KSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVz
dWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIApAQCAtMzE0LDE0ICszMTIsMTQg
QEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQog
ICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1
Y3RzKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChhdXRvIGpzVG9XYXNtSW50
ZXJuYWxGdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25J
bmRleCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRl
eCkpIHsKICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNF
bnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2Yg
ZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJp
bmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAganNUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29t
cGlsYXRpb24+KAorICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlv
bi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0
aW9uPigKICAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkph
dmFTY3JpcHQtPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwg
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuanNFbnRy
eXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmgKaW5kZXggMzU5ZjEzYi4uYzZlYTQ5NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNt
TW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldh
c21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQxLDggKzQx
LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWxsTGlua0luZm87Ci1jbGFzcyBKU0ds
b2JhbE9iamVjdDsKLWNsYXNzIEpTUHJvbWlzZURlZmVycmVkOwogCiBuYW1lc3BhY2UgV2FzbSB7
CiAKQEAgLTUwLDEyICs0OCwxMyBAQCBjbGFzcyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4g
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQbGFuOwogICAgIGVudW0gQXN5bmNXb3JrIDog
dWludDhfdCB7IEZ1bGxDb21waWxlLCBWYWxpZGF0aW9uIH07CisKICAgICAvLyBOb3RlOiBDb21w
bGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3
aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgQkJRUGxhbihWTSosIFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dv
cmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJ
bmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJR
UGxhbihDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRh
c2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAg
Ly8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUg
bm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0
ZXN0cwogICAgIC8vIEZJWE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ug
c2hvdWxkIHJlbW92ZSBBc3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VY
UE9SVF9QUklWQVRFIEJCUVBsYW4oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBBc3luY1dv
cmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29u
dGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2sm
Jik7CiAKICAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKIApAQCAtMTQxLDcgKzE0
MCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNt
VG9XYXNtRXhpdFN0dWJzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5
cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0gICAg
SGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBl
bmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2pzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAg
SGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBl
bmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7
CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uQ29udGV4dD4gbV9jb21waWxhdGlvbkNvbnRleHRzOwog
ICAgIFZlY3RvcjxUaWVyVXBDb3VudD4gbV90aWVyVXBDb3VudHM7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKaW5kZXggMWI4YjU2Zi4uNDQ0
NzkwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5J
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5Jbmxp
bmVzLmgKQEAgLTM5LDEwICszOSwxMCBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVz
KGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogICAgIEFTU0VSVCghZmFpbGVkKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbklu
ZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25J
bmRleCkgewogCi0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGpzRW50cnlwb2ludENhbGxl
ZTsKLSAgICAgICAgaWYgKGF1dG8ganNUb1dhc21GdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAganNF
bnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShqc1RvV2FzbUZ1
bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoanNUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRz
Ojpib3hXYXNtKGpzRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOworICAgICAgICBSZWZQdHI8V2Fz
bTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CisgICAgICAgIGlmIChhdXRvIGVt
YmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMu
Z2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21G
dW5jdGlvbi0+ZW50cnlwb2ludCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2Fs
bGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKQEAgLTUwLDcgKzUwLDcg
QEAgdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFj
aykKICAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNt
OjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi5nZXQoZnVuY3Rpb25J
bmRleFNwYWNlKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5j
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBv
aW50Q2FsbGVlLnB0cigpKSk7CiAKLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbklu
ZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRD
YWxsZWUpKTsKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3Zl
KGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUp
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cAppbmRleCA2N2NjZjVlLi40OTEwYzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwCkBAIC0yOSw1OTYgKzI5LDE0IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJz
LmgiCi0jaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCi0jaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIlRodW5r
R2VuZXJhdG9ycy5oIgotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgotI2luY2x1
ZGUgIldhc21Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogdXNpbmcgSklUID0gQ0NhbGxIZWxwZXJz
OwogCi1zdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWdu
ZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCi17Ci0gICAgLy8gV2UncmUgY2FsbGluZyBv
dXQgb2YgdGhlIGN1cnJlbnQgV2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFuY2UgaGFz
IGEgbGlzdCBvZiBhbGwgaXRzIGltcG9ydCBmdW5jdGlvbnMuCi0gICAgaml0LmxvYWRXYXNtQ29u
dGV4dChyZXN1bHQpOwotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCBy
ZXN1bHQpOwotfQotCi1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCi17Ci0g
ICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5
IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCi0gICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRv
IHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCi0gICAg
Y29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKTsKLSAgICBjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdD
b252ZW50aW9uKCk7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICB1bnNpZ25lZCBhcmdDb3VudCA9
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7Ci0gICAgSklUIGppdDsKLQotICAgIC8vIE5vdGU6
IFdhc21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEg
Y2FsbGVlIHNhdmUuCi0gICAgLy8gSWYgd2UgZXZlciBjaGFuZ2UgdGhpcywgd2Ugd2lsbCBhbHNv
IG5lZWQgdG8gY2hhbmdlIFdhc21CM0lSR2VuZXJhdG9yLgotCi0gICAgLy8gQmVsb3csIHdlIGFz
c3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gaXMgYWx3YXlzIG9uIHRoZSBzdGFj
ay4KLSAgICBBU1NFUlQoIWpzQ0MubV9ncHJBcmdzLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFqc0ND
Lm1fZnByQXJncy5zaXplKCkpOwotCi0gICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0g
ICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29k
ZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQot
Ci0gICAgewotICAgICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOwotICAgICAgICBoYXNC
YWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJldHVyblR5cGUoKSA9PSBJNjQ7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsg
KythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVu
dChhcmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1
bmM6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAg
ICAgICAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkgewotICAgICAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgICAg
IGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOwotCi0gICAgICAgICAgICAvLyBTdG9yZSBDYWxsZWUuCi0gICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIp
OwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAgICAgICAgIGF1
dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigqdm0pOwotCi0gICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSos
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAgICAgICAg
ICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5n
bG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvcklu
c3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVj
dG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFz
IHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOwotICAg
ICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwot
Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOwotICAgICAg
ICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2
YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxs
aW5nIGNvbnZlbnRpb24gc2F2ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4g
V2UgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVy
cyBzaW5jZSB0aGUgd2FzbSBjYWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KLSAgICBS
ZWdpc3RlclNldCBtaXNzaW5nQ2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0
ZXJzOwotICAgIG1pc3NpbmdDYWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVn
aXN0ZXJzKTsKLSAgICBBU1NFUlQobWlzc2luZ0NhbGxlZVNhdmVzLmlzRW1wdHkoKSk7Ci0KLSAg
ICBpZiAoIU9wdGlvbnM6OnVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscygpKSB7Ci0g
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoYXJnQ291bnQgKiBzaXplb2YodWludDY0X3QpKTsKLSAgICAgICAgY2hhciogYnVmZmVy
ID0gYXJnQ291bnQgPyBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKSA6IG51bGxwdHI7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAg
ICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBidWZm
ZXJPZmZzZXQgPSAwOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
LSAgICAgICAgY29uc3QgR1BSUmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdDUzA7Ci0gICAg
ICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzaXplb2YoUmVnaXN0ZXIpKSksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZVB0
cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7
IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAg
ICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjYXNlIEkz
MjogewotICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYg
KG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOwot
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUg
YXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcpOwotICAgICAgICAgICAg
ICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOwot
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywgYnVmZmVyICsgYnVmZmVyT2Zmc2V0
KTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAg
ICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8
IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3
YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBh
cmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAg
ICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnByUmVnKTsKLSAgICAgICAgICAg
ICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAg
ICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUND
Lm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5t
X2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50
cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAg
ICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRGUFIwOwotICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0g
c2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaml0
Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgICAg
ICAgICArK21hcnNoYWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBidWZmZXJPZmZzZXQgKz0gc2l6ZW9m
KFJlZ2lzdGVyKTsKLSAgICAgICAgfQotICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgaWYgKGFyZ0NvdW50KSB7Ci0gICAgICAgICAgICAvLyBUaGUgR0Mgc2hv
dWxkIG5vdCBsb29rIGF0IHRoaXMgYnVmZmVyIGF0IGFsbCwgdGhlc2UgYXJlbid0IEpTVmFsdWVz
LgotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0
Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50NjRf
dCAoKmNhbGxGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCosIFNpZ25hdHVyZUluZGV4LCB1aW50
NjRfdCopID0KLSAgICAgICAgICAgIFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjYWxs
ZWUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCogYnVmZmVyKSAtPiB1
aW50NjRfdCB7IAotICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAg
ICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAg
ICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAw
OyBhcmdOdW0gPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ051bSkgewotICAgICAg
ICAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhcmc7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5j
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
STMyOgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0ganNOdW1iZXIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oYnVmZmVyW2FyZ051bV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGNjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBqc051bWJlcihiaXR3aXNlX2Nh
c3Q8ZG91YmxlPihidWZmZXJbYXJnTnVtXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBl
bmQoYXJnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKLSAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNhbGxlZS0+bWV0
aG9kVGFibGUoKnZtKS0+Z2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAgICAg
ICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjYWxsZWUsIGNhbGxUeXBlLCBj
YWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJl
YWxSZXN1bHQ7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgICAgIGNhc2UgQW55
ZnVuYzoKLSAgICAgICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQudG9J
bnQzMihleGVjKSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBGMzI6
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4ocmVzdWx0LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlYWxSZXN1bHQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgaml0LmxvYWRX
YXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAg
ICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICAgICAgCi0gICAgICAgIG1hdGVyaWFs
aXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVy
cyA+PSA0LCAiV2UgcmVseSBvbiB0aGlzIHdpdGggdGhlIGNhbGwgYmVsb3cuIik7Ci0gICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmVJbmRleCksIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihidWZmZXIpKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
LSAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBB
c3NlbWJseUhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwotCi0gICAgICAgIC8vIGV4
Y2VwdGlvbiBoZXJlLgotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgdm9pZCAoKmRvVW53
aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0s
IGV4ZWMpOwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgYXV0byBleGNlcHRpb25DYWxsID0gaml0LmNhbGwoKTsKLSAgICAg
ICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAgICBub0V4Y2VwdGlv
bi5saW5rKCZqaXQpOwotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsK
LSAgICAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGMzI6IHsKLSAgICAgICAgICAgIGpp
dC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86
OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAgICAg
aml0LnJldCgpOwotCi0gICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQotICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0
aW9uQ2FsbCwgZG9VbndpbmRpbmcpOwotCi0gICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9y
dEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOwotICAgIH0KLQot
ICAgIC8vIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhIHN0YWNrIGNoZWNrIGhlcmUg
c2luY2UgV2FzbUIzSVJHZW5lcmF0b3IKLSAgICAvLyB3aWxsIGRvIHRoZSBzdGFjayBjaGVjayBm
b3IgdXMuIFdoZW5ldmVyIGl0IGRldGVjdHMgdGhhdCBpdCBtaWdodCBtYWtlCi0gICAgLy8gYSBj
YWxsIHRvIHRoaXMgdGh1bmssIGl0J2xsIG1ha2Ugc3VyZSBpdHMgc3RhY2sgY2hlY2sgaW5jbHVk
ZXMgc3BhY2UKLSAgICAvLyBmb3IgdXMgaGVyZS4KLQotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJl
ck9mUGFyYW1ldGVycyA9IGFyZ0NvdW50ICsgMTsgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1l
bnQuCi0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotICAgIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVv
ZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0gICAgY29uc3QgdW5zaWdu
ZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRC
eXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0gICAgaml0LnN1YlB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICBKSVQ6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLQotICAgIC8vIEZJ
WE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBh
cmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBm
b3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NTQ3Ci0gICAgCi0gICAgLy8gRmlyc3QgZ28gdGhyb3VnaCB0aGUgaW50ZWdlciBwYXJh
bWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lzdGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4KLSAg
ICB7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWdu
ZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNl
dCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKyth
cmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChh
cmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6
Ci0gICAgICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6IHsK
LSAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByUmVnOwotICAgICAgICAgICAgICAgIGlmIChtYXJz
aGFsbGVkR1BScyA8IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAg
ICBncHJSZWcgPSB3YXNtQ0MubV9ncHJBcmdzW21hcnNoYWxsZWRHUFJzXS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBz
cGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGFzIHNj
cmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BS
MDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZ3ByUmVnKTsKLSAgICAgICAgICAgICAgICAg
ICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKLSAgICAgICAgICAgICAgICBqaXQuemVyb0V4
dGVuZDMyVG9QdHIoZ3ByUmVnLCBncHJSZWcpOyAvLyBDbGVhciBub24taW50MzIgYW5kIG5vbi10
YWcgYml0cy4KLSAgICAgICAgICAgICAgICBqaXQuYm94SW50MzIoZ3ByUmVnLCBKU1ZhbHVlUmVn
cyhncHJSZWcpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KGdwclJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IEYzMjoKLSAgICAgICAgICAgIGNhc2UgRjY0OgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6
IGhhbmRsZWQgYmVsb3cuCi0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzID49IHdh
c21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICB7Ci0gICAgICAgIC8vIEludGVnZXIgcmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNw
aWxsZWQsIHRoZXNlIGFyZSBub3cgYXZhaWxhYmxlLgotICAgICAgICBHUFJSZWcgZG91YmxlRW5j
b2RlT2Zmc2V0R1BSUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgYm9vbCBoYXNNYXRlcmlh
bGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSBmYWxzZTsKLSAgICAgICAgYXV0byBtYXRlcmlhbGl6
ZURvdWJsZUVuY29kZU9mZnNldCA9IFsmaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0
LCAmaml0XSAoR1BSUmVnIGRlc3QpIHsKLSAgICAgICAgICAgIGlmICghaGFzTWF0ZXJpYWxpemVk
RG91YmxlRW5jb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChEb3Vi
bGVFbmNvZGVPZmZzZXQgPT0gMWxsIDw8IDQ4LCAiY29kZWdlbiBhc3N1bWVzIHRoaXMgYmVsb3ci
KTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW0zMigxKSwgZGVzdCk7
Ci0gICAgICAgICAgICAgICAgaml0LmxzaGlmdDY0KEpJVDo6VHJ1c3RlZEltbTMyKDQ4KSwgZGVz
dCk7Ci0gICAgICAgICAgICAgICAgaGFzTWF0ZXJpYWxpemVkRG91YmxlRW5jb2RlT2Zmc2V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB1bnNpZ25lZCBtYXJz
aGFsbGVkR1BScyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRGUFJzID0gMDsKLSAg
ICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFy
Z3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgdW5z
aWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYXJn
TnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBUeXBl
IGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAgICAgICAgIHN3aXRj
aCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgY2FzZSBG
dW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgY2FzZSBJNjQ6Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBh
Ym92ZS4KLSAgICAgICAgICAgIGNhc2UgSTMyOgotICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6
IGhhbmRsZWQgYWJvdmUuCi0gICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdh
c21DQy5tX2dwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7Ci0gICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgICAgICAg
ICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3
YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gd2Fz
bUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJn
dW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAg
ICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0
ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJSZWcsIGZwclJlZyk7Ci0gICAgICAgICAgICAg
ICAgaml0LnB1cmlmeU5hTihmcHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91Ymxl
VG82NChmcHJSZWcsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplRG91Ymxl
RW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAg
aml0LmFkZDY0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAg
ICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVG
cmFtZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVv
ZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7Ci0g
ICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFyc2hh
bGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3Bp
bGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3Jh
dGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQUjA7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAgICAg
ICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0
Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJp
YWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnKTsKLSAgICAg
ICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsK
LSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJz
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1
bWVudEdQUjApOwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJh
bWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0K
LSAgICBHUFJSZWcgaW1wb3J0SlNDZWxsR1BSUmVnID0gR1BSSW5mbzo6cmVnVDA7IC8vIENhbGxl
ZSBuZWVkcyB0byBiZSBpbiByZWdUMCBmb3Igc2xvdyBwYXRoIGJlbG93LgotICAgIEFTU0VSVCgh
d2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQoaW1wb3J0SlNDZWxsR1BSUmVnKSk7Ci0K
LSAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChqaXQsIGltcG9ydEluZGV4LCBpbXBvcnRKU0Nl
bGxHUFJSZWcpOwotCi0gICAgaml0LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihu
dW1iZXJPZlBhcmFtZXRlcnMpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5
bG9hZE9mZnNldCkpOwotICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5k
ZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1l
bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0KLSAgICAvLyBGSVhN
RSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUgaXMgdm9pZCBhbmQgbm8gcmVnaXN0
ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTQ4OAotCi0gICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm9z
LmFkZCgpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
Q29kZU9yaWdpbigpLCBpbXBvcnRKU0NlbGxHUFJSZWcpOwotICAgIEpJVDo6RGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUOjpUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVl
KDApOwotICAgIEpJVDo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBpbXBvcnRKU0NlbGxHUFJSZWcsIHRhcmdldFRvQ2hlY2ss
IGluaXRpYWxSaWdodFZhbHVlKTsKLSAgICBKSVQ6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNh
bGwoKTsKLSAgICBKSVQ6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7Ci0gICAgc2xvd1BhdGgubGlu
aygmaml0KTsKLSAgICAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAgaGVyZS4KLSAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJ
bmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMi4KLSAgICBKSVQ6
OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKLSAgICBkb25lLmxpbmsoJmppdCk7Ci0K
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKLQotICAgIHN3aXRj
aCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewotICAgIGNhc2UgVm9pZDoKLSAgICAgICAgLy8g
RGlzY2FyZC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jOgotICAgIGNhc2UgQW55ZnVu
YzoKLSAgICAgICAgLy8gRm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRo
IHRoZXNlIHR5cGVzIGluIHRoZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHku
TW9kdWxlIHZhbGlkYXRpb24gZXJyb3IuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSTY0OiB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAgfQotICAgIGNhc2Ug
STMyOiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKLQotICAgICAgICBzbG93UGF0aC5hcHBlbmQo
aml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVU
YWdSZWdpc3RlcnMpKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdElu
dDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVn
aXN0ZXJzKSk7Ci0gICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBkb25lLmFwcGVuZChq
aXQuanVtcCgpKTsKLQotICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAg
ICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBpbnQzMl90ICgq
Y29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICAgICAgICAgIHJldHVybiB2LnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9JMzIpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEYzMjogewotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIGF1
dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgYXV0byBpc0RvdWJsZSA9IGpp
dC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwg
RG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKLSAgICAg
ICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRv
bmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7Ci0g
ICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0Rv
dWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwot
ICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAo
KSk7Ci0KLSAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwotICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAg
YXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChq
aXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKLQotICAgICAgICBmbG9hdCAoKmNvbnZlcnRU
b0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHYpIC0+IGZsb2F0IHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAg
fTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRjY0OiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsK
LSAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICBhdXRvIGlz
RG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBXZSdyZSBhbiBp
bnQzMgotICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRv
RG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7
Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzRG91YmxlLmxp
bmsoJmppdCk7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1i
ZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWRkNjQoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGpp
dC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOwotICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBu
b3RBTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQu
Y2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhj
ZXB0aW9uKCp2bSkpOwotCi0gICAgICAgIGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRl
KiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7
IAotICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIHJldHVybiB2LnRv
TnVtYmVyKGV4ZWMpOwotICAgICAgICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgY29udmVydFRvRjY0KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1w
dHkoKSkgewotICAgICAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKLSAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKLSAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGppdC5q
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5n
KShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgewotICAgICAgICAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMp
OwotICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAg
fTsKLQotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOwotICAg
ICAgICB9KTsKLSAgICB9Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChVTkxJS0VMWShwYXRj
aEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0Nh
bGwpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9j
YXRpb25PZih0YXJnZXRUb0NoZWNrKSk7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0
aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKLSAgICBj
YWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRo
QmVnaW4sIGhvdFBhdGhPdGhlcik7Ci0KLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5k
ZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7Ci19Ci0KIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWdu
ZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRS
ZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAgLTYzMywyNCArNTEsMjMgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1
bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
ICE9IHNjcmF0Y2gpOwogICAgIEdQUlJlZyBzaXplUmVnQXNTY3JhdGNoID0gc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyOwogCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8Q29udGV4dCwg
SlNXZWJBc3NlbWJseUluc3RhbmNlPjo6dmFsdWUsICJUaGlzIGlzIGFzc3VtZWQgaW4gdGhlIGNv
ZGUgYmVsb3cuIik7CiAgICAgLy8gQjMncyBjYWxsIGNvZGVnZW4gZW5zdXJlcyB0aGF0IHRoZSBK
U0NlbGwgaXMgYSBXZWJBc3NlbWJseUZ1bmN0aW9uLgotICAgIGppdC5sb2FkV2FzbUNvbnRleHQo
c2l6ZVJlZ0FzU2NyYXRjaCk7IC8vIE9sZCBJbnN0YW5jZSoKLSAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
ZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOwotCi0gICAgLy8gR2V0IHRo
ZSBjYWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0
LiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNl
LgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAg
IGppdC5zdG9yZVdhc21Db250ZXh0KGJhc2VNZW1vcnkpOworICAgIGppdC5sb2FkV2FzbUNvbnRl
eHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgorICAgIC8vIEdl
dCB0aGUgY2FsbGVlJ3MgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYW5kIHNldCBpdCBhcyBXYXNtQ29u
dGV4dCdzIGluc3RhbmNlLiBUaGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBp
dHMgb3duIEluc3RhbmNlLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNT
Y3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoaW1w
b3J0SW5kZXgpKSwgYmFzZU1lbW9yeSk7IC8vIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSouCisgICAg
Ly8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2Fz
bSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCisgICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludChpbXBvcnRJbmRleCkpLCBzY3JhdGNoKTsgLy8gV2Fz
bTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24uCisgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJ
bnN0YW5jZShiYXNlTWVtb3J5KTsKIAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXpl
UmVnQXNTY3JhdGNoLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tM
aW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRjaCk7CiAgICAgaml0LnN0b3JlUHRyKHNpemVSZWdBc1Nj
cmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CiAKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5n
IGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXZWJBc3NlbWJseS5JbnN0YW5jZSBoYXZlIHRoZSBzYW1l
IHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIg
YXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgotICAgIGppdC5sb2FkUHRyKEpJ
VDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZXYXNtTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICBB
U1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNz
dW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0
ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1v
cnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6
ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsgLy8gV2FzbU1lbW9yeTo6dm9pZCouCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6dm9pZCouCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IHNpemVSZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5z
aXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5z
aXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CkBAIC02NTgsNyArNzUsNiBAQCBFeHBlY3RlZDxNYWNy
b0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGlt
cG9ydEluZGV4KQogICAgIH0KIAogICAgIC8vIFRhaWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUgV2Vi
QXNzZW1ibHkgZnVuY3Rpb24uCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gs
IFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24o
KSksIHNjcmF0Y2gpOwogICAgIGppdC5sb2FkUHRyKHNjcmF0Y2gsIHNjcmF0Y2gpOwogICAgIGpp
dC5qdW1wKHNjcmF0Y2gpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
aAppbmRleCA0ZTI2MmJhLi5mZWM2YmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsOSArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21G
b3JtYXQuaCIKLSNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDQsNyArNDIsNiBAQCBlbnVtIGNsYXNzIEJpbmRpbmdG
YWlsdXJlIHsKIH07CiAKIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpOwotRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSnMoVk0qLCBCYWc8Q2FsbExp
bmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydElu
ZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAppbmRleCA3MGZlZmIwLi5kZDI3ZTQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcApAQCAtMzEsMjAg
KzMxLDI4IEBACiAKICNpbmNsdWRlICJXYXNtQkJRUGxhbklubGluZXMuaCIKICNpbmNsdWRlICJX
YXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Xb3Jr
bGlzdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1Db2RlQmxvY2s6
OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZv
cm1hdGlvbikKK1JlZjxDb2RlQmxvY2s+IENvZGVCbG9jazo6Y3JlYXRlKENvbnRleHQqIGNvbnRl
eHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2Fz
bUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCit7CisgICAgYXV0byogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBmYXN0TWFsbG9jKHNpemVvZihDb2RlQmxvY2spKSkgQ29kZUJsb2NrKGNvbnRl
eHQsIG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBl
ciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpyZXN1bHQpOwor
fQorCitDb2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1v
ZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiwgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uKQogICAgIDogbV9jYWxsZWVDb3VudChtb2R1bGVJbmZvcm1hdGlvbi5pbnRl
cm5hbEZ1bmN0aW9uQ291bnQoKSkKICAgICAsIG1fbW9kZShtb2RlKQogewogICAgIFJlZlB0cjxD
b2RlQmxvY2s+IHByb3RlY3RlZFRoaXMgPSB0aGlzOwotICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpu
ZXcgQkJRUGxhbihudWxscHRyLCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6
RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChWTSosIFBsYW4mKSB7CisK
KyAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1
bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRUYXNrPFBs
YW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3Rl
ZFRoaXMpXSAoUGxhbiYpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwogICAgICAgICBpZiAobV9wbGFuLT5mYWlsZWQoKSkgewogICAgICAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBtX3BsYW4tPmVycm9yTWVzc2FnZSgpOwotICAgICAgICAgICAgbV9wbGFuID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCkBAIC02NiwxMCArNzQsMTAgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRp
b24pCiAgICAgICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dh
c21DYWxsc2l0ZXMoKTsKICAgICAgICAgbV90aWVyVXBDb3VudHMgPSBtX3BsYW4tPnRha2VUaWVy
VXBDb3VudHMoKTsKIAotICAgICAgICBtX3BsYW4gPSBudWxscHRyOwotICAgIH0pKSk7Ci0KKyAg
ICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgIH0pLCBXVEZNb3ZlKGNyZWF0ZUVt
YmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikpOwogICAgIG1fcGxhbi0+c2V0TW9k
ZShtb2RlKTsKKwogICAgIGF1dG8mIHdvcmtsaXN0ID0gV2FzbTo6ZW5zdXJlV29ya2xpc3QoKTsK
ICAgICAvLyBOb3RlLCBpbW1lZGlhdGVseSBhZnRlciB3ZSBlbnF1ZXVlIHRoZSBwbGFuLCB0aGVy
ZSBpcyBhIGNoYW5jZSB0aGUgYWJvdmUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuCiAgICAgd29y
a2xpc3QuZW5xdWV1ZShtYWtlUmVmKCptX3BsYW4uZ2V0KCkpKTsKQEAgLTkyLDcgKzEwMCw3IEBA
IHZvaWQgQ29kZUJsb2NrOjp3YWl0VW50aWxGaW5pc2hlZCgpCiAgICAgLy8gZWxzZSwgaWYgd2Ug
ZG9uJ3QgaGF2ZSBhIHBsYW4sIHdlJ3JlIGFscmVhZHkgY29tcGlsZWQuCiB9CiAKLXZvaWQgQ29k
ZUJsb2NrOjpjb21waWxlQXN5bmMoVk0mIHZtLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0
YXNrKQordm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBBc3lu
Y0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrKQogewogICAgIFJlZlB0cjxQbGFuPiBwbGFuOwog
ICAgIHsKQEAgLTEwNCwxMiArMTEyLDExIEBAIHZvaWQgQ29kZUJsb2NrOjpjb21waWxlQXN5bmMo
Vk0mIHZtLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrKQogICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIHRvIGtlZXAgYSBSZWZQdHIgb24gdGhlIFBsYW4gYmVjYXVzZSB0aGUgd29ya2xp
c3Qgd2lsbCBrZWVwCiAgICAgICAgIC8vIGEgUmVmUHRyIG9uIHRoZSBQbGFuIHVudGlsIHRoZSBw
bGFuIGZpbmlzaGVzIG5vdGlmeWluZyBhbGwgb2YgaXRzIGNhbGxiYWNrcy4KICAgICAgICAgUmVm
UHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7Ci0gICAgICAgIHBsYW4tPmFkZENv
bXBsZXRpb25UYXNrKHZtLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3Ro
aXMsIHRhc2sgPSBXVEZNb3ZlKHRhc2spLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKV0gKFZNKiB2bSwgUGxhbiYpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2bSk7Ci0gICAg
ICAgICAgICB0YXNrLT5ydW4oKnZtLCBtYWtlUmVmKCp0aGlzKSk7CisgICAgICAgIHBsYW4tPmFk
ZENvbXBsZXRpb25UYXNrKGNvbnRleHQsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tU
eXBlPihbdGhpcywgdGFzayA9IFdURk1vdmUodGFzayksIHByb3RlY3RlZFRoaXMgPSBXVEZNb3Zl
KHByb3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKKyAgICAgICAgICAgIHRhc2stPnJ1bihtYWtlUmVm
KCp0aGlzKSk7CiAgICAgICAgIH0pKTsKICAgICB9IGVsc2UKLSAgICAgICAgdGFzay0+cnVuKHZt
LCBtYWtlUmVmKCp0aGlzKSk7CisgICAgICAgIHRhc2stPnJ1bihtYWtlUmVmKCp0aGlzKSk7CiB9
CiAKIGJvb2wgQ29kZUJsb2NrOjppc1NhZmVUb1J1bihNZW1vcnlNb2RlIG1lbW9yeU1vZGUpCkBA
IC0xMzAsNiArMTM3LDEzIEBAIGJvb2wgQ29kZUJsb2NrOjppc1NhZmVUb1J1bihNZW1vcnlNb2Rl
IG1lbW9yeU1vZGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisKK3ZvaWQgQ29kZUJsb2NrOjpz
ZXRDb21waWxhdGlvbkZpbmlzaGVkKCkKK3sKKyAgICBtX3BsYW4gPSBudWxscHRyOworICAgIG1f
Y29tcGlsYXRpb25GaW5pc2hlZC5zdG9yZSh0cnVlKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAppbmRleCAyZGJmN2U0Li45ZmMxOTQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJV
cENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CkBAIC0zNywxMSArMzgsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBu
YW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIENhbGxlZTsKK3N0cnVjdCBDb250ZXh0OwogY2xhc3Mg
QkJRUGxhbjsKIGNsYXNzIE9NR1BsYW47CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CkBAIC01
MSwyMCArNTEsMTYgQEAgZW51bSBjbGFzcyBNZW1vcnlNb2RlIDogdWludDhfdDsKICAgICAKIGNs
YXNzIENvZGVCbG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb2RlQmxvY2s+IHsK
IHB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZNJiwgUmVmPENvZGVCbG9j
az4mJik7CisgICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShSZWY8Q29kZUJsb2NrPiYmKTsK
ICAgICB1c2luZyBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2sgPSBSZWZQdHI8V1RGOjpTaGFyZWRU
YXNrPENhbGxiYWNrVHlwZT4+OwotICAgIHN0YXRpYyBSZWY8Q29kZUJsb2NrPiBjcmVhdGUoTWVt
b3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24pCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb2RlQmxvY2sobW9kZSwgbW9kdWxlSW5m
b3JtYXRpb24pKTsKLSAgICB9CisgICAgc3RhdGljIFJlZjxDb2RlQmxvY2s+IGNyZWF0ZShDb250
ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mLCBDcmVhdGVFbWJlZGRlcldyYXBw
ZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgIHZvaWQgd2FpdFVudGlsRmluaXNoZWQo
KTsKLSAgICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYm
KTsKKyAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0KiwgQXN5bmNDb21waWxhdGlvbkNhbGxi
YWNrJiYpOwogCiAgICAgYm9vbCBjb21waWxhdGlvbkZpbmlzaGVkKCkKICAgICB7Ci0gICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuICFtX3BsYW47
CisgICAgICAgIHJldHVybiBtX2NvbXBpbGF0aW9uRmluaXNoZWQubG9hZCgpOwogICAgIH0KICAg
ICBib29sIHJ1bm5hYmxlKCkgeyByZXR1cm4gY29tcGlsYXRpb25GaW5pc2hlZCgpICYmICFtX2Vy
cm9yTWVzc2FnZTsgfQogCkBAIC03OSw4ICs3NSwxMSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25l
ZCBmdW5jdGlvbkltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93YXNtVG9XYXNtRXhpdFN0
dWJzLnNpemUoKTsgfQogCisgICAgLy8gVGhlc2UgdHdvIGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5
IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBvcHVsYXRlZC4KKwogICAgIENhbGxl
ZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5j
dGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENv
dW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFj
ZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKIApAQCAtOTAsNiArODksNyBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIENhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChy
dW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49
IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0g
ZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAgICBpZiAo
bV9vcHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4XSkKQEAgLTExNyw3ICsxMTcsOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPTUdQbGFuOwogCi0gICAgQ29kZUJsb2Nr
KE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJik7CisgICAgQ29kZUJsb2NrKENvbnRleHQq
LCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYm
LCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgp
OwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAg
ICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7CkBAIC0xMjgsNiArMTI5LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3dh
c21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93
YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CisgICAgc3Rk
OjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKICAgICBTdHJp
bmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgTG9jayBtX2xvY2s7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNvbnRleHQuY3BwCmluZGV4IGZlYTE2ZGUuLmNmMzQ4NTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5jcHAKQEAgLTI4LDMwICsyOCw0
MSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKICNp
bmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYgdm0pCitib29s
IENvbnRleHQ6OnVzZUZhc3RUTFMoKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAg
cmV0dXJuIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworSlNXZWJBc3NlbWJseUluc3RhbmNlKiBDb250ZXh0
Ojpsb2FkKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGlmICh1c2VG
YXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENvbnRleHQq
PihfcHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKKyAg
ICBpZiAodXNlRmFzdFRMUygpKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdChXVEZfV0FTTV9DT05U
RVhUX0tFWSkpOwogI2VuZGlmCi0gICAgcmV0dXJuIHZtLndhc21Db250ZXh0OworICAgIHJldHVy
biBpbnN0YW5jZTsKIH0KIAotdm9pZCBzdG9yZUNvbnRleHQoVk0mIHZtLCBDb250ZXh0KiBjb250
ZXh0KQordm9pZCBDb250ZXh0OjpzdG9yZShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3QsIHZv
aWQqIHNvZnRTdGFja0xpbWl0KQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYg
KHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIF9wdGhyZWFkX3NldHNwZWNpZmljX2Rp
cmVjdChXVEZfV0FTTV9DT05URVhUX0tFWSwgYml0d2lzZV9jYXN0PHZvaWQqPihjb250ZXh0KSk7
CisgICAgaWYgKHVzZUZhc3RUTFMoKSkKKyAgICAgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGly
ZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGluc3QpKTsKICNl
bmRpZgotICAgIHZtLndhc21Db250ZXh0ID0gY29udGV4dDsKLSAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgY29udGV4dC0+c2V0Q2FjaGVkU3RhY2tMaW1pdCh2bS5zb2Z0U3RhY2tMaW1pdCgpKTsK
KyAgICBpbnN0YW5jZSA9IGluc3Q7CisgICAgaWYgKGluc3RhbmNlKQorICAgICAgICBpbnN0YW5j
ZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChzb2Z0U3RhY2tMaW1pdCk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaApp
bmRleCAzY2Y2NWZiLi5jMmI1MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29udGV4dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
b250ZXh0LmgKQEAgLTI3LDM3ICsyNywyMCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
Ci0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5o
IgotCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07CitjbGFzcyBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdGhp
cyB0byBiZSBzb21ldGhpbmcgZWxzZSBhdCBzb21lIHBvaW50OgotLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDI2MAotdXNpbmcgQ29udGV4dCA9IEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTsKLQotaW5saW5lIGJvb2wgdXNlRmFzdFRMUygpCi17Ci0jaWYgRU5BQkxF
KEZBU1RfVExTX0pJVCkKLSAgICByZXR1cm4gT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0VExT
KCk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQorc3RydWN0IENvbnRleHQg
eworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgeyBudWxscHRyIH07CiAKLWlu
bGluZSBib29sIHVzZUZhc3RUTFNGb3JDb250ZXh0KCkKLXsKLSAgICBpZiAodXNlRmFzdFRMUygp
KQotICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQorICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogbG9hZCgpIGNv
bnN0OworICAgIHZvaWQgc3RvcmUoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdm9pZCogc29mdFN0
YWNrTGltaXQpOwogCi1Db250ZXh0KiBsb2FkQ29udGV4dChWTSYpOwotdm9pZCBzdG9yZUNvbnRl
eHQoVk0mLCBDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgdXNlRmFzdFRMUygpOworfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRW1iZWRkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg3OTRm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVk
ZGVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworI2lu
Y2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2Ns
YXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsgLy8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6
SW5zdGFuY2UsIHNvIHNob3VsZCB1c2UgYmVsb3cuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3
MgorCituYW1lc3BhY2UgV2FzbSB7CisKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CitzdHJ1
Y3QgSW50ZXJuYWxGdW5jdGlvbjsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKK2NsYXNzIFNp
Z25hdHVyZTsKK3N0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOworCisvLyBDcmVhdGUgd3Jh
cHBlciBjb2RlIHRvIGNhbGwgZnJvbSBlbWJlZGRlciAtPiBXZWJBc3NlbWJseS4KK3VzaW5nIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVt
b3J5TW9kZSwgdWludDMyX3QpPjsKKworLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW4gZXhjZXB0aW9u
IGlzIGRldGVjdGVkLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBQQyB0byBjb250aW51ZSBhdC4K
K3VzaW5nIFRocm93V2FzbUV4Y2VwdGlvbiA9IHZvaWQqICgqKShFeGVjU3RhdGUqLCBXYXNtOjpF
eGNlcHRpb25UeXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5k
ZXggMmIxZDgyOC4uY2MxZTdkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTMwLDExICszMCwxMSBAQAogCiAj
aW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0
LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2lu
Y2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCiAKKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCmlu
ZGV4IDM4MTI4MzYuLmU1ZTA3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKQEAgLTI3LDggKzI3LDYgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIHZvaWQgcmVnaXN0
ZXJDb2RlKHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCmluZGV4IGIyMjIyMTcuLmU3YjNkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTQ0LDE0ICs0NCwxNSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgSlNGdW5jdGlvbjsKLQogbmFtZXNwYWNlIEIzIHsKIGNsYXNzIENvbXBpbGF0
aW9uOwogfQogCiBuYW1lc3BhY2UgV2FzbSB7CiAKK3N0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7
CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CisKIGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5
cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSW5zdGFuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjM0YmUwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSW5zdGFuY2UuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Fz
bUluc3RhbmNlLmgiCisKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgIldhc21Nb2R1
bGVJbmZvcm1hdGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20geworCituYW1lc3BhY2Ugeworc2l6ZV90IGdsb2JhbE1lbW9y
eUJ5dGVTaXplKE1vZHVsZSYgbW9kdWxlKQoreworICAgIHJldHVybiBtb2R1bGUubW9kdWxlSW5m
b3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3Rlcik7Cit9Cit9CisKK0lu
c3RhbmNlOjpJbnN0YW5jZShSZWY8TW9kdWxlPiYmIG1vZHVsZSkKKyAgICA6IG1fbW9kdWxlKFdU
Rk1vdmUobW9kdWxlKSkKKyAgICAsIG1fZ2xvYmFscyhNYWxsb2NQdHI8dWludDY0X3Q+OjptYWxs
b2MoZ2xvYmFsTWVtb3J5Qnl0ZVNpemUobV9tb2R1bGUuZ2V0KCkpKSkKK3sKK30KKworSW5zdGFu
Y2U6On5JbnN0YW5jZSgpIHsgfQorCitzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVtb3J5QWxsb2Nh
dGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUobV9tb2R1bGUu
Z2V0KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmZiODkxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTAs
MCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2Fz
bUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxl
LmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKKworY2xhc3MgSW5zdGFuY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW5z
dGFuY2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEluc3RhbmNlPiBjcmVhdGUoUmVmPE1v
ZHVsZT4mJiBtb2R1bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnN0
YW5jZShXVEZNb3ZlKG1vZHVsZSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmFsaXplQ3JlYXRp
b24oUmVmPENvZGVCbG9jaz4mJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBtX2NvZGVCbG9j
ayA9IFdURk1vdmUoY29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+
SW5zdGFuY2UoKTsKKworICAgIHNpemVfdCBleHRyYU1lbW9yeUFsbG9jYXRlZCgpIGNvbnN0Owor
CisgICAgTW9kdWxlJiBtb2R1bGUoKSB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQorICAgIENv
ZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KKyAgICBN
ZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CisgICAgVGFibGUqIHRh
YmxlKCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQorCisgICAgaW50MzJfdCBsb2FkSTMyR2xv
YmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQorICAg
IGludDY0X3QgbG9hZEk2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2Jh
bHMuZ2V0KClbaV07IH0KKyAgICBmbG9hdCBsb2FkRjMyR2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxmbG9hdD4obG9hZEkzMkdsb2JhbChpKSk7IH0KKyAgICBk
b3VibGUgbG9hZEY2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nh
c3Q8ZG91YmxlPihsb2FkSTY0R2xvYmFsKGkpKTsgfQorICAgIHZvaWQgc2V0R2xvYmFsKHVuc2ln
bmVkIGksIGludDY0X3QgYml0cykgeyBtX2dsb2JhbHMuZ2V0KClbaV0gPSBiaXRzOyB9CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihJbnN0YW5jZSwgbV9jYWNoZWRTdGFja0xpbWl0KTsgfQorICAgIHZvaWQq
IGNhY2hlZFN0YWNrTGltaXQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFN0YWNrTGltaXQ7IH0K
KyAgICB2b2lkIHNldENhY2hlZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsgbV9jYWNoZWRTdGFj
a0xpbWl0ID0gbGltaXQ7IH0KKworICAgIGZyaWVuZCBjbGFzcyBKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTsgLy8gRklYTUUgcmVtb3ZlIHRoaXMgb25jZSByZWZhY3RvcmVkIGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE3NzQ3Mi4KKworcHJpdmF0ZToKKyAgICBJbnN0YW5jZShSZWY8TW9kdWxlPiYm
KTsKKworICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1f
Y29kZUJsb2NrOworICAgIFJlZlB0cjxNZW1vcnk+IG1fbWVtb3J5OworICAgIFJlZlB0cjxUYWJs
ZT4gbV90YWJsZTsKKyAgICBNYWxsb2NQdHI8dWludDY0X3Q+IG1fZ2xvYmFsczsKKyAgICB2b2lk
KiBtX2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludHB0cl90Pjo6bWF4KCkpIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCBjNWY0OGU5Li4xYzFjZjU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjgsMTMgKzI4LDE5IEBACiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIldh
c21UaHVua3MuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KICNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNp
bmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKQEAgLTUxLDE5ICs1NywxOSBAQCBORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKSB7IENSQQog
c3RydWN0IE1lbW9yeVJlc3VsdCB7CiAgICAgZW51bSBLaW5kIHsKICAgICAgICAgU3VjY2VzcywK
LSAgICAgICAgU3VjY2Vzc0FuZEFzeW5jR0MsCi0gICAgICAgIFN5bmNHQ0FuZFJldHJ5CisgICAg
ICAgIFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZSwKKyAgICAgICAgU3luY1RyeVRvUmVj
bGFpbU1lbW9yeQogICAgIH07Ci0gICAgCisKICAgICBzdGF0aWMgY29uc3QgY2hhciogdG9TdHJp
bmcoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNh
c2UgU3VjY2VzczoKICAgICAgICAgICAgIHJldHVybiAiU3VjY2VzcyI7Ci0gICAgICAgIGNhc2Ug
U3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICByZXR1cm4gIlN1Y2Nlc3NBbmRBc3luY0dD
IjsKLSAgICAgICAgY2FzZSBTeW5jR0NBbmRSZXRyeToKLSAgICAgICAgICAgIHJldHVybiAiU3lu
Y0dDQW5kUmV0cnkiOworICAgICAgICBjYXNlIFN1Y2Nlc3NBbmROb3RpZnlNZW1vcnlQcmVzc3Vy
ZToKKyAgICAgICAgICAgIHJldHVybiAiU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlIjsK
KyAgICAgICAgY2FzZSBTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OgorICAgICAgICAgICAgcmV0dXJu
ICJTeW5jVHJ5VG9SZWNsYWltTWVtb3J5IjsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk4LDE3ICsx
MDQsMTcgQEAgcHVibGljOgogICAgICAgICBNZW1vcnlSZXN1bHQgcmVzdWx0ID0gWyZdIHsKICAg
ICAgICAgICAgIGF1dG8gaG9sZGVyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgICAgIGlm
IChtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6
OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB2b2lk
KiByZXN1bHQgPSBHaWdhY2FnZTo6dHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CiAgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KG51bGxwdHIsIE1lbW9y
eVJlc3VsdDo6U3luY0dDQW5kUmV0cnkpOworICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlS
ZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5KTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9tZW1vcmllcy5hcHBlbmQocmVzdWx0KTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdCgKICAgICAgICAgICAgICAg
ICByZXN1bHQsCi0gICAgICAgICAgICAgICAgbV9tZW1vcmllcy5zaXplKCkgPj0gbV9tYXhDb3Vu
dCAvIDIgPyBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3NBbmRBc3luY0dDIDogTWVtb3J5UmVzdWx0OjpT
dWNjZXNzKTsKKyAgICAgICAgICAgICAgICBtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50
IC8gMiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlIDogTWVt
b3J5UmVzdWx0OjpTdWNjZXNzKTsKICAgICAgICAgfSgpOwogICAgICAgICAKICAgICAgICAgaWYg
KE9wdGlvbnM6OmxvZ1dlYkFzc2VtYmx5TWVtb3J5KCkpCkBAIC0xNTMsMTIgKzE1OSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIE1lbW9yeVJlc3VsdDo6S2luZCByZXN1bHQgPSBbJl0gewogICAgICAg
ICAgICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICAgICAgaWYgKG1f
cGh5c2ljYWxCeXRlcyArIGJ5dGVzID4gbWVtb3J5TGltaXQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVtb3J5UmVzdWx0OjpTeW5jVHJ5VG9SZWNsYWltTWVtb3J5OwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX3BoeXNpY2FsQnl0ZXMgKz0gYnl0ZXM7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChtX3BoeXNpY2FsQnl0ZXMgPj0gbWVtb3J5TGltaXQoKSAvIDIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNz
dXJlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNj
ZXNzOwogICAgICAgICB9KCk7CkBAIC0yMDUsNyArMjExLDcgQEAgc3RhdGljIE1lbW9yeU1hbmFn
ZXImIG1lbW9yeU1hbmFnZXIoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotYm9vbCB0
cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9jYXRlKQorYm9vbCB0cnlBbGxvY2F0ZShj
b25zdCBGdW5jJiBhbGxvY2F0ZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKE1lbW9yeTo6Tm90
aWZ5UHJlc3N1cmUpPiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIGNvbnN0IFdURjo6RnVuY3Rpb248
dm9pZChNZW1vcnk6OlN5bmNUcnlUb1JlY2xhaW0pPiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkK
IHsKICAgICB1bnNpZ25lZCBudW1UcmllcyA9IDI7CiAgICAgYm9vbCBkb25lID0gZmFsc2U7CkBA
IC0yMTQsMTQgKzIyMCwxNiBAQCBib29sIHRyeUFuZEdDKFZNJiB2bSwgY29uc3QgRnVuYyYgYWxs
b2NhdGUpCiAgICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTdWNjZXNzOgogICAgICAgICAgICAg
ZG9uZSA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNZW1vcnlSZXN1
bHQ6OlN1Y2Nlc3NBbmRBc3luY0dDOgotICAgICAgICAgICAgdm0uaGVhcC5jb2xsZWN0QXN5bmMo
Q29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKyAgICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN1Y2Nl
c3NBbmROb3RpZnlNZW1vcnlQcmVzc3VyZToKKyAgICAgICAgICAgIGlmIChub3RpZnlNZW1vcnlQ
cmVzc3VyZSkKKyAgICAgICAgICAgICAgICBub3RpZnlNZW1vcnlQcmVzc3VyZShNZW1vcnk6Ok5v
dGlmeVByZXNzdXJlVGFnKTsKICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeToKKyAgICAg
ICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1vcnk6CiAgICAgICAgICAg
ICBpZiAoaSArIDEgPT0gbnVtVHJpZXMpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB2bS5oZWFwLmNvbGxlY3RTeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CisgICAgICAg
ICAgICBpZiAoc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkKKyAgICAgICAgICAgICAgICBzeW5jVHJ5
VG9SZWNsYWltTWVtb3J5KE1lbW9yeTo6U3luY1RyeVRvUmVjbGFpbVRhZyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIzMCwzMiArMjM4LDMyIEBAIGJvb2wgdHJ5
QW5kR0MoVk0mIHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKIAogfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCiAKLWNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQorTWVtb3J5
OjpNZW1vcnkoKQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAiQm91bmRzQ2hlY2tpbmciOwotICAgIGNhc2UgTWVtb3J5
TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4gIlNpZ25hbGluZyI7Ci0gICAgfQotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwogfQogCi1NZW1vcnk6Ok1lbW9y
eShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCitNZW1vcnk6Ok1lbW9yeShQ
YWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIEZ1bmN0aW9uPHZvaWQoTm90aWZ5
UHJlc3N1cmUpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBGdW5jdGlvbjx2b2lkKFN5bmNUcnlU
b1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZChH
cm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2sp
CiAgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKICAgICAsIG1fbWF4aW11bShtYXhpbXVtKQorICAg
ICwgbV9ub3RpZnlNZW1vcnlQcmVzc3VyZShXVEZNb3ZlKG5vdGlmeU1lbW9yeVByZXNzdXJlKSkK
KyAgICAsIG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeShXVEZNb3ZlKHN5bmNUcnlUb1JlY2xhaW1N
ZW1vcnkpKQorICAgICwgbV9ncm93U3VjY2Vzc0NhbGxiYWNrKFdURk1vdmUoZ3Jvd1N1Y2Nlc3ND
YWxsYmFjaykpCiB7CiAgICAgQVNTRVJUKCFpbml0aWFsLmJ5dGVzKCkpOwogICAgIEFTU0VSVCht
X21vZGUgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpOwogICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJNZW1vcnk6Ok1lbW9yeSBhbGxvY2F0aW5nICIsICp0aGlzKTsKIH0KIAotTWVtb3J5
OjpNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSBtb2RlKQorTWVtb3J5OjpNZW1v
cnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNp
emVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSBtb2RlLCBGdW5jdGlvbjx2b2lkKE5vdGlm
eVByZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgRnVuY3Rpb248dm9pZChTeW5jVHJ5
VG9SZWNsYWltKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQo
R3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNr
KQogICAgIDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkK
ICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGltdW0pCiAgICAg
LCBtX21hcHBlZENhcGFjaXR5KG1hcHBlZENhcGFjaXR5KQogICAgICwgbV9tb2RlKG1vZGUpCisg
ICAgLCBtX25vdGlmeU1lbW9yeVByZXNzdXJlKFdURk1vdmUobm90aWZ5TWVtb3J5UHJlc3N1cmUp
KQorICAgICwgbV9zeW5jVHJ5VG9SZWNsYWltTWVtb3J5KFdURk1vdmUoc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSkpCisgICAgLCBtX2dyb3dTdWNjZXNzQ2FsbGJhY2soV1RGTW92ZShncm93U3VjY2Vz
c0NhbGxiYWNrKSkKIHsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkg
YWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CkBAIC0yNzUsNyArMjgzLDEyIEBAIHN0YXRpYyB2b2lk
IGNvbW1pdFplcm9QYWdlcyh2b2lkKiBzdGFydEFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykK
ICNlbmRpZgogfQogCi1SZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKK1JlZlB0cjxNZW1vcnk+IE1lbW9yeTo6
Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeSgpKTsKK30KKworUmVm
UHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBt
YXhpbXVtLCBXVEY6OkZ1bmN0aW9uPHZvaWQoTm90aWZ5UHJlc3N1cmUpPiYmIG5vdGlmeU1lbW9y
eVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3luY1Ry
eVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291
bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaW5p
dGlhbCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1heGltdW0gfHwgbWF4aW11bSA+PSBpbml0aWFs
KTsgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBvdXIgY2FsbGVyLgpAQCAtMjgzLDMz
ICsyOTYsMjcgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pCiAgICAgY29uc3Qgc2l6ZV90IGluaXRpYWxC
eXRlcyA9IGluaXRpYWwuYnl0ZXMoKTsKICAgICBjb25zdCBzaXplX3QgbWF4aW11bUJ5dGVzID0g
bWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6IDA7CiAKLSAgICAvLyBXZSBuZWVkIHRvIGJlIHN1
cmUgd2UgaGF2ZSBhIHN0dWIgcHJpb3IgdG8gcnVubmluZyBjb2RlLgotICAgIGlmIChVTkxJS0VM
WSghVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dl
bmVyYXRvcikpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIGlmIChtYXhpbXVtICYm
ICFtYXhpbXVtQnl0ZXMpIHsKICAgICAgICAgLy8gVXNlciBzcGVjaWZpZWQgYSB6ZXJvIG1heGlt
dW0sIGluaXRpYWwgc2l6ZSBtdXN0IGFsc28gYmUgemVyby4KICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWluaXRpYWxCeXRlcyk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KGlu
aXRpYWwsIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5p
dGlhbCwgbWF4aW11bSwgV1RGTW92ZShub3RpZnlNZW1vcnlQcmVzc3VyZSksIFdURk1vdmUoc3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeSksIFdURk1vdmUoZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKICAg
ICB9CiAgICAgCi0gICAgYm9vbCBkb25lID0gdHJ5QW5kR0MoCi0gICAgICAgIHZtLAorICAgIGJv
b2wgZG9uZSA9IHRyeUFsbG9jYXRlKAogICAgICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0OjpL
aW5kIHsKICAgICAgICAgICAgIHJldHVybiBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQaHlz
aWNhbEJ5dGVzKGluaXRpYWxCeXRlcyk7Ci0gICAgICAgIH0pOworICAgICAgICB9LCBub3RpZnlN
ZW1vcnlQcmVzc3VyZSwgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgaWYgKCFkb25lKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgY2hhciogZmFzdE1lbW9yeSA9
IG51bGxwdHI7CiAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpKSB7
Ci0gICAgICAgIHRyeUFuZEdDKAotICAgICAgICAgICAgdm0sCisgICAgICAgIHRyeUFsbG9jYXRl
KAogICAgICAgICAgICAgWyZdICgpIC0+IE1lbW9yeVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBtZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVWaXJ0dWFsUGFn
ZXMoKTsKICAgICAgICAgICAgICAgICBmYXN0TWVtb3J5ID0gYml0d2lzZV9jYXN0PGNoYXIqPihy
ZXN1bHQuYmFzZVB0cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5raW5kOwotICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9LCBub3RpZnlNZW1vcnlQcmVzc3VyZSwgc3luY1Ry
eVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgfQogICAgIAogICAgIGlmIChmYXN0TWVtb3J5KSB7CkBA
IC0zMjAsMTUgKzMyNywxNSBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0s
IFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICAgICAgfQogCiAgICAg
ICAgIGNvbW1pdFplcm9QYWdlcyhmYXN0TWVtb3J5LCBpbml0aWFsQnl0ZXMpOwotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoZmFzdE1lbW9yeSwgaW5pdGlhbCwg
bWF4aW11bSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgTWVtb3J5TW9kZTo6U2lnbmFsaW5n
KSk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1vcnkoZmFzdE1lbW9yeSwgaW5p
dGlhbCwgbWF4aW11bSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgTWVtb3J5TW9kZTo6U2ln
bmFsaW5nLCBXVEZNb3ZlKG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgV1RGTW92ZShzeW5jVHJ5VG9S
ZWNsYWltTWVtb3J5KSwgV1RGTW92ZShncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogICAgIH0KICAg
ICAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Y3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RN
ZW1vcnkoKSkpCiAgICAgICAgIHdlYkFzc2VtYmx5Q291bGRudEdldEZhc3RNZW1vcnkoKTsKIAog
ICAgIGlmICghaW5pdGlhbEJ5dGVzKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9y
eShpbml0aWFsLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5
KGluaXRpYWwsIG1heGltdW0sIFdURk1vdmUobm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBXVEZNb3Zl
KHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBXVEZNb3ZlKGdyb3dTdWNjZXNzQ2FsbGJhY2spKSk7
CiAgICAgCiAgICAgdm9pZCogc2xvd01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9j
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIFdURjo6cGFnZVNpemUoKSwgaW5pdGlhbEJ5dGVzKTsKICAg
ICBpZiAoIXNsb3dNZW1vcnkpIHsKQEAgLTMzNiw3ICszNDMsNyBAQCBSZWZQdHI8TWVtb3J5PiBN
ZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11
bSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIG1lbXNldChzbG93TWVtb3J5
LCAwLCBpbml0aWFsQnl0ZXMpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5KHNsb3dN
ZW1vcnksIGluaXRpYWwsIG1heGltdW0sIGluaXRpYWxCeXRlcywgTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShzbG93TWVtb3J5LCBp
bml0aWFsLCBtYXhpbXVtLCBpbml0aWFsQnl0ZXMsIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
LCBXVEZNb3ZlKG5vdGlmeU1lbW9yeVByZXNzdXJlKSwgV1RGTW92ZShzeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5KSwgV1RGTW92ZShncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogfQogCiBNZW1vcnk6On5N
ZW1vcnkoKQpAQCAtMzQ1LDcgKzM1MiwxMCBAQCBNZW1vcnk6On5NZW1vcnkoKQogICAgICAgICBt
ZW1vcnlNYW5hZ2VyKCkuZnJlZVBoeXNpY2FsQnl0ZXMobV9zaXplKTsKICAgICAgICAgc3dpdGNo
IChtX21vZGUpIHsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Ci0gICAgICAg
ICAgICBtcHJvdGVjdChtX21lbW9yeSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgUFJPVF9S
RUFEIHwgUFJPVF9XUklURSk7CisgICAgICAgICAgICBpZiAobXByb3RlY3QobV9tZW1vcnksIE1l
bW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAg
ICAgICAgICAgICAgZGF0YUxvZygibXByb3RlY3QgZmFpbGVkOiAiLCBzdHJlcnJvcihlcnJubyks
ICJcbiIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZVZpcnR1YWxQYWdl
cyhtX21lbW9yeSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNZW1vcnlNb2Rl
OjpCb3VuZHNDaGVja2luZzoKQEAgLTM3MSwzNCArMzgxLDUwIEBAIGJvb2wgTWVtb3J5OjphZGRy
ZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkodm9pZCogYWRkcmVzcykKICAgICByZXR1cm4gbWVtb3J5
TWFuYWdlcigpLmNvbnRhaW5zQWRkcmVzcyhhZGRyZXNzKTsKIH0KIAotYm9vbCBNZW1vcnk6Omdy
b3coVk0mIHZtLCBQYWdlQ291bnQgbmV3U2l6ZSkKK0V4cGVjdGVkPFBhZ2VDb3VudCwgTWVtb3J5
OjpHcm93RmFpbFJlYXNvbj4gTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBkZWx0YSkKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVChuZXdTaXplID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7Cisg
ICAgY29uc3QgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCA9IHNpemVJblBhZ2VzKCk7CiAK
LSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93IHRvICIsIG5ld1NpemUsICIg
ZnJvbSAiLCAqdGhpcyk7CisgICAgaWYgKCFkZWx0YS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhKTsKKyAgICAKKyAg
ICBjb25zdCBXYXNtOjpQYWdlQ291bnQgbmV3UGFnZUNvdW50ID0gb2xkUGFnZUNvdW50ICsgZGVs
dGE7CisgICAgaWYgKCFuZXdQYWdlQ291bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChHcm93RmFpbFJlYXNvbjo6SW52YWxpZEdyb3dTaXplKTsKIAotICAgIGlmIChtYXhpbXVtKCkg
JiYgbmV3U2l6ZSA+IG1heGltdW0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8g
c3VjY2VzcyA9IFsmXSAoKSB7CisgICAgICAgIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhHcm93U3Vj
Y2Vzc1RhZywgb2xkUGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOworICAgICAgICByZXR1cm4gb2xk
UGFnZUNvdW50OworICAgIH07CiAKLSAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdTaXplLmJ5
dGVzKCk7CisgICAgaWYgKGRlbHRhLnBhZ2VDb3VudCgpID09IDApCisgICAgICAgIHJldHVybiBz
dWNjZXNzKCk7CisKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiTWVtb3J5Ojpncm93KCIsIGRl
bHRhLCAiKSB0byAiLCBuZXdQYWdlQ291bnQsICIgZnJvbSAiLCAqdGhpcyk7CisgICAgUkVMRUFT
RV9BU1NFUlQobmV3UGFnZUNvdW50ID4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKSk7CisK
KyAgICBpZiAobWF4aW11bSgpICYmIG5ld1BhZ2VDb3VudCA+IG1heGltdW0oKSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW0p
OworCisgICAgc2l6ZV90IGRlc2lyZWRTaXplID0gbmV3UGFnZUNvdW50LmJ5dGVzKCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoZGVzaXJlZFNpemUgPiBtX3NpemUpOwogICAgIHNpemVfdCBleHRyYUJ5
dGVzID0gZGVzaXJlZFNpemUgLSBtX3NpemU7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXh0cmFCeXRl
cyk7Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ5QW5kR0MoCi0gICAgICAgIHZtLAorICAgIGJvb2wg
YWxsb2NhdGlvblN1Y2Nlc3MgPSB0cnlBbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IE1lbW9y
eVJlc3VsdDo6S2luZCB7CiAgICAgICAgICAgICByZXR1cm4gbWVtb3J5TWFuYWdlcigpLnRyeUFs
bG9jYXRlUGh5c2ljYWxCeXRlcyhleHRyYUJ5dGVzKTsKLSAgICAgICAgfSk7Ci0gICAgaWYgKCFz
dWNjZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorICAgICAgICB9LCBtX25v
dGlmeU1lbW9yeVByZXNzdXJlLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkpOworICAgIGlmICgh
YWxsb2NhdGlvblN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFp
bFJlYXNvbjo6T3V0T2ZNZW1vcnkpOworCiAgICAgc3dpdGNoIChtb2RlKCkpIHsKICAgICBjYXNl
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1h
eGltdW0oKS5ieXRlcygpICE9IDApOwotICAgICAgICAKKwogICAgICAgICB2b2lkKiBuZXdNZW1v
cnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6
OnBhZ2VTaXplKCksIGRlc2lyZWRTaXplKTsKICAgICAgICAgaWYgKCFuZXdNZW1vcnkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
R3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5KTsKKwogICAgICAgICBtZW1jcHkobmV3TWVtb3J5
LCBtX21lbW9yeSwgbV9zaXplKTsKICAgICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PGNoYXIqPihu
ZXdNZW1vcnkpICsgbV9zaXplLCAwLCBkZXNpcmVkU2l6ZSAtIG1fc2l6ZSk7CiAgICAgICAgIGlm
IChtX21lbW9yeSkKQEAgLTQwNiw3ICs0MzIsNyBAQCBib29sIE1lbW9yeTo6Z3JvdyhWTSYgdm0s
IFBhZ2VDb3VudCBuZXdTaXplKQogICAgICAgICBtX21lbW9yeSA9IG5ld01lbW9yeTsKICAgICAg
ICAgbV9tYXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXplOwogICAgICAgICBtX3NpemUgPSBkZXNp
cmVkU2l6ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7
CiAgICAgfQogICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fbWVtb3J5KTsKQEAgLTQxNSwxNiArNDQxLDE3IEBAIGJvb2wgTWVtb3J5Ojpn
cm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCiAgICAgICAgIAogICAgICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWFya2luZyBXZWJBc3NlbWJseSBtZW1vcnkncyAiLCBSYXdQb2ludGVy
KG1fbWVtb3J5KSwgIiBhcyByZWFkK3dyaXRlIGluIHJhbmdlIFsiLCBSYXdQb2ludGVyKHN0YXJ0
QWRkcmVzcyksICIsICIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzICsgZXh0cmFCeXRlcyksICIp
Iik7CiAgICAgICAgIGlmIChtcHJvdGVjdChzdGFydEFkZHJlc3MsIGV4dHJhQnl0ZXMsIFBST1Rf
UkVBRCB8IFBST1RfV1JJVEUpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
TWVtb3J5Ojpncm93IGluLXBsYWNlIGZhaWxlZCAiLCAqdGhpcyk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBkYXRhTG9nKCJtcHJvdGVjdCBmYWlsZWQ6ICIsIHN0cmVy
cm9yKGVycm5vKSwgIlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgICAgIGNvbW1pdFplcm9QYWdlcyhzdGFydEFkZHJlc3MsIGV4
dHJhQnl0ZXMpOwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSB9Ci0gICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzKCk7CisgICAgfQor
ICAgIH0KKwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAKIHZvaWQgTWVtb3J5OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgKaW5kZXggNjBhOWJiNy4uY2Q1ODZhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaApAQCAtMjcsOCArMjcsMTEgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAorI2luY2x1ZGUgIldhc21NZW1vcnlNb2RlLmgiCiAjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5o
IgogCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
QEAgLTM4LDE4ICs0MSw4IEBAIGNsYXNzIFByaW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gRklYTUU6IFdlIHNob3VsZCBz
dXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI2OTMKLWVudW0gY2xhc3MgTWVtb3J5TW9kZSA6IHVpbnQ4X3QgewotICAgIEJv
dW5kc0NoZWNraW5nLAotICAgIFNpZ25hbGluZwotfTsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IE51bWJlck9mTWVtb3J5TW9kZXMgPSAyOwotSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgY2hhciog
bWFrZVN0cmluZyhNZW1vcnlNb2RlKTsKLQogY2xhc3MgTWVtb3J5IDogcHVibGljIFJlZkNvdW50
ZWQ8TWVtb3J5PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU4LDcgKzUxLDEyIEBAIHB1YmxpYzoKIAogICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWVtb3J5OyB9CiAgICAg
Ci0gICAgc3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShWTSYsIFBhZ2VDb3VudCBpbml0aWFs
LCBQYWdlQ291bnQgbWF4aW11bSk7CisgICAgZW51bSBOb3RpZnlQcmVzc3VyZSB7IE5vdGlmeVBy
ZXNzdXJlVGFnIH07CisgICAgZW51bSBTeW5jVHJ5VG9SZWNsYWltIHsgU3luY1RyeVRvUmVjbGFp
bVRhZyB9OworICAgIGVudW0gR3Jvd1N1Y2Nlc3MgeyBHcm93U3VjY2Vzc1RhZyB9OworCisgICAg
c3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5
PiBjcmVhdGUoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoTm90aWZ5UHJlc3N1cmUpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwg
V1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYg
Z3Jvd1N1Y2Nlc3NDYWxsYmFjayk7CiAKICAgICB+TWVtb3J5KCk7CiAKQEAgLTc1LDIyICs3Mywz
NCBAQCBwdWJsaWM6CiAKICAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21v
ZGU7IH0KIAotICAgIC8vIGdyb3coKSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgSlNX
ZWJBc3NlbWJseU1lbW9yeSBvYmplY3Qgc2luY2UgdGhhdCBvYmplY3QgbmVlZHMgdG8gdXBkYXRl
IGludGVybmFsCi0gICAgLy8gcG9pbnRlcnMgd2l0aCB0aGUgY3VycmVudCBiYXNlIGFuZCBzaXpl
LgotICAgIGJvb2wgZ3JvdyhWTSYsIFBhZ2VDb3VudCk7CisgICAgZW51bSBjbGFzcyBHcm93RmFp
bFJlYXNvbiB7CisgICAgICAgIEludmFsaWREZWx0YSwKKyAgICAgICAgSW52YWxpZEdyb3dTaXpl
LAorICAgICAgICBXb3VsZEV4Y2VlZE1heGltdW0sCisgICAgICAgIE91dE9mTWVtb3J5LAorICAg
IH07CisgICAgRXhwZWN0ZWQ8UGFnZUNvdW50LCBHcm93RmFpbFJlYXNvbj4gZ3JvdyhQYWdlQ291
bnQpOwogCiAgICAgdm9pZCBjaGVjaygpIHsgIEFTU0VSVCghZGVsZXRpb25IYXNCZWd1bigpKTsg
fQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihNZW1vcnksIG1fbWVtb3J5KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9zaXplKTsgfQor
CiBwcml2YXRlOgotICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlKTsKLSAg
ICBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKTsKKyAgICBNZW1v
cnkoKTsKKyAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNv
dW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSwgV1RGOjpGdW5j
dGlvbjx2b2lkKE5vdGlmeVByZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpG
dW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnks
IFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYm
IGdyb3dTdWNjZXNzQ2FsbGJhY2spOworICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFn
ZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90
aWZ5TWVtb3J5UHJlc3N1cmUsIFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4m
JiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3Ms
IFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAotICAgIC8v
IEZJWE1FOiB3ZSBzaG91bGQgbW92ZSB0aGVzZSB0byB0aGUgaW5zdGFuY2UgdG8gYXZvaWQgYSBs
b2FkIG9uIGluc3RhbmNlLT5pbnN0YW5jZSBjYWxscy4KKyAgICAvLyBGSVhNRTogd2UgY2FjaGUg
dGhlc2Ugb24gdGhlIGluc3RhbmNlcyB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3Rh
bmNlIGNhbGxzLiBUaGlzIHdpbGwgcmVxdWlyZSB1cGRhdGluZyBhbGwgdGhlIGluc3RhbmNlcyB3
aGVuIGdyb3cgaXMgY2FsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3MzA1CiAgICAgdm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1f
c2l6ZSB7IDAgfTsKICAgICBQYWdlQ291bnQgbV9pbml0aWFsOwogICAgIFBhZ2VDb3VudCBtX21h
eGltdW07CiAgICAgc2l6ZV90IG1fbWFwcGVkQ2FwYWNpdHkgeyAwIH07CiAgICAgTWVtb3J5TW9k
ZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIFdURjo6RnVuY3Rp
b248dm9pZChOb3RpZnlQcmVzc3VyZSk+IG1fbm90aWZ5TWVtb3J5UHJlc3N1cmU7CisgICAgV1RG
OjpGdW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiBtX3N5bmNUcnlUb1JlY2xhaW1NZW1v
cnk7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VD
b3VudCk+IG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjazsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
SW5mb3JtYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmNwcAppbmRleCBiZjU2NWYwLi5iNWMzNGJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKQEAgLTU3LDcg
KzU3LDcgQEAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBQaW5uZWRSZWdpc3RlckluZm86Omdl
dCgpCiAgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvRmxhZywgW10g
KCkgewogICAgICAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVy
czsKICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyID0gSW52YWxpZEdQUlJlZzsKLSAg
ICAgICAgR1BSUmVnIHdhc21Db250ZXh0UG9pbnRlciA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
IEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciA9IEludmFsaWRHUFJSZWc7CiAKICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNp
emUgcmVnaXN0ZXIsIGFuZCB3ZSBzaG91bGQgYWxsb3cgZGlmZmVyZW50CiAgICAgICAgIC8vICAg
ICAgICBXZWJBc3NlbWJseS5JbnN0YW5jZSB0byBoYXZlIGRpZmZlcmVudCBwaW5zLiBSaWdodCBu
b3cgd2UgdGFrZSBhIHZlY3RvciB3aXRoIG9ubHkgb25lIGVudHJ5LgpAQCAtNjUsMjcgKzY1LDI3
IEBAIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKQog
ICAgICAgICAvLyAgICAgICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYyOTUyCiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGlubmVkU2l6ZXMgPSB7IDAg
fTsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXpl
cy5zaXplKCkgKyAxOwotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAg
ICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICAgICAgKytudW1iZXJPZlBp
bm5lZFJlZ2lzdGVyczsKICAgICAgICAgVmVjdG9yPEdQUlJlZz4gcGlubmVkUmVncyA9IGdldFBp
bm5lZFJlZ2lzdGVycyhudW1iZXJPZlBpbm5lZFJlZ2lzdGVycyk7CiAKICAgICAgICAgYmFzZU1l
bW9yeVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7Ci0gICAgICAgIGlmICghdXNlRmFz
dFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgICAgIHdhc21Db250ZXh0UG9pbnRlciA9IHBpbm5l
ZFJlZ3MudGFrZUxhc3QoKTsKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisg
ICAgICAgICAgICB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciA9IHBpbm5lZFJlZ3MudGFrZUxh
c3QoKTsKIAogICAgICAgICBBU1NFUlQocGlubmVkU2l6ZXMuc2l6ZSgpID09IHBpbm5lZFJlZ3Mu
c2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpbm5lZFNpemVzLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgc2l6ZVJlZ2lzdGVycy5hcHBlbmQoeyBwaW5uZWRSZWdz
W2ldLCBwaW5uZWRTaXplc1tpXSB9KTsKLSAgICAgICAgc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZv
LmNvbnN0cnVjdChXVEZNb3ZlKHNpemVSZWdpc3RlcnMpLCBiYXNlTWVtb3J5UG9pbnRlciwgd2Fz
bUNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvLmNvbnN0
cnVjdChXVEZNb3ZlKHNpemVSZWdpc3RlcnMpLCBiYXNlTWVtb3J5UG9pbnRlciwgd2FzbUNvbnRl
eHRJbnN0YW5jZVBvaW50ZXIpOwogICAgIH0pOwogCiAgICAgcmV0dXJuIHN0YXRpY1Bpbm5lZFJl
Z2lzdGVySW5mby5nZXQoKTsKIH0KIAotUGlubmVkUmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3Rl
ckluZm8oVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+JiYgc2l6ZVJlZ2lzdGVycywgR1BS
UmVnIGJhc2VNZW1vcnlQb2ludGVyLCBHUFJSZWcgd2FzbUNvbnRleHRQb2ludGVyKQorUGlubmVk
UmVnaXN0ZXJJbmZvOjpQaW5uZWRSZWdpc3RlckluZm8oVmVjdG9yPFBpbm5lZFNpemVSZWdpc3Rl
ckluZm8+JiYgc2l6ZVJlZ2lzdGVycywgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyLCBHUFJSZWcg
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpCiAgICAgOiBzaXplUmVnaXN0ZXJzKFdURk1vdmUo
c2l6ZVJlZ2lzdGVycykpCiAgICAgLCBiYXNlTWVtb3J5UG9pbnRlcihiYXNlTWVtb3J5UG9pbnRl
cikKLSAgICAsIHdhc21Db250ZXh0UG9pbnRlcih3YXNtQ29udGV4dFBvaW50ZXIpCisgICAgLCB3
YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcih3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcikKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3Jt
YXRpb24uaAppbmRleCA0MjM3YmFjLi4yMzMyOWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw3IEBAIHN0cnVj
dCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvIHsKIHN0cnVjdCBQaW5uZWRSZWdpc3RlckluZm8gewog
ICAgIFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOwogICAgIEdQ
UlJlZyBiYXNlTWVtb3J5UG9pbnRlcjsKLSAgICBHUFJSZWcgd2FzbUNvbnRleHRQb2ludGVyOwor
ICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKICAgICBzdGF0aWMgY29uc3Qg
UGlubmVkUmVnaXN0ZXJJbmZvJiBnZXQoKTsKICAgICBQaW5uZWRSZWdpc3RlckluZm8oVmVjdG9y
PFBpbm5lZFNpemVSZWdpc3RlckluZm8+JiYsIEdQUlJlZywgR1BSUmVnKTsKIApAQCAtNTIsOCAr
NTIsOCBAQCBzdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJbmZvIHsKICAgICB7CiAgICAgICAgIFJlZ2lz
dGVyU2V0IHJlc3VsdDsKICAgICAgICAgcmVzdWx0LnNldChiYXNlTWVtb3J5UG9pbnRlcik7Ci0g
ICAgICAgIGlmICh3YXNtQ29udGV4dFBvaW50ZXIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAg
ICAgIHJlc3VsdC5zZXQod2FzbUNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgaWYgKHdhc21Db250
ZXh0SW5zdGFuY2VQb2ludGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXN1bHQu
c2V0KHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKICAgICAgICAgaWYgKG1vZGUgIT0gTWVt
b3J5TW9kZTo6U2lnbmFsaW5nKSB7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGluZm8g
OiBzaXplUmVnaXN0ZXJzKQogICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoaW5mby5zaXplUmVn
aXN0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eU1vZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeU1vZGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYmM5ODUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHAKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlNb2RlLmgi
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjb25zdCBjaGFyKiBtYWtl
U3RyaW5nKE1lbW9yeU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNl
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiByZXR1cm4gIkJvdW5kc0NoZWNraW5nIjsKKyAg
ICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzogcmV0dXJuICJTaWduYWxpbmciOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIjsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlNb2Rl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMjg1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5oCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTRXhwb3J0TWFj
cm9zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKKy8vIEZJWE1FOiBX
ZSBzaG91bGQgc3VwcG9ydCBvdGhlciBtb2Rlcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjkzCitlbnVtIGNsYXNzIE1lbW9yeU1vZGUgOiB1aW50OF90
IHsKKyAgICBCb3VuZHNDaGVja2luZywKKyAgICBTaWduYWxpbmcKK307CisKK3N0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IE51bWJlck9mTWVtb3J5TW9kZXMgPSAyOworSlNfRVhQT1JUX1BSSVZBVEUg
Y29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1vcnlNb2RlKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcAppbmRleCBkNjgzYWU5Li4wYjIxY2EyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcApAQCAtNTYsMjcgKzU2LDI2IEBA
IHN0YXRpYyBNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQgbWFrZVZhbGlkYXRpb25SZXN1bHQoQkJR
UGxhbiYgcGxhbikKIAogc3RhdGljIFBsYW46OkNvbXBsZXRpb25UYXNrIG1ha2VWYWxpZGF0aW9u
Q2FsbGJhY2soTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewot
ICAgIHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldIChWTSogdm0sIFBsYW4mIHBsYW4pIHsKKyAgICByZXR1cm4g
Y3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXSAoUGxhbiYgcGxhbikgewogICAgICAgICBBU1NFUlQoIXBsYW4uaGFzV29yaygp
KTsKLSAgICAgICAgQVNTRVJUKHZtKTsKLSAgICAgICAgY2FsbGJhY2stPnJ1bigqdm0sIG1ha2VW
YWxpZGF0aW9uUmVzdWx0KHN0YXRpY19jYXN0PEJCUVBsYW4mPihwbGFuKSkpOworICAgICAgICBj
YWxsYmFjay0+cnVuKG1ha2VWYWxpZGF0aW9uUmVzdWx0KHN0YXRpY19jYXN0PEJCUVBsYW4mPihw
bGFuKSkpOwogICAgIH0pOwogfQogCi1Nb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQgTW9kdWxlOjp2
YWxpZGF0ZVN5bmMoVk0mIHZtLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpCitNb2R1bGU6OlZh
bGlkYXRpb25SZXN1bHQgTW9kdWxlOjp2YWxpZGF0ZVN5bmMoQ29udGV4dCogY29udGV4dCwgVmVj
dG9yPHVpbnQ4X3Q+JiYgc291cmNlKQogewotICAgIFJlZjxCQlFQbGFuPiBwbGFuID0gYWRvcHRS
ZWYoKm5ldyBCQlFQbGFuKCZ2bSwgV1RGTW92ZShzb3VyY2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9u
LCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAgIFJlZjxCQlFQbGFuPiBwbGFuID0gYWRvcHRS
ZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6VmFsaWRh
dGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCksIG51bGxwdHIsIG51bGxwdHIpKTsKICAgICBwbGFu
LT5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CiAgICAgcmV0dXJuIG1ha2VWYWxpZGF0aW9uUmVz
dWx0KHBsYW4uZ2V0KCkpOwogfQogCi12b2lkIE1vZHVsZTo6dmFsaWRhdGVBc3luYyhWTSYgdm0s
IFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFj
ayYmIGNhbGxiYWNrKQordm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMoQ29udGV4dCogY29udGV4
dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxi
YWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJC
UVBsYW4oJnZtLCBXVEZNb3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxp
ZGF0aW9uQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpKSk7CisgICAgUmVmPFBsYW4+IHBsYW4g
PSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBCQlFQbGFu
OjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKSwg
bnVsbHB0ciwgbnVsbHB0cikpOwogICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShX
VEZNb3ZlKHBsYW4pKTsKIH0KIAotUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNv
ZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUpCitSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3Jl
YXRlQ29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24g
dGhyb3dXYXNtRXhjZXB0aW9uKQogewogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsK
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CkBAIC04NywyMyArODYsMjMgQEAg
UmVmPENvZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayhNZW1vcnlNb2RlIG1v
ZGUpCiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gYmFjayBvZmYgcmV0cnlpbmcgYXQg
c29tZSBwb2ludDoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcwNjA3CiAgICAgaWYgKCFjb2RlQmxvY2sgfHwgKGNvZGVCbG9jay0+Y29tcGlsYXRpb25G
aW5pc2hlZCgpICYmICFjb2RlQmxvY2stPnJ1bm5hYmxlKCkpKSB7Ci0gICAgICAgIGNvZGVCbG9j
ayA9IENvZGVCbG9jazo6Y3JlYXRlKG1vZGUsIGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24m
Pihtb2R1bGVJbmZvcm1hdGlvbigpKSk7CisgICAgICAgIGNvZGVCbG9jayA9IENvZGVCbG9jazo6
Y3JlYXRlKGNvbnRleHQsIG1vZGUsIGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1
bGVJbmZvcm1hdGlvbigpKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dh
c21FeGNlcHRpb24pOwogICAgICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8dWludDhfdD4o
bW9kZSldID0gY29kZUJsb2NrOwogICAgIH0KICAgICByZXR1cm4gY29kZUJsb2NrLnJlbGVhc2VO
b25OdWxsKCk7CiB9CiAKLVJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Y29tcGlsZVN5bmMoTWVtb3J5
TW9kZSBtb2RlKQorUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpjb21waWxlU3luYyhDb250ZXh0KiBj
b250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVt
YmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsK
LSAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9jayhtb2Rl
KTsKKyAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9jayhj
b250ZXh0LCBtb2RlLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4
Y2VwdGlvbik7CiAgICAgY29kZUJsb2NrLT53YWl0VW50aWxGaW5pc2hlZCgpOwogICAgIHJldHVy
biBjb2RlQmxvY2s7CiB9CiAKLXZvaWQgTW9kdWxlOjpjb21waWxlQXN5bmMoVk0mIHZtLCBNZW1v
cnlNb2RlIG1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykK
K3ZvaWQgTW9kdWxlOjpjb21waWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBt
b2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2ssIENyZWF0ZUVt
YmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9u
IHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBn
ZXRPckNyZWF0ZUNvZGVCbG9jayhtb2RlKTsKLSAgICBjb2RlQmxvY2stPmNvbXBpbGVBc3luYyh2
bSwgV1RGTW92ZSh0YXNrKSk7CisgICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JD
cmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBw
ZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIGNvZGVCbG9jay0+Y29tcGlsZUFzeW5jKGNv
bnRleHQsIFdURk1vdmUodGFzaykpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCmluZGV4IGExYWY3NTguLmE2YWUy
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKQEAgLTI4LDYgKzI4
LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgog
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC0zNiwx
OSArMzcsMjAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0
IENvbnRleHQ7CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiBjbGFzcyBQbGFuOwogCiB1c2lu
ZyBTaWduYXR1cmVJbmRleCA9IHVpbnQzMl90OwotICAgIAorCiBjbGFzcyBNb2R1bGUgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlPiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgVmFs
aWRhdGlvblJlc3VsdCA9IFdURjo6RXhwZWN0ZWQ8UmVmUHRyPE1vZHVsZT4sIFN0cmluZz47Ci0g
ICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSYsIFZhbGlkYXRpb25SZXN1bHQmJik7Cisg
ICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWYWxpZGF0aW9uUmVzdWx0JiYpOwogICAgIHVz
aW5nIEFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrID0gUmVmUHRyPFNoYXJlZFRhc2s8Q2FsbGJhY2tU
eXBlPj47CiAKLSAgICBzdGF0aWMgVmFsaWRhdGlvblJlc3VsdCB2YWxpZGF0ZVN5bmMoVk0mLCBW
ZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpOwotICAgIHN0YXRpYyB2b2lkIHZhbGlkYXRlQXN5bmMo
Vk0mLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2Fs
bGJhY2smJik7CisgICAgc3RhdGljIFZhbGlkYXRpb25SZXN1bHQgdmFsaWRhdGVTeW5jKENvbnRl
eHQqLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpOworICAgIHN0YXRpYyB2b2lkIHZhbGlkYXRl
QXN5bmMoQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxlOjpBc3luY1Zh
bGlkYXRpb25DYWxsYmFjayYmKTsKIAogICAgIHN0YXRpYyBSZWY8TW9kdWxlPiBjcmVhdGUoUmVm
PE1vZHVsZUluZm9ybWF0aW9uPiYmIG1vZHVsZUluZm9ybWF0aW9uKQogICAgIHsKQEAgLTU4LDE0
ICs2MCwxNCBAQCBwdWJsaWM6CiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29u
c3Q7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQogCi0gICAgUmVm
PENvZGVCbG9jaz4gY29tcGlsZVN5bmMoTWVtb3J5TW9kZSk7Ci0gICAgdm9pZCBjb21waWxlQXN5
bmMoVk0mLCBNZW1vcnlNb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYm
KTsKKyAgICBSZWY8Q29kZUJsb2NrPiBjb21waWxlU3luYyhDb250ZXh0KiwgTWVtb3J5TW9kZSwg
Q3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgdm9pZCBj
b21waWxlQXN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxh
dGlvbkNhbGxiYWNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRp
b24pOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1vZHVsZSgpOwogCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2tGb3IoTWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBtX2NvZGVCbG9ja3Nbc3Rh
dGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZjxDb2Rl
QmxvY2s+IGdldE9yQ3JlYXRlQ29kZUJsb2NrKE1lbW9yeU1vZGUpOworICAgIFJlZjxDb2RlQmxv
Y2s+IGdldE9yQ3JlYXRlQ29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDcmVhdGVFbWJl
ZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgIE1vZHVsZShSZWY8TW9k
dWxlSW5mb3JtYXRpb24+JiYpOwogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJ
bmZvcm1hdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5jcHAKaW5kZXggNmM5NDhiNS4uNmQ0NGFjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1h
dGlvbi5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldh
c21PcHMuaCIKQEAgLTI2NSw3ICsyNjQsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJs
ZUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgUGFydGlhbFJlc3Vs
dCBsaW1pdHMgPSBwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhpbXVtKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWxpbWl0cykpCiAgICAgICAgIHJldHVybiBsaW1pdHMuZ2V0VW5leHBlY3Rl
ZCgpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIUpTV2ViQXNzZW1ibHlUYWJsZTo6aXNWYWxp
ZFNpemUoaW5pdGlhbCksICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIGludmFsaWQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhU
YWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAi
IGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKIAogICAgIEFTU0VSVCgh
bWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xMzdmNjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU5hbWVTZWN0aW9uLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2Fz
bU5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0
cnVjdCBOYW1lU2VjdGlvbiA6IFRocmVhZFNhZmVSZWZDb3VudGVkPE5hbWVTZWN0aW9uPiB7Cisg
ICAgc3RhdGljIFJlZjxOYW1lU2VjdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IE5hbWVTZWN0aW9uKCkpOworICAgIH0KKworICAgIE5hbWUgbW9kdWxl
TmFtZTsKKyAgICBWZWN0b3I8TmFtZT4gZnVuY3Rpb25OYW1lczsKKyAgICBjb25zdCBOYW1lKiBn
ZXQoc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmdW5j
dGlvbkluZGV4U3BhY2UgPCBmdW5jdGlvbk5hbWVzLnNpemUoKSA/ICZmdW5jdGlvbk5hbWVzW2Z1
bmN0aW9uSW5kZXhTcGFjZV0gOiBudWxscHRyOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAK
aW5kZXggNzRjZjY1My4uY2NkZjcyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcApAQCAtMzEsOSArMzEsMTAgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9u
LmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2Fz
bUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2Fz
bUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCkBAIC01MSwxMCArNTIsMTAgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFuSW50
ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdQbGFu
OjpPTUdQbGFuKFJlZjxNb2R1bGU+IG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVt
b3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKG51bGxwdHIs
IG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5m
b3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQotICAgICwgbV9tb2R1bGUobW9kdWxlLmNvcHlS
ZWYoKSkKLSAgICAsIG1fY29kZUJsb2NrKCptb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKSkKK09N
R1BsYW46Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0
YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3Jt
YXRpb24mPihtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92ZSh0YXNrKSkKKyAg
ICAsIG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKKyAgICAsIG1fY29kZUJsb2NrKCptX21vZHVs
ZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5k
ZXgpCiB7CiAgICAgc2V0TW9kZShtb2RlKTsKQEAgLTE2MiwxMyArMTYzLDEzIEBAIHZvaWQgT01H
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xv
Y2spKTsKIH0KIAotdm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCogY29udGV4dCwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKK3ZvaWQgT01HUGxhbjo6cnVuRm9ySW5kZXgoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHsKLSAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb250ZXh0LT5jb2RlQmxvY2soKTsK
LSAgICBBU1NFUlQoY29udGV4dC0+bWVtb3J5TW9kZSgpID09IGNvZGVCbG9jay0+bV9jb2RlQmxv
Y2stPm1vZGUoKSk7CisgICAgV2FzbTo6Q29kZUJsb2NrJiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+
d2FzbUNvZGVCbG9jaygpOworICAgIEFTU0VSVChpbnN0YW5jZS0+d2FzbU1lbW9yeSgpLT5tb2Rl
KCkgPT0gY29kZUJsb2NrLm1vZGUoKSk7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5tX2NvZGVCbG9j
ay0+dGllclVwQ291bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAoKSkgewotICAg
ICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihjb250ZXh0LT5tb2R1
bGUoKS0+bW9kdWxlKCksIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jay0+bV9jb2RlQmxvY2stPm1v
ZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICBpZiAoY29kZUJsb2NrLnRpZXJVcENv
dW50KGZ1bmN0aW9uSW5kZXgpLnNob3VsZFN0YXJ0VGllclVwKCkpIHsKKyAgICAgICAgUmVmPFBs
YW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVm
PFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPndhc21Nb2R1bGUoKSksIGZ1bmN0aW9uSW5kZXgsIGNv
ZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdv
cmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
T3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JD
b21wbGV0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAppbmRl
eCA3MTY0YTllLi5iODA4MjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQ
bGFuLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtTW9k
dWxlLmgiCiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKQEAgLTQxLDE3ICs0MCwyMCBAQCBuYW1lc3Bh
Y2UgV2FzbSB7CiBjbGFzcyBPTUdQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogcHVibGljOgog
ICAgIHVzaW5nIEJhc2UgPSBQbGFuOwotICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3Vs
ZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBi
ZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdQbGFuKFJlZjxNb2R1bGU+LCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIGJvb2wg
aGFzV29yaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2NvbXBsZXRlZDsgfQogICAgIHZv
aWQgd29yayhDb21waWxhdGlvbkVmZm9ydCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBtdWx0aVRocmVh
ZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHN0YXRpYyB2b2lk
IHJ1bkZvckluZGV4KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpOworCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNu
J3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCiAgICAgdXNpbmcgQmFzZTo6bV9sb2NrOwog
CisgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNl
IHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgor
ICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworCiAgICAgYm9vbCBpc0NvbXBsZXRl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb21wbGV0ZWQ7IH0KICAgICB2b2lkIGNvbXBs
ZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCiAgICAgewpAQCAtNjUs
OCArNjcsNiBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleDsKIH07CiAK
LXZvaWQgcnVuT01HUGxhbkZvckluZGV4KENvbnRleHQqLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
KTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdl
Q291bnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAppbmRl
eCBlNDM4NDdjLi5lZjA1ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGFnZUNvdW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBh
Z2VDb3VudC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU3LDYgKzU3LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBw
YWdlQ291bnQgPD0gbWF4UGFnZUNvdW50OwogICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFsaWQobV9wYWdlQ291bnQpOworICAg
IH0KIAogICAgIHN0YXRpYyBQYWdlQ291bnQgZnJvbUJ5dGVzKHVpbnQ2NF90IGJ5dGVzKQogICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBiYTI3Y2Y5Li5k
MDYzY2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzI5
LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9u
LmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5o
IgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTUxLDIwICs0OSwyNyBAQCBuYW1lc3BhY2Ug
V2FzbVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9
CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBs
ZXRpb25UYXNrJiYgdGFzaykKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShpbmZvKSkK
KyAgICAsIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFw
cGVyKSkKKyAgICAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbikKICAg
ICAsIG1fc291cmNlKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5kYXRhKCkpCiAgICAgLCBt
X3NvdXJjZUxlbmd0aChtX21vZHVsZUluZm9ybWF0aW9uLT5zb3VyY2Uuc2l6ZSgpKQogewotICAg
IG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih2bSwgV1RGTW92ZSh0YXNr
KSkpOworICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZXh0
LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKLVBsYW46OlBsYW4oVk0qIHZtLCBjb25zdCB1aW50OF90
KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK1Bs
YW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBQbGFuKGNvbnRleHQsIFdURk1vdmUoaW5mbyks
IFdURk1vdmUodGFzayksIG51bGxwdHIsIG51bGxwdHIpCit7Cit9CisKK1BsYW46OlBsYW4oQ29u
dGV4dCogY29udGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3Ro
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKGFkb3B0
UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oVmVjdG9yPHVpbnQ4X3Q+KCkpKSkKICAgICAsIG1f
c291cmNlKHNvdXJjZSkKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKIHsKLSAg
ICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodm0sIFdURk1vdmUodGFz
aykpKTsKKyAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4
dCwgV1RGTW92ZSh0YXNrKSkpOwogfQogCiB2b2lkIFBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyhj
b25zdCBBYnN0cmFjdExvY2tlciYpCkBAIC03MiwxOCArNzcsMTggQEAgdm9pZCBQbGFuOjpydW5D
b21wbGV0aW9uVGFza3MoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgIEFTU0VSVChpc0NvbXBs
ZXRlKCkgJiYgIWhhc1dvcmsoKSk7CiAKICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX2NvbXBsZXRp
b25UYXNrcykKLSAgICAgICAgdGFzay5zZWNvbmQtPnJ1bih0YXNrLmZpcnN0LCAqdGhpcyk7Cisg
ICAgICAgIHRhc2suc2Vjb25kLT5ydW4oKnRoaXMpOwogICAgIG1fY29tcGxldGlvblRhc2tzLmNs
ZWFyKCk7CiAgICAgbV9jb21wbGV0ZWQubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgUGxhbjo6YWRk
Q29tcGxldGlvblRhc2soVk0mIHZtLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCit2b2lkIFBsYW46
OmFkZENvbXBsZXRpb25UYXNrKENvbnRleHQqIGNvbnRleHQsIENvbXBsZXRpb25UYXNrJiYgdGFz
aykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIGlmICghaXNDb21wbGV0
ZSgpKQotICAgICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoJnZt
LCBXVEZNb3ZlKHRhc2spKSk7CisgICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiAgICAgZWxzZQotICAgICAgICB0
YXNrLT5ydW4oJnZtLCAqdGhpcyk7CisgICAgICAgIHRhc2stPnJ1bigqdGhpcyk7CiB9CiAKIHZv
aWQgUGxhbjo6d2FpdEZvckNvbXBsZXRpb24oKQpAQCAtOTQsMTkgKzk5LDE5IEBAIHZvaWQgUGxh
bjo6d2FpdEZvckNvbXBsZXRpb24oKQogICAgIH0KIH0KIAotYm9vbCBQbGFuOjp0cnlSZW1vdmVW
TUFuZENhbmNlbElmTGFzdChWTSYgdm0pCitib29sIFBsYW46OnRyeVJlbW92ZUNvbnRleHRBbmRD
YW5jZWxJZkxhc3QoQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOwogCiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgLy8gV2UgYWxs
b3cgdGhlIGZpcnN0IGNvbXBsZXRpb24gdGFzayB0byBub3QgaGF2ZSBhIHZtLgorICAgICAgICAv
LyBXZSBhbGxvdyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNrIHRvIG5vdCBoYXZlIGEgQ29udGV4
dC4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fY29tcGxldGlvblRhc2tzLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgQVNTRVJUKG1fY29tcGxldGlvblRhc2tzW2ldLmZpcnN0
KTsKICAgICB9CiAKICAgICBib29sIHJlbW92ZWRBbnlUYXNrcyA9IGZhbHNlOwotICAgIG1fY29t
cGxldGlvblRhc2tzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3Qgc3RkOjpwYWlyPFZNKiwg
Q29tcGxldGlvblRhc2s+JiBwYWlyKSB7Ci0gICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFp
ci5maXJzdCA9PSAmdm07CisgICAgbV9jb21wbGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hpbmco
WyZdIChjb25zdCBzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiYgcGFpcikgewor
ICAgICAgICBib29sIHNob3VsZFJlbW92ZSA9IHBhaXIuZmlyc3QgPT0gJmNvbnRleHQ7CiAgICAg
ICAgIHJlbW92ZWRBbnlUYXNrcyB8PSBzaG91bGRSZW1vdmU7CiAgICAgICAgIHJldHVybiBzaG91
bGRSZW1vdmU7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRl
eCAxMGY4YTFiLi43YTA3YmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgK
QEAgLTI4LDggKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJD
b21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJH
ZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNtTW9k
dWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL1No
YXJlZFRhc2suaD4KQEAgLTM5LDI1ICszOSwyNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IENhbGxMaW5rSW5mbzsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgSlNQcm9taXNlRGVm
ZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0IENvbnRleHQ7CisKIGNsYXNzIFBs
YW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogcHVibGljOgotICAgIHR5
cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoVk0qLCBQbGFuJik7CisgICAgdHlwZWRlZiB2b2lkIENh
bGxiYWNrVHlwZShQbGFuJik7CiAgICAgdXNpbmcgQ29tcGxldGlvblRhc2sgPSBSZWZQdHI8U2hh
cmVkVGFzazxDYWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMgQ29tcGxldGlvblRhc2sgZG9udEZp
bmFsaXplKCkgeyByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxDYWxsYmFja1R5cGU+KFtdKFZNKiwg
UGxhbiYpIHsgfSk7IH0KLSAgICBQbGFuKFZNKiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29t
cGxldGlvblRhc2smJik7CisKKyAgICBzdGF0aWMgQ29tcGxldGlvblRhc2sgZG9udEZpbmFsaXpl
KCkgeyByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxDYWxsYmFja1R5cGU+KFtdKFBsYW4mKSB7IH0p
OyB9CisgICAgUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlv
blRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7Cisg
ICAgUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2sm
Jik7CiAKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVzZWQg
aWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0aW9u
L2Z1bmN0aW9uIHRlc3RzCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSosIGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYp
OwogICAgIHZpcnR1YWwgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlv
dSBndWFyYW50ZWUgdGhlIG9yZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRo
ZQogICAgIC8vIGNvbXBsZXRpb24gdGFza3MgYmVpbmcgY2FsbGVkLgotICAgIHZvaWQgYWRkQ29t
cGxldGlvblRhc2soVk0mLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICB2b2lkIGFkZENvbXBsZXRp
b25UYXNrKENvbnRleHQqLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIHZvaWQgc2V0TW9kZShN
ZW1vcnlNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQogICAgIE1lbW9yeU1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQpAQCAtNzIsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHdhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGNh
bmNlbGxlZCB0aGUgcGxhbi4KLSAgICBib29sIHRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZN
Jik7CisgICAgYm9vbCB0cnlSZW1vdmVDb250ZXh0QW5kQ2FuY2VsSWZMYXN0KENvbnRleHQmKTsK
IAogcHJvdGVjdGVkOgogICAgIHZvaWQgcnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJik7CkBAIC04Myw3ICs4NSwxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAKLSAgICBWZWN0b3I8c3RkOjpwYWly
PFZNKiwgQ29tcGxldGlvblRhc2s+LCAxPiBtX2NvbXBsZXRpb25UYXNrczsKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPENvbnRleHQqLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRhc2tz
OworCisgICAgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyOwor
ICAgIFRocm93V2FzbUV4Y2VwdGlvbiBtX3Rocm93V2FzbUV4Y2VwdGlvbiB7IG51bGxwdHIgfTsK
IAogICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwogICAgIGNvbnN0IHNpemVfdCBtX3NvdXJj
ZUxlbmd0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWdu
YXR1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAK
aW5kZXggOGI2MDBlZC4uNmE0MmQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNpZ25hdHVyZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNpZ25hdHVyZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNpZ25hdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5o
CmluZGV4IGU0MTNiMjUuLmFhY2VkNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2lnbmF0dXJlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDMsOCArNDMsNiBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBuYW1lc3BhY2UgV2FzbSB7CiAKIHVzaW5nIFNpZ25h
dHVyZUFyZ0NvdW50ID0gdWludDMyX3Q7CkBAIC0xNTYsNyArMTU0LDcgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxKU0M6Oldhc206OlNpZ25hdHVyZUhhc2g+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEoKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotLy8gU2ln
bmF0dXJlIGluZm9ybWF0aW9uIGlzIGhlbGQgZ2xvYmFsbHkgYW5kIHNoYXJlZCBieSBWTXMgdG8g
YWxsb3cgYWxsIHNpZ25hdHVyZXMgdG8gYmUgdW5pcXVlLiBUaGlzIGlzIHJlcXVpcmVkIHdoZW4g
d2FzbSBjYWxscyBhbm90aGVyIHdhc20gaW5zdGFuY2UsIGFuZCBtdXN0IHdvcmsgd2hlbiBtb2R1
bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBWTXMuCisvLyBTaWduYXR1cmUgaW5mb3Jt
YXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5IHRoZSBlbnRpcmUgcHJvY2VzcyB0
byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hl
biB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1v
ZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4KIC8vIE5vdGU6IHNpZ25hdHVy
ZXMgYXJlIG5ldmVyIHJlbW92ZWQgYmVjYXVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgYWNjb3VudGlu
ZyBmb3IgYWxsIFdlYkFzc2VtYmx5Lk1vZHVsZSBhbmQgd2hpY2ggc2lnbmF0dXJlcyB0aGV5IHVz
ZS4gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25hdHVyZXMgaXMgYm91bmRlZCwgYW5kIGlzbid0
IHdvcnRoIHRoZSBjb3VudGluZyBvdmVyaGVhZC4gV2UgY291bGQgY2xlYXIgZXZlcnl0aGluZyB3
aGVuIHdlIHJlYWNoIHplcm8gb3V0c3RhbmRpbmcgV2ViQXNzZW1ibHkuTW9kdWxlLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDM3CiBjbGFzcyBTaWduYXR1cmVJ
bmZvcm1hdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2lnbmF0dXJlSW5mb3JtYXRp
b24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwMWE3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRhYmxlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CisKK1JlZlB0cjxUYWJsZT4gVGFibGU6OmNyZWF0ZSh1aW50MzJfdCBp
bml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQoreworICAgIGlmICghaXNW
YWxpZFNpemUoaW5pdGlhbCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKFRhYmxlKSkpIFRhYmxlKGlu
aXRpYWwsIG1heGltdW0pKTsKK30KKworVGFibGU6On5UYWJsZSgpCit7Cit9CisKK1RhYmxlOjpU
YWJsZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQor
eworICAgIG1fc2l6ZSA9IGluaXRpYWw7CisgICAgbV9tYXhpbXVtID0gbWF4aW11bTsKKyAgICBB
U1NFUlQoaXNWYWxpZFNpemUobV9zaXplKSk7CisgICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1f
bWF4aW11bSA+PSBtX3NpemUpOworCisgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRy
eWluZyB0byBwcmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRv
aW5nIHNvLgorICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4KKyAgICBt
X2Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNp
emVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgp
KSk7CisgICAgbV9pbnN0YW5jZXMgPSBNYWxsb2NQdHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj46
Om1hbGxvYyhzaXplb2YoSlNXZWJBc3NlbWJseUluc3RhbmNlKikgKiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpemUoKSkpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkg
eworICAgICAgICBkZWZhdWx0X2NvbnN0cnVjdF9hdCgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pOwor
ICAgICAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaV0uc2lnbmF0dXJlSW5kZXggPT0gV2Fz
bTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGls
ZWQgY29kZS4KKyAgICAgICAgbV9pbnN0YW5jZXMuZ2V0KClbaV0gPSBudWxscHRyOworICAgIH0K
K30KKworc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gVGFibGU6Omdyb3codWludDMyX3QgZGVsdGEp
Cit7CisgICAgaWYgKGRlbHRhID09IDApCisgICAgICAgIHJldHVybiBzaXplKCk7CisKKyAgICB1
c2luZyBDaGVja2VkID0gQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+OworICAgIENo
ZWNrZWQgbmV3U2l6ZUNoZWNrZWQgPSBzaXplKCk7CisgICAgbmV3U2l6ZUNoZWNrZWQgKz0gZGVs
dGE7CisgICAgdWludDMyX3QgbmV3U2l6ZTsKKyAgICBpZiAobmV3U2l6ZUNoZWNrZWQuc2FmZUdl
dChuZXdTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gKm1heGltdW0o
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWlzVmFsaWRTaXplKG5l
d1NpemUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBjaGVja2Vk
R3JvdyA9IFsmXSAoYXV0byYgY29udGFpbmVyKSB7CisgICAgICAgIENoZWNrZWQgcmVhbGxvY1Np
emVDaGVja2VkID0gbmV3U2l6ZUNoZWNrZWQ7CisgICAgICAgIHJlYWxsb2NTaXplQ2hlY2tlZCAq
PSBzaXplb2YoKmNvbnRhaW5lci5nZXQoKSk7CisgICAgICAgIHVpbnQzMl90IHJlYWxsb2NTaXpl
OworICAgICAgICBpZiAocmVhbGxvY1NpemVDaGVja2VkLnNhZmVHZXQocmVhbGxvY1NpemUpID09
IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGNvbnRhaW5lci5yZWFsbG9jKHJlYWxsb2NTaXplKTsKKyAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gbV9zaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgZGVmYXVsdF9j
b25zdHJ1Y3RfYXQoJmNvbnRhaW5lci5nZXQoKVtpXSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH07CisKKyAgICBpZiAoIWNoZWNrZWRHcm93KG1fZnVuY3Rpb25zKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWNoZWNrZWRHcm93KG1faW5zdGFuY2VzKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKKyAg
ICByZXR1cm4gbmV3U2l6ZTsKK30KKwordm9pZCBUYWJsZTo6Y2xlYXJGdW5jdGlvbih1aW50MzJf
dCBpbmRleCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IHNpemUoKSk7CisgICAgbV9m
dW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOworICAgIEFT
U0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2ln
bmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29k
ZS4KKyAgICBtX2luc3RhbmNlcy5nZXQoKVtpbmRleF0gPSBudWxscHRyOworfQorCit2b2lkIFRh
YmxlOjpzZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCwgQ2FsbGFibGVGdW5jdGlvbiBmdW5jdGlv
biwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChpbmRleCA8IHNpemUoKSk7CisgICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rp
b247CisgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXhdID0gaW5zdGFuY2U7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpUYWJsZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hOTJhOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21M
aW1pdHMuaCIKKyNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOyAvLyBGSVhNRSB0aGlzIHNob3VsZCBiZSBXYXNtOjpJbnN0YW5jZSBodHRwczovL3dlYmtp
dC5vcmcvYi8xNzc0NzIKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBUYWJsZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUYWJsZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQ
dHI8VGFibGU+IGNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiBtYXhpbXVtKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UYWJsZSgpOworCisgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bTsg
fQorICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIHNldEZ1bmN0
aW9uKHVpbnQzMl90LCBDYWxsYWJsZUZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIFdhc206Okluc3RhbmNlLiBodHRwczovL3dlYmtpdC5vcmcvYi8x
Nzc0NzIKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFRhYmxlLCBtX3NpemUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkZ1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9mdW5jdGlv
bnMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlcygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9pbnN0YW5jZXMpOyB9CisKKyAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJldHVybiBzaXplIDwgbWF4VGFibGVFbnRy
aWVzOyB9CisKK3ByaXZhdGU6CisgICAgVGFibGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gbWF4aW11bSk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
X21heGltdW07CisgICAgdWludDMyX3QgbV9zaXplOworICAgIE1hbGxvY1B0cjxDYWxsYWJsZUZ1
bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICAvLyBjYWxsX2luZGlyZWN0IG5lZWRzIHRvIGRvIGFu
IEluc3RhbmNlIGNoZWNrIHRvIHBvdGVudGlhbGx5IGNvbnRleHQgc3dpdGNoIHdoZW4gY2FsbGlu
ZyBhIGZ1bmN0aW9uIHRvIGFub3RoZXIgaW5zdGFuY2UuIFdlIGNhbiBob2xkIHJhdyBwb2ludGVy
cyB0byBJbnN0YW5jZSBoZXJlIGJlY2F1c2UgdGhlIGVtYmVkZGVyIGVuc3VyZXMgdGhhdCBUYWJs
ZSBrZWVwcyBhbGwgdGhlIGluc3RhbmNlcyBhbGl2ZS4gV2UgY291bGRuJ3QgaG9sZCBhIFJlZiBo
ZXJlIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgY3ljbGVzLgorICAgIE1hbGxvY1B0cjxKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqPiBtX2luc3RhbmNlczsgLy8gRklYTUUgbWFrZSB0aGlzIGEgV2FzbTo6
SW5zdGFuY2UuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKaW5kZXggOTc3YjAxYi4uYzIzNTk4MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTI5LDExICsy
OSw5IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiSGVhcENlbGxJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKQEAgLTQ4LDQ2ICs0NiwxOCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJgogCiAgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVyZSBtdXN0IG1v
dmUgRXhjZXB0aW9uVHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYmVmb3JlIGp1bXBpbmcgaGVy
ZS4KICAgICAvLyBXZSdyZSBhbGxvd2VkIHRvIHVzZSB0ZW1wIHJlZ2lzdGVycyBoZXJlLiBXZSBh
cmUgbm90IGFsbG93ZWQgdG8gdXNlIGNhbGxlZSBzYXZlcy4KLSAgICBqaXQubG9hZFdhc21Db250
ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQ29udGV4dDo6b2Zmc2V0T2ZWTSgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
ICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CiAgICAg
aml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGppdC5icmVha3BvaW50KCk7
IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KIAotICAgIHZvaWQqICgqdGhyb3dXYXNtRXhj
ZXB0aW9uKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBXYXNtOjpDb250ZXh0Kikg
PSBbXSAoRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIFdhc206OkNv
bnRleHQqIHdhc21Db250ZXh0KSAtPiB2b2lkKiB7Ci0gICAgICAgIFZNKiB2bSA9IHdhc21Db250
ZXh0LT52bSgpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKCp2bSk7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotCi0gICAgICAgICAgICBKU09iamVjdCog
ZXJyb3I7IAotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3RhY2tPdmVy
ZmxvdykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihl
eGVjLCBnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVy
cm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGV4ZWMsICp2bSwgZ2xvYmFs
T2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1l
c3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdlbmVyaWNV
bndpbmQodm0sIGV4ZWMpOwotICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gp
OwotICAgICAgICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwotICAgICAg
ICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKLSAgICAgICAgLy8gVGhpcyBp
cyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uKQotICAgICAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVl
IGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJl
Ci0gICAgICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZN
IHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KLSAgICAgICAg
Ly8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwg
ZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKLSAgICAgICAgLy8gdG8gdGhlIGV4Y2VwdGlv
biBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUg
aGFjay4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MDQ0MAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtDYWxsRnJhbWVT
bG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih3YXNtQ29udGV4dC0+d2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlKCkpOwotICAgICAgICByZXR1cm4gdm0tPnRhcmdldE1hY2hpbmVQQ0Zv
clRocm93OwotICAgIH07Ci0KKyAgICBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0
aW9uID0gVGh1bmtzOjpzaW5nbGV0b24oKS50aHJvd1dhc21FeGNlcHRpb24oKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93
V2FzbUV4Y2VwdGlvbik7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKHRo
cm93V2FzbUV4Y2VwdGlvbikpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
ICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpKTsKIH0KIApAQCAtMTE5LDggKzg5LDEwIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IoY29u
c3QgQWJzdHJhY3RMb2NrZXImKQogI2VuZGlmCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5
dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwg
ZXh0cmFQYWRkaW5nQnl0ZXMpOwogCi0gICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjph
cmd1bWVudEdQUjApOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJ1bk9NR1BsYW5Gb3JJbmRleCkpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjph
cmd1bWVudEdQUjApOworICAgIHR5cGVkZWYgdm9pZCAoKlJ1bikoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiwgdWludDMyX3QpOworICAgIFJ1biBydW4gPSBPTUdQbGFuOjpydW5Gb3JJbmRleDsKKyAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPihydW4pKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuY2FsbChHUFJJ
bmZvOjphcmd1bWVudEdQUjIpOwogCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0
b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJlZ2lz
dGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwg
ZXh0cmFQYWRkaW5nQnl0ZXMpOwpAQCAtMTQyLDYgKzExNCwxOSBAQCBUaHVua3MmIFRodW5rczo6
c2luZ2xldG9uKCkKICAgICByZXR1cm4gKnRodW5rczsKIH0KIAordm9pZCBUaHVua3M6OnNldFRo
cm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAvLyBUaGUgdGh1bmtz
IGFyZSB1bmlxdWUgZm9yIHRoZSBlbnRpcmUgcHJvY2VzcywgdGhlcmVmb3JlIGNoYW5naW5nIHRo
ZSB0aHJvd2luZyBmdW5jdGlvbiBjaGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBvZiBXZWJBc3NlbWJs
eS4KKyAgICBSRUxFQVNFX0FTU0VSVCghbV90aHJvd1dhc21FeGNlcHRpb24gfHwgbV90aHJvd1dh
c21FeGNlcHRpb24gPT0gdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBtX3Rocm93V2FzbUV4Y2Vw
dGlvbiA9IHRocm93V2FzbUV4Y2VwdGlvbjsKK30KKworVGhyb3dXYXNtRXhjZXB0aW9uIFRodW5r
czo6dGhyb3dXYXNtRXhjZXB0aW9uKCkKK3sKKyAgICByZXR1cm4gbV90aHJvd1dhc21FeGNlcHRp
b247Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6OnN0dWIoVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCBkZjE0Y2EyLi41Mjk3NjRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CiAKQEAgLTQyLDYgKzQzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoKTsKICAgICBzdGF0aWMgVGh1bmtzJiBzaW5nbGV0b24oKTsKIAorICAg
IHZvaWQgc2V0VGhyb3dXYXNtRXhjZXB0aW9uKFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbigpOworCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHN0dWIoVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzdHViKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IpOwpAQCAtNTAsNiAr
NTQsNyBAQCBwcml2YXRlOgogICAgIFRodW5rcygpID0gZGVmYXVsdDsKIAogICAgIEhhc2hNYXA8
VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9zdHViczsKKyAgICBUaHJv
d1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRyIH07CiAgICAgTG9j
ayBtX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmNwcAppbmRleCA5YzViNjg0Li4yZmUxMzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Fz
bVdvcmtsaXN0LmgiCiAKQEAgLTE3MiwxMyArMTczLDEzIEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBs
ZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYgcGxhbikKICAgICBwbGFuLndhaXRGb3JDb21wbGV0
aW9uKCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKK3Zv
aWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvckNvbnRleHQoQ29udGV4dCYgY29udGV4dCkKIHsK
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBWZWN0b3I8UXVldWVFbGVtZW50
PiBlbGVtZW50czsKICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIFF1
ZXVlRWxlbWVudCBlbGVtZW50ID0gbV9xdWV1ZS5kZXF1ZXVlKCk7Ci0gICAgICAgIGJvb2wgZGlk
Q2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7Cisg
ICAgICAgIGJvb2wgZGlkQ2FuY2VsID0gZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250ZXh0QW5k
Q2FuY2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICBpZiAoIWRpZENhbmNlbCkKICAgICAgICAg
ICAgIGVsZW1lbnRzLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICB9CkBAIC0xODgsNyAr
MTg5LDcgQEAgdm9pZCBXb3JrbGlzdDo6c3RvcEFsbFBsYW5zRm9yVk0oVk0mIHZtKQogCiAgICAg
Zm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKICAgICAgICAgaWYgKHRocmVhZC0+ZWxl
bWVudC5wbGFuKSB7Ci0gICAgICAgICAgICBib29sIGRpZENhbmNlbCA9IHRocmVhZC0+ZWxlbWVu
dC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNlbElmTGFzdCh2bSk7CisgICAgICAgICAgICBib29s
IGRpZENhbmNlbCA9IHRocmVhZC0+ZWxlbWVudC5wbGFuLT50cnlSZW1vdmVDb250ZXh0QW5kQ2Fu
Y2VsSWZMYXN0KGNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGRpZENhbmNlbCkgewogICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5n
IHNpbmNlIHRoZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjaGVja2luZyBmb3IgYSBuZXcg
cGxhbiBhbmQgbXVzdCBob2xkIHRoZSBsb2NrIHRvIGRvIHNvLgogICAgICAgICAgICAgICAgIHRo
cmVhZC0+c3luY2hyb25pemUud2FpdCgqbV9sb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVdvcmtsaXN0LmgKaW5kZXggNmI2OTM1Mi4uNzQ4YTllYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTI3LDggKzI3LDYgQEAKIAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCi0KICNpbmNsdWRlIDxxdWV1ZT4K
IAogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KQEAgLTM3LDEwICszNSw5IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKLQogbmFtZXNwYWNl
IFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIFBsYW47CiAKIGNsYXNzIFdvcmtsaXN0
IHsKQEAgLTUwLDEzICs0NywxMCBAQCBwdWJsaWM6CiAgICAgfldvcmtsaXN0KCk7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGVucXVldWUoUmVmPFBsYW4+KTsKLSAgICB2b2lkIHN0b3BB
bGxQbGFuc0ZvclZNKFZNJik7CisgICAgdm9pZCBzdG9wQWxsUGxhbnNGb3JDb250ZXh0KENvbnRl
eHQmKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcGxldGVQbGFuU3luY2hyb25v
dXNseShQbGFuJik7CiAKLSAgICB2b2lkIGFjdGl2YXRlUGxhbihKU1Byb21pc2VEZWZlcnJlZCos
IFBsYW4qKTsKLSAgICB2b2lkIGRlYWN0aXZlUGxhbihKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4q
KTsKLQogICAgIGVudW0gY2xhc3MgUHJpb3JpdHkgewogICAgICAgICBTaHV0ZG93biwKICAgICAg
ICAgU3luY2hyb25vdXMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNzEwOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAt
MCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlv
bkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25D
b250ZXh0LmpzRW50cnlwb2ludEpJVDsKKworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OworCisgICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKKyAgICBqaXQuc3RvcmU2NChDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJl
bFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
KyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVzdWx0
LT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihjYWxsZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOworCisgICAgY29uc3QgUGlu
bmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsK
KyAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtb2RlKTsKKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCB0b1NhdmVTaXplID0gdG9TYXZlLm51bWJl
ck9mU2V0R1BScygpOworICAgIC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUgc2F2ZXMuCisg
ICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAg
ICBBU1NFUlQodG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUpOworI2VuZGlm
CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRvU2F2ZSwgUmVn
aXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCk7Cisg
ICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1Nw
aWxsOworCisgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNp
emUoKSAqIHNpemVvZih2b2lkKik7CisgICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxpbmdD
b252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOworICAgIHRvdGFsRnJhbWVTaXplIC09IHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICB1bnNpZ25lZCBudW1HUFJzID0gMDsKKyAgICB1
bnNpZ25lZCBudW1GUFJzID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFy
Z3VtZW50KGkpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBjYXNlIFdhc206
OkkzMjoKKyAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigp
Lm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6
ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAg
ICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6
ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7Cisg
ICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKKyAgICBqaXQuc3ViUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2Ugc2F2ZSBhbGwgdGhlc2UgcmVn
aXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KKyAgICAvLyBUaGUg
cmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2guIFRoYXQgc2Fp
ZCwKKyAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVtb3J5LCBzbyBp
dCdzIG5vdCByZWFsbHkKKyAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0
IHRoZXkgZG9uJ3QuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNl
dCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0
LnJlZygpLmdwcigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zm
c2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQorCisgICAgR1BSUmVn
IHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyOworCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJh
bWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykp
KTsKKyAgICAgICAgbnVtR1BScyA9IDA7CisgICAgICAgIG51bUZQUnMgPSAwOworICAgICAgICAv
LyBXZSdyZSBnb2luZyB0byBzZXQgdGhlIHBpbm5lZCByZWdpc3RlcnMgYWZ0ZXIgdGhpcy4gU28K
KyAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGlzIGFzIGEgc2NyYXRjaCBmb3Igbm93IHNpbmNlIHdl
IHNhdmVkIGl0IGFib3ZlLgorICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHBpbm5lZFJlZ3Mu
YmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0ID0gQ2FsbEZy
YW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKworICAgICAg
ICAvLyB2bUVudHJ5VG9XYXNtIHBhc3NlcyBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlIGFzIHRo
ZSBmaXJzdCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlCisgICAgICAgIC8vIG5vdCB1c2luZyBmYXN0
IFRMUyB0byBob2xkIHRoZSBXYXNtOjpDb250ZXh0KidzIGluc3RhbmNlLgorICAgICAgICBpZiAo
IUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdh
c21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0
ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsg
aSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAg
ICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAg
ICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dw
ckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1l
bnQoaSkgPT0gV2FzbTo6STMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZz
ZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNj
cmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0
KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3Jh
dGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lk
Kik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNp
Z25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BS
c10uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVt
R1BSc10uZ3ByKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUdQ
UnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoK
KyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJz
ID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0
aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhP
ZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdh
c206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21D
YWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQp
LCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpzT2Zm
c2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExT
KCkpCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNv
bnRleHRJbnN0YW5jZUdQUiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1v
cnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGppdC5sb2Fk
V2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAgICAgIGNvbnN0
IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAg
QVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJl
Z3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0
IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUg
dG8gMC4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
TWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5Ojpv
ZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgdW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVu
Y3Rpb25Db3VudCgpOworICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0
aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsKKyAg
ICB9KTsKKworCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6
IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJl
ZygpLmdwcigpOworICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7CisgICAgfQorCisgICAgc3dpdGNoIChzaWduYXR1cmUu
cmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGppdC5tb3ZlRmxv
YXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICBqaXQubW92ZURv
dWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Yjk4ZDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgi
CisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNs
dWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3Bh
Y2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCnNpbWls
YXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9K
U1dlYkFzc2VtYmx5LmNwcApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L0pTV2ViQXNzZW1ibHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHkuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaAppbmRleCAwZmFmOTc3Li5jNTc4ZGYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCkBAIC0yOCwzMSArMjgs
MzEgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU09iamVjdC5oIgot
I2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKLSNpbmNsdWRlICJqcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TGlua0Vy
cm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseU1lbW9yeS5oIgotI2luY2x1ZGUgImpz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVRhYmxlLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUuaCIKLSNpbmNs
dWRlICJqcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMv
V2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCi0j
aW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UHJvdG90
eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCi0jaW5j
bHVkZSAianMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAianMvV2Vi
QXNzZW1ibHlUYWJsZVByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29tcGlsZUVy
cm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5SW5zdGFuY2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUxpbmtFcnJvckNv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUuaCIKKyNp
bmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rv
ci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlLmgiCisjaW5j
bHVkZSAiV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5VG9KU0NhbGxlZS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAppbmRleCBmOTFlNmM3Li5lMTVjYTM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmNwcApAQCAtMzEsOSArMzEsOCBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseU1lbW9yeS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNp
bmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5o
IgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
IApAQCAtNDEsMTEgKzQwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8g
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDb2RlQmxvY2si
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2spIH07CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNyZWF0ZShWTSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxvY2s+IGNvZGVCbG9j
aywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKQorSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9j
az4gY29kZUJsb2NrLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24pCiB7Ci0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9y
bWF0aW9uID0gbW9kdWxlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpOwotICAgIGF1dG8q
IHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0
aW9uQ291bnQoKSkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBXVEZNb3ZlKGNvZGVCbG9j
ayksIG1vZHVsZUluZm9ybWF0aW9uKTsKLSAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBt
b2R1bGUpOworICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZt
LCBXVEZNb3ZlKGNvZGVCbG9jayksIG1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICByZXN1bHQtPmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01OCw3ICs1Niw3
IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZt
LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIGNvCiAgICAgbV93YXNtVG9KU0V4aXRTdHVicy5yZXNl
cnZlQ2FwYWNpdHkobV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9jb2RlQmxvY2stPmZ1
bmN0aW9uSW1wb3J0Q291bnQoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBXYXNtOjpTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlcy5hdChpbXBvcnRJbmRleCk7Ci0gICAgICAgIGF1dG8gYmluZGlu
ZyA9IFdhc206Ondhc21Ub0pzKCZ2bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwg
aW1wb3J0SW5kZXgpOworICAgICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9KUygmdm0s
IG1fY2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKICAgICAgICAg
aWYgKFVOTElLRUxZKCFiaW5kaW5nKSkgewogICAgICAgICAgICAgc3dpdGNoIChiaW5kaW5nLmVy
cm9yKCkpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6QmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVt
b3J5OgpAQCAtNjgsMTQgKzY2LDEyIEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIGNvCiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1f
d2FzbVRvSlNFeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKGJpbmRpbmcudmFsdWUoKSk7Ci0gICAg
ICAgIGltcG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCkgPSBtX3dhc21Ub0pTRXhpdFN0dWJz
W2ltcG9ydEluZGV4XS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiB9CiAKLXZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFz
c2VtYmx5TW9kdWxlKiBtb2R1bGUpCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAg
bV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBtb2R1bGUpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtODMsMTEgKzc5LDYgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNf
Y2FzdDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6On5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKCk7CiB9CiAKLWJvb2wgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6aXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KSBjb25zdAot
ewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNTYWZlVG9SdW4obWVtb3J5LT5tZW1vcnkoKS5t
b2RlKCkpOwotfQotCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNsZWFySlNDYWxsSUNz
KFZNJiB2bSkKIHsKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigp
OyAhIWl0ZXI7ICsraXRlcikKQEAgLTEwMCw3ICs5MSw2IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNv
ZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUpOwogCiAgICAgdmlzaXRvci5hZGRVbmNvbmRp
dGlvbmFsRmluYWxpemVyKCZ0aGlzT2JqZWN0LT5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oCmluZGV4IDUyNzAzZjguLjg5MGUyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKQEAgLTQw
LDcgKzQwLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1
bGU7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5OwogCiBuYW1lc3BhY2UgV2FzbSB7CkBAIC01
Miw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBjcmVhdGUoVk0mLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiwgSlNXZWJBc3NlbWJseU1vZHVsZSop
OworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0mLCBSZWY8V2Fz
bTo6Q29kZUJsb2NrPiwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CkBAIC02NCwzOCArNjMsMTEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gJnZtLndlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CiAgICAgfQog
Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCk7IH0KLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotCi0gICAgYm9vbCBp
c1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7Ci0KLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSopOwotCi0gICAgLy8gVGhlc2UgdHdv
IGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVu
IHBvcHVsYXRlZC4KLQotICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCi0gICAgewotICAg
ICAgICBBU1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+anNF
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2Up
OwotICAgIH0KLSAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwotICAgIH0KLQotICAgIFdhc206Oldhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQg
aW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7Ci0gICAgICAg
IHJldHVybiAmaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9y
dEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNp
emVvZih2b2lkKikgKiBpbXBvcnRJbmRleDsKLSAgICB9Ci0KICAgICBXYXNtOjpDb2RlQmxvY2sm
IGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CisgICAgCisgICAgdm9p
ZCogd2FzbVRvRW1iZWRkZXJTdHViRXhlY3V0YWJsZUFkZHJlc3Moc2l6ZV90IGltcG9ydEZ1bmN0
aW9uTnVtKSB7IHJldHVybiBtX3dhc21Ub0pTRXhpdFN0dWJzW2ltcG9ydEZ1bmN0aW9uTnVtXS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwogCiAgICAgdm9pZCBjbGVhckpTQ2FsbElDcyhWTSYpOwogCkBAIC0xMTQsMjcgKzg2LDEx
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBzdGF0
aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0U3R1YnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihzaXplb2YoSlNXZWJBc3NlbWJs
eUNvZGVCbG9jaykpOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUo
Q2hlY2tlZDxzaXplX3Q+IGZ1bmN0aW9uSW1wb3J0Q291bnQpCi0gICAgewotICAgICAgICByZXR1
cm4gKG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBmdW5jdGlvbkltcG9y
dENvdW50KS51bnNhZmVHZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lkKiYgaW1wb3J0V2FzbVRvSlNT
dHViKHVuc2lnbmVkIGltcG9ydEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuICpiaXR3aXNl
X2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRX
YXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpKTsKLSAgICB9Ci0KICAgICBjbGFzcyBVbmNvbmRpdGlv
bmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7CiAgICAg
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKICAgICB9OwogCiAg
ICAgUmVmPFdhc206OkNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7Ci0gICAgV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY+IG1fd2FzbVRvSlNFeGl0U3R1YnM7CiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBt
X3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlu
a0luZm9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggYzc3ZmEwNS4uZjlmMjY1NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
Y3BwCkBAIC00OSwxMiArNDksMTcgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucykKK0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6SlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVu
c2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucywgUmVmPFdhc206Okluc3RhbmNlPiYmIGluc3RhbmNl
KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9pbnN0YW5jZShXVEZNb3ZlKGlu
c3RhbmNlKSkKICAgICAsIG1fdm0oJnZtKQorICAgICwgbV93YXNtTW9kdWxlKG1faW5zdGFuY2Ut
Pm1vZHVsZSgpKQorICAgICwgbV93YXNtVGFibGUobV9pbnN0YW5jZS0+bV90YWJsZS5nZXQoKSkK
KyAgICAsIG1fZ2xvYmFscyhtX2luc3RhbmNlLT5tX2dsb2JhbHMuZ2V0KCkpCiAgICAgLCBtX251
bUltcG9ydEZ1bmN0aW9ucyhudW1JbXBvcnRGdW5jdGlvbnMpCiB7Ci0gICAgbWVtc2V0KGltcG9y
dEZ1bmN0aW9ucygpLCAwLCBtX251bUltcG9ydEZ1bmN0aW9ucyAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtSW1wb3J0
RnVuY3Rpb25zOyArK2kpCisgICAgICAgIGRlZmF1bHRfY29uc3RydWN0X2F0KGltcG9ydEZ1bmN0
aW9uSW5mbyhpKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCkKQEAgLTYzLDEyICs2OCwxMCBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAog
ICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKLSAgICBjb25zdCBzaXplX3QgZXh0
cmFNZW1vcnlTaXplID0gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoKTsKLSAgICBtX2dsb2JhbHMgPSBN
YWxsb2NQdHI8dWludDY0X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKLSAgICBoZWFwKCkt
PnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7Ci0KICAgICBtX21v
ZHVsZU5hbWVzcGFjZU9iamVjdC5zZXQodm0sIHRoaXMsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7
CiAgICAgbV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBtb2R1bGUtPmNhbGxlZSgpKTsKKyAgICAKKyAg
ICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdGFuY2UtPmV4dHJhTWVt
b3J5QWxsb2NhdGVkKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCkBAIC04OCw0MCArOTEsNDkgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9jYWxsZWUpOwotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNP
YmplY3QtPmdsb2JhbE1lbW9yeUJ5dGVTaXplKCkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVk
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9y
dEZ1bmN0aW9uczsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBv
cnRGdW5jdGlvbnMoKVtpXSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmlt
cG9ydEZ1bmN0aW9uSW5mbyhpKS0+aW1wb3J0RnVuY3Rpb24pOyAvLyBUaGlzIGFsc28ga2VlcHMg
dGhlIGZ1bmN0aW9ucycgSlNXZWJBc3NlbWJseUluc3RhbmNlIGFsaXZlLgogfQogCiB2b2lkIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgUmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrKQogeworICAgIG1faW5z
dGFuY2UtPmZpbmFsaXplQ3JlYXRpb24od2FzbUNvZGVCbG9jay5jb3B5UmVmKCkpOworICAgIG1f
d2FzbUNvZGVCbG9jayA9IHdhc21Db2RlQmxvY2sucHRyKCk7CisKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXdhc21Db2RlQmxvY2stPnJ1bm5h
YmxlKCkpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
TGlua0Vycm9yU3RydWN0dXJlKCksIHdhc21Db2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVCh3YXNtQ29kZUJsb2Nr
LT5pc1NhZmVUb1J1bihtZW1vcnlNb2RlKCkpKTsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtb2R1bGUoKS0+Y29kZUJsb2NrKG1lbW9yeU1vZGUoKSk7Ci0gICAgaWYg
KGNvZGVCbG9jaykgeworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGpzQ29kZUJsb2NrID0g
bV9tb2R1bGUtPmNvZGVCbG9jayhtZW1vcnlNb2RlKCkpOworICAgIGlmIChqc0NvZGVCbG9jaykg
ewogICAgICAgICAvLyBBIENvZGVCbG9jayBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxl
ZC4gSWYgc28sIGl0IG1lYW5zCiAgICAgICAgIC8vIHRoYXQgdGhlIENvZGVCbG9jayB3ZSBhcmUg
dHJ5aW5nIHRvIGNvbXBpbGUgbXVzdCBiZSB0aGUgc2FtZQogICAgICAgICAvLyBiZWNhdXNlIHdl
IHdpbGwgbmV2ZXIgY29tcGlsZSBhIENvZGVCbG9jayBhZ2FpbiBvbmNlIGl0J3MKICAgICAgICAg
Ly8gcnVubmFibGUuCi0gICAgICAgIEFTU0VSVCgmY29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3
YXNtQ29kZUJsb2NrLnB0cigpKTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBj
b2RlQmxvY2spOworICAgICAgICBBU1NFUlQoJmpzQ29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3
YXNtQ29kZUJsb2NrLnB0cigpKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBq
c0NvZGVCbG9jayk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrID0gSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSwgbV9tb2R1
bGUuZ2V0KCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jay0+cnVubmFibGUoKSkp
IHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5
TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxp
bmtFcnJvclN0cnVjdHVyZSgpLCBjb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAg
IGpzQ29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCBXVEZNb3Zl
KHdhc21Db2RlQmxvY2spLCB3YXNtTW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKSk7CisgICAg
ICAgIGlmIChVTkxJS0VMWSghanNDb2RlQmxvY2stPnJ1bm5hYmxlKCkpKSB7CisgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1
cmUoKSwganNDb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2sp
OwotICAgICAgICBtb2R1bGUoKS0+c2V0Q29kZUJsb2NrKHZtLCBtZW1vcnlNb2RlKCksIGNvZGVC
bG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywganNDb2RlQmxvY2spOwor
ICAgICAgICBtX21vZHVsZS0+c2V0Q29kZUJsb2NrKHZtLCBtZW1vcnlNb2RlKCksIGpzQ29kZUJs
b2NrKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSA9IDA7IGlt
cG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraW1wb3J0RnVuY3Rpb25O
dW0pIHsKKyAgICAgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbmZvID0gaW1wb3J0RnVuY3Rpb25J
bmZvKGltcG9ydEZ1bmN0aW9uTnVtKTsKKyAgICAgICAgaW5mby0+d2FzbVRvRW1iZWRkZXJTdHVi
RXhlY3V0YWJsZUFkZHJlc3MgPSBtX2NvZGVCbG9jay0+d2FzbVRvRW1iZWRkZXJTdHViRXhlY3V0
YWJsZUFkZHJlc3MoaW1wb3J0RnVuY3Rpb25OdW0pOwogICAgIH0KIAogICAgIGF1dG8qIG1vZHVs
ZVJlY29yZCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KG1fbW9kdWxlTmFtZXNw
YWNlT2JqZWN0LT5tb2R1bGVSZWNvcmQoKSk7Ci0gICAgbW9kdWxlUmVjb3JkLT5saW5rKGV4ZWMs
IG1vZHVsZSgpLCB0aGlzKTsKKyAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgbV9tb2R1bGUu
Z2V0KCksIHRoaXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAK
ICAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0ZShleGVjKTsK
QEAgLTEyOSw3ICsxNDEsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVD
cmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgUmVmPFdhc206OgogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1
Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlKQorSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3Nl
bWJseU1vZHVsZSoganNNb2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSog
aW5zdGFuY2VTdHJ1Y3R1cmUsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0YW5jZSkKIHsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBn
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0xNTgsOCArMTcw
LDggQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0
ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KiBtb2R1bGVOYW1lc3BhY2UgPSBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShl
eGVjKTsKICAgICAvLyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0dHkgYmlnIHdl
IHNob3VsZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFs
bG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkpKSBK
U1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpOwotICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlv
bih2bSwganNNb2R1bGUsIG1vZHVsZU5hbWVzcGFjZSk7CisgICAgYXV0byoganNJbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4odm0uaGVh
cCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgp
KSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIG1vZHVsZUlu
Zm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSwgV1RGTW92ZShpbnN0YW5jZSkpOworICAg
IGpzSW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxlTmFtZXNwYWNl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAg
Ly8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1lbXB0eSBsaXN0
cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmpl
Y3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHkuCkBAIC0xOTAs
MTUgKzIwMiwyMSBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgaWYgKCF2
YWx1ZS5pc0Z1bmN0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBv
cnQsICJpbXBvcnQgZnVuY3Rpb24iLCAibXVzdCBiZSBjYWxsYWJsZSIpKSk7CiAKKyAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY2FsbGVlSW5zdGFuY2UgPSBudWxscHRyOworICAg
ICAgICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnQg
PSBudWxscHRyOwogICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2Jq
ZWN0Kj4odmFsdWUpOworCiAgICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBFeHBvcnRlZCBG
dW5jdGlvbiBFeG90aWMgT2JqZWN0OgogICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiog
d2FzbUZ1bmN0aW9uOwogICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdh
c21XcmFwcGVyRnVuY3Rpb247CiAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5j
dGlvbih2bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsK
ICAgICAgICAgICAgICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0
Y2ggdGhlIHNpZ25hdHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KICAg
ICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4
OwotICAgICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgaWYg
KHdhc21GdW5jdGlvbikgewogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUlu
ZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAg
ICBjYWxsZWVJbnN0YW5jZSA9IHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgd2FzbUVudHJ5cG9pbnQgPSB3YXNtRnVuY3Rpb24tPndhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJG
dW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0
IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KQEAgLTIxNSw3ICsyMzMsMTAgQEAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNT
dGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRv
IHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3Zl
ICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxv
dyAodGhlIEpTRnVuY3Rpb24pLgogCiAgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rp
b25zID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgaW5zdGFuY2UtPmltcG9ydEZ1
bmN0aW9ucygpW251bUltcG9ydEZ1bmN0aW9ucysrXS5zZXQodm0sIGluc3RhbmNlLCBmdW5jdGlv
bik7CisgICAgICAgICAgICBJbXBvcnRGdW5jdGlvbkluZm8qIGluZm8gPSBqc0luc3RhbmNlLT5p
bXBvcnRGdW5jdGlvbkluZm8obnVtSW1wb3J0RnVuY3Rpb25zKyspOworICAgICAgICAgICAgaW5m
by0+dGFyZ2V0SW5zdGFuY2UgPSBjYWxsZWVJbnN0YW5jZTsKKyAgICAgICAgICAgIGluZm8tPndh
c21FbnRyeXBvaW50ID0gd2FzbUVudHJ5cG9pbnQ7CisgICAgICAgICAgICBpbmZvLT5pbXBvcnRG
dW5jdGlvbi5zZXQodm0sIGpzSW5zdGFuY2UsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIC8vIHYu
IEFwcGVuZCBjbG9zdXJlIHRvIGltcG9ydHMuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMjQzLDcgKzI2NCw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICAgICAg
ICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVu
ZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2UtPm1fdGFibGUu
c2V0KHZtLCBpbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV90YWJs
ZS5zZXQodm0sIGpzSW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5zdGFuY2UtPm1f
d2FzbVRhYmxlID0gdGFibGUtPnRhYmxlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCkBAIC0yNzMsOCArMjk1LDggQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgICAg
ICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgogICAgICAgICAgICAgLy8gaWlpLiBB
cHBlbmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBBU1NFUlQoIWluc3Rh
bmNlLT5tX21lbW9yeSk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnkuc2V0KHZtLCBp
bnN0YW5jZSwgbWVtb3J5KTsKKyAgICAgICAgICAgIEFTU0VSVCghanNJbnN0YW5jZS0+bV9tZW1v
cnkpOworICAgICAgICAgICAganNJbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBtZW1vcnkpOwogICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yOTEsMTMgKzMxMywxMyBAQCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gaW1w
b3J0LmtpbmRJbmRleCk7CiAgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgewogICAgICAgICAgICAgY2FzZSBXYXNtOjpJ
MzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxz
KyssIHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmlu
c3RhbmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9JbnQzMihleGVj
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoK
LSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywg
Yml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7CisgICAgICAgICAg
ICAgICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysr
LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAgICAgICAgICAg
ICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBqc0luc3RhbmNl
LT5pbnN0YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMzE1LDE0ICszMzcsMjEgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhhc01l
bW9yeUltcG9ydCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9y
eSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIFJlZlB0cjxXYXNt
OjpNZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgp
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnku
aXNJbXBvcnQoKSk7CisKKyAgICAgICAgICAgIGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJBc3NlbWJs
eU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgICAgICAgICAgUmVmUHRyPFdhc206Ok1l
bW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUobW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSwKKyAgICAg
ICAgICAgICAgICBbJnZtXSAoV2FzbTo6TWVtb3J5OjpOb3RpZnlQcmVzc3VyZSkgeyB2bS5oZWFw
LmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAg
IFsmdm1dIChXYXNtOjpNZW1vcnk6OlN5bmNUcnlUb1JlY2xhaW0pIHsgdm0uaGVhcC5jb2xsZWN0
U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAgIFsmdm0sIGpz
TWVtb3J5XSAoV2FzbTo6TWVtb3J5OjpHcm93U3VjY2VzcywgV2FzbTo6UGFnZUNvdW50IG9sZFBh
Z2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkgeyBqc01lbW9yeS0+Z3Jvd1N1
Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOyB9KTsKICAgICAg
ICAgICAgIGlmICghbWVtb3J5KQogICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAKLSAgICAgICAgICAgIGluc3RhbmNlLT5tX21l
bW9yeS5zZXQodm0sIGluc3RhbmNlLAotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3Nl
bWJseU1lbW9yeVN0cnVjdHVyZSgpLCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAg
ICAgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
ICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwganNNZW1vcnkpOwogICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTMzNiwxOSArMzY1LDI0IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgIGlm
ICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgIWhhc1RhYmxlSW1wb3J0
KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRpb24udGFibGVJ
bmZvcm1hdGlvbi5pc0ltcG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIFRhYmxl
IHdoZW4gaXQncyBhIFRhYmxlIGRlZmluaXRpb24uCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5
VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAotICAg
ICAgICAgICAgICAgIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgp
LCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CisgICAgICAg
ICAgICBSZWZQdHI8V2FzbTo6VGFibGU+IHdhc21UYWJsZSA9IFdhc206OlRhYmxlOjpjcmVhdGUo
bW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1vZHVsZUluZm9y
bWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKTsKKyAgICAgICAgICAgIGlmICghd2Fz
bVRhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3Nl
bWJseUxpbmtFcnJvcihleGVjLCB2bSwgImNvdWxkbid0IGNyZWF0ZSBUYWJsZSIpKTsKKyAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBKU1dlYkFzc2VtYmx5VGFibGU6OmNy
ZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseVRh
YmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZSBhIEpTV2ViQXNzZW1ibHlU
YWJsZSB3ZSd2ZSBkZWZpbmVkLgogICAgICAgICAgICAgLy8gSWYgaXQncyBkZWZpbmVkIHRvIGJl
IHRvbyBsYXJnZSwgd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGEgdmFsaWRhdGlvbiBlcnJvci4KICAg
ICAgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIEFT
U0VSVCh0YWJsZSk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3Rh
bmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5tX3RhYmxlLnNldCh2bSwganNJ
bnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV93YXNtVGFibGUgPSB0
YWJsZS0+dGFibGUoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAoIWluc3RhbmNl
LT5tZW1vcnkoKSkgeworICAgIGlmICghanNJbnN0YW5jZS0+bWVtb3J5KCkpIHsKICAgICAgICAg
Ly8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2FzbSAtPiB3YXNt
IHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVuIHRyeWluZyB0
byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KLSAgICAgICAgaW5zdGFuY2UtPm1fbWVtb3J5LnNldCh2
bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXYXNt
OjpNZW1vcnk6OmNyZWF0ZSh2bSwgMCwgMCkucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICBh
dXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsK
KyAgICAgICAganNNZW1vcnktPmFkb3B0KFdhc206Ok1lbW9yeTo6Y3JlYXRlKCkucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwganNNZW1vcnkpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIH0K
ICAgICAKQEAgLTM2MCwyMCArMzk0LDEzIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAg
ICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSAhPSBXYXNtOjpHbG9iYWw6
OklzSW1wb3J0KTsKICAgICAgICAgICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID09
IFdhc206Okdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydCkgewogICAgICAgICAgICAgICAgIEFTU0VS
VChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8IG51bUltcG9ydEdsb2JhbHMpOwot
ICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGluc3RhbmNl
LT5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7CisgICAg
ICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgs
IGpzSW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEk2NEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHNP
ckltcG9ydE51bWJlcikpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgaW5z
dGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnRO
dW1iZXIpOworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFs
KGdsb2JhbEluZGV4LCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBBU1NFUlQoIWluc3RhbmNlLT5jb2RlQmxvY2soKSk7Ci0KLSAgICBy
ZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLXNpemVfdCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Omdsb2Jh
bE1lbW9yeUJ5dGVTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHJldHVy
biBqc0luc3RhbmNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggM2Nm
ZTU0OS4uYzFmN2MzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0
LmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0z
OSw3NSArNDEsOTYgQEAgY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiBjbGFzcyBKU1dl
YkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlOwogCituYW1lc3Bh
Y2UgV2FzbSB7CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBUYWJsZTsgLy8gRklYTUUgcmVtb3Zl
IHRoaXMgYWZ0ZXIgcmVmYWN0b3JpbmcuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3MgorfQor
CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAot
ICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNyZWF0ZShWTSYsIEV4ZWNTdGF0ZSos
IEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUq
KTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBFeGVjU3Rh
dGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0
dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIAotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CiAgICAgdm9pZCBmaW5hbGl6ZUNy
ZWF0aW9uKFZNJiwgRXhlY1N0YXRlKiwgUmVmPFdhc206OkNvZGVCbG9jaz4mJik7Ci0KLSAgICBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQo
KTsgfQotCi0gICAgSlNPYmplY3QqIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkgeyBSRUxF
QVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7IHJldHVybiBpbXBvcnRGdW5j
dGlvbnMoKVtpZHhdLmdldCgpOyB9Ci0KKyAgICAKKyAgICBXYXNtOjpJbnN0YW5jZSYgaW5zdGFu
Y2UoKSB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9CisgICAgV2FzbTo6Q29udGV4dCogY29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX3ZtLT53YXNtQ29udGV4dDsgfQogICAgIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QoKSB7IHJldHVybiBtX21vZHVs
ZU5hbWVzcGFjZU9iamVjdC5nZXQoKTsgfQorICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUo
KSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisgICAgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiB3
ZWJBc3NlbWJseVRvSlNDYWxsZWUoKSB7IHJldHVybiBtX2NhbGxlZS5nZXQoKTsgfQogCiAgICAg
SlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKSB7
IEFTU0VSVCghbWVtb3J5KCkpOyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsgfQorICAg
IHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogdmFsdWUpIHsgQVNT
RVJUKCFtZW1vcnkoKSk7IG1fbWVtb3J5LnNldCh2bSwgdGhpcywgdmFsdWUpOyBtX3dhc21NZW1v
cnkgPSAmbWVtb3J5KCktPm1lbW9yeSgpOyB9CiAgICAgV2FzbTo6TWVtb3J5TW9kZSBtZW1vcnlN
b2RlKCkgeyByZXR1cm4gbWVtb3J5KCktPm1lbW9yeSgpLm1vZGUoKTsgfQogCi0gICAgSlNXZWJB
c3NlbWJseVRhYmxlKiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KLQotICAgIGlu
dDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMu
Z2V0KClbaV07IH0KLSAgICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9Ci0gICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KGxvYWRJMzJHbG9i
YWwoaSkpOyB9Ci0gICAgZG91YmxlIGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4obG9hZEk2NEdsb2JhbChpKSk7IH0KLSAgICB2b2lk
IHNldEdsb2JhbCh1bnNpZ25lZCBpLCBpbnQ2NF90IGJpdHMpIHsgbV9nbG9iYWxzLmdldCgpW2ld
ID0gYml0czsgfQotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fbWVtb3J5KTsgfQot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdGFibGUpOyB9CisgICAgLy8gVGFpbCBhY2Nl
c3NvcnMuCisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlRhaWwoKSB7IHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2NF90KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSkpOyB9CisgICAgc3RydWN0IEltcG9ydEZ1bmN0aW9uSW5mbyB7CisgICAgICAgIC8v
IFRhcmdldCBpbnN0YW5jZSBhbmQgZW50cnlwb2ludCBhcmUgb25seSBzZXQgZm9yIHdhc20tPndh
c20gY2FsbHMsIGFuZCBhcmUgb3RoZXJ3aXNlIG51bGxwdHIuIFRoZSBlbWJlZGRlci1zcGVjaWZp
YyBsb2dpYyBvY2N1cnMgdGhyb3VnaCBpbXBvcnQgZnVuY3Rpb24uCisgICAgICAgIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogdGFyZ2V0SW5zdGFuY2UgeyBudWxscHRyIH07CisgICAgICAgIFdhc206
Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50IHsgbnVsbHB0ciB9Owor
ICAgICAgICB2b2lkKiB3YXNtVG9FbWJlZGRlclN0dWJFeGVjdXRhYmxlQWRkcmVzcyB7IG51bGxw
dHIgfTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBpbXBvcnRGdW5jdGlvbiB7IFdy
aXRlQmFycmllcjxKU09iamVjdD4oKSB9OworICAgIH07CisgICAgSW1wb3J0RnVuY3Rpb25JbmZv
KiBpbXBvcnRGdW5jdGlvbkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IFJFTEVBU0Vf
QVNTRVJUKGltcG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4g
JmJpdHdpc2VfY2FzdDxJbXBvcnRGdW5jdGlvbkluZm8qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpICsgb2Zmc2V0T2ZUYWlsKCkpW2ltcG9ydEZ1bmN0aW9uTnVtXTsgfQorICAgIHN0YXRpYyBz
aXplX3Qgb2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsg
cmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0
RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHRhcmdl
dEluc3RhbmNlKTsgfQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludChz
aXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0
RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRP
RihJbXBvcnRGdW5jdGlvbkluZm8sIHdhc21FbnRyeXBvaW50KTsgfQorICAgIHN0YXRpYyBzaXpl
X3Qgb2Zmc2V0T2ZXYXNtVG9FbWJlZGRlclN0dWJFeGVjdXRhYmxlQWRkcmVzcyhzaXplX3QgaW1w
b3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25O
dW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRG
dW5jdGlvbkluZm8sIHdhc21Ub0VtYmVkZGVyU3R1YkV4ZWN1dGFibGVBZGRyZXNzKTsgfQorICAg
IHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rp
b25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXpl
b2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbklu
Zm8sIGltcG9ydEZ1bmN0aW9uKTsgfQorICAgIEpTT2JqZWN0KiBpbXBvcnRGdW5jdGlvbih1bnNp
Z25lZCBpbXBvcnRGdW5jdGlvbk51bSkgeyBSRUxFQVNFX0FTU0VSVChpbXBvcnRGdW5jdGlvbk51
bSA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uSW5mbyhpbXBv
cnRGdW5jdGlvbk51bSktPmltcG9ydEZ1bmN0aW9uLmdldCgpOyB9CisKKyAgICAvLyBGSVhNRSBy
ZW1vdmUgdGhlc2UgYWZ0ZXIgcmVmYWN0b3JpbmcgdGhlbSBvdXQuIGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzE3NzQ3MgorICAgIFdhc206Ok1lbW9yeSYgaW50ZXJuYWxNZW1vcnkoKSB7IHJldHVybiBt
ZW1vcnkoKS0+bWVtb3J5KCk7IH0KKyAgICBXYXNtOjpDb2RlQmxvY2smIHdhc21Db2RlQmxvY2so
KSBjb25zdCB7IHJldHVybiAqbV9pbnN0YW5jZS0+Y29kZUJsb2NrKCk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mV2FzbVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSwgbV93YXNtVGFibGUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkNhbGxlZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5
SW5zdGFuY2UsIG1fY2FsbGVlKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9i
YWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9n
bG9iYWxzKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWTSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdm0pOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNX
ZWJBc3NlbWJseUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5
SW5zdGFuY2UsIG1fY29kZUJsb2NrKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZX
YXNtQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSwgbV93YXNtQ29kZUJsb2NrKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZD
YWNoZWRTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSwgbV9jYWNoZWRTdGFja0xpbWl0KTsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0
T2ZJbXBvcnRGdW5jdGlvbnMoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6
ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkp
OyB9Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBv
cnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIGltcG9y
dEZ1bmN0aW9uTnVtICogc2l6ZW9mKHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikpOyB9Ci0K
LSAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIHdlYkFzc2VtYmx5VG9KU0NhbGxlZSgpIHsgcmV0
dXJuIG1fY2FsbGVlLmdldCgpOyB9Ci0KLSAgICB2b2lkKiBjYWNoZWRTdGFja0xpbWl0KCkgY29u
c3QgeyByZXR1cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9Ci0gICAgdm9pZCBzZXRDYWNoZWRTdGFj
a0xpbWl0KHZvaWQqIGxpbWl0KSB7IG1fY2FjaGVkU3RhY2tMaW1pdCA9IGxpbWl0OyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZldhc21NZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3dhc21NZW1vcnkpOyB9CisgICAgdm9pZCog
Y2FjaGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgUkVMRUFTRV9BU1NFUlQobV9pbnN0YW5jZS0+Y2Fj
aGVkU3RhY2tMaW1pdCgpID09IG1fY2FjaGVkU3RhY2tMaW1pdCk7IHJldHVybiBtX2NhY2hlZFN0
YWNrTGltaXQ7IH0KKyAgICB2b2lkIHNldENhY2hlZFN0YWNrTGltaXQodm9pZCogbGltaXQpIHsg
bV9pbnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChsaW1pdCk7IG1fY2FjaGVkU3RhY2tMaW1p
dCA9IGxpbWl0OyB9CisgICAgV2FzbTo6TWVtb3J5KiB3YXNtTWVtb3J5KCkgeyByZXR1cm4gbV93
YXNtTWVtb3J5OyB9CisgICAgV2FzbTo6TW9kdWxlJiB3YXNtTW9kdWxlKCkgeyByZXR1cm4gbV93
YXNtTW9kdWxlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0m
LCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMpOworICAgIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9u
cywgUmVmPFdhc206Okluc3RhbmNlPiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
SlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25T
aXplKENoZWNrZWQ8c2l6ZV90PiBudW1JbXBvcnRGdW5jdGlvbnMpCiAgICAgewotICAgICAgICBy
ZXR1cm4gKG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpT
Q2VsbD4pICogbnVtSW1wb3J0RnVuY3Rpb25zKS51bnNhZmVHZXQoKTsKKyAgICAgICAgcmV0dXJu
IChvZmZzZXRPZlRhaWwoKSArIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICogbnVtSW1wb3J0
RnVuY3Rpb25zKS51bnNhZmVHZXQoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVk0qIG1fdm07
Ci0gICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+
KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KLSAgICBzaXplX3QgZ2xvYmFs
TWVtb3J5Qnl0ZVNpemUoKSBjb25zdDsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUo
KSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQorCisgICAgUmVmPFdhc206Okluc3Rh
bmNlPiBtX2luc3RhbmNlOwogCisgICAgVk0qIG1fdm07CiAgICAgV3JpdGVCYXJyaWVyPEpTV2Vi
QXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eVRhYmxlPiBtX3RhYmxlOwogICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseVRvSlNDYWxsZWU+
IG1fY2FsbGVlOwotICAgIE1hbGxvY1B0cjx1aW50NjRfdD4gbV9nbG9iYWxzOworICAgIAorICAg
IC8vIEZJWE1FIHJlbW92ZSB0aGVzZSBhZnRlciByZWZhY3RvcmluZyB0aGVtIG91dC4gaHR0cHM6
Ly93ZWJraXQub3JnL2IvMTc3NDcyCiAgICAgdm9pZCogbV9jYWNoZWRTdGFja0xpbWl0IHsgYml0
d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSB9
OworICAgIFdhc206OkNvZGVCbG9jayogbV93YXNtQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAg
IFdhc206Ok1vZHVsZSYgbV93YXNtTW9kdWxlOworICAgIFdhc206Ok1lbW9yeSogbV93YXNtTWVt
b3J5IHsgbnVsbHB0ciB9OworICAgIFdhc206OlRhYmxlKiBtX3dhc21UYWJsZSB7IG51bGxwdHIg
fTsKKyAgICB1aW50NjRfdCogbV9nbG9iYWxzIHsgbnVsbHB0ciB9OworCiAgICAgdW5zaWduZWQg
bV9udW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCmluZGV4IDIyM2M1OGIuLmQ2NDBh
NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNZW1vcnkuY3BwCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHku
TWVtb3J5IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1dlYkFzc2VtYmx5TWVtb3J5KSB9OwogCi1KU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlN
ZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOwpAQCAtNTAsMTAgKzUwLDE2IEBAIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3Ry
dWN0CiAgICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndl
YkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwogCi0gICAgYXV0byogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFw
KSkgSlNXZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKG1lbW9yeSkpOwot
ICAgIGluc3RhbmNlLT5tX21lbW9yeS0+Y2hlY2soKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICBhdXRvKiBtZW1vcnkgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNX
ZWJBc3NlbWJseU1lbW9yeSh2bSwgc3RydWN0dXJlKTsKKyAgICBtZW1vcnktPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gbWVtb3J5OworfQorICAgIAordm9pZCBKU1dlYkFzc2VtYmx5
TWVtb3J5OjphZG9wdChSZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKK3sKKyAgICBtX21lbW9y
eS5zd2FwKG1lbW9yeSk7CisgICAgQVNTRVJUKG1fbWVtb3J5LT5yZWZDb3VudCgpID09IDEpOwor
ICAgIG1fbWVtb3J5LT5jaGVjaygpOwogfQogCiBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNjEsMTMgKzY3LDEwIEBAIFN0cnVjdHVyZSogSlNXZWJB
c3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
fQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQorSlNXZWJBc3Nl
bWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICwgbV9tZW1vcnkoV1RGTW92ZSht
ZW1vcnkpKQorICAgICwgbV9tZW1vcnkoV2FzbTo6TWVtb3J5OjpjcmVhdGUoKS5yZWxlYXNlTm9u
TnVsbCgpKQogewotICAgIEFTU0VSVChtX21lbW9yeS0+cmVmQ291bnQoKSA9PSAxKTsKLSAgICBt
X21lbW9yeUJhc2UgPSBtX21lbW9yeS0+bWVtb3J5KCk7Ci0gICAgbV9tZW1vcnlTaXplID0gbV9t
ZW1vcnktPnNpemUoKTsKIH0KIAogSlNBcnJheUJ1ZmZlciogSlNXZWJBc3NlbWJseU1lbW9yeTo6
YnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTg1LDUyICs4
OCw0NSBAQCBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHJldHVybiBtX2J1ZmZlcldyYXBw
ZXIuZ2V0KCk7CiB9CiAKLVdhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJv
d0V4Y2VwdGlvbnNPbkZhaWx1cmUpCitXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9y
eTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVsdGEpCiB7Ci0gICAg
Ly8gTm90ZTogV2UgY2FuIG9ubHkgdXNlIGV4ZWMgaWYgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25G
YWlsdXJlIGlzIHRydWUuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCkuc2l6
ZUluUGFnZXMoKTsKLQotICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKGRlbHRhKSkg
ewotICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQorICAgIGF1dG8g
Z3Jvd24gPSBtZW1vcnkoKS5ncm93KFdhc206OlBhZ2VDb3VudChkZWx0YSkpOworICAgIGlmICgh
Z3Jvd24pIHsKKyAgICAgICAgc3dpdGNoIChncm93bi5lcnJvcigpKSB7CisgICAgICAgIGNhc2Ug
V2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgogICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGRlbHRhIHRv
IGJlIGEgdmFsaWQgcGFnZSBjb3VudCIpKSk7Ci0gICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291
bnQoKTsKLSAgICB9Ci0KLSAgICBXYXNtOjpQYWdlQ291bnQgbmV3U2l6ZSA9IG9sZFBhZ2VDb3Vu
dCArIFdhc206OlBhZ2VDb3VudChkZWx0YSk7Ci0gICAgaWYgKCFuZXdTaXplKSB7Ci0gICAgICAg
IGlmIChzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1Np
emU6CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhw
ZWN0cyB0aGUgZ3Jvd24gc2l6ZSB0byBiZSBhIHZhbGlkIHBhZ2UgY291bnQiKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6
V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
Lk1lbW9yeS5ncm93IHdvdWxkIGV4Y2VlZCB0aGUgbWVtb3J5J3MgZGVjbGFyZWQgbWF4aW11bSBz
aXplIikpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6
R3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7
CiAgICAgfQogCi0gICAgaWYgKGRlbHRhKSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1lbW9y
eSgpLmdyb3codm0sIG5ld1NpemUpOwotICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX21lbW9yeUJhc2UgPT0gbWVtb3J5KCkubWVtb3J5KCkpOwotICAgICAgICAg
ICAgQVNTRVJUKG1fbWVtb3J5U2l6ZSA9PSBtZW1vcnkoKS5zaXplKCkpOwotICAgICAgICAgICAg
aWYgKHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKLSAgICAgICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
KTsKLSAgICAgICAgICAgIHJldHVybiBXYXNtOjpQYWdlQ291bnQoKTsKLSAgICAgICAgfQotICAg
ICAgICBtX21lbW9yeUJhc2UgPSBtZW1vcnkoKS5tZW1vcnkoKTsKLSAgICAgICAgbV9tZW1vcnlT
aXplID0gbWVtb3J5KCkuc2l6ZSgpOwotICAgIH0KKyAgICByZXR1cm4gZ3Jvd24udmFsdWUoKTsK
K30KIAotICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSBvbGQgYXJyYXkgYnVmZmVyIGJl
Y2F1c2UgaXQgbWlnaHQgbm93IGJlIHBvaW50aW5nCi0gICAgLy8gdG8gc3RhbGUgbWVtb3J5Lgor
dm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93U3VjY2Vzc0NhbGxiYWNrKFZNJiB2bSwgV2Fz
bTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkK
K3sKKyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIG91dCB0aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNh
dXNlIGl0IG1pZ2h0IG5vdyBiZSBwb2ludGluZyB0byBzdGFsZSBtZW1vcnkuCiAgICAgLy8gTmV1
dGVyIHRoZSBvbGQgYXJyYXkuCiAgICAgaWYgKG1fYnVmZmVyKSB7CiAgICAgICAgIG1fYnVmZmVy
LT5uZXV0ZXIodm0pOwogICAgICAgICBtX2J1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIG1fYnVm
ZmVyV3JhcHBlci5jbGVhcigpOwogICAgIH0KLQorICAgIAogICAgIG1lbW9yeSgpLmNoZWNrKCk7
Ci0KLSAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKFdhc206OlBhZ2VDb3Vu
dChkZWx0YSkuYnl0ZXMoKSk7Ci0gICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKKyAgICAKKyAgICB2
bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld1BhZ2VDb3VudC5ieXRlcygpIC0g
b2xkUGFnZUNvdW50LmJ5dGVzKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAppbmRleCAxZDA2YzRjLi40YmJiY2NmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5o
CkBAIC00OCwyNiArNDgsMjMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJnZtLmVhZ2VybHlT
d2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1dlYkFz
c2VtYmx5TWVtb3J5KiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2Fz
bTo6TWVtb3J5PiYmKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1lbW9yeSogY3JlYXRlKEV4
ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKKyAgICB2b2lkIGFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYpOwogICAg
IFdhc206Ok1lbW9yeSYgbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBK
U0FycmF5QnVmZmVyKiBidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOwotICAgIFdhc206
OlBhZ2VDb3VudCBncm93KFZNJiwgRXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hv
dWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9y
eSwgbV9tZW1vcnlCYXNlKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5U2l6
ZSk7IH0KKyAgICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhWTSYsIEV4ZWNTdGF0ZSosIHVpbnQzMl90
IGRlbHRhKTsKKyAgICB2b2lkIGdyb3dTdWNjZXNzQ2FsbGJhY2soVk0mLCBXYXNtOjpQYWdlQ291
bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdlQ291bnQgbmV3UGFnZUNvdW50KTsKIAogcHJpdmF0
ZToKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1l
bW9yeT4mJik7CisgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSopOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAotICAgIHZvaWQqIG1fbWVtb3J5QmFzZTsKLSAgICBzaXplX3QgbV9tZW1vcnlTaXplOwog
ICAgIFJlZjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OwogICAgIFdyaXRlQmFycmllcjxKU0FycmF5
QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5jcHAKaW5kZXggYmFiMTE4MS4uNDBjMTAwNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5o
IgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCiAjaW5j
bHVkZSAiV2FzbVBsYW4uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlNDYWxsZWUuaCIKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02MSw2ICs2Miw3IEBAIFN0cnVjdHVyZSog
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogfQogCisKIEpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206Ok1vZHVsZT4mJiBtb2R1bGUpCiAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkp
CkBAIC05MSw2ICs5MywzNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQogICAgIFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKCk7
CiB9CiAKK2NvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBKU1dlYkFzc2VtYmx5TW9kdWxl
Ojptb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpOworfQorCitTeW1ib2xUYWJsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6
ZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2V4cG9ydFN5bWJvbFRh
YmxlLmdldCgpOworfQorCitXYXNtOjpTaWduYXR1cmVJbmRleCBKU1dlYkFzc2VtYmx5TW9kdWxl
OjpzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlKSBjb25zdAoreworICAgIHJldHVybiBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7Cit9CisKK1dlYkFzc2Vt
Ymx5VG9KU0NhbGxlZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y2FsbGVlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7Cit9CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpCit7Cisg
ICAgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsK
K30KKworV2FzbTo6TW9kdWxlJiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGUoKQoreworICAg
IHJldHVybiBtX21vZHVsZS5nZXQoKTsKK30KKwogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpz
ZXRDb2RlQmxvY2soVk0mIHZtLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8c2l6
ZV90Pihtb2RlKV0uc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDNkYzY3YTMu
LjAxYjVkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmgKQEAgLTMwLDE1ICszMCwxOSBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJVbmNvbmRp
dGlvbmFsRmluYWxpemVyLmgiCi0jaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldh
c21NZW1vcnlNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBl
Y3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBN
b2R1bGU7CitzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiBjbGFzcyBQbGFuOwordXNpbmcgU2ln
bmF0dXJlSW5kZXggPSB1aW50MzJfdDsKIH0KIAogY2xhc3MgU3ltYm9sVGFibGU7CkBAIC01Miwy
MyArNTYsMjAgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZN
JiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0
JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBj
cmVhdGVTdHViKFZNJiwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgV1RGOjpFeHBlY3RlZDxSZWZQ
dHI8V2FzbTo6TW9kdWxlPiwgU3RyaW5nPiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgY29uc3Qg
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7IH0KLSAgICBTeW1ib2xUYWJsZSogZXhw
b3J0U3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgp
OyB9Ci0gICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgfQotICAgIFdlYkFzc2VtYmx5VG9KU0NhbGxlZSog
Y2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7IH0KKyAgICBjb25zdCBXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdDsKKyAgICBTeW1i
b2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdDsKKyAgICBXYXNtOjpTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKSBjb25zdDsKKyAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIGNhbGxlZSgp
IGNvbnN0OwogCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1l
bW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4o
bW9kZSldLmdldCgpOyB9CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFdh
c206Ok1lbW9yeU1vZGUgbW9kZSk7CisgICAgdm9pZCBzZXRDb2RlQmxvY2soVk0mLCBXYXNtOjpN
ZW1vcnlNb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7CiAKICAgICBjb25zdCBWZWN0b3I8
dWludDhfdD4mIHNvdXJjZSgpIGNvbnN0OwogCi0gICAgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKSB7
IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgV2Fz
bTo6TWVtb3J5TW9kZSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFdhc206Ok1vZHVsZSYgbW9kdWxlKCk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAppbmRleCBmZjQ2ZDRkLi45OWJlMDZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWJsZS5jcHAKQEAgLTI5LDMwICsyOSwyMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVRhYmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5U
YWJsZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNXZWJBc3NlbWJseVRhYmxlKSB9OwogCi1KU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11
bSkKK0pTV2ViQXNzZW1ibHlUYWJsZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFibGU+
JiYgdGFibGUpCiB7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwogCi0gICAgYXV0byBleGNlcHRpb24gPSBbJl0gKEpTT2JqZWN0KiBlcnJvcikgewotICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgaWYgKCFnbG9i
YWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgpKSB7CisgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPndl
YkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9OwotCi0gICAgaWYgKCFnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RW5hYmxlZCgp
KQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwotCi0gICAgaWYgKCFp
c1ZhbGlkU2l6ZShpbml0aWFsKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICB9CiAKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJsZT4odm0uaGVhcCkpIEpTV2Vi
QXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJlLCBpbml0aWFsLCBtYXhpbXVtKTsKKyAgICBhdXRv
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlUYWJs
ZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlUYWJsZSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHRh
YmxlKSk7CiAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5z
dGFuY2U7CiB9CkBAIC02MiwyMyArNTQsMTUgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5VGFi
bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2Vi
QXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0p
CitKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFibGU+JiYgdGFibGUpCiAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCisgICAgLCBtX3RhYmxlKFdURk1vdmUodGFibGUpKQogewotICAgIG1fc2l6ZSA9
IGluaXRpYWw7Ci0gICAgQVNTRVJUKGlzVmFsaWRTaXplKG1fc2l6ZSkpOwotICAgIG1fbWF4aW11
bSA9IG1heGltdW07Ci0gICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX3Np
emUpOwotCiAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBwcmUtYWxs
b2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgogICAgIC8v
IEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4KLSAgICBtX2Z1bmN0aW9ucyA9IE1h
bGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNtOjpDYWxs
YWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAgbV9qc0Z1
bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKSB7Ci0gICAgICAgIG5l
dyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAg
ICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpT
aWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBj
b2RlLgotICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+KCk7Ci0gICAgfQorICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8V3JpdGVC
YXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pikg
KiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBzaXplKCk7ICsraSkKKyAgICAgICAgZGVmYXVsdF9jb25zdHJ1Y3RfYXQoJm1fanNGdW5j
dGlvbnMuZ2V0KClbaV0pOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQpAQCAtOTksNyArODMsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3NpemU7ICsraSkKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+c2l6ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKHRoaXNPYmplY3QtPm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pOwogfQogCkBAIC0xMDcs
NDcgKzkxLDQ0IEBAIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRh
KQogewogICAgIGlmIChkZWx0YSA9PSAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBDaGVj
a2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gbmV3U2l6ZUNoZWNrZWQgPSBtX3NpemU7Ci0g
ICAgbmV3U2l6ZUNoZWNrZWQgKz0gZGVsdGE7Ci0gICAgdWludDMyX3QgbmV3U2l6ZTsKLSAgICBp
ZiAobmV3U2l6ZUNoZWNrZWQuc2FmZUdldChuZXdTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92
ZXJmbG93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1heGltdW0oKSAmJiBuZXdT
aXplID4gKm1heGltdW0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghaXNWYWxp
ZFNpemUobmV3U2l6ZSkpCisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHNpemUoKTsKKworICAgIGF1
dG8gZ3JldyA9IG1fdGFibGUtPmdyb3coZGVsdGEpOworICAgIGlmICghZ3JldykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgbV9mdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG5ld1NpemUpKTsKLSAgICBtX2pz
RnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGlj
X2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBncmV3LnZhbHVl
KCk7CisgICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+KSAqIG5ld1NpemUpOworCisgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdT
aXplOyArK2kpCisgICAgICAgIGRlZmF1bHRfY29uc3RydWN0X2F0KCZtX2pzRnVuY3Rpb25zLmdl
dCgpW2ldKTsKIAotICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsr
aSkgewotICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVG
dW5jdGlvbigpOwotICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+KCk7Ci0gICAgfQotICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK0pTT2JqZWN0KiBKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9u
KHVpbnQzMl90IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgc2l6ZSgpKTsK
KyAgICByZXR1cm4gbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uZ2V0KCk7Cit9CisKIHZvaWQg
SlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQogewotICAg
IFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX3RhYmxlLT5jbGVhckZ1bmN0
aW9uKGluZGV4KTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdyaXRlQmFycmll
cjxKU09iamVjdD4oKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxs
YWJsZUZ1bmN0aW9uKCk7Ci0gICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XS5zaWdu
YXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkg
b24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6
c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbiog
ZnVuY3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgIG1f
dGFibGUtPnNldEZ1bmN0aW9uKGluZGV4LCBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpLCBm
dW5jdGlvbi0+aW5zdGFuY2UoKSk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2V0
KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gZnVu
Y3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6
OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKiBmdW5jdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7
CisgICAgbV90YWJsZS0+c2V0RnVuY3Rpb24oaW5kZXgsIGZ1bmN0aW9uLT5jYWxsYWJsZUZ1bmN0
aW9uKCksIGZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKICAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2lu
ZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRl
eF0gPSBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmgKaW5kZXggZGY4M2U5Ny4uNDQ4NzUzMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNTcgKzI5LDQyIEBACiAKICNp
bmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisj
aW5jbHVkZSAiV2FzbUxpbWl0cy5oIgorI2luY2x1ZGUgIldhc21UYWJsZS5oIgogI2luY2x1ZGUg
IldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5j
dGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
LW5hbWVzcGFjZSBXYXNtIHsKLXN0cnVjdCBDYWxsYWJsZUZ1bmN0aW9uOwotfQotCiBjbGFzcyBK
U1dlYkFzc2VtYmx5VGFibGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5VGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSosIHVp
bnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOworICAgIHN0
YXRpYyBKU1dlYkFzc2VtYmx5VGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVy
ZSosIFJlZjxXYXNtOjpUYWJsZT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5G
TzsKIAotICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVy
biBtX21heGltdW07IH0KLSAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6ZSkgeyByZXR1cm4g
V2FzbTo6VGFibGU6OmlzVmFsaWRTaXplKHNpemUpOyB9CisgICAgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUtPm1heGltdW0oKTsgfQorICAg
IHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5zaXplKCk7IH0KICAgICBi
b29sIGdyb3codWludDMyX3QgZGVsdGEpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBKU09iamVj
dCogZ2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgIHJldHVybiBtX2pzRnVuY3Rpb25zLmdldCgp
W2luZGV4XS5nZXQoKTsKLSAgICB9Ci0gICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGlu
ZGV4KTsKLSAgICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qKTsKLSAgICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QgaW5kZXgs
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKik7Ci0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUs
IG1fc2l6ZSk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnVuY3Rpb25zKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9mdW5jdGlvbnMpOyB9
Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpTRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9qc0Z1bmN0aW9ucyk7IH0KKyAgICBK
U09iamVjdCogZ2V0RnVuY3Rpb24odWludDMyX3QpOworICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1
aW50MzJfdCk7CisgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90LCBXZWJBc3NlbWJs
eUZ1bmN0aW9uKik7CisgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90LCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiopOwogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWlu
dDMyX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgdG9wcyBvdXQgYXQgfjM4NCBNQiB3
b3J0aCBvZiBkYXRhIGluIHRoaXMgY2xhc3MuCi0gICAgICAgIHJldHVybiBzaXplIDwgKDEgPDwg
MjQpOwotICAgIH0KKyAgICBXYXNtOjpUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLnB0
cigpOyB9CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJl
KiwgdWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSk7Cisg
ICAgSlNXZWJBc3NlbWJseVRhYmxlKFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYm
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CiAKLSAgICBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5j
dGlvbnM7CisgICAgUmVmPFdhc206OlRhYmxlPiBtX3RhYmxlOwogICAgIE1hbGxvY1B0cjxXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+PiBtX2pzRnVuY3Rpb25zOwotICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IG1fbWF4aW11bTsKLSAgICB1aW50MzJfdCBtX3NpemU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21U
b0pTLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzFkMGQyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCkBAIC0wLDAgKzEs
NjY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkZy
YW1lVHJhY2Vycy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNp
bmNsdWRlICJOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0
b3JzLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2Fz
bUNvbnRleHQuaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20geworCit1c2luZyBKSVQgPSBDQ2FsbEhlbHBlcnM7CisKK3N0
YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKEpJVCYgaml0LCB1bnNpZ25lZCBpbXBv
cnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICAvLyBXZSdyZSBjYWxsaW5nIG91dCBvZiB0
aGUgY3VycmVudCBXZWJBc3NlbWJseS5JbnN0YW5jZS4gVGhhdCBJbnN0YW5jZSBoYXMgYSBsaXN0
IG9mIGFsbCBpdHMgaW1wb3J0IGZ1bmN0aW9ucy4KKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5z
dGFuY2UocmVzdWx0KTsKKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MocmVzdWx0LCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24oaW1wb3J0SW5kZXgpKSwg
cmVzdWx0KTsKK30KKyAgICAKK3N0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYs
IEJpbmRpbmdGYWlsdXJlPiBoYW5kbGVCYWRJNjRVc2UoVk0qIHZtLCBKSVQmIGppdCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIHVuc2lnbmVkIGltcG9ydEluZGV4KQoreworICAgIHVuc2ln
bmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKKworICAgIGJvb2wgaGFz
QmFkSTY0VXNlID0gZmFsc2U7CisgICAgaGFzQmFkSTY0VXNlIHw9IHNpZ25hdHVyZS5yZXR1cm5U
eXBlKCkgPT0gSTY0OworICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJn
Q291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKythcmdOdW0pIHsKKyAgICAgICAgVHlwZSBhcmdUeXBl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkg
eworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgY2FzZSBB
bnlmdW5jOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
ICAgICBjYXNlIEk2NDogeworICAgICAgICAgICAgaGFzQmFkSTY0VXNlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGhhc0JhZEk2NFVzZSkgeworICAg
ICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0t
PnRvcEVudHJ5RnJhbWUpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisKKyAgICAgICAgLy8gU3RvcmUgQ2Fs
bGVlLgorICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
KworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgIHZvaWQgKCp0aHJvd0JhZEk2NCkoRXhlY1N0
YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKSAtPiB2b2lkIHsKKyAgICAgICAgICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAg
ICAgICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0s
IGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwg
QVNDSUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQg
dG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxs
RnJhbWVGb3JDYXRjaCk7CisgICAgICAgIH07CisKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAg
ICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwor
CisgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7CisgICAgICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQg
aW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7Cit9CisKK0V4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiB2bSwgQmFn
PENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlv
biBkb2Vzbid0IHByb3Blcmx5IGFic3RyYWN0IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4K
KyAgICAvLyBJdCdkIGJlIHN1cGVyIGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDEKKyAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRp
b24mIHdhc21DQyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOworICAgIGNvbnN0IEpTQ0NhbGxp
bmdDb252ZW50aW9uJiBqc0NDID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJl
SW5kZXgpOworICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KTsKKyAgICBKSVQgaml0OworCisgICAgLy8gTm90ZTogV2FzbUIzSVJHZW5lcmF0b3IgYXNzdW1l
cyB0aGF0IHRoaXMgc3R1YiB0cmVhdHMgU1AgYXMgYSBjYWxsZWUgc2F2ZS4KKyAgICAvLyBJZiB3
ZSBldmVyIGNoYW5nZSB0aGlzLCB3ZSB3aWxsIGFsc28gbmVlZCB0byBjaGFuZ2UgV2FzbUIzSVJH
ZW5lcmF0b3IuCisKKyAgICAvLyBCZWxvdywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcg
Y29udmVudGlvbiBpcyBhbHdheXMgb24gdGhlIHN0YWNrLgorICAgIEFTU0VSVCghanNDQy5tX2dw
ckFyZ3Muc2l6ZSgpKTsKKyAgICBBU1NFUlQoIWpzQ0MubV9mcHJBcmdzLnNpemUoKSk7CisKKyAg
ICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0
ZWRJbW0zMigwKSwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7IC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisKKyAgICBhdXRvIGJhZEk2NCA9IGhhbmRs
ZUJhZEk2NFVzZSh2bSwgaml0LCBzaWduYXR1cmUsIGltcG9ydEluZGV4KTsKKyAgICBpZiAoIWJh
ZEk2NCB8fCBiYWRJNjQudmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGJhZEk2NDsKKworICAgIC8v
IEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBs
ZWFzdCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0
byBzYXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBh
bHJlYWR5IHRvb2sgY2FyZSBvZiB0aGlzLgorICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVT
YXZlcyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgbWlzc2luZ0NhbGxlZVNh
dmVzLmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIEFTU0VSVChtaXNz
aW5nQ2FsbGVlU2F2ZXMuaXNFbXB0eSgpKTsKKworICAgIGlmICghT3B0aW9uczo6dXNlQ2FsbElD
c0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzKCkpIHsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2Ny
YXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhcmdDb3VudCAqIHNpemVvZih1
aW50NjRfdCkpOworICAgICAgICBjaGFyKiBidWZmZXIgPSBhcmdDb3VudCA/IHN0YXRpY19jYXN0
PGNoYXIqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKKyAgICAgICAg
dW5zaWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVk
RlBScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGJ1ZmZlck9mZnNldCA9IDA7CisgICAgICAgIHVu
c2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBjb25zdCBHUFJSZWcgc2Ny
YXRjaEdQUiA9IEdQUkluZm86OnJlZ0NTMDsKKyAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVu
dEJ5dGVzKCksIHNpemVvZihSZWdpc3RlcikpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpOworCisg
ICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJn
TnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJn
TnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBW
b2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgor
ICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAgICAgICAgICAgICAgR1BS
UmVnIGdwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0Mu
bV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1f
Z3ByQXJnc1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRz
LCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAg
ICAgICAgICBncHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBm
ck9mZnNldCksIGdwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVv
ZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGppdC56ZXJv
RXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7CisgICAgICAgICAgICAgICAgaml0LnN0b3Jl
NjQoZ3ByUmVnLCBidWZmZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFy
c2hhbGxlZEdQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAg
ICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkp
CisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxl
ZEZQUnNdLmZwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJz
IGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0g
RlBSSW5mbzo6YXJndW1lbnRGUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0
KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJS
ZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3Vi
bGUoZnByUmVnLCBmcHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChm
cHJSZWcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hH
UFIsIGJ1ZmZlciArIGJ1ZmZlck9mZnNldCk7CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVk
RlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgRjY0OiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAg
ICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10u
ZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2
YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZv
Ojphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwor
ICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZm
ZXIgKyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGJ1ZmZlck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICB9Cisg
ICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlciksIHNjcmF0Y2hHUFIpOworICAgICAgICBpZiAoYXJnQ291
bnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBHQyBzaG91bGQgbm90IGxvb2sgYXQgdGhpcyBidWZm
ZXIgYXQgYWxsLCB0aGVzZSBhcmVuJ3QgSlNWYWx1ZXMuCisgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZl
TGVuZ3RoKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ2NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgU2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KikgPQorICAgICAgICAgICAgW10g
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNhbGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXgsIHVpbnQ2NF90KiBidWZmZXIpIC0+IHVpbnQ2NF90IHsgCisgICAgICAgICAgICAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CisgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICAgICAgICAgIFR5cGUgYXJnVHlw
ZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIGFyZzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFueWZ1bmM6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgSTY0OgorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJMzI6CisgICAgICAgICAgICAgICAgICAg
ICAgICBhcmcgPSBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihidWZmZXJbYXJnTnVtXSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRjMyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZyA9IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJ1ZmZlclthcmdOdW1d
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICAgICAgICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0
YShjYWxsZWUsIGNhbGxEYXRhKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
VHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBjYWxsKGV4ZWMsIGNhbGxlZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBh
cmdzKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDAp
OworCisgICAgICAgICAgICAgICAgdWludDY0X3QgcmVhbFJlc3VsdDsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IEZ1bmM6CisgICAgICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgICAgIGNh
c2UgSTY0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSTMyOiB7
CisgICAgICAgICAgICAgICAgICAgIHJlYWxSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlc3VsdC50b0ludDMyKGV4ZWMpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNl
IEY2NDoKKyAgICAgICAgICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgICAgICAgICBy
ZWFsUmVzdWx0ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihyZXN1bHQudG9OdW1iZXIoZXhlYykp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhbFJlc3VsdDsKKyAgICAgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
ZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpKSk7CisgICAgICAgIAorICAgICAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChq
aXQsIGltcG9ydEluZGV4LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBzdGF0aWNf
YXNzZXJ0KEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgPj0gNCwgIldlIHJlbHkg
b24gdGhpcyB3aXRoIHRoZSBjYWxsIGJlbG93LiIpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc2lnbmF0dXJlSW5kZXgpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYnVm
ZmVyKSk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGF1dG8gbm9F
eGNlcHRpb24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpJ
bnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKworICAgICAgICAvLyBleGNlcHRpb24gaGVyZS4KKyAg
ICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
LT50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIHZvaWQgKCpkb1Vud2luZGlu
ZykoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKKyAgICAgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVj
KTsKKyAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAg
IH07CisgICAgICAgIGF1dG8gZXhjZXB0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGpp
dC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CisKKyAgICAgICAgbm9FeGNlcHRpb24ubGlu
aygmaml0KTsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgRjY0OiB7CisgICAgICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRjMyOiB7CisgICAgICAgICAgICBqaXQubW92
ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVl
RlBSKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgIGppdC5y
ZXQoKTsKKworICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVm
ZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CisKKyAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIGNhbGxGdW5jKTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkNh
bGwsIGRvVW53aW5kaW5nKTsKKworICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRl
eCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKKyAgICB9CisKKyAgICAv
LyBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYSBzdGFjayBjaGVjayBoZXJlIHNpbmNl
IFdhc21CM0lSR2VuZXJhdG9yCisgICAgLy8gd2lsbCBkbyB0aGUgc3RhY2sgY2hlY2sgZm9yIHVz
LiBXaGVuZXZlciBpdCBkZXRlY3RzIHRoYXQgaXQgbWlnaHQgbWFrZQorICAgIC8vIGEgY2FsbCB0
byB0aGlzIHRodW5rLCBpdCdsbCBtYWtlIHN1cmUgaXRzIHN0YWNrIGNoZWNrIGluY2x1ZGVzIHNw
YWNlCisgICAgLy8gZm9yIHVzIGhlcmUuCisKKyAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlBh
cmFtZXRlcnMgPSBhcmdDb3VudCArIDE7IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50Lgor
ICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPSBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyArIG51bWJlck9mUGFyYW1ldGVyczsKKyAgICBjb25zdCB1bnNpZ25l
ZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVn
aXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworICAgIGNvbnN0IHVuc2lnbmVkIHN0
YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihzdGFja09mZnNldCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgSklUOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICAvLyBGSVhNRSBt
YWtlIHRoZXNlIGxvb3BzIHdoaWNoIHN3aXRjaCBvbiBTaWduYXR1cmUgaWYgdGhlcmUgYXJlIG1h
bnkgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4gSXQnbGwgb3RoZXJ3aXNlIGJlIGh1Z2UgZm9yIGh1
Z2Ugc2lnbmF0dXJlcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTU0NworICAgIAorICAgIC8vIEZpcnN0IGdvIHRocm91Z2ggdGhlIGludGVnZXIgcGFyYW1ldGVy
cywgZnJlZWluZyB1cCB0aGVpciByZWdpc3RlciBmb3IgdXNlIGFmdGVyd2FyZHMuCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkR1BScyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1h
cnNoYWxsZWRGUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBD
YWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKTsKKyAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVt
KSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVt
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2FzZSBWb2lk
OgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAg
ICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICAgICAgICAgIGNhc2UgSTMyOiB7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxl
ZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZ3By
UmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJzaGFsbGVkR1BSc10uZ3ByKCk7CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxl
ZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNo
LgorICAgICAgICAgICAgICAgICAgICBncHJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdwclJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZy
T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICsrbWFyc2hhbGxlZEdQUnM7CisgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQz
MlRvUHRyKGdwclJlZywgZ3ByUmVnKTsgLy8gQ2xlYXIgbm9uLWludDMyIGFuZCBub24tdGFnIGJp
dHMuCisgICAgICAgICAgICAgICAgaml0LmJveEludDMyKGdwclJlZywgSlNWYWx1ZVJlZ3MoZ3By
UmVnKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2
NChncHJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGMzI6
CisgICAgICAgICAgICBjYXNlIEY2NDoKKyAgICAgICAgICAgICAgICAvLyBTa2lwcGVkOiBoYW5k
bGVkIGJlbG93LgorICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA+PSB3YXNtQ0Mu
bV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9m
KFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAg
ICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
eworICAgICAgICAvLyBJbnRlZ2VyIHJlZ2lzdGVycyBoYXZlIGFscmVhZHkgYmVlbiBzcGlsbGVk
LCB0aGVzZSBhcmUgbm93IGF2YWlsYWJsZS4KKyAgICAgICAgR1BSUmVnIGRvdWJsZUVuY29kZU9m
ZnNldEdQUlJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2ggPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIGJvb2wgaGFzTWF0ZXJpYWxpemVk
RG91YmxlRW5jb2RlT2Zmc2V0ID0gZmFsc2U7CisgICAgICAgIGF1dG8gbWF0ZXJpYWxpemVEb3Vi
bGVFbmNvZGVPZmZzZXQgPSBbJmhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCwgJmpp
dF0gKEdQUlJlZyBkZXN0KSB7CisgICAgICAgICAgICBpZiAoIWhhc01hdGVyaWFsaXplZERvdWJs
ZUVuY29kZU9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoRG91YmxlRW5j
b2RlT2Zmc2V0ID09IDFsbCA8PCA0OCwgImNvZGVnZW4gYXNzdW1lcyB0aGlzIGJlbG93Iik7Cisg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tMzIoMSksIGRlc3QpOworICAg
ICAgICAgICAgICAgIGppdC5sc2hpZnQ2NChKSVQ6OlRydXN0ZWRJbW0zMig0OCksIGRlc3QpOwor
ICAgICAgICAgICAgICAgIGhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxl
ZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7CisgICAgICAg
IHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVu
dCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIHVuc2lnbmVk
IGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworCisgICAgICAgIGF1dG8gbWFyc2hhbGxGUFIgPSBb
Jl0gKEZQUlJlZyBmcHJSZWcpIHsKKyAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0Y2gpOworICAgICAg
ICAgICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BS
UmVnKTsKKyAgICAgICAgICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcsIHNj
cmF0Y2gpOworICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaCwgY2FsbGVlRnJhbWUud2l0
aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCkpOworICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZz
ZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Cisg
ICAgICAgIH07CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBh
cmdDb3VudDsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVy
ZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAg
ICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBj
YXNlIEFueWZ1bmM6CisgICAgICAgICAgICBjYXNlIEk2NDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgICAgICAgICAg
Y2FzZSBJMzI6CisgICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBhYm92ZS4KKyAg
ICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPj0gd2FzbUNDLm1fZ3ByQXJncy5zaXpl
KCkpCisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkR1BSczsKKyAgICAgICAgICAgICAgICBjYWxsZWVG
cmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwor
ICAgICAgICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6
ZSgpKQorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNo
YWxsZWRGUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lz
dGVycyBhcmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGZwclJl
ZyA9IEZQUkluZm86OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRG
bG9hdChKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwg
ZnByUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRv
RG91YmxlKGZwclJlZywgZnByUmVnKTsKKyAgICAgICAgICAgICAgICBtYXJzaGFsbEZQUihmcHJS
ZWcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y2FzZSBGNjQ6IHsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOworICAgICAgICAgICAg
ICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAg
ICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5m
cHIoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Un
dmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZh
aWxhYmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86
OmFyZ3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hcnNoYWxsRlBSKGZwclJlZyk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworCisg
ICAgR1BSUmVnIGltcG9ydEpTQ2VsbEdQUlJlZyA9IEdQUkluZm86OnJlZ1QwOyAvLyBDYWxsZWUg
bmVlZHMgdG8gYmUgaW4gcmVnVDAgZm9yIHNsb3cgcGF0aCBiZWxvdy4KKyAgICBBU1NFUlQoIXdh
c21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMuZ2V0KGltcG9ydEpTQ2VsbEdQUlJlZykpOworCisg
ICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgaW1wb3J0SlNDZWxs
R1BSUmVnKTsKKworICAgIGppdC5zdG9yZTY0KGltcG9ydEpTQ2VsbEdQUlJlZywgY2FsbGVlRnJh
bWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7CisgICAgaml0LnN0b3JlMzIoSklUOjpUcnVzdGVkSW1tMzIobnVt
YmVyT2ZQYXJhbWV0ZXJzKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxv
YWRPZmZzZXQpKTsKKyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW02NChWYWx1ZVVuZGVm
aW5lZCksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworCisgICAgLy8gRklYTUUg
VGFpbCBjYWxsIGlmIHRoZSB3YXNtIHJldHVybiB0eXBlIGlzIHZvaWQgYW5kIG5vIHJlZ2lzdGVy
cyB3ZXJlIHNwaWxsZWQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU0ODgKKworICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gY2FsbExpbmtJbmZvcy5h
ZGQoKTsKKyAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIENv
ZGVPcmlnaW4oKSwgaW1wb3J0SlNDZWxsR1BSUmVnKTsKKyAgICBKSVQ6OkRhdGFMYWJlbFB0ciB0
YXJnZXRUb0NoZWNrOworICAgIEpJVDo6VHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSgw
KTsKKyAgICBKSVQ6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgaW1wb3J0SlNDZWxsR1BSUmVnLCB0YXJnZXRUb0NoZWNrLCBp
bml0aWFsUmlnaHRWYWx1ZSk7CisgICAgSklUOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxs
KCk7CisgICAgSklUOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworICAgIHNsb3dQYXRoLmxpbmso
JmppdCk7CisgICAgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGhlcmUuCisgICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5m
bzo6cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gcmVnVDIuCisgICAgSklUOjpD
YWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgZG9uZS5saW5rKCZqaXQpOworCisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7CisKKyAgICBzd2l0Y2gg
KHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIC8vIERp
c2NhcmQuCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuYzoKKyAgICBjYXNlIEFueWZ1bmM6
CisgICAgICAgIC8vIEZvciB0aGUgSmF2YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMgd2l0aCB0
aGVzZSB0eXBlcyBpbiB0aGVpciBzaWduYXR1cmUgcmV0dXJuIGFyZSBhIFdlYkFzc2VtYmx5Lk1v
ZHVsZSB2YWxpZGF0aW9uIGVycm9yLgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEk2NDogeworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgorICAgIH0KKyAgICBjYXNlIEkz
MjogeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFn
UmVnaXN0ZXJzKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQz
MihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lz
dGVycykpOworICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisKKyAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBl
bmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgaW50MzJfdCAoKmNv
bnZlcnRUb0kzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHYpIC0+IGludDMyX3QgeyAKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgICAgICAgICByZXR1cm4gdi50b0ludDMyKGV4ZWMpOworICAgICAgICB9OworICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvSTMyKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBG
MzI6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRv
IG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQu
YnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAg
IGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25l
LmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOworICAg
ICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZhbHVl
R1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQubW92ZTY0VG9Eb3Vi
bGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAg
ICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkp
OworCisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1
dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0
LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CisKKyAgICAgICAgZmxvYXQgKCpjb252ZXJ0VG9G
MzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
KSAtPiBmbG9hdCB7IAorICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odi50b051bWJlcihleGVjKSk7CisgICAgICAgIH07
CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GMzIpOworICAgICAg
ICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEY2NDogeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Cisg
ICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBpc0Rv
dWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgLy8gV2UncmUgYW4gaW50
MzIKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Rv
dWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwor
ICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5r
KCZqaXQpOworICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVy
KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86
OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQu
bW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90
QU51bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2Vw
dGlvbigqdm0pKTsKKworICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUgeyAK
KyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gdi50b051
bWJlcihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGws
IGNvbnZlcnRUb0Y2NCk7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGppdC5lbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIGlmICghZXhjZXB0aW9uQ2hlY2tzLmVtcHR5
KCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlG
cmFtZSk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAg
ICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgIHZvaWQgKCpk
b1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsK
KyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICBnZW5lcmljVW53aW5k
KHZtLCBleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7
CisgICAgICAgIH07CisKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGRvVW53aW5k
aW5nKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAoVU5M
SUtFTFkocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0tPmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKHNsb3dDYWxsKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luKHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpOworICAgIENvZGVMb2NhdGlvbk5lYXJD
YWxsIGhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2Fs
bCk7CisgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1cm5Mb2NhdGlv
biwgaG90UGF0aEJlZ2luLCBob3RQYXRoT3RoZXIpOworCisgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIs
IGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOworfQor
Cit2b2lkKiB3YXNtVG9KU0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFdhc206OkV4Y2VwdGlv
blR5cGUgdHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKK3sKKyAgICBWTSog
dm0gPSBpbnN0YW5jZS0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKworICAgIHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5z
dGFuY2UtPmdsb2JhbE9iamVjdCgpOworCisgICAgICAgIEpTT2JqZWN0KiBlcnJvcjsKKyAgICAg
ICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3RhY2tPdmVyZmxvdykKKyAgICAgICAgICAg
IGVycm9yID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVycm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
cjo6Y3JlYXRlKGV4ZWMsICp2bSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJv
clN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsK
KyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOworICAgIH0K
KworICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgIEFTU0VSVCghIXZtLT5jYWxsRnJh
bWVGb3JDYXRjaCk7CisgICAgQVNTRVJUKCEhdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsK
KyAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlz
IGEgdG90YWwgaGFjaywgYnV0IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgaGFuZGxlVW5j
YXVnaHRFeGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVs
ZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAg
IC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIu
KSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0
aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3Rl
ciBiZWZvcmUganVtcGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2Ug
ZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdCo+KGV4ZWMpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KGluc3RhbmNlLT53ZWJBc3NlbWJseVRvSlNDYWxsZWUoKSk7CisgICAgcmV0
dXJuIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmZjMjRhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XYXNtVG9KUy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIldhc21C
aW5kaW5nLmgiCisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCisjaW5jbHVkZSA8d3RmL0JhZy5o
PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
Q2FsbExpbmtJbmZvOworY2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKKworRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0qLCBCYWc8
Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGlt
cG9ydEluZGV4KTsKKwordm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiwgV2FzbTo6
RXhjZXB0aW9uVHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmlu
ZGV4IDBkMjc3NjUuLmM1ODVmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdh
c206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogCiAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSB3ZSB0aGluayB3ZSBhcmUgZ29pbmcgdG8gcnVuIHdp
dGggbWF0Y2hlcyB0aGUgb25lIHdlIGV4cGVjdC4KLSAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5p
bnN0YW5jZSgpLT5jb2RlQmxvY2soKS0+aXNTYWZlVG9SdW4od2FzbUZ1bmN0aW9uLT5pbnN0YW5j
ZSgpLT5tZW1vcnkoKSkpOworICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmlu
c3RhbmNlKCkuY29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5zdGFuY2Uo
KS0+bWVtb3J5KCktPm1lbW9yeSgpLm1vZGUoKSkpOwogICAgIHsKICAgICAgICAgLy8gQ2hlY2sg
aWYgd2UgaGF2ZSBhIGRpc2FsbG93ZWQgSTY0IHVzZS4KIApAQCAtODIsMTEgKzgyLDExIEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBUcmFjZVNjb3BlIHRyYWNlU2NvcGUoV2ViQXNzZW1ibHlF
eGVjdXRlU3RhcnQsIFdlYkFzc2VtYmx5RXhlY3V0ZUVuZCk7CiAKICAgICBWZWN0b3I8SlNWYWx1
ZT4gYm94ZWRBcmdzOwotICAgIFdhc206OkNvbnRleHQqIHdhc21Db250ZXh0ID0gd2FzbUZ1bmN0
aW9uLT5pbnN0YW5jZSgpOwotICAgIC8vIFdoZW4gd2UgZG9uJ3QgdXNlIGZhc3QgVExTIHRvIHN0
b3JlIHRoZSBjb250ZXh0LCB0aGUganMKLSAgICAvLyBlbnRyeSB3cmFwcGVyIGV4cGVjdHMgdGhl
IFdhc21Db250ZXh0KiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCi0gICAgaWYgKCFXYXNtOjp1c2VG
YXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKHdhc21Db250ZXh0
KTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gd2FzbUZ1bmN0aW9uLT5p
bnN0YW5jZSgpOworICAgIC8vIFdoZW4gd2UgZG9uJ3QgdXNlIGZhc3QgVExTIHRvIHN0b3JlIHRo
ZSBjb250ZXh0LCB0aGUgSlMKKyAgICAvLyBlbnRyeSB3cmFwcGVyIGV4cGVjdHMgdGhlIGluc3Rh
bmNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICBpZiAoIVdhc206OkNvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKKyAgICAgICAgYm94ZWRBcmdzLmFwcGVuZChpbnN0YW5jZSk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOyArK2FyZ0luZGV4KSB7CiAgICAgICAgIEpTVmFsdWUgYXJnID0gZXhlYy0+YXJndW1lbnQo
YXJnSW5kZXgpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICBw
cm90b0NhbGxGcmFtZS5pbml0KG51bGxwdHIsIHdhc21GdW5jdGlvbiwgZmlyc3RBcmd1bWVudCwg
YXJnQ291bnQsIHJlbWFpbmluZ0FyZ3MpOwogCiAgICAgLy8gRklYTUUgRG8gYXdheSB3aXRoIHRo
aXMgZW50aXJlIGZ1bmN0aW9uLCBhbmQgb25seSB1c2UgdGhlIGVudHJ5cG9pbnQgZ2VuZXJhdGVk
IGJ5IEIzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDg2Ci0g
ICAgV2FzbTo6Q29udGV4dCogcHJldldhc21Db250ZXh0ID0gV2FzbTo6bG9hZENvbnRleHQodm0p
OworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogcHJldkluc3RhbmNlID0gdm0ud2FzbUNvbnRl
eHQubG9hZCgpOwogICAgIHsKICAgICAgICAgLy8gV2UgZG8gdGhlIHN0YWNrIGNoZWNrIGhlcmUg
Zm9yIHRoZSB3cmFwcGVyIGZ1bmN0aW9uIGJlY2F1c2Ugd2UgZG9uJ3QKICAgICAgICAgLy8gd2Fu
dCB0byBlbWl0IGEgc3RhY2sgY2hlY2sgaW5zaWRlIGV2ZXJ5IHdyYXBwZXIgZnVuY3Rpb24uCkBA
IC0xMzcsMjIgKzEzNywyMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGlmIChVTkxJ
S0VMWSgoc3AgPCBzdGFja1NwYWNlVXNlZCkgfHwgKChzcCAtIHN0YWNrU3BhY2VVc2VkKSA8IGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4odm0uc29mdFN0YWNrTGltaXQoKSkpKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKSkpOwogICAgIH0KLSAgICBXYXNtOjpzdG9yZUNvbnRl
eHQodm0sIHdhc21Db250ZXh0KTsKKyAgICB2bS53YXNtQ29udGV4dC5zdG9yZShpbnN0YW5jZSwg
dm0uc29mdFN0YWNrTGltaXQoKSk7CiAgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2Uo
KSk7Ci0gICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKSA9PSBXYXNtOjpsb2FkQ29u
dGV4dCh2bSkpOworICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkgPT0gdm0ud2Fz
bUNvbnRleHQubG9hZCgpKTsKICAgICBFbmNvZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5
VG9XYXNtKHdhc21GdW5jdGlvbi0+anNFbnRyeXBvaW50KCksICZ2bSwgJnByb3RvQ2FsbEZyYW1l
KTsKICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGluIGEgcmVnaXN0ZXIgb3Ig
b24gdGhlIHN0YWNrIHNpbmNlIGl0J3Mgc3RvcmVkIGluIFZlY3RvcjxKU1ZhbHVlPi4KICAgICAv
LyBUaGlzIHByb2JhYmx5IGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2UgdGhlIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIHNob3VsZCBrZWVwIHRoZSBpbnN0YW5jZQogICAgIC8vIGFsaXZlLiBC
dXQgaXQncyBnb29kIGh5Z2llbmUuCi0gICAgd2FzbUNvbnRleHQtPnVzZSgpOwotICAgIGlmIChw
cmV2V2FzbUNvbnRleHQgIT0gd2FzbUNvbnRleHQpIHsKKyAgICBpbnN0YW5jZS0+dXNlKCk7Cisg
ICAgaWYgKHByZXZJbnN0YW5jZSAhPSBpbnN0YW5jZSkgewogICAgICAgICAvLyBUaGlzIGlzIGp1
c3QgZm9yIHNvbWUgZXh0cmEgc2FmZXR5IGluc3RlYWQgb2YgbGVhdmluZyBhIGNhY2hlZAogICAg
ICAgICAvLyB2YWx1ZSBpbiB0aGVyZS4gSWYgd2UgZXZlciBmb3JnZXQgdG8gc2V0IHRoZSB2YWx1
ZSB0byBiZSBhIHJlYWwKICAgICAgICAgLy8gYm91bmRzLCB0aGlzIHdpbGwgZm9yY2UgZXZlcnkg
c3RhY2sgb3ZlcmZsb3cgY2hlY2sgdG8gaW1tZWRpYXRlbHkKICAgICAgICAgLy8gZmlyZS4KLSAg
ICAgICAgd2FzbUNvbnRleHQtPnNldENhY2hlZFN0YWNrTGltaXQoYml0d2lzZV9jYXN0PHZvaWQq
PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSk7CisgICAgICAgIGluc3Rh
bmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkpOwogICAgIH0KLSAgICBXYXNtOjpzdG9yZUNvbnRl
eHQodm0sIHByZXZXYXNtQ29udGV4dCk7CisgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUocHJldklu
c3RhbmNlLCB2bS5zb2Z0U3RhY2tMaW1pdCgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogCiAgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCBhOWQ4ZjBkLi4yZmRkNWE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTMyLDEyICszMiwxNCBAQAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVk
ZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgi
CiAjaW5jbHVkZSAiV2FzbVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgogI2luY2x1ZGUg
Ildhc21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNs
dWRlICJXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgiCkBAIC03NSwxMCArNzcsMTAgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJs
eUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+
bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0
YW5jZVN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
Ci0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1
Y3R1cmUpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3Rh
bmNlU3RydWN0dXJlLCBXYXNtOjpJbnN0YW5jZTo6Y3JlYXRlKFJlZjxXYXNtOjpNb2R1bGU+KG1v
ZHVsZS0+bW9kdWxlKCkpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAotICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBleGVjLCBtb2R1bGUtPm1vZHVs
ZSgpLmNvbXBpbGVTeW5jKGluc3RhbmNlLT5tZW1vcnlNb2RlKCkpKTsKKyAgICBpbnN0YW5jZS0+
ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYywgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlU3luYygm
dm0ud2FzbUNvbnRleHQsIGluc3RhbmNlLT5tZW1vcnlNb2RlKCksICZXYXNtOjpjcmVhdGVKU1Rv
V2FzbVdyYXBwZXIsICZXYXNtOjp3YXNtVG9KU0V4Y2VwdGlvbikpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpbnN0YW5j
ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IDY0OTg5YjUuLmQwNDM1YWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVt
b3J5Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC05NiwxMyArOTYsMTggQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9y
eShFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxXYXNtOjpN
ZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBpbml0aWFsUGFnZUNvdW50
LCBtYXhpbXVtUGFnZUNvdW50KTsKKyAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVt
b3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUoaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VD
b3VudCwKKyAgICAgICAgWyZ2bV0gKFdhc206Ok1lbW9yeTo6Tm90aWZ5UHJlc3N1cmUpIHsgdm0u
aGVhcC5jb2xsZWN0QXN5bmMoQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsgfSwKKyAgICAgICAgWyZ2
bV0gKFdhc206Ok1lbW9yeTo6U3luY1RyeVRvUmVjbGFpbSkgeyB2bS5oZWFwLmNvbGxlY3RTeW5j
KENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgIFsmdm0sIGpzTWVtb3J5XSAoV2Fz
bTo6TWVtb3J5OjpHcm93U3VjY2VzcywgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2Fz
bTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkgeyBqc01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFj
ayh2bSwgb2xkUGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOyB9KTsKICAgICBpZiAoIW1lbW9yeSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKSk7CiAKLSAgICBhdXRvKiBqc01l
bW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBhZG9wdFJlZigq
bWVtb3J5LmxlYWtSZWYoKSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0KKyAgICBqc01lbW9yeS0+YWRvcHQobWVtb3J5LnJlbGVhc2VO
b25OdWxsKCkpOworICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNZW1vcnkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1lbW9yeVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAKaW5kZXggZTk5NGRjOC4uNGZjYThjNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlLmNwcApAQCAtNzcsOCArNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgdWludDMyX3QgZGVsdGEgPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAK
LSAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IHRydWU7Ci0gICAgV2Fz
bTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3Jvdyh2bSwgZXhlYywgZGVsdGEsIHNob3Vs
ZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CisgICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9
IG1lbW9yeS0+Z3Jvdyh2bSwgZXhlYywgZGVsdGEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
cmVzdWx0LnBhZ2VDb3VudCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDk2
MTAyNGQuLjc1YjViNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCkBAIC0xNjEsMTEg
KzE2MSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TW9kdWxl
RXhwb3J0cyhFeGVjU3RhdGUqIGV4ZWMpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIGF1dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNy
ZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgdGhy
b3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
IHN0cnVjdHVyZSkpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAKKyAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJv
bVZhbHVlKHZtLCBleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShl
eGVjLCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTc1
LDE2ICsxNzcsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpT
V2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihl
eGVjLCBzY29wZSwgIldlYkFzc2VtYmx5Lk1vZHVsZSIpKTsKIH0KIAotSlNWYWx1ZSBXZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJ1ZmZlciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVj
LCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBWZWN0b3I8
dWludDhfdD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBleGVjLCBi
dWZmZXIpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgYXV0byog
c3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIHN0cnVjdHVyZSwgV2FzbTo6TW9kdWxlOjp2
YWxpZGF0ZVN5bmModm0sIFdURk1vdmUoc291cmNlKSkpOworICAgIHJldHVybiBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6
dmFsaWRhdGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShidWZmZXIpKSk7CiB9CiAKIFdl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6
OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1vZHVsZVBy
b3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAppbmRleCA2MDI1
Yzk4Li4xM2FjYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCkBAIC0zMCw4ICszMCwxMSBA
QAogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgog
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNX
ZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlOwogCiBj
bGFzcyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rp
b24gewpAQCAtNDQsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAg
ICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBidWZmZXIs
IFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVNb2R1
bGUoRXhlY1N0YXRlKiwgVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKTsKIAogcHJvdGVjdGVkOgog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGNiMWZlYzEuLjBhODY2ZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlu
ayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICBVTlVT
RURfUEFSQU0oc2NvcGUpOwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKIAotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGluc3RhbmNlLT5jb2RlQmxvY2soKTsKKyAgICBXYXNtOjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGluc3RhbmNlLT5pbnN0YW5jZSgpLmNvZGVCbG9jaygpOwogICAgIGNvbnN0IFdhc206Ok1vZHVs
ZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRp
b24oKTsKIAogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSA9IG1vZHVsZS0+ZXhw
b3J0U3ltYm9sVGFibGUoKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9k
dWxlLAogICAgICAgICAgICAgLy8gUmV0dXJuIFRvSlNWYWx1ZSh2KS4KICAgICAgICAgICAgIHN3
aXRjaCAoZ2xvYmFsLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAg
ICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkSTMyR2xvYmFs
KGV4cC5raW5kSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1
ZShpbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CkBAIC0x
NjAsMTEgKzE2MCwxMSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNT
dGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLAogICAgICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAg
ZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxvYWRGMzJHbG9iYWwoZXhwLmtpbmRJ
bmRleCkpOworICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNl
LT5pbnN0YW5jZSgpLmxvYWRGMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgICAg
ICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEY2NEdsb2JhbChleHAua2lu
ZEluZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFu
Y2UtPmluc3RhbmNlKCkubG9hZEY2NEdsb2JhbChleHAua2luZEluZGV4KSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTcsMTIgKzIxNywxMiBA
QCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBtX2lu
c3RhbmNlLT5tb2R1bGUoKTsKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2luc3RhbmNlLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1h
dGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7Cisg
ICAgV2FzbTo6TW9kdWxlJiBtb2R1bGUgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLm1vZHVsZSgp
OworICAgIFdhc206OkNvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbnN0YW5jZS0+aW5zdGFuY2Uo
KS5jb2RlQmxvY2soKTsKKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxl
SW5mb3JtYXRpb24gPSBtb2R1bGUubW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICBKU1dlYkFzc2Vt
Ymx5VGFibGUqIHRhYmxlID0gbV9pbnN0YW5jZS0+dGFibGUoKTsKIAotICAgIGNvbnN0IFZlY3Rv
cjxXYXNtOjpTZWdtZW50OjpQdHI+JiBkYXRhID0gbV9pbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVs
ZUluZm9ybWF0aW9uKCkuZGF0YTsKKyAgICBjb25zdCBWZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRy
PiYgZGF0YSA9IG1vZHVsZUluZm9ybWF0aW9uLmRhdGE7CiAgICAgSlNXZWJBc3NlbWJseU1lbW9y
eSoganNNZW1vcnkgPSBtX2luc3RhbmNlLT5tZW1vcnkoKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8
SlNWYWx1ZT4gZXhjZXB0aW9uOwpAQCAtMjM5LDcgKzIzOSw3IEBAIEpTVmFsdWUgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleCA9IGVsZW1lbnQu
b2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkKLSAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVp
bnQzMl90PihtX2luc3RhbmNlLT5sb2FkSTMyR2xvYmFsKGVsZW1lbnQub2Zmc2V0Lmdsb2JhbElt
cG9ydEluZGV4KCkpKQorICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1f
aW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChlbGVtZW50Lm9mZnNldC5nbG9iYWxJ
bXBvcnRJbmRleCgpKSkKICAgICAgICAgICAgICAgICA6IGVsZW1lbnQub2Zmc2V0LmNvbnN0VmFs
dWUoKTsKIAogICAgICAgICAgICAgZm4oZWxlbWVudCwgdGFibGVJbmRleCk7CkBAIC0yNTUsNyAr
MjU1LDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0
YXRlKiBleGVjKQogCiAgICAgICAgIGZvciAoY29uc3QgV2FzbTo6U2VnbWVudDo6UHRyJiBzZWdt
ZW50IDogZGF0YSkgewogICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gc2VnbWVudC0+b2Zm
c2V0LmlzR2xvYmFsSW1wb3J0KCkKLSAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihtX2luc3RhbmNlLT5sb2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldC5nbG9iYWxJbXBv
cnRJbmRleCgpKSkKKyAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2lu
c3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0Lmdsb2JhbElt
cG9ydEluZGV4KCkpKQogICAgICAgICAgICAgICAgIDogc2VnbWVudC0+b2Zmc2V0LmNvbnN0VmFs
dWUoKTsKIAogICAgICAgICAgICAgZm4obWVtb3J5LCBzaXplSW5CeXRlcywgc2VnbWVudCwgb2Zm
c2V0KTsKQEAgLTI5Myw3ICsyOTMsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAvLyBmb3IgdGhlIGltcG9y
dC4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjU1MTAKICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1
bmN0aW9uSW5kaWNlc1tpXTsKLSAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IG1vZHVsZS5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleCk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IGNvZGVCbG9jay0+
ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0
aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24o
ZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1
bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAppbmRleCBlOWE2MzRhLi4x
ZmI5NDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlQcm90b3R5cGUuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnVuY3Rp
b25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9t
aXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUg
IlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIldhc21CQlFQbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNsdWRlICJX
YXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgiCkBAIC05NCw3ICs5
Niw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29t
cGlsZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyh2bSwgV1RGTW92ZShzb3VyY2Up
LCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwg
Z2xvYmFsT2JqZWN0XSAoVk0mIHZtLCBXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiBy
ZXN1bHQpIG11dGFibGUgeworICAgICAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZt
Lndhc21Db250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9k
dWxlOjpDYWxsYmFja1R5cGU+KFtwcm9taXNlLCBnbG9iYWxPYmplY3QsICZ2bV0gKFdhc206Ok1v
ZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB2
bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlz
ZSwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksICZ2bV0gKCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogICAgICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwpAQCAtMTM1LDcgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIC8vIEluIG9yZGVy
IHRvIGF2b2lkIHBvdGVudGlhbGx5IHJlY29tcGlsaW5nIGEgbW9kdWxlLiBXZSBmaXJzdCBnYXRo
ZXIgYWxsIHRoZSBpbXBvcnQvbWVtb3J5IGluZm9ybWF0aW9uIHByaW9yIHRvIGNvbXBpbGluZyBj
b2RlLgotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSwgV2FzbTo6SW5zdGFu
Y2U6OmNyZWF0ZShSZWY8V2FzbTo6TW9kdWxlPihtb2R1bGUtPm1vZHVsZSgpKSkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSkpOwog
CiAgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CkBAIC0xNDMsMTMgKzE0
NSwxMyBAQCBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQo
U3Ryb25nPEpTQ2VsbD4odm0sIGluc3RhbmNlKSk7CiAgICAgdm0ucHJvbWlzZURlZmVycmVkVGlt
ZXItPmFkZFBlbmRpbmdQcm9taXNlKHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CiAg
ICAgLy8gTm90ZTogVGhpcyBjb21wbGV0aW9uIHRhc2sgbWF5IG9yIG1heSBub3QgZ2V0IGNhbGxl
ZCBpbW1lZGlhdGVseS4KLSAgICBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVBc3luYyh2bSwgaW5z
dGFuY2UtPm1lbW9yeU1vZGUoKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDb2RlQmxvY2s6OkNh
bGxiYWNrVHlwZT4oW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kXSAoVk0m
IHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHJlZkNvZGVCbG9jaykgbXV0YWJsZSB7CisgICAg
bW9kdWxlLT5tb2R1bGUoKS5jb21waWxlQXN5bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+
bWVtb3J5TW9kZSgpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206OkNvZGVCbG9jazo6Q2FsbGJhY2tU
eXBlPihbcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmQsICZ2bV0gKFJlZjxX
YXNtOjpDb2RlQmxvY2s+JiYgcmVmQ29kZUJsb2NrKSBtdXRhYmxlIHsKICAgICAgICAgUmVmUHRy
PFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2NrID0gV1RGTW92ZShyZWZDb2RlQmxvY2spOwogICAg
ICAgICB2bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBb
cHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgcmVzb2x2ZUtpbmQsICZ2bSwgY29kZUJsb2NrID0g
V1RGTW92ZShjb2RlQmxvY2spXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICAg
ICAgcmVzb2x2ZSh2bSwgZXhlYywgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgY29kZUJsb2Nr
LnJlbGVhc2VOb25OdWxsKCksIHJlc29sdmVLaW5kKTsKICAgICAgICAgfSk7Ci0gICAgfSkpOwor
ICAgIH0pLCAmV2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNl
cHRpb24pOwogfQogCiBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1ZhbHVlIGJ1ZmZl
ciwgSlNPYmplY3QqIGltcG9ydE9iamVjdCkKQEAgLTE2NSw3ICsxNjcsNyBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlz
ZURlZmVycmVkKiBwcgogICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VC
dWZmZXJGcm9tVmFsdWUodm0sIGV4ZWMsIGJ1ZmZlcik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKSk7CiAKLSAgICBXYXNtOjpNb2R1
bGU6OnZhbGlkYXRlQXN5bmModm0sIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxX
YXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFs
T2JqZWN0XSAoVk0mIHZtLCBXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQp
IG11dGFibGUgeworICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYygmdm0ud2FzbUNvbnRl
eHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxi
YWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNt
OjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICB2
bS5wcm9taXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlz
ZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwg
JnZtXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwpAQCAtMjEzLDcgKzIxNSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBzaXplX3QgYnl0ZVNpemU7CiAgICAgdWludDhfdCogYmFzZSA9IGdldFdhc21CdWZmZXJGcm9t
VmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQ
bGFuIHBsYW4oJnZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlk
YXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21D
b250ZXh0LCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24s
IFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB0
aHJvdyBhbiBPT00gZXhjZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRoYXQgc29tZXRoaW5nIHdp
bGwgT09NLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjYwMTUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5k
VmFsaWRhdGVNb2R1bGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMTE4NjVm
NS4uMmM1YmM3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCkBAIC05MCw4ICs5MCwxNSBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2Vt
Ymx5VGFibGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB9CiAgICAgfQogCisgICAgUmVmUHRy
PFdhc206OlRhYmxlPiB3YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6Y3JlYXRlKGluaXRpYWwsIG1h
eGltdW0pOworICAgIGlmICghd2FzbVRhYmxlKSB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJjb3VsZG4ndCBjcmVhdGUgVGFibGUiKSkp
KTsKKyAgICB9CisKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUoKSwgaW5pdGlhbCwg
bWF4aW11bSkpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFi
bGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3Nl
bWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFi
bGUoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCmluZGV4IGY1ZjhmOWMu
LjM2YTBkY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE8KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+
aW5oZXJpdHModm0sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjppbmZvKCkpLCAiV2Ugc2hv
dWxkIG5ldmVyIGRvdWJsZSB3cmFwIGEgd3JhcHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcg
bmFtZSA9ICIiOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0
RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2Fs
bEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgeyBzaWduYXR1cmVJbmRleCwgaW5zdGFuY2UtPmNvZGVCbG9j
aygpLT53YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSB9KTsKKyAgICBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIFdhc206OkNhbGxhYmxlRnVuY3Rpb24geyBzaWduYXR1
cmVJbmRleCwgJmluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgpLT53YXNt
VG9FbWJlZGRlclN0dWJFeGVjdXRhYmxlQWRkcmVzcyB9ICk7CiAgICAgY29uc3QgV2FzbTo6U2ln
bmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFuY2UpOwogICAg
IHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU5NDM2NWQuLjU2NjkzZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTctMTAtMTkgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYkFzc2VtYmx5OiBubyBWTSAvIEpTIHZlcnNpb24gb2YgZXZlcnl0aGluZyBidXQgSW5z
dGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzQ3MworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAgICogd3Rm
L1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpkZWZhdWx0X2NvbnN0cnVjdF9hdCk6IHRo
aXMgbWFrZXMgY29kZSBpbiBXYXNtVGFibGUgbXVjaAorICAgICAgICBtb3JlIHJlYWRhYmxlLCBh
bmQgaXMgZ2VuZXJhbGx5IHVzZWZ1bCBmb3IgZ2VuZXJpYyBjb2RlCisKIDIwMTctMTAtMTQgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgSGFzaENvdW50ZWRT
ZXQncyBjb3B5VG9WZWN0b3IgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9T
dGRMaWJFeHRyYXMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCmluZGV4IDQzZGEy
YmUuLjAxNjIyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCkBAIC0xNjAsNiArMTYwLDEyIEBAIGlu
bGluZSBUb1R5cGUgc2FmZUNhc3QoRnJvbVR5cGUgdmFsdWUpCiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRvVHlwZT4odmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQm
IGRlZmF1bHRfY29uc3RydWN0X2F0KFQqIGFkZHIpCit7CisgICAgcmV0dXJuICpuZXcgKGFkZHIp
IFQoKTsKK30KKwogLy8gUmV0dXJucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYml0cyBzZXQg
aW4gJ2JpdHMnLgogaW5saW5lIHNpemVfdCBiaXRDb3VudCh1bnNpZ25lZCBiaXRzKQogewpAQCAt
NTM1LDYgKzU0MSw3IEBAIHVzaW5nIFdURjo6R0I7CiB1c2luZyBXVEY6OmFwcHJveGltYXRlQmlu
YXJ5U2VhcmNoOwogdXNpbmcgV1RGOjpiaW5hcnlTZWFyY2g7CiB1c2luZyBXVEY6OmJpdHdpc2Vf
Y2FzdDsKK3VzaW5nIFdURjo6ZGVmYXVsdF9jb25zdHJ1Y3RfYXQ7CiB1c2luZyBXVEY6OmNhbGxT
dGF0ZWxlc3NMYW1iZGE7CiB1c2luZyBXVEY6OmNoZWNrQW5kU2V0OwogdXNpbmcgV1RGOjpmaW5k
Qml0SW5Xb3JkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE4NzQ0M2EuLjA4YTVlNTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAxNy0xMC0xOSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5j
b20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBldmVyeXRo
aW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaDogQWRkZWQuIFRoaXMg
dXNlZCB0byBiZQorICAgICAgICBpbmNsdWRlZCBpbiBKU1dlYkFzc2VtYmx5TW9kdWxlLmguCisg
ICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDogVXBkYXRlIHBv
c3RNZXNzYWdlIGNvZGUKKyAgICAgICAgYWNjb3JkaW5nIHRvIEMrKyBBUEkgY2hhbmdlcy4KKwog
MjAxNy0xMC0xNiAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBNYWtlIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZXMgYW5kIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZXMgcG9ydCBhZ25vc3RpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93YXNtL1dhc21Nb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41YjBiOWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvd2FzbS9XYXNtTW9kdWxlLmgKQEAgLTAsMCArMSwyIEBACisjcHJhZ21h
IG9uY2UKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9XYXNtTW9kdWxlLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRl
eCA5NzVjOWM5Li43ODQwM2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRl
IDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFy
cmF5cy5oPgogI2luY2x1ZGUgPHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oPgorI2luY2x1
ZGUgPHdhc20vV2FzbU1vZHVsZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotLSAKMi45
LjMKCg==
</data>
<flag name="review"
          id="343943"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324307</attachid>
            <date>2017-10-19 15:48:53 -0700</date>
            <delta_ts>2017-10-19 18:42:19 -0700</delta_ts>
            <desc>change since last patch</desc>
            <filename>changes-from-last.diff</filename>
            <type>text/plain</type>
            <size>22170</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4IGEzN2UyNDYuLjhi
ZGYwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMTQ0
LDYgKzE0NCw3IEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1aXJlTG9jaygpCiAgICAgbV92bS0+c2V0
U3RhY2tQb2ludGVyQXRWTUVudHJ5KHApOwogCiAgICAgbV92bS0+c2V0TGFzdFN0YWNrVG9wKHRo
cmVhZC5zYXZlZExhc3RTdGFja1RvcCgpKTsKKyAgICBBU1NFUlQodGhyZWFkLnN0YWNrKCkuY29u
dGFpbnMobV92bS0+bGFzdFN0YWNrVG9wKCkpKTsKIAogICAgIG1fdm0tPmhlYXAubWFjaGluZVRo
cmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IGVhYWY4YzguLmRjZDRlOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTc2NywxMSArNzY3LDEyIEBAIHZvaWQg
bG9nU2FuaXRpemVTdGFjayhWTSogdm0pCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VTYW5p
dGl6ZVN0YWNrKCkgJiYgdm0tPnRvcENhbGxGcmFtZSkgewogICAgICAgICBpbnQgZHVtbXk7Cisg
ICAgICAgIGF1dG8mIHN0YWNrQm91bmRzID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKTsKICAg
ICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJTYW5pdGl6aW5nIHN0YWNrIHdpdGggdG9wIGNh
bGwgZnJhbWUgYXQgIiwgUmF3UG9pbnRlcih2bS0+dG9wQ2FsbEZyYW1lKSwKKyAgICAgICAgICAg
ICJTYW5pdGl6aW5nIHN0YWNrIGZvciBWTSA9ICIsIFJhd1BvaW50ZXIodm0pLCAiIHdpdGggdG9w
IGNhbGwgZnJhbWUgYXQgIiwgUmF3UG9pbnRlcih2bS0+dG9wQ2FsbEZyYW1lKSwKICAgICAgICAg
ICAgICIsIGN1cnJlbnQgc3RhY2sgcG9pbnRlciBhdCAiLCBSYXdQb2ludGVyKCZkdW1teSksICIs
IGluICIsCi0gICAgICAgICAgICBwb2ludGVyRHVtcCh2bS0+dG9wQ2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSksICIgYW5kIGxhc3QgY29kZSBvcmlnaW4gPSAiLAotICAgICAgICAgICAgdm0tPnRvcENh
bGxGcmFtZS0+Y29kZU9yaWdpbigpLCAiXG4iKTsKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wKHZt
LT50b3BDYWxsRnJhbWUtPmNvZGVCbG9jaygpKSwgIiwgbGFzdCBjb2RlIG9yaWdpbiA9ICIsCisg
ICAgICAgICAgICB2bS0+dG9wQ2FsbEZyYW1lLT5jb2RlT3JpZ2luKCksICIsIGxhc3Qgc3RhY2sg
dG9wID0gIiwgUmF3UG9pbnRlcih2bS0+bGFzdFN0YWNrVG9wKCkpLCAiLCBpbiBzdGFjayByYW5n
ZSBbIiwgUmF3UG9pbnRlcihzdGFja0JvdW5kcy5vcmlnaW4oKSksICIsICIsIFJhd1BvaW50ZXIo
c3RhY2tCb3VuZHMuZW5kKCkpLCAiXVxuIik7CiAgICAgfQogfQogCkBAIC05MjEsNiArOTIyLDEx
IEBAIHZvaWQgUXVldWVkVGFzazo6cnVuKCkKIHZvaWQgc2FuaXRpemVTdGFja0ZvclZNKFZNKiB2
bSkKIHsKICAgICBsb2dTYW5pdGl6ZVN0YWNrKHZtKTsKKyAgICBpZiAodm0tPnRvcENhbGxGcmFt
ZSkgeworICAgICAgICBhdXRvJiBzdGFja0JvdW5kcyA9IFRocmVhZDo6Y3VycmVudCgpLnN0YWNr
KCk7CisgICAgICAgIEFTU0VSVCh2bS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RhY2tCb3VuZHMsIHN0YWNrQm91bmRzLmNvbnRhaW5z
KHZtLT5sYXN0U3RhY2tUb3AoKSkpOworICAgIH0KICNpZiAhRU5BQkxFKEpJVCkKICAgICB2bS0+
aW50ZXJwcmV0ZXItPmNsb29wU3RhY2soKS5zYW5pdGl6ZVN0YWNrKCk7CiAjZWxzZQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNjU1NTJmNDUuLjJmNzk5NjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNzgwLDcgKzc4MCw3IEBAIHByaXZhdGU6CiAjaWYgIUVO
QUJMRShKSVQpCiAgICAgdm9pZCogbV9jbG9vcFN0YWNrTGltaXQgeyBudWxscHRyIH07CiAjZW5k
aWYKLSAgICB2b2lkKiBtX2xhc3RTdGFja1RvcDsKKyAgICB2b2lkKiBtX2xhc3RTdGFja1RvcCB7
IG51bGxwdHIgfTsKIAogICAgIEV4Y2VwdGlvbiogbV9leGNlcHRpb24geyBudWxscHRyIH07CiAg
ICAgRXhjZXB0aW9uKiBtX2xhc3RFeGNlcHRpb24geyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggNmIzYzNmOC4u
NDUwM2NkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcApAQCAtMTExMiwxMCArMTExMiw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwK
ICAgICAgICAgLy8gZm9yIGNhbGxzIG91dCB0byBKUy4gVGhpcyBzaG91bGRuJ3QgYmUgdGhhdCBo
YXJkIHRvIGRvLiBXZSBjb3VsZCBwcm9iYWJseQogICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIElD
IHRvIGJlIG92ZXIgQ29udGV4dCouCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzAzNzUKLSAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzRW1i
ZWRkZXJCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAgICBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbUNvZGVCbG9jaygpKSk7
CiAgICAgICAgIFZhbHVlKiBqdW1wRGVzdGluYXRpb24gPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAotICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKCksIGNvZGVCbG9jaywgc2FmZUNhc3Q8aW50MzJfdD4oQ29kZUJsb2NrOjpvZmZz
ZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihmdW5jdGlvbkluZGV4KSkpOworICAgICAgICAg
ICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21Ub0VtYmVkZGVy
U3R1YkV4ZWN1dGFibGVBZGRyZXNzKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIFZhbHVlKiBl
bWJlZGRlckNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9w
cm9jLCBpc0VtYmVkZGVyQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBl
KSwKICAgICAgICAgICAgIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAg
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAppbmRleCBlNTEzNjdh
Li5kZDI3ZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29k
ZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2Nr
LmNwcApAQCAtMzgsMTAgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
IAogUmVmPENvZGVCbG9jaz4gQ29kZUJsb2NrOjpjcmVhdGUoQ29udGV4dCogY29udGV4dCwgTWVt
b3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0
ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0
aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAgICBzaXplX3QgaW1wb3J0RnVuY3Rpb25Db3Vu
dCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICBhdXRvKiBy
ZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemUoaW1wb3J0RnVu
Y3Rpb25Db3VudCkpKSBDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24s
IFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcG9ydEZ1bmN0aW9uQ291bnQ7ICsraSkKLSAgICAg
ICAgcmVzdWx0LT5pbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIoaSkgPSBudWxscHRyOworICAgIGF1
dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgZmFzdE1hbGxvYyhzaXplb2YoQ29kZUJsb2NrKSkp
IENvZGVCbG9jayhjb250ZXh0LCBtb2RlLCBtb2R1bGVJbmZvcm1hdGlvbiwgV1RGTW92ZShjcmVh
dGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIHJldHVybiBhZG9w
dFJlZigqcmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVC
bG9jay5oCmluZGV4IGIxNjhhYWMuLjlmYzE5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTU1LDMyICs1NSw2IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2sgPSBSZWZQdHI8V1RGOjpTaGFyZWRUYXNrPENhbGxi
YWNrVHlwZT4+OwogICAgIHN0YXRpYyBSZWY8Q29kZUJsb2NrPiBjcmVhdGUoQ29udGV4dCosIE1l
bW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRo
cm93V2FzbUV4Y2VwdGlvbik7CiAKLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0U3R1
YnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2Yodm9pZCopPihzaXplb2YoQ29kZUJsb2NrKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gZnVuY3Rpb25JbXBvcnRDb3VudCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAob2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQq
KSAqIGZ1bmN0aW9uSW1wb3J0Q291bnQpLnVuc2FmZUdldCgpOwotICAgIH0KLQotICAgIHZvaWQq
JiBpbXBvcnRXYXNtVG9FbWJlZGRlclN0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewot
ICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDx2b2lkKio+KGJpdHdpc2VfY2FzdDxjaGFyKj4o
dGhpcykgKyBvZmZzZXRPZkltcG9ydFdhc21Ub0VtYmVkZGVyU3R1YihpbXBvcnRJbmRleCkpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9FbWJlZGRl
clN0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0
T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGltcG9ydEluZGV4OwotICAgIH0KLQot
ICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21Ub0pTQ2FsbFN0dWJGb3JJ
bXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQocnVubmFi
bGUoKSk7Ci0gICAgICAgIHJldHVybiAmaW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKGltcG9ydElu
ZGV4KTsKLSAgICB9Ci0KICAgICB2b2lkIHdhaXRVbnRpbEZpbmlzaGVkKCk7CiAgICAgdm9pZCBj
b21waWxlQXN5bmMoQ29udGV4dCosIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcAppbmRleCAwODI1MTVlLi5lMTVjYTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAt
MzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgotI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3Jt
YXRpb24uaCIKICNpbmNsdWRlICJXYXNtVG9KUy5oIgogCkBAIC00MSwxMSArNDAsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseUNvZGVCbG9jayIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNvZGVCbG9jaykgfTsKIAotSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKFZNJiB2
bSwgUmVmPFdhc206OkNvZGVCbG9jaz4gY29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBt
b2R1bGUpCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpj
cmVhdGUoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxvY2ssIGNvbnN0IFdhc206
Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKIHsKLSAgICBjb25zdCBXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCkpIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sodm0sIFdURk1vdmUoY29kZUJsb2NrKSwgbW9kdWxlSW5mb3JtYXRpb24pOwot
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIG1vZHVsZSk7CisgICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNjgsMTQgKzY2LDEy
IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZt
LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIGNvCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMudW5j
aGVja2VkQXBwZW5kKGJpbmRpbmcudmFsdWUoKSk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5pbXBv
cnRXYXNtVG9FbWJlZGRlclN0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRTdHVic1tp
bXBvcnRJbmRleF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogfQogCi12b2lk
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlKQordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIG1f
bW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTk1LDcgKzkxLDYgQEAgdm9pZCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
LSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZSk7CiAKICAgICB2aXNpdG9y
LmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJnRoaXNPYmplY3QtPm1fdW5jb25kaXRpb25hbEZp
bmFsaXplcik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKaW5kZXggYWJiOGM2OC4uODkwZTI3MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaApAQCAtNDAsNyArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNXZWJB
c3NlbWJseU1vZHVsZTsKIGNsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnk7CiAKIG5hbWVzcGFjZSBX
YXNtIHsKQEAgLTUyLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYsIFJlZjxXYXNtOjpDb2RlQmxvY2s+LCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShW
TSYsIFJlZjxXYXNtOjpDb2RlQmxvY2s+LCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYp
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKQEAgLTY1LDEwICs2NCwx
MCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgV2FzbTo6Q29kZUJsb2NrJiBjb2RlQmxvY2soKSB7
IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQorICAgIAorICAgIHZvaWQqIHdhc21Ub0VtYmVk
ZGVyU3R1YkV4ZWN1dGFibGVBZGRyZXNzKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1
cm4gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRGdW5jdGlvbk51bV0uY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7IH0KIAotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNXZWJBc3NlbWJseU1vZHVsZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
IAogICAgIHZvaWQgY2xlYXJKU0NhbGxJQ3MoVk0mKTsKIApAQCAtOTIsNyArOTEsNiBAQCBwcml2
YXRlOgogICAgIH07CiAKICAgICBSZWY8V2FzbTo6Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKLSAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV93YXNtVG9KU0V4aXRTdHViczsKICAgICBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCBiYjJiNWUxLi5mOWYy
NjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgUmVm
PFdhc206OgogICAgICAgICBBU1NFUlQoJmpzQ29kZUJsb2NrLT5jb2RlQmxvY2soKSA9PSB3YXNt
Q29kZUJsb2NrLnB0cigpKTsKICAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBqc0Nv
ZGVCbG9jayk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAganNDb2RlQmxvY2sgPSBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpjcmVhdGUodm0sIFdURk1vdmUod2FzbUNvZGVCbG9jayksIG1fbW9kdWxl
LmdldCgpKTsKKyAgICAgICAganNDb2RlQmxvY2sgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpj
cmVhdGUodm0sIFdURk1vdmUod2FzbUNvZGVCbG9jayksIHdhc21Nb2R1bGUoKS5tb2R1bGVJbmZv
cm1hdGlvbigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFqc0NvZGVCbG9jay0+cnVubmFibGUo
KSkpIHsKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJs
eUxpbmtFcnJvclN0cnVjdHVyZSgpLCBqc0NvZGVCbG9jay0+ZXJyb3JNZXNzYWdlKCkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTEyNyw2ICsxMjcsMTEgQEAgdm9pZCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxX
YXNtOjoKICAgICAgICAgbV9tb2R1bGUtPnNldENvZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBq
c0NvZGVCbG9jayk7CiAgICAgfQogCisgICAgZm9yIChzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0g
PSAwOyBpbXBvcnRGdW5jdGlvbk51bSA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2ltcG9ydEZ1
bmN0aW9uTnVtKSB7CisgICAgICAgIEltcG9ydEZ1bmN0aW9uSW5mbyogaW5mbyA9IGltcG9ydEZ1
bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlvbk51bSk7CisgICAgICAgIGluZm8tPndhc21Ub0VtYmVk
ZGVyU3R1YkV4ZWN1dGFibGVBZGRyZXNzID0gbV9jb2RlQmxvY2stPndhc21Ub0VtYmVkZGVyU3R1
YkV4ZWN1dGFibGVBZGRyZXNzKGltcG9ydEZ1bmN0aW9uTnVtKTsKKyAgICB9CisKICAgICBhdXRv
KiBtb2R1bGVSZWNvcmQgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21vZHVs
ZU5hbWVzcGFjZU9iamVjdC0+bW9kdWxlUmVjb3JkKCkpOwogICAgIG1vZHVsZVJlY29yZC0+bGlu
ayhleGVjLCBtX21vZHVsZS5nZXQoKSwgdGhpcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggZDUyNTUwYS4uYzFmN2MzZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgKQEAgLTczLDE0ICs3MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFRhcmdldCBpbnN0YW5j
ZSBhbmQgZW50cnlwb2ludCBhcmUgb25seSBzZXQgZm9yIHdhc20tPndhc20gY2FsbHMsIGFuZCBh
cmUgb3RoZXJ3aXNlIG51bGxwdHIuIFRoZSBlbWJlZGRlci1zcGVjaWZpYyBsb2dpYyBvY2N1cnMg
dGhyb3VnaCBpbXBvcnQgZnVuY3Rpb24uCiAgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
dGFyZ2V0SW5zdGFuY2UgeyBudWxscHRyIH07CiAgICAgICAgIFdhc206Oldhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50IHsgbnVsbHB0ciB9OworICAgICAgICB2b2lkKiB3
YXNtVG9FbWJlZGRlclN0dWJFeGVjdXRhYmxlQWRkcmVzcyB7IG51bGxwdHIgfTsKICAgICAgICAg
V3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBpbXBvcnRGdW5jdGlvbiB7IFdyaXRlQmFycmllcjxKU09i
amVjdD4oKSB9OwogICAgIH07Ci0gICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbXBvcnRGdW5jdGlv
bkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiAmYml0d2lzZV9jYXN0PElt
cG9ydEZ1bmN0aW9uSW5mbyo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlRh
aWwoKSlbaW1wb3J0RnVuY3Rpb25OdW1dOyB9CisgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbXBv
cnRGdW5jdGlvbkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IFJFTEVBU0VfQVNTRVJU
KGltcG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4gJmJpdHdp
c2VfY2FzdDxJbXBvcnRGdW5jdGlvbkluZm8qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsg
b2Zmc2V0T2ZUYWlsKCkpW2ltcG9ydEZ1bmN0aW9uTnVtXTsgfQogICAgIHN0YXRpYyBzaXplX3Qg
b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJu
IG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rp
b25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHRhcmdldEluc3Rh
bmNlKTsgfQogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludChzaXplX3Qg
aW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rp
b25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBv
cnRGdW5jdGlvbkluZm8sIHdhc21FbnRyeXBvaW50KTsgfQorICAgIHN0YXRpYyBzaXplX3Qgb2Zm
c2V0T2ZXYXNtVG9FbWJlZGRlclN0dWJFeGVjdXRhYmxlQWRkcmVzcyhzaXplX3QgaW1wb3J0RnVu
Y3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBz
aXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlv
bkluZm8sIHdhc21Ub0VtYmVkZGVyU3R1YkV4ZWN1dGFibGVBZGRyZXNzKTsgfQogICAgIHN0YXRp
YyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0p
IHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1w
b3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIGlt
cG9ydEZ1bmN0aW9uKTsgfQogICAgIEpTT2JqZWN0KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBp
bXBvcnRGdW5jdGlvbk51bSkgeyBSRUxFQVNFX0FTU0VSVChpbXBvcnRGdW5jdGlvbk51bSA8IG1f
bnVtSW1wb3J0RnVuY3Rpb25zKTsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRGdW5j
dGlvbk51bSktPmltcG9ydEZ1bmN0aW9uLmdldCgpOyB9Ci0gICAgCisKICAgICAvLyBGSVhNRSBy
ZW1vdmUgdGhlc2UgYWZ0ZXIgcmVmYWN0b3JpbmcgdGhlbSBvdXQuIGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzE3NzQ3MgogICAgIFdhc206Ok1lbW9yeSYgaW50ZXJuYWxNZW1vcnkoKSB7IHJldHVybiBt
ZW1vcnkoKS0+bWVtb3J5KCk7IH0KICAgICBXYXNtOjpDb2RlQmxvY2smIHdhc21Db2RlQmxvY2so
KSBjb25zdCB7IHJldHVybiAqbV9pbnN0YW5jZS0+Y29kZUJsb2NrKCk7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAppbmRleCAzOWNjYTQ5Li4wNzFkMGQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCkBAIC01MSw2ICs1
MSw2OCBAQCBzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5z
aWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bAogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJ
bnN0YW5jZShyZXN1bHQpOwogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkp
LCByZXN1bHQpOwogfQorICAgIAorc3RhdGljIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiwgQmluZGluZ0ZhaWx1cmU+IGhhbmRsZUJhZEk2NFVzZShWTSogdm0sIEpJVCYgaml0LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCit7CisgICAgdW5z
aWduZWQgYXJnQ291bnQgPSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOworCisgICAgYm9vbCBo
YXNCYWRJNjRVc2UgPSBmYWxzZTsKKyAgICBoYXNCYWRJNjRVc2UgfD0gc2lnbmF0dXJlLnJldHVy
blR5cGUoKSA9PSBJNjQ7CisgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBh
cmdDb3VudCAmJiAhaGFzQmFkSTY0VXNlOyArK2FyZ051bSkgeworICAgICAgICBUeXBlIGFyZ1R5
cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgc3dpdGNoIChhcmdUeXBl
KSB7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICBjYXNl
IEFueWZ1bmM6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgICAgIGNhc2UgSTY0OiB7CisgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFzQmFkSTY0VXNlKSB7Cisg
ICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bS0+dG9wRW50cnlGcmFtZSk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBqaXQubG9hZFdhc21Db250
ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKworICAgICAgICAvLyBTdG9yZSBD
YWxsZWUuCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjph
cmd1bWVudEdQUjIsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OworCisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCp2bSk7CisKKyAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShFeGVj
U3RhdGUqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAg
ICAgICAgICAgICAgIGF1dG8qIGVycm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsICp2
bSwgZ2xvYmFsT2JqZWN0LT50eXBlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgp
LCBBU0NJSUxpdGVyYWwoImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1bWVu
dCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIpKTsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNh
bGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKworICAgICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAg
ICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7
CisKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93QmFkSTY0KTsKKyAgICAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlw
dCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKK30KIAogRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0qIHZtLCBC
YWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KQogewpAQCAtNzIsNjIgKzEzNCw5IEBAIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiB2
bSwgQmFnPENhbGxMaW5rSW5mCiAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAg
aml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJs
b2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQogCi0g
ICAgewotICAgICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOwotICAgICAgICBoYXNCYWRJ
NjRVc2UgfD0gc2lnbmF0dXJlLnJldHVyblR5cGUoKSA9PSBJNjQ7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsgKyth
cmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChh
cmdOdW0pOwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFZvaWQ6Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6
Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAg
ICAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkgewotICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKLSAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwotICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIENhbGxlZS4KLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMik7Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
LQotICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGppdC5q
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICAgICAgICAgIHZvaWQgKCp0aHJvd0Jh
ZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikgPSBbXSAoRXhlY1N0YXRl
KiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKSAtPiB2b2lkIHsKLSAgICAg
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgq
dm0pOwotICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
aW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICBhdXRvKiBlcnJv
ciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+dHlwZUVy
cm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVNDSUlMaXRlcmFsKCJpNjQgbm90
IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rp
b24iKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBnZW5lcmlj
VW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRP
Zk1lbW9yeSk7Ci0KLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2
NCk7Ci0gICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFz
c2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0
SW5kZXgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBhdXRvIGJhZEk2NCA9IGhhbmRsZUJhZEk2
NFVzZSh2bSwgaml0LCBzaWduYXR1cmUsIGltcG9ydEluZGV4KTsKKyAgICBpZiAoIWJhZEk2NCB8
fCBiYWRJNjQudmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGJhZEk2NDsKIAogICAgIC8vIEhlcmUg
d2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBsZWFzdCBh
bGwgdGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBzYXZl
IGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBhbHJlYWR5
IHRvb2sgY2FyZSBvZiB0aGlzLgogICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVTYXZlcyA9
IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5k
ZXggZjgwZmFmNy4uMzZhMGRjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtNjMsNyAr
NjMsNyBAQCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsTwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
IWZ1bmN0aW9uLT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmluZm8o
KSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwog
ICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50
cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0g
ICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIHsg
c2lnbmF0dXJlSW5kZXgsIGluc3RhbmNlLT53YXNtQ29kZUJsb2NrKCkud2FzbVRvSlNDYWxsU3R1
YkZvckltcG9ydChpbXBvcnRJbmRleCkgfSApOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCAmaW5zdGFuY2Ut
PmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRJbmRleCktPndhc21Ub0VtYmVkZGVyU3R1YkV4ZWN1
dGFibGVBZGRyZXNzIH0gKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9
IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324328</attachid>
            <date>2017-10-19 18:42:19 -0700</date>
            <delta_ts>2017-10-19 19:23:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-no-VM-JS-version-of-everything-but-Insta.patch</filename>
            <type>text/plain</type>
            <size>430589</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA5NTcyM2RiZmQxNWRmNmMyYzk2YTYzYmMxZTcwNGI3YWRlZGEzZWE3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDE2IE9jdCAyMDE3IDE1OjI1OjEyIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBldmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQoKLS0t
CiBKU1Rlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx
NiArCiBKU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzICAgICAgICAgICAgICAgICB8
ICAgMiArLQogSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgIHwgNDU4ICsrKysrKysrKysrKysrCiAuLi4vSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiAgICAgICB8ICA4OCArKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dCAgICAgICAgICAgICAgICAgIHwgIDEyICstCiAuLi4vSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwICB8ICAgMiArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCAgICAgICAgfCAgMTggKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwICAgICAgIHwgICA0ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCAgICAgICAgICB8ICAgNCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCAgICAgICAgICAgfCAgMTAgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcCAgICAgICAgICAgIHwgICAy
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwICAgICAgICAgICB8
ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCAgICAgICAgICAg
ICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cCAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAgICB8ICAgOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAgICAgfCAgMjUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaCAgICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvRnJhbWVUcmFjZXJzLmggICB8ICAxNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcCAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIHwgIDI2ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggICB8ICAxMSArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1ZNRW50cnlSZWNvcmQuaCAgfCAgMjAgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCAgICAgIHwgIDMyICstCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oICAgICAgICB8ICA0OCArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwICAgICAgICAgICAgICAgICAgfCAgIDYg
Ky0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgICAgICAgIHwg
ICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwICAgICAgICAg
ICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
ICAgICAgfCAgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAgICAgICAgIHwgIDMyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAgICAgICB8ICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAgICAgIHwgICA4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwICAgICAgICB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtICAgfCAgIDYgKy0KIC4uLi9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtICAgICAgICAgICAgIHwgIDE4ICstCiAuLi4vSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSB8ICAxOSArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCAgICAgICAgICAgfCAgIDEgKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgICAgICAgICAgfCAgIDIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCAgICAgICAgICAgIHwgICAzICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCB8ICAg
OCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAgICAgICAg
fCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCAgICAgICAgICAg
ICAgIHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oICAgICAgICAg
ICAgICAgICB8ICAxNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAgICAgICAgICAgfCAgMTggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcCAgIHwgMzg0ICsrKystLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCAgICAgfCAgIDUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCAgICAgICAgIHwgIDIyICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oICAgICAgICAgICB8ICAxMyArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmggICAgfCAgMTAgKy0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcCAgICAgICAgIHwgNjAyICstLS0t
LS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgg
ICAgICAgICAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJs
b2NrLmNwcCAgICAgICB8ICAzNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVCbG9jay5oICAgICAgICAgfCAgMjQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Db250ZXh0LmNwcCAgICAgICAgIHwgIDMzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29udGV4dC5oICAgICAgICAgICB8ICAzMSArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUVtYmVkZGVyLmggICAgICAgICAgfCAgNTggKysKIC4uLi9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIHwgICAyICstCiAuLi4vSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmggICB8ICAgMiAtCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggICAgICAgICAgICB8ICAgNSArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcCAgICAgICAgfCAgNTggKysKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oICAgICAgICAgIHwgIDg3ICsr
KwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAgICAgfCAx
NTkgKysrLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCAgICAgICAg
ICAgIHwgIDQ0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uY3BwICB8ICAxNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmggfCAgIDggKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnlNb2RlLmNwcCAgICAgIHwgIDQ3ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5TW9kZS5oICAgICAgICB8ICA0NSArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZS5jcHAgICAgICAgICAgfCAgMjcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGUuaCAgICAgICAgICAgIHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8ICAgMyArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmggICAgICAgfCAgNDggKysKIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCAgICAgICAgIHwgIDIxICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oICAgICAgICAgICB8ICAxMCArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oICAgICAgICAgfCAgIDcgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCAgICAgICAgICAgIHwgIDM1
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oICAgICAgICAgICAgICB8
ICAyNSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAgICAg
ICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaCAg
ICAgICAgIHwgICA2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3Bw
ICAgICAgICAgICB8IDEyMiArKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFi
bGUuaCAgICAgICAgICAgICB8ICA3MyArKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaHVua3MuY3BwICAgICAgICAgIHwgIDU5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmggICAgICAgICAgICB8ICAgNSArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtV29ya2xpc3QuY3BwICAgICAgICB8ICAgNyArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmggICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcCAgICAgICAgIHwgMjI3ICsrKysrKysKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmggICAgICAgICAgIHwgIDQ4ICsrCiAu
Li4vSmF2YVNjcmlwdENvcmUvd2FzbS97ID0+IGpzfS9KU1dlYkFzc2VtYmx5LmNwcCB8ICAgMAog
Li4uL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBqc30vSlNXZWJBc3NlbWJseS5oICAgfCAgNTAg
Ky0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwICAgICAgICAgICAgIHwg
IDIyICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggICAgICAgICAgICAg
ICB8ICA1NCArLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCAgICAgICAg
ICAgICAgfCAxMjMgKystLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmggfCAgOTEgKystCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcCB8ICA3NiArKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuaCAgIHwgIDEzICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCB8ICAzMiArCiAuLi4vSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggICB8ICAyNSArLQogLi4uL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcCAgfCAgNzcgKy0tCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaCB8ICA0MyArLQogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwICAgICAgICAgfCA2NjQgKysrKysrKysr
KysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oICAg
ICAgICAgICB8ICA0OSArKwogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAgfCAgMjYgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAgICAgIHwgICA2ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yLmNwcCAgICAgICB8ICAxMyArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlQcm90b3R5cGUuY3BwICAgICAgICAgfCAgIDMgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwICAgICAgIHwgIDIwICstCiAuLi4vd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yLmggICAgICAgICB8ICAgNSArLQogLi4uL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwICAgICAgICAgICAgfCAgMjIgKy0KIC4uLi93YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCAgICAgICAgICAgICAgIHwgIDE0ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwICAgICAgICB8ICAgOSArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICAgICAgICAgfCAgIDIgKy0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEy
ICsKIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oIHwg
ICAyICsKIC4uLi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAg
IHwgICAxICsKIDExNCBmaWxlcyBjaGFuZ2VkLCAzMTYwIGluc2VydGlvbnMoKyksIDE3NjggZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUVtYmVkZGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSW5zdGFuY2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5oCiByZW5hbWUgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20veyA9PiBqc30vSlNX
ZWJBc3NlbWJseS5jcHAgKDEwMCUpCiByZW5hbWUgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
eyA9PiBqc30vSlNXZWJBc3NlbWJseS5oICg2MiUpCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oCgpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAy
N2MwMmZjLi5jODIwZmU1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE3LTEwLTE5ICBKRiBCYXN0aWVuICA8
amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogbm8gVk0gLyBKUyB2
ZXJzaW9uIG9mIGV2ZXJ5dGhpbmcgYnV0IEluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc0NzMKKworICAgICAgICBSZXZpZXdlZCBieSBG
aWxpcCBQaXpsbywgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgLSBFeGNlZWRpbmcgbWF4IG9uIG1l
bW9yeSBncm93dGggbm93IHJldHVybnMgYSByYW5nZSBlcnJvciBhcyBwZXIKKyAgICAgICAgc3Bl
Yy4gVGhpcyBpcyBhICh2ZXJ5IG1pbm9yKSBicmVha2luZyBjaGFuZ2U6IGl0IHVzZWQgdG8gdGhy
b3cgT09NCisgICAgICAgIGVycm9yLiBVcGRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgdGVzdC4KKwor
ICAgICAgICAqIHdhc20vanMtYXBpL21lbW9yeS1ncm93LmpzOgorICAgICAgICAoYXNzZXJ0RXEp
OgorICAgICAgICAqIHdhc20vanMtYXBpL3RhYmxlLmpzOgorICAgICAgICAoYXNzZXJ0LnRocm93
cyk6CisKIDIwMTctMTAtMTQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CiAKICAgICAgICAgUmVsYW5kICJBZGQgQWJvdmUvQmVsb3cgY29tcGFyaXNvbnMgZm9yIFVJbnQz
MiBwYXR0ZXJucyIKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cu
anMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL21lbW9yeS1ncm93LmpzCmluZGV4IGMyODAwMWUuLjBm
OGZjOTYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvbWVtb3J5LWdyb3cuanMKKysr
IGIvSlNUZXN0cy93YXNtL2pzLWFwaS9tZW1vcnktZ3Jvdy5qcwpAQCAtNDUsNyArNDUsNyBAQCBm
b3IgKGxldCBidWZmZXIgb2YgYnVmZmVycykgewogICAgIGFzc2VydEVxKGJ1ZmZlci5ieXRlTGVu
Z3RoLCAyKjY0KjEwMjQpOwogCiAgICAgLy8gVGhpcyBzaG91bGRuJ3QgbmV1dGVyIHRoZSBidWZm
ZXIgc2luY2UgaXQgZmFpbHMuCi0gICAgYXNzZXJ0VGhyb3dzKCgpID0+IG1lbW9yeS5ncm93KDEw
MDApLCBFcnJvciwgIk91dCBvZiBtZW1vcnkiKTsgCisgICAgYXNzZXJ0VGhyb3dzKCgpID0+IG1l
bW9yeS5ncm93KDEwMDApLCBSYW5nZUVycm9yLCAiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgd291
bGQgZXhjZWVkIHRoZSBtZW1vcnkncyBkZWNsYXJlZCBtYXhpbXVtIHNpemUiKTsKICAgICBhc3Nl
cnRFcShidWZmZXIuYnl0ZUxlbmd0aCwgMio2NCoxMDI0KTsKICAgICBhc3NlcnRFcShtZW1vcnku
YnVmZmVyLCBidWZmZXIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJs
ZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNzJkNDk1Yi4uNDEzMjg0
ZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3Rz
L3dhc20vanMtYXBpL3RhYmxlLmpzCkBAIC0xNjYsOCArMTY2LDggQEAgZnVuY3Rpb24gYXNzZXJ0
QmFkVGFibGVJbXBvcnQodGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxl
IGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBn
cmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAogICAgICAgICAg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXph
YmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBp
cyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAg
ICAgW3tpbml0aWFsOiAyKiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5p
dGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgaW52YWxpZCAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAg
ICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODog
VGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyBpbnZhbGlkIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMjQgLyAyNzogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0
b28gYmlnLCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRpYWwg
cGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIl0sCiAgICAgXTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDhmYzM5OTQuLmIzNWQxYWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2MSBAQAorMjAxNy0xMC0xOSAgSkYgQmFzdGll
biAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8g
SlMgdmVyc2lvbiBvZiBldmVyeXRoaW5nIGJ1dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRmlsaXAgUGl6bG8sIFNhYW0gQmFyYXRpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGVudGFp
bHMgY2xlYW5pbmcgdXAgYW5kIHNwbGl0dGluZyBhIGJ1bmNoIG9mIGNvZGUgd2hpY2ggd2UgaGFk
CisgICAgICAgIGludGVydHdpbmVkIGJldHdlZW4gQysrIGNsYXNzZXMgd2hpY2ggcmVwcmVzZW50
IEpTIG9iamVjdHMsIGFuZCBwdXJlIEMrKworICAgICAgICBpbXBsZW1lbnRhdGlvbiBvYmplY3Rz
LiBUaGlzIHNwZWNpZmljIGNoYW5nZSBnb2VzIG1vc3Qgb2YgdGhlIHdheSB0b3dhcmRzCisgICAg
ICAgIGFsbG93aW5nIEpTQydzIFdlYkFzc2VtYmx5IHRvIHdvcmsgd2l0aG91dCBWTSAvIEpTLCB1
cCB0byBidXQgZXhjbHVkaW5nCisgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSAodGhlcmUn
cyBXYXNtOjpJbnN0YW5jZSwgYnV0IGl0J3Mgbm90ICp0aGUqIHRoaW5nCisgICAgICAgIHlldCku
IEJlY2F1c2Ugb2YgdGhpcyB3ZSBzdGlsbCBoYXZlIGEgZmV3IEZJWE1FIGlkZW50aWZ5aW5nIHBs
YWNlcyB0aGF0IG5lZWQgdG8KKyAgICAgICAgY2hhbmdlLiBBIGZvbGxvdy11cCBjaGFuZ2Ugd2ls
bCBnbyB0aGUgcmVzdCBvZiB0aGUgd2F5LgorCisgICAgICAgIEkgd2VudCBhYm91dCB0aGlzIGNo
YW5nZSBpbiB0aGUgc2ltcGxlc3Qgd2F5IHBvc3NpYmxlOiBncmVwIHRoZQorICAgICAgICBKYXZh
U2NyaXB0Q29yZS93YXNtIGRpcmVjdG9yeSBmb3IgIkpTW15DX10iIGFzIHdlbGwgYXMgIlZNIiBh
bmQgZXhjbHVkZSB0aGUgL2pzLworICAgICAgICBzdWItZGlyZWN0b3J5ICh3aGljaCBjb250YWlu
cyB0aGUgSlMgaW1wbGVtZW50YXRpb24gb2YgV2ViQXNzZW1ibHkpLgorCisgICAgICAgIE5vbmUg
b2YgdGhpcyBjaGFuZ2UgcmVtb3ZlcyB0aGUgbmVlZCBmb3IgYSBKSVQgZW50aXRsZW1lbnQgdG8g
YmUgYWJsZSB0byB1c2UKKyAgICAgICAgV2ViQXNzZW1ibHkuIFdlIGRvbid0IGhhdmUgYW4gaW50
ZXJwcmV0ZXIsIHRoZSBwcm9jZXNzIHRoZXJlZm9yZSBzdGlsbCBuZWVkcyB0bworICAgICAgICBi
ZSBhbGxvd2VkIHRvIEpJVCB0byB1c2UgdGhlc2UgcHVyZS1DKysgQVBJcy4KKworICAgICAgICBJ
bnRlcmVzdGluZyB0aGluZ3MgdG8gbm90ZToKKworICAgICAgICAgIC0gUmVtb3ZlIFZNIGZyb20g
UGxhbiBhbmQgYXNzb2NpYXRlZCBwbGFjZXMuIEl0IGNhbiBqdXN0IGxpdmUgYXMgYSBjYXB0dXJl
IGluCisgICAgICAgICAgICB0aGUgY2FsbGJhY2sgbGFtYmRhIGlmIGl0J3MgbmVlZGVkLgorICAg
ICAgICAgIC0gV2FzbTo6TWVtb3J5IHNob3VsZG4ndCByZXF1aXJlIGEgVk0uIEl0IHdhcyBvbmx5
IHVzZWQgdG8gYXNrIHRoZSBHQyB0bworICAgICAgICAgICAgY29sbGVjdC4gV2Ugbm93IGluc3Rl
YWQgcGFzcyB0d28gbGFtYmRhcyBhdCBjb25zdHJ1Y3Rpb24gdGltZSBmb3IgdGhpcworICAgICAg
ICAgICAgcHVycG9zZTogb25lIHRvIG5vdGlmeSBvZiBtZW1vcnkgcHJlc3N1cmUsIGFuZCB0aGUg
b3RoZXIgdG8gYXNrIGZvcgorICAgICAgICAgICAgc3luY3Job25vdXMgbWVtb3J5IHJlY2xhbWF0
aW9uLiBUaGlzIGFsbG93cyB3aG9ldmVyIGNyZWF0ZXMgdGhlIG1lbW9yeSB0bworICAgICAgICAg
ICAgZGljdGF0ZSBob3cgdG8gcmVhY3QgdG8gYm90aCB0aGVzZSBjYXNlcywgYW5kIGZvciBhIEpT
IGVtYmVkZGluZyB0aGF0J3MgdG8KKyAgICAgICAgICAgIGNhbGwgdGhlIEdDIChhc3luYyBvciBz
eW5jLCByZXNwZWN0aXZlbHkpLgorICAgICAgICAgIC0gTW92ZSBncm93IGxvZ2ljIGZyb20gSlNX
ZWJBc3NlbWJseU1lbW9yeSB0byBXYXNtOjpNZW1vcnk6Omdyb3cuIFVzZSBFeHBlY3RlZAorICAg
ICAgICAgICAgdGhlcmUsIHdpdGggYW4gZW51bSBjbGFzcyBmb3IgZmFpbHVyZSB0eXBlcy4KKyAg
ICAgICAgICAtIEV4Y2VlZGluZyBtYXggb24gbWVtb3J5IGdyb3d0aCBub3cgcmV0dXJucyBhIHJh
bmdlIGVycm9yIGFzIHBlciBzcGVjLiBUaGlzCisgICAgICAgICAgICBpcyBhICh2ZXJ5IG1pbm9y
KSBicmVha2luZyBjaGFuZ2U6IGl0IHVzZWQgdG8gdGhyb3cgT09NIGVycm9yLiBVcGRhdGUgdGhl
CisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRlc3QuCisgICAgICAgICAgLSBXaGVuIGdlbmVy
YXRpbmcgdGhlIGdyb3dfbWVtb3J5IG9wY29kZSwgbm8gbmVlZCB0byBnZXQgdGhlIFZNLiBJbnN0
ZWFkLAorICAgICAgICAgICAgcmVhY2ggZGlyZWN0bHkgZm9yIFdhc206Ok1lbW9yeSBhbmQgZ3Jv
dyBpdC4KKyAgICAgICAgICAtIEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3cgY2FuIG5vdyBhbHdh
eXMgdGhyb3cgb24gZmFpbHVyZSwgYmVjYXVzZSBpdCdzIG9ubHkKKyAgICAgICAgICAgIGV2ZXIg
Y2FsbGVkIGZyb20gSlMgKG5vdCBmcm9tIGdyb3dfbWVtb3J5IGFzIGJlZm9yZSkuCisgICAgICAg
ICAgLSBXYXNtOjpNZW1vcnkgbm93IHRha2VzIGEgY2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgZ3Jv
d3RoLiBUaGlzIGFsbG93cyBKUworICAgICAgICAgICAgd3JhcHBlcnMgdG8gcmVnaXN0ZXIgdGhl
bXNlbHZlcyB3aGVuIGdyb3d0aCBzdWNjZWVkcyB3aXRob3V0IFdhc206Ok1lbW9yeQorICAgICAg
ICAgICAga25vd25pbmcgYW55dGhpbmcgYWJvdXQgSlMuIEl0J2xsIGFsc28gYWxsb3cgY3JlYXRp
bmcgYSBsaXN0IG9mIGNhbGxiYWNrcworICAgICAgICAgICAgZm9yIHdoZW4gd2UgYWRkIHRocmVh
ZCBzdXBwb3J0ICh3ZSdsbCB3YW50IHRvIG5vdGlmeSBtYW55IHdyYXBwZXJzLCBhbGwKKyAgICAg
ICAgICAgIHVuZGVyIGEgbG9jaykuCisgICAgICAgICAgLSBXYXNtOjpNZW1vcnkgaXMgbm93IGJh
Y2sgdG8gYmVpbmcgdGhlIHNvdXJjZSBvZiB0cnV0aCBhYm91dCBhZGRyZXNzIC8gc2l6ZSwKKyAg
ICAgICAgICAgIHVzZWQgZGlyZWN0bHkgYnkgZ2VuZXJhdGVkIGNvZGUgaW5zdGVhZCBvZiBKU1dl
YkFzc2VtYmx5TWVtb3J5LgorICAgICAgICAgIC0gTW92ZSB3YXNtVG9KUyBmcm9tIHRoZSBnZW5l
cmFsIFdhc21CaW5kaW5nIGhlYWRlciB0byBpdHMgb3duIGhlYWRlciB1bmRlcgorICAgICAgICAg
ICAgd2FzbS9qcy4gSXQncyBvbmx5IHVzZWQgYnkgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmNwcCwgYW5kIHVzZXMgVk0sCisgICAgICAgICAgICBhbmQgdGhlcmVmb3JlIGlzbid0IGdl
bmVyYWwgV2ViQXNzZW1ibHkuCisgICAgICAgICAgLSBNYWtlIFdhc206OkNvbnRleHQgYW4gYWN0
dWFsIHR5cGUgKGp1c3QgYSBzdHJ1Y3QgaG9sZGluZyBhCisgICAgICAgICAgICBKU1dlYkFzc2Vt
bHlJbnN0YW5jZSBmb3Igbm93KSBpbnN0ZWFkIG9mIGFuIGFsaWFzIGZvciB0aGF0LiBOb3RhYmx5
IHRoaXMKKyAgICAgICAgICAgIGRvZXNuJ3QgYWRkIGFueXRoaW5nIHRvIHRoZSBDb250ZXh0IGFu
ZCBkb2Vzbid0IGNoYW5nZSB3aGF0IGFjdHVhbGx5IGdldHMKKyAgICAgICAgICAgIHBhc3NlZCBh
cm91bmQgaW4gSklUIGNvZGUgKGZhc3QgVExTIG9yIHJlZ2lzdGVycykgYmVjYXVzZSB0aGVzZSBj
aGFuZ2VzCisgICAgICAgICAgICBwb3RlbnRpYWxseSBpbXBhY3QgcGVyZm9ybWFuY2UuIFRoZSBl
bnRpcmUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBpcyB0bworICAgICAgICAgICAgYWxsb3cgcGFz
c2luZyBXYXNtOjpDb250ZXh0IGFyb3VuZCB3aXRob3V0IGhhdmluZyB0byBrbm93IGFib3V0IFZN
LiBTaW5jZSBWTQorICAgICAgICAgICAgY29udGFpbnMgYSBXYXNtOjpDb250ZXh0IHRoZSBKUyBl
bWJlZGRpbmcgaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUsIGJ1dCB3aXRoCisgICAgICAgICAgICB0
aGlzIHNldHVwIGEgbm9uLUpTIGVtYmVkZGluZyBpcyBtdWNoIGJldHRlciBvZmYuCisgICAgICAg
ICAgLSBNb3ZlIEpTV2ViQXNzZW1ibHkgaW50byB0aGUgSlMgZm9sZGVyLgorICAgICAgICAgIC0g
T01HUGxhbjogdXNlIFdhc206OkNvZGVCbG9jayBkaXJlY3RseSBpbnN0ZWFkIG9mIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suCisgICAgICAgICAgLSB3YXNtLT5KUyBzdHVicyBhcmUgbm93IG9uIHRo
ZSBpbnN0YW5jZSdzIHRhaWwgYXMgcmF3IHBvaW50ZXJzLCBpbnN0ZWFkIG9mCisgICAgICAgICAg
ICBiZWluZyBvbiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLCBhbmQgYXJlIG5vdyBjYWxsZWQgd2Fz
bS0+RW1iZWRkZXIKKyAgICAgICAgICAgIHN0dWJzLiBUaGUgb3duZWQgcmVmZXJlbmNlIGlzIHN0
aWxsIG9uIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2ssIGFuZCBpcyBzdGlsbAorICAgICAgICAgICAg
Y2FsbGVkIHdhc20tPkpTIHN0dWIuIFRoaXMgbW92ZSBtZWFucyB0aGF0IHRoZSBlbWJlZGRlciBt
dXN0LCBhZnRlciBjcmVhdGluZworICAgICAgICAgICAgYSBXYXNtOjpDb2RlQmxvY2ssIHNvbWVo
b3cgY3JlYXRlIHRoZSBzdHVicyB0byBjYWxsIGJhY2sgaW50byB0aGUKKyAgICAgICAgICAgIGVt
YmVkZGVyLiBUaGlzIHJlbW92ZXMgYW4gaW5kaXJlY3Rpb24gaW4gdGhlIGdlbmVyYXRlZCBjb2Rl
IGJlY2F1c2UKKyAgICAgICAgICAgIHRoZSBCMyBJUiBnZW5lcmF0b3Igbm93IHJlYWNoZXMgaW50
byB0aGUgaW5zdGFuY2UgaW5zdGVhZCBvZgorICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jay4KKyAgICAgICAgICAtIE1vdmUgbW9yZSBDb2RlQmxvY2sgdGhpbmdzLiBDb21waWxhdGlv
biBjb21wbGV0aW9uIGlzIG5vdyBtYXJrZWQgYnkgaXRzIG93bgorICAgICAgICAgICAgYXRvbWlj
PGJvb2w+IGZsYWcgaW5zdGVhZCBvZiBhIG51bGxwdHIgcGxhbjogdGhhdCByZXF1aXJlZCB1c2lu
ZyBhIGxvY2ssIGFuZAorICAgICAgICAgICAgd2FzIGNhdXNpbmcgYSBkZWFkbG9jayBpbiBzdGFj
ay10cmFjZS5qcyBiZWNhdXNlIGJlZm9yZSBteSBjaGFuZ2VzCisgICAgICAgICAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrIGRpZCBpdHMgb3duIGNvbXBsZXRpb24gY2hlY2tpbmcgc2VwYXJhdGVs
eSBmcm9tCisgICAgICAgICAgICBXYXNtOjpDb2RlQmxvY2ssIHdpdGhvdXQgZ2V0dGluZyB0aGUg
bG9jay4gTm93IHRoYXQgZXZlcnl0aGluZyBwb2ludHMgdG8KKyAgICAgICAgICAgIFdhc206OkNv
ZGVCbG9jayBhbmQgdGhlcmUncyBubyBjYWNoZWQgY29tcGxldGlvbiBtYXJrZXIsIHRoZSBsb2Nr
IHdhcyBiZWluZworICAgICAgICAgICAgYWNxdWlyZWQgaW4gYSBzYW5pdHktY2hlY2sgYXNzZXJ0
aW9uLgorICAgICAgICAgIC0gRW1iZWRkZXIgLT4gV2FzbSB3cmFwcGVycyBhcmUgbm93IGdlbmVy
YXRlZCB0aHJvdWdoIGEgZnVuY3Rpb24gdGhhdCdzIHBhc3NlZAorICAgICAgICAgICAgaW4gYXQg
Y29tcGlsYXRpb24gdGltZSwgaW5zdGVhZCBvZiBiZWluZyBoYXJkLWNvZGVkIGFzIGEgSlMgLT4g
V2FzbSB3cmFwcGVyLgorICAgICAgICAgIC0gV2FzbU1lbW9yeSBkb2Vucyd0IG5lZWQgdG8ga25v
dyBhYm91dCBmYXVsdCBoYW5kbGluZyB0aHVua3MuIE9ubHkgdGhlIElSCisgICAgICAgICAgICBn
ZW5lcmF0b3Igc2hvdWxkIGtub3csIGFuZCBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIGV4Y2Vw
dGlvbiB0aHJvd2luZworICAgICAgICAgICAgdGh1bmsgaXMgZ2VuZXJhdGVkIGlmIGFueSBtZW1v
cnkgaXMgcHJlc2VudCAobm90ZTogd2l0aCBzaWduYWwgaGFuZGxpbmcgbm90CisgICAgICAgICAg
ICBhbGwgb2YgdGhlbSBnZW5lcmF0ZSBhbiBleGNlcHRpb24gY2hlY2spLgorICAgICAgICAgIC0g
TWFrZSBleGNlcHRpb24gdGhyb3dpbmcgcGx1Z2dhYmxlOiBpbnN0ZWFkIG9mIGhhdmluZyBhIGhh
cmQtY29kZWQKKyAgICAgICAgICAgIEpTLXNwZWNpZmljIGxhbWJkYSB3ZSBub3cgaGF2ZSBhIHJl
Z3VsYXIgQysrIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBmcm9tIEpJVAorICAgICAgICAgICAgY29k
ZSB3aGVuIGEgV2ViQXNzZW1ibHkgZXhjZXB0aW9uIGlzIHRocm93bi4gVGhpcyBhbGxvd3MgYW55
IGVtYmVkZGVyIHRvIGdldAorICAgICAgICAgICAgY2FsbGVkIGFzIHRoZXkgd2lzaC4gRm9yIG5v
dyBhIHByb2Nlc3MgY2FuIG9ubHkgaGF2ZSBhIHNpbmdsZSBvZiB0aGVzZQorICAgICAgICAgICAg
ZnVuY3Rpb25zIChpLmUuIG9ubHkgb25lIGVtYmVkZGVyIHBlciBwcm9jZXNzKSBiZWNhdXNlIHRo
ZSB0cmFwIGhhbmRsZXIgaXMgYQorICAgICAgICAgICAgc2luZ2xldG9uLiBUaGF0IGNhbiBiZSBm
aXhlZCBpbiBpbiAjMTc3NDc1LgorICAgICAgICAgIC0gQ3JlYXRlIFdhc21FbWJlZGRlci5oIHdo
ZXJlIGFsbCBlbWJlZGRlciBwbHVnZ2luZyB3aWxsIGxpdmUuCisgICAgICAgICAgLSBTcGxpdCB1
cCBKU1dlYkFzc2VtYmx5VGFibGUgaW50byBXYXNtOjpUYWJsZSB3aGljaCBpcworICAgICAgICAg
ICAgcmVmY291bnRlZC4gSlNXZWJBc3NlbWJseVRhYmxlIG5vdyBvbmx5IGNvbnRhaW5zIHRoZSBK
UyBmdW5jdGlvbnMgaW4gdGhlCisgICAgICAgICAgICB0YWJsZSwgYW5kIFdhc206OlRhYmxlIGlz
IHdoYXQncyB1c2VkIGJ5IHRoZSBKSVQgY29kZSB0byBsb29rdXAgd2hlcmUgdG8KKyAgICAgICAg
ICAgIGNhbGwgYW5kIGRvIHRoZSBpbnN0YW5jZSBjaGVjayAoZm9yIGNvbnRleHQgc3dpdGNoKS4g
Tm90ZSB0aGF0IHRoaXMgY3JlYXRlcworICAgICAgICAgICAgYW4gZXh0cmEgYWxsb2NhdGlvbiBm
b3IgYWxsIHRoZSBpbnN0YW5jZXMgaW4gV2FzbTo6VGFibGUsIGFuZCBpbiBleGNoYW5nZQorICAg
ICAgICAgICAgcmVtb3ZlcyBhbiBpbmRpcmVjdGlvbiBpbiBKSVQgY29kZSBiZWNhdXNlIHRoZSBp
bnN0YW5jZSB1c2VkIHRvIGJlIG9idGFpbmVkCisgICAgICAgICAgICBvZmYgb2YgdGhlIEpTIGZ1
bmN0aW9uLiBBbHNvIG5vdGUgdGhhdCBpdCdzIHRoZSBlbWJlZGRlciB0aGFuIGtlZXBzIHRoZQor
ICAgICAgICAgICAgaW5zdGFuY2VzIGFsaXZlLCBub3QgV2FzbTo6VGFibGUgKHdoaWNoIGhvbGRz
IGEgZHVtYiBwb2ludGVyIHRvIHRoZQorICAgICAgICAgICAgaW5zdGFuY2UpLCBiZWNhdXNlIGRv
aW5nIG90aGVyd2lzZSB3b3VsZCBjYXVzZSByZWZlcmVuY2UgY3ljbGVzLgorICAgICAgICAgICAt
IEFkZCBXYXNtSW5zdGFuY2UuIEl0IGRvZXNuJ3QgZG8gbXVjaCBmb3Igbm93LCBvd25zIGdsb2Jh
bHMuCisgICAgICAgICAgIC0gSlNXZWJBc3NlbWJseSBpbnN0YW5jZSBub3cgZG9lc24ndCBqdXN0
IGNvbnRhaW4gdGhlIGltcG9ydGVkIGZ1bmN0aW9ucyBhcworICAgICAgICAgICAgIEpTT2JqZWN0
cywgaXQgYWxzbyBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgaW1wb3J0J3MgaW5zdGFuY2UgYW5kIHdh
c20KKyAgICAgICAgICAgICBlbnRyeXBvaW50LiBUaGlzIHRyaXBsZXMgdGhlIHNwYWNlIGFsbG9j
YXRlZCBwZXIgaW5zdGFuY2UncyBpbXBvcnRlZAorICAgICAgICAgICAgIGZ1bmN0aW9uLCBidXQg
dGhlcmUgc2hvdWxkbid0IGJlIHRoYXQgbWFueSBpbXBvcnRzLiBUaGlzIGhhcyB0d28gdXBzaWRl
czogaXQKKyAgICAgICAgICAgICBjcmVhdGVzIHNtYWxsZXIgYW5kIGZhc3RlciBjb2RlLCBhbmQg
bWFrZXMgaXMgZWFzaWVyIHRvIGRpc2Fzc29jaWF0ZQorICAgICAgICAgICAgIGVtYmVkZGVyLXNw
ZWNpZmljIHRoaW5ncyBmcm9tIGVtYmVkZGVyLW5ldXRyYWwgdGhpbmdzLiBUaGUgc21hbGwgLyBm
YXN0ZXIKKyAgICAgICAgICAgICB3aW4gaXMgaW4gdHdvIHBsYWNlczogQjMgSVIgZ2VuZXJhdG9y
IG9ubHkgbmVlZHMgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbiBmb3IKKyAgICAgICAgICAgICB0aGUg
Y2FsbCBvcGNvZGUgKHdoZW4gdGhlIGNhbGxlZCBpbmRleCBpcyBhbiBpbXBvcnQpIHRvIGtub3cg
d2hldGhlciB0aGUKKyAgICAgICAgICAgICBpbXBvcnQgaXMgd2FzbS0+d2FzbSBvciB3YXNtLT5l
bWJlZGRlciAodGhpcyBpc24ndCBrbm93biBhdCBjb21waWxlLXRpbWUKKyAgICAgICAgICAgICBi
ZWNhdXNlIGl0J3MgZGVwZW5kZW50IG9uIHRoZSBpbXBvcnQgb2JqZWN0KSwgdGhpcyBpcyBub3cg
ZG9uZSBieSBzZWVpbmcgaWYKKyAgICAgICAgICAgICB0aGF0IGltcG9ydCBmdW5jdGlvbiBoYXMg
YW4gYXNzb2NpYXRlZCB0YXJnZXQgaW5zdGFuY2UgKG9ubHkgd2FzbS0+d2FzbQorICAgICAgICAg
ICAgIGRvZXMpOyB0aGUgb3RoZXIgcGxhY2UgaXMgd2FzbUJpbmRpbmcgd2hpY2ggdXNlcyBvZmZz
ZXRPZkltcG9ydEZ1bmN0aW9uIHRvCisgICAgICAgICAgICAgZmlndXJlIG91dCB0aGUgd2FzbS0+
d2FzbSB0YXJnZXQgaW5zdGFuY2UsIGFuZCB0aGVuIGdldHMKKyAgICAgICAgICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHRvIGRvIGEg
dGFpbAorICAgICAgICAgICAgIGNhbGwuIFRoZSBkaXNhc3NvY2lhdGlvbiBjb21lcyBiZWNhdXNl
IHRoZSB0YXJnZXQgaW5zdGFuY2UgY2FuIGJlCisgICAgICAgICAgICAgV2FzbTo6SW5zdGFuY2Ug
b25jZSB3ZSBjaGFuZ2Ugd2hhdCB0aGUgQ29udGV4dCBpcywgYW5kCisgICAgICAgICAgICAgV2Fz
bUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gaXMgYWxyZWFkeSBlbWJlZGRlci1pbmRlcGVuZGVudC4g
QXMgYSBuZXh0IHN0ZXAgSQorICAgICAgICAgICAgIGNhbiBtb3ZlIHRoaXMgdGFpbCBhbGxvY2F0
aW9uIGZyb20gSlNXZWJBc3NlbWJseUluc3RhbmNlIHRvIFdhc206Okluc3RhbmNlLAorICAgICAg
ICAgICAgIGFuZCBsZWF2ZSBpbXBvcnRGdW5jdGlvbiBpbiBhcyBhbiBvcGFxdWUgcG9pbnRlciB3
aGljaCBpcyBlbWJlZGRlci1zcGVjaWZpYywKKyAgICAgICAgICAgICBhbmQgaW4gSlMgd2lsbCBy
ZW1haW4gV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pi4KKyAgICAgICAgICAgLSBSZW5hbWUgVk1FbnRy
eUZyYW1lIHRvIEVudHJ5RnJhbWUsIGFuZCBpbiBtYW55IHBsYWNlcyBwYXNzIGEgcG9pbnRlciB0
byBpdAorICAgICAgICAgICAgIGFyb3VuZCBpbnN0ZWFkIG9mIFZNLiBUaGlzIGlzIGEgZmlyc3Qg
c3RlcCBpbiBhbGxvd2luZyBlbnRyeSBmcmFtZXMgd2hpY2gKKyAgICAgICAgICAgICBhcmVuJ3Qg
c3RvcmVkIG9uIFZNLCBidXQgd2hpY2ggYXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGVtYmVkZGVy
LXNwZWNpZmljCisgICAgICAgICAgICAgbG9jYXRpb24uIFRoYXQgY2hhbmdlIHdvbid0IHJlYWxs
eSBhZmZlY3QgSlMgZXhjZXB0IHRocm91Z2ggY29kZSBjaHVybiwgYnV0CisgICAgICAgICAgICAg
d2lsbCBhbGxvdyBXZWJBc3NlbWJseSB0byB1c2Ugc29tZSBtYWNoaW5lcnkgaW4gYSBnZW5lcmlj
IG1hbm5lciB3aXRob3V0CisgICAgICAgICAgICAgaGF2aW5nIGEgVk0uCisKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5k
bGVyKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyOjpzdGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpyZXR1
cm5FdmVudCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp1bndpbmRFdmVudCk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbSk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVPU1JFeGl0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR1Ro
dW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRW50cnlUaHVua0dlbmVyYXRvcik6Cisg
ICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUp
OgorICAgICAgICAqIGZ0bC9GVExMaW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpsaW5rKToK
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6Ondhc21Bd2Fy
ZUxleGljYWxHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxlckZy
YW1lKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxsZXJGcmFtZSk6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
Y2FsbGVyRnJhbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1l
T3JFbnRyeUZyYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjp1bnNhZmVDYWxs
ZXJGcmFtZU9yRW50cnlGcmFtZSBjb25zdCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvRnJhbWVU
cmFjZXJzLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcjo6TmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyKToKKyAgICAgICAgKEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJl
c3RvcmU6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlKToKKyAgICAgICAgKEpTQzo6
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmU6On5OYXRpdmVDYWxsRnJhbWVUcmFjZXJX
aXRoUmVzdG9yZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VW53aW5kRnVuY3Rvcjo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zp
c2l0b3I6OlN0YWNrVmlzaXRvcik6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6Z290b05l
eHRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFt
ZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAgY29uc3QpOgorICAg
ICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTdGFja1Zp
c2l0b3I6OkZyYW1lOjpjYWxsZXJJc0VudHJ5RnJhbWUgY29uc3QpOgorICAgICAgICAqIGludGVy
cHJldGVyL1ZNRW50cnlSZWNvcmQuaDoKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVJlY29yZDo6cHJl
dlRvcEVudHJ5RnJhbWUpOgorICAgICAgICAoSlNDOjpWTUVudHJ5UmVjb3JkOjp1bnNhZmVQcmV2
VG9wRW50cnlGcmFtZSk6CisgICAgICAgIChKU0M6OkVudHJ5RnJhbWU6OnZtRW50cnlSZWNvcmRP
ZmZzZXQpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21D
b250ZXh0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNt
Q29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0
Y2hSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKToKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxl
ZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc0Zyb21G
cmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICog
aml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hl
Y2spOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMp
OgorICAgICAgICAqIGppdC9KSVRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJp
Y1Vud2luZCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJVE9w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAg
ICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAg
IChmdW5jdGlvbkR1bXBDYWxsRnJhbWUpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAg
ICAgKiBsbGludC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OnZtRW50cnlSZWNvcmQp
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAg
ICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6RnJhbWVXYWxrZXIpOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6YWR2YW5jZVRvUGFyZW50RnJhbWUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1By
b2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToKKyAgICAgICAgKiBydW50aW1l
L1Rocm93U2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSk6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAg
ICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpT
Qzo6Vk06OnRvcEVudHJ5RnJhbWVPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5j
cHA6CisgICAgICAgIChKU0M6OmlzU2FuZUZyYW1lKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6
dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmludmFs
aWRhdGVDb2RlQmxvY2tzT25TdGFjayk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJB
c3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
YWRkR3Jvd01lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEN1
cnJlbnRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxs
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OkJCUVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uaDoKKyAgICAgICAgKiB3YXNt
L1dhc21CQlFQbGFuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjppbml0
aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpD
b2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6Q29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjb21waWxlQXN5bmMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OnNldENvbXBpbGF0aW9uRmluaXNoZWQpOgorICAg
ICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxv
Y2s6Om9mZnNldE9mSW1wb3J0U3R1YnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6
OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjppbXBvcnRX
YXNtVG9FbWJlZGRlclN0dWIpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Om9mZnNl
dE9mSW1wb3J0V2FzbVRvRW1iZWRkZXJTdHViKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJs
b2NrOjp3YXNtVG9KU0NhbGxTdHViRm9ySW1wb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29k
ZUJsb2NrOjpjb21waWxhdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJs
b2NrOjpqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6Q29kZUJsb2NrOjp3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UpOgorICAgICAgICAqIHdhc20vV2FzbUNvbnRleHQuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udGV4
dDo6bG9hZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRleHQ6OnN0b3JlKToKKyAg
ICAgICAgKiB3YXNtL1dhc21Db250ZXh0Lmg6CisgICAgICAgICogd2FzbS9XYXNtRW1iZWRkZXIu
aDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaC4K
KyAgICAgICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAqIHdh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5o
OgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmNwcDogQ29waWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oLgorICAgICAgICAoSlND
OjpXYXNtOjpJbnN0YW5jZTo6SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6fkluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmV4dHJhTWVtb3J5
QWxsb2NhdGVkIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldh
c206Okluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5z
dGFuY2U6Om1vZHVsZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpjb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6bWVtb3J5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SW5zdGFuY2U6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Omxv
YWRJMzJHbG9iYWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6bG9hZEk2
NEdsb2JhbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpsb2FkRjMyR2xv
YmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmxvYWRGNjRHbG9iYWwg
Y29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6c2V0R2xvYmFsKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCk6CisgICAg
ICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpjYWNoZWRTdGFja0xpbWl0IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnNldENhY2hlZFN0YWNrTGltaXQpOgorICAgICAgICAq
IHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6TWVtb3J5
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNZW1vcnk6On5NZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Omdyb3cp
OgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1v
cnk6Om9mZnNldE9mTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpvZmZzZXRP
ZlNpemUpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyk6CisgICAgICAgICog
d2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGlubmVk
UmVnaXN0ZXJJbmZvOjp0b1NhdmUgY29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeU1v
ZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmguCisgICAgICAgIChKU0M6Oldhc206Om1ha2VTdHJpbmcpOgorICAgICAg
ICAqIHdhc20vV2FzbU1lbW9yeU1vZGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oLgorICAgICAgICAqIHdhc20vV2FzbU1v
ZHVsZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Om1ha2VWYWxpZGF0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlU3luYyk6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmNv
bXBpbGVTeW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjb21waWxlQXN5bmMpOgor
ICAgICAgICAqIHdhc20vV2FzbU1vZHVsZS5oOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhl
bHBlcik6CisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Ok9NR1BsYW46Ok9NR1BsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpydW5G
b3JJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5oOgorICAgICAgICAqIHdhc20v
V2FzbVBhZ2VDb3VudC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQg
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cnVuQ29tcGxldGlvblRh
c2tzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6YWRkQ29tcGxldGlvblRhc2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjp0cnlSZW1vdmVDb250ZXh0QW5kQ2FuY2VsSWZMYXN0KToK
KyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmRv
bnRGaW5hbGl6ZSk6CisgICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmNwcDoKKyAgICAgICAg
KiB3YXNtL1dhc21TaWduYXR1cmUuaDoKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VGFibGU6On5UYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpUYWJsZSk6
CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6c2V0RnVu
Y3Rpb24pOgorICAgICAgICAqIHdhc20vV2FzbVRhYmxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oLgorICAgICAgICAoSlND
OjpXYXNtOjpUYWJsZTo6bWF4aW11bSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxl
OjpzaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om9mZnNldE9mU2l6ZSk6
CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucyk6CisgICAgICAg
IChKU0M6Oldhc206OlRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcyk6CisgICAgICAgIChKU0M6Oldh
c206OlRhYmxlOjppc1ZhbGlkU2l6ZSk6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VGh1bmtzOjpzZXRUaHJvd1dhc21FeGNlcHRpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OnRocm93V2FzbUV4Y2VwdGlvbik6CisgICAgICAgICog
d2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6c3RvcEFsbFBsYW5zRm9yQ29udGV4dCk6CisgICAg
ICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6Cisg
ICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5oLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2Vt
Ymx5LmNwcC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaC4KKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6SlNXZWJBc3Nl
bWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKToK
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Omluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp0YWJsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mVGFpbCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6aW1w
b3J0RnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZlRhcmdldEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZldhc21FbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6aW50ZXJuYWxNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Ondhc21Db2RlQmxvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbVRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6Y2FjaGVkU3RhY2tMaW1pdCBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0Q2FjaGVkU3RhY2tMaW1pdCk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6d2FzbU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6d2FzbU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om1vZHVsZSBjb25zdCk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6YWRvcHQpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6Z3Jvdyk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlNZW1vcnk6Omdyb3dTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAqIHdhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5oOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9y
bWF0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZXhwb3J0
U3ltYm9sVGFibGUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpz
aWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UgY29uc3QpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjYWxsZWUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjpjb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
TW9kdWxlOjptb2R1bGUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5o
OgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5VGFibGU6OkpTV2ViQXNzZW1ibHlUYWJsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJs
ZTo6Z3Jvdyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
VGFibGU6OmlzVmFsaWRTaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpt
YXhpbXVtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjp0YWJsZSk6CisgICAgICAg
ICogd2FzbS9qcy9XYXNtVG9KUy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CaW5kaW5nLmNwcC4KKyAgICAgICAgKEpTQzo6V2FzbTo6bWF0ZXJpYWxpemVJ
bXBvcnRKU0NlbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KUyk6CisgICAgICAgIChK
U0M6Oldhc206Ondhc21Ub0pTRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pT
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgu
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJB
c3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6d2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNHcm93KToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKToKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUp
OgorICAgICAgICAoSlNDOjpjb21waWxlQW5kSW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjp3
ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRh
YmxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5
VGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKwog
MjAxNy0xMC0xNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBbSlNDXSBQZXJmb3JtIG1vZHVsZSBzcGVjaWZpZXIgdmFsaWRhdGlvbiBhdCBwYXJzaW5n
IHRpbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTdmNTBiOS4uNWU4ZjlmNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODIsNyArMTA4Miw3IEBACiAJCTc5
QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRp
b25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5Q0ZDNkYwMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBD
NzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5RDVDRDVCMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1By
b2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUQ1Q0Q1OTFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5REFFMjdBMUUwM0M4MjIw
MEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNl
cHRpb25UeXBlLmggKi87IH07CisJCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhj
ZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlERkNCREIxRDg4
QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBI
YXNPd25Qcm9wZXJ0eUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJv
bm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRkQ0ODQxRUJDMDQ1
QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNE
RkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDYwLDcgKzE0NjAsNiBAQAogCQlB
RDJGQ0MyMDFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmx1
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkND
MTQxREI1OUM1OTAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5sdXQuaCAq
LzsgfTsKIAkJQUQyRkNDMjExREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5VGFibGVQcm90
b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDJGQ0MxNTFEQjU5QzU5MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5s
dXQuaCAqLzsgfTsKIAkJQUQyRkNDMkQxREI4MzhGRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
RDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLzsgfTsK
LQkJQUQyRkNDMzExREI4M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5RjcwMEIz
RTczNiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IH07CiAJCUFENDEyQjM0MUU3QjJFOUUwMDhBRjE1
NyAvKiBXYXNtQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUQ0MTJCMzIxRTdCMkU4QTAwOEFGMTU3IC8qIFdhc21Db250ZXh0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ0MjUyNTExRTVE
MEUxNDAwOUQyQTk3IC8qIEZ1bGxDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQyNTI1MDFFNUQwREVCMDA5RDJBOTcgLyogRnVsbENv
ZGVPcmlnaW4uaCAqLzsgfTsKIAkJQUQ0OTM3QzQxRERCRTYxNDAwNzdDODA3IC8qIEFic3RyYWN0
TW9kdWxlUmVjb3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBRDQ5MzdDMjFEREJFNjBBMDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ2OCw2
ICsxNDY3LDEzIEBACiAJCUFENDkzN0Q0MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
RDQ5MzdDQTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovOyB9Owog
CQlBRDRCMURGQTFERjI0NEUyMDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENEIxREY4MURGMjQ0RDcwMDcxQUUz
MiAvKiBXYXNtQmluZGluZy5oICovOyB9OwogCQlBRDVCNDE2RjFFQkFGQjc3MDA4RUZBNDMgLyog
V2FzbU5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFENUI0MTZFMUVCQUZCNjUwMDhFRkE0MyAvKiBXYXNtTmFtZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFENUMzNkREMUY2ODhCNjUwMDBCQ0FB
RiAvKiBXYXNtRW1iZWRkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFENUMzNkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFMjFG
Njk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUlu
c3RhbmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQUQ1QzM2RTYxRjY5RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFG
IC8qIFdhc21UYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUFENUMzNkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4REQ2Q0YxRjY3MDg5RjAw
MDRFQjUyIC8qIEpTVG9XYXNtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUYz
MUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8q
IFdhc21Ub0pTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBREQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBRDVDMzZFRjFGN0EyNjNBMDAwQkNB
QUYgLyogV2FzbU1lbW9yeU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENzQz
OEMwMUUwNDU3QTQwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyog
V2FzbVNpZ25hdHVyZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDg2QTkzRDFB
QTREODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAv
KiBXYXNtSW5kZXhPck5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDE2NCw5
ICs0MTcwLDI1IEBACiAJCUFEMkZDQzE1MURCNTlDNTkwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRh
YmxlUHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJB
c3NlbWJseVRhYmxlUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBRDJGQ0MyNjFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90b3R5cGUu
Y3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBRDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90
b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlQcm90
b3R5cGUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViQXNzZW1ibHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3
MzYgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzMyMURD
NDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdhc21Gb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRDNGMUU0NzFGNEJBNzg2MDA2Njk5MTIgLyogV0FCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU0QTFGNERFNjhDMDA2
Njk5MTIgLyogV0FJbnN0YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQUluc3RhbmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTRCMUY0REU2OEMwMDY2OTkxMiAvKiBXQVRh
YmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUQzRjFFNEMxRjRERTY4QzAwNjY5OTEyIC8qIFdBTWVtb3J5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdBTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUyMUY0
RjRBRTUwMDY2OTkxMiAvKiBXQU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1lbW9y
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTUzMUY0RjRBRTUwMDY2
OTkxMiAvKiBXQU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQU1vZHVsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEM0YxRTU0MUY0RjRBRTUwMDY2OTkxMiAvKiBX
QUluc3RhbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBSW5zdGFuY2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQUQzRjFFNjQxRjUwRTU3RjAwNjY5OTEyIC8qIFdBRXhjZXB0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdBRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUFEM0YxRTY1MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXQUV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFE
M0YxRTY4MUY1NDdDQjYwMDY2OTkxMiAvKiBXQU1lbW9yeURlc2NyaXB0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0FNZW1vcnlEZXNjcmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQUQzRjFFNjkxRjU0N0NCNjAwNjY5OTEyIC8qIFdBTWVtb3J5RGVzY3JpcHRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXQU1lbW9yeURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQUQzRjFFNkExRjU0N0NCNjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdBSW1wb3J0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFEM0YxRTZCMUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXQVRhYmxlRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRDNGMUU2QzFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FJbXBvcnRPYmplY3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0FJbXBvcnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBRDNGMUU2RDFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FUYWJsZURlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBRDNGMUU3MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXQUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFEM0YxRTcxMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdBRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBRDQxMkIzMTFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBRDQxMkIzMjFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNvbnRleHQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0MTJCMzUxRTdCNTdDMDAwOEFGMTU3IC8qIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00MTgxLDE1ICs0MjAzLDI4IEBACiAJCUFENEIxREY3MURGMjQ0RDcw
MDcxQUUzMiAvKiBXYXNtQmluZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtQmluZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
NEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBRDVCNDE2RTFFQkFGQjY1MDA4RUZBNDMgLyogV2FzbU5hbWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUQ1QzM2REMxRjY4OEI1RjAwMEJDQUFGIC8qIFdhc21FbWJlZGRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXYXNtRW1iZWRkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1
QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXYXNtSW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVD
MzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21JbnN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDVDMzZFMzFGNjlF
QzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UYWJs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkU0MUY2OUVDOEIwMDBC
Q0FBRiAvKiBXYXNtVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRhYmxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVt
b3J5TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1v
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1lbW9yeU1vZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25h
dHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU2lnbmF0
dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ3NDM4QkYxRTA0NTc5MjAw
RkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2FzbVNpZ25hdHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDg2QTkz
RDFBQTREODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrR0NNYXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFEOERENkNGMUY2NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBKU1RvV2FzbS5oOyBwYXRoID0ganMvSlNUb1dhc20uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQUQ4REQ2RDAxRjY3MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEpTVG9XYXNtLmNwcDsgcGF0aCA9IGpzL0pTVG9XYXNtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
SW5kZXhPck5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4RkYzOTYxRUI1
QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtSW5kZXhPck5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBRDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFEQjZGNjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNv
dW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QYWdlQ291
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREJDNTREMjFERjhFQTAwMDA1
QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5jcHA7IHBhdGggPSBqcy9XZWJB
c3NlbWJseVRvSlNDYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREJD
NTREMzFERjhFQTAwMDA1QkY3MzggLyogV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5VG9KU0NhbGxlZS5oOyBwYXRoID0g
anMvV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUFERDA5QUVFMUY1RjYyM0YwMDEzMTNDMiAvKiBXYXNtVG9KUy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
YXNtVG9KUy5oOyBwYXRoID0ganMvV2FzbVRvSlMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQUREMDlBRUYxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdhc21Ub0pTLmNwcDsgcGF0aCA9IGpzL1dhc21Ub0pTLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpTV2ViQXNz
ZW1ibHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseS5jcHA7IHBhdGggPSBq
cy9KU1dlYkFzc2VtYmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUREMDlB
RjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNX
ZWJBc3NlbWJseS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9u
UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lU2VjdGlv
blBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBREQ4RkE0NDFFQjMwNzcx
MDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21OYW1lU2VjdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxOTksNiArNDIzNCw4IEBACiAJCUFERTgw
Mjk2MUUwOEYxQzkwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJv
clByb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFERTgwMjk3MUUwOEYxQzkwMDU4REU3
OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5oOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQURFODAyOUQxRTA4RjIyNjAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yQ29u
c3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNz
ZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUxpbmtF
cnJvckNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQURGQzMw
RjcxRjQ3QTdCODAwNjQ1MUQzIC8qIFdlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFz
c2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFERkMzMEY5MUY0N0E4QzAw
MDY0NTFEMyAvKiBXQU1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQU1vZHVsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5r
ZWRJbnN0cnVjdGlvblN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUI1OUY4OTM4MTg5MUFEQjUwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rp
b25TdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyMUJGMjEzNjkw
MEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gVG9vbEV4ZWN1dGFibGUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01NjU1LDYgKzU2OTIsMjYgQEAKIAkJCQk4NkYzRUVCNjE2ODU1QTVCMDA3
N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCAqLywKIAkJCQlFMTI0QThGNjBFNTU1Nzc1MDAz
MDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovLAogCQkJCUUxMjRBOEY1MEU1NTU3NzUwMDMw
OTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovLAorCQkJCUFEM0YxRTQ3MUY0QkE3ODYwMDY2OTkx
MiAvKiBXQUJhc2UuaCAqLywKKwkJCQlBRDNGMUU2NTFGNTBFNTdGMDA2Njk5MTIgLyogV0FFeGNl
cHRpb24uY3BwICovLAorCQkJCUFEM0YxRTY0MUY1MEU1N0YwMDY2OTkxMiAvKiBXQUV4Y2VwdGlv
bi5oICovLAorCQkJCUFEM0YxRTcxMUY1NEMzQUEwMDY2OTkxMiAvKiBXQUZ1bmN0aW9uLmNwcCAq
LywKKwkJCQlBRDNGMUU3MDFGNTRDM0FBMDA2Njk5MTIgLyogV0FGdW5jdGlvbi5oICovLAorCQkJ
CUFEM0YxRTZDMUY1NDdDQjgwMDY2OTkxMiAvKiBXQUltcG9ydE9iamVjdC5jcHAgKi8sCisJCQkJ
QUQzRjFFNkExRjU0N0NCNjAwNjY5OTEyIC8qIFdBSW1wb3J0T2JqZWN0LmggKi8sCisJCQkJQUQz
RjFFNTQxRjRGNEFFNTAwNjY5OTEyIC8qIFdBSW5zdGFuY2UuY3BwICovLAorCQkJCUFEM0YxRTRB
MUY0REU2OEMwMDY2OTkxMiAvKiBXQUluc3RhbmNlLmggKi8sCisJCQkJQUQzRjFFNTIxRjRGNEFF
NTAwNjY5OTEyIC8qIFdBTWVtb3J5LmNwcCAqLywKKwkJCQlBRDNGMUU0QzFGNERFNjhDMDA2Njk5
MTIgLyogV0FNZW1vcnkuaCAqLywKKwkJCQlBRDNGMUU2ODFGNTQ3Q0I2MDA2Njk5MTIgLyogV0FN
ZW1vcnlEZXNjcmlwdG9yLmNwcCAqLywKKwkJCQlBRDNGMUU2OTFGNTQ3Q0I2MDA2Njk5MTIgLyog
V0FNZW1vcnlEZXNjcmlwdG9yLmggKi8sCisJCQkJQUQzRjFFNTMxRjRGNEFFNTAwNjY5OTEyIC8q
IFdBTW9kdWxlLmNwcCAqLywKKwkJCQlBREZDMzBGOTFGNDdBOEMwMDA2NDUxRDMgLyogV0FNb2R1
bGUuaCAqLywKKwkJCQlBRDNGMUU1NTFGNEY0QUU1MDA2Njk5MTIgLyogV0FUYWJsZS5jcHAgKi8s
CisJCQkJQUQzRjFFNEIxRjRERTY4QzAwNjY5OTEyIC8qIFdBVGFibGUuaCAqLywKKwkJCQlBRDNG
MUU2RDFGNTQ3Q0I4MDA2Njk5MTIgLyogV0FUYWJsZURlc2NyaXB0b3IuY3BwICovLAorCQkJCUFE
M0YxRTZCMUY1NDdDQjgwMDY2OTkxMiAvKiBXQVRhYmxlRGVzY3JpcHRvci5oICovLAorCQkJCUFE
RkMzMEY3MUY0N0E3QjgwMDY0NTFEMyAvKiBXZWJBc3NlbWJseS5oICovLAogCQkJCTVERTNEMEY0
MEREOERERkIwMDQ2ODcxNCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCAqLywKIAkJCSk7CiAJCQlw
YXRoID0gQVBJOwpAQCAtNjAxNCw4ICs2MDcxLDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAotCQkJ
CUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLywKLQkJCQlB
RDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzRjQw
RThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNG
NDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJNTND
QTczMDcxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmNwcCAqLywKQEAgLTYwMzEsNiAr
NjA4Niw3IEBACiAJCQkJNTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2su
aCAqLywKIAkJCQlBRDQxMkIzMTFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICov
LAogCQkJCUFENDEyQjMyMUU3QjJFOEEwMDhBRjE1NyAvKiBXYXNtQ29udGV4dC5oICovLAorCQkJ
CUFENUMzNkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtRW1iZWRkZXIuaCAqLywKIAkJCQk3OURB
RTI3OTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLywKIAkJCQk1Mzgx
QjkzNjFFNjBFOTY2MDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgKi8sCiAJ
CQkJNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAq
LywKQEAgLTYwMzksNiArNjA5NSw4IEBACiAJCQkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8q
IFdhc21GdW5jdGlvblBhcnNlci5oICovLAogCQkJCUFEOEZGMzk2MUVCNUJEODUwMDg3RkY4MiAv
KiBXYXNtSW5kZXhPck5hbWUuY3BwICovLAogCQkJCUFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAv
KiBXYXNtSW5kZXhPck5hbWUuaCAqLywKKwkJCQlBRDVDMzZERTFGNjk5RUI2MDAwQkNBQUYgLyog
V2FzbUluc3RhbmNlLmNwcCAqLywKKwkJCQlBRDVDMzZERjFGNjk5RUI2MDAwQkNBQUYgLyogV2Fz
bUluc3RhbmNlLmggKi8sCiAJCQkJQUQwMDY1OUQxRUNBQzdGRTAwMENBOTI2IC8qIFdhc21MaW1p
dHMuaCAqLywKIAkJCQk1M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJl
YWRzLmNwcCAqLywKIAkJCQk1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVU
aHJlYWRzLmggKi8sCkBAIC02MDQ2LDYgKzYxMDQsOCBAQAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUw
MDZENTgzQiAvKiBXYXNtTWVtb3J5LmggKi8sCiAJCQkJNzlCNzU5NzExREZBNEM2MDAwNTIxNzRD
IC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgKi8sCiAJCQkJNzlCNzU5NzIxREZBNEM2MDAw
NTIxNzRDIC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5oICovLAorCQkJCUFENUMzNkYwMUY3QTI2
QkYwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5jcHAgKi8sCisJCQkJQUQ1QzM2RUUxRjdBMjYy
OTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggKi8sCiAJCQkJNzkwMDgxMzYxRTk1QThFQzAw
NTJEN0NEIC8qIFdhc21Nb2R1bGUuY3BwICovLAogCQkJCTc5MDA4MTM3MUU5NUE4RUMwMDUyRDdD
RCAvKiBXYXNtTW9kdWxlLmggKi8sCiAJCQkJNTNFNzc3RTExRTkyRTI2NTAwN0NCRUM0IC8qIFdh
c21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgKi8sCkBAIC02MDY3LDYgKzYxMjcsOCBAQAogCQkJCTUz
RjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhC
RTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYx
RTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLywKKwkJCQlBRDVDMzZFMzFGNjlF
QzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmNwcCAqLywKKwkJCQlBRDVDMzZFNDFGNjlFQzhCMDAw
QkNBQUYgLyogV2FzbVRhYmxlLmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8q
IFdhc21UaHVua3MuY3BwICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNt
VGh1bmtzLmggKi8sCiAJCQkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBD
b3VudC5oICovLApAQCAtNzY3OCw2ICs3NzQwLDEwIEBACiAJCUFEMkZDQjhBMURCNTg0MDAwMEIz
RTczNiAvKiBqcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJQUQ4REQ2RDAxRjY3MDhBMzAwMDRFQjUyIC8qIEpTVG9XYXNtLmNwcCAqLywKKwkJCQlBRDhE
RDZDRjFGNjcwODlGMDAwNEVCNTIgLyogSlNUb1dhc20uaCAqLywKKwkJCQlBREQwOUFGMjFGNjI0
ODI5MDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8sCisJCQkJQUREMDlBRjMxRjYyNDgy
RTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1MzgzQUEyRjFFNjVFOEExMDBB
NTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJCQkJQUQ5RTg1MkUxRThB
MEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCQk3OUVGRDQ4
MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcCAq
LywKQEAgLTc2OTcsNiArNzc2Myw4IEBACiAJCQkJQUQyRkNCQUQxREI1OERBNDAwQjNFNzM2IC8q
IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBRTFEQjU4REE0MDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCAqLywKIAkJCQlBRDJGQ0JBRjFEQjU4REE0
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmggKi8sCisJCQkJQUREMDlBRUYxRjVGNjIz
RjAwMTMxM0MyIC8qIFdhc21Ub0pTLmNwcCAqLywKKwkJCQlBREQwOUFFRTFGNUY2MjNGMDAxMzEz
QzIgLyogV2FzbVRvSlMuaCAqLywKIAkJCQlBRDJGQ0JCMDFEQjU4REE0MDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQUQyRkNCQjExREI1
OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCAqLywK
IAkJCQlBRDJGQ0JCMjFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQ
cm90b3R5cGUuY3BwICovLApAQCAtNzk3Miw2ICs4MDQwLDcgQEAKIAkJCQkwRkVDODVCQjFCRTE0
NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MzZFNTQ1MzFDNDY4RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBp
biBIZWFkZXJzICovLAorCQkJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNtVG9KUy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJN
YWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzMTlEQTA0MUMxQkU0MEQwMDFEMjYwQiAvKiBC
M0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODUxRTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKQEAg
LTgwNjIsNiArODEzMSw3IEBACiAJCQkJRTMyOERBRUIxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVj
b2RlUmV3cml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4
QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYx
RTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2RUIxRjc1
QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAy
M0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oIGluIEhl
YWRlcnMgKi8sCkBAIC04MjY2LDYgKzgzMzYsNyBAQAogCQkJCTBGQTU4MUJDMTUwRTk1MzAwMEI5
QTJEOSAvKiBERkdOb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3
NTAwMEMyMzk2IC8qIERGR051bGxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCOUNFNzE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2REQxRjY4OEI2NTAwMEJDQUFGIC8qIFdhc21F
bWJlZGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTkxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5
REQwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLywK
QEAgLTgzNzYsOCArODQ0NywxMCBAQAogCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBF
eGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhB
QjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4
ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ1QzM2
RUExRjc1QUQ2QTAwMEJDQUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
M0M1NzFGMzNBNDUzMDBGNTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMy
QXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBX
YXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3
NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkw
MEFCQjIxNyAvKiBGUFJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzRFREJGNzFEQjVGRkM5
MDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTg3ODAsNyArODg1
Myw2IEBACiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJl
ZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVCOEU2Q0YwMDBFQjVEMiAv
KiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAz
OUQwNjkgLyogSlNXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBRDJGQ0MzMTFEQjgzRDQ5
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYx
RThBMEM3QzAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTg5NzMsNiAr
OTA0NSw3IEBACiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8q
IFJlZ0V4cElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdB
NTMxNSAvKiBSZWdFeHBLZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkU2MUY2OUVDOTEw
MDBCQ0FBRiAvKiBXYXNtVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVCMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBSZWdFeHBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MzOUZE
MUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0QyMDJDNDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkxNDQsNiArOTIxNyw3IEBACiAJCQkJMEZFMDUwMkQxQUE5MDk1NjAwRDMz
QjMzIC8qIFZhck9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAw
MTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkIzOTMx
RTE3N0E3MjAwQTlCRTUwIC8qIFZpc2l0aW5nVGltZW91dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QUQ1QzM2RUYxRjdBMjYzQTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjk1MkFBMTFERjc4NjA5MDBFMDZGQkQgLyogVmlzaXRSYWNlS2V5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBmYTgzZjNjLi4yZWQ4
M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MzgsNyArOTM4LDYgQEAgdG9v
bHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3Bw
CiB0b29scy9WTUluc3BlY3Rvci5jcHAKIAotd2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAKIHdhc20vV2FzbUJCUVBsYW4uY3BwCiB3YXNtL1dhc21CaW5k
aW5nLmNwcApAQCAtOTQ2LDEyICs5NDUsMTYgQEAgd2FzbS9XYXNtQ2FsbGVlLmNwcAogd2FzbS9X
YXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCiB3YXNtL1dhc21Db2RlQmxvY2suY3BwCiB3YXNtL1dh
c21Db250ZXh0LmNwcAord2FzbS9XYXNtRW1iZWRkZXIuaAogd2FzbS9XYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmNwcAogd2FzbS9XYXNtRm9ybWF0LmNwcAogd2FzbS9XYXNtSW5kZXhPck5hbWUuY3Bw
Cit3YXNtL1dhc21JbnN0YW5jZS5jcHAKK3dhc20vV2FzbUluc3RhbmNlLmgKIHdhc20vV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcAogd2FzbS9XYXNtTWVtb3J5LmNwcAogd2FzbS9XYXNtTWVtb3J5SW5m
b3JtYXRpb24uY3BwCit3YXNtL1dhc21NZW1vcnlNb2RlLmNwcAogd2FzbS9XYXNtTW9kdWxlLmNw
cAogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIu
Y3BwCkBAIC05NjEsMTAgKzk2NCwxNSBAQCB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCiB3YXNt
L1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFuLmNwcAogd2FzbS9XYXNtU2lnbmF0dXJl
LmNwcAord2FzbS9XYXNtVGFibGUuY3BwCit3YXNtL1dhc21UYWJsZS5oCiB3YXNtL1dhc21UaHVu
a3MuY3BwCiB3YXNtL1dhc21WYWxpZGF0ZS5jcHAKIHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCit3
YXNtL2pzL0pTVG9XYXNtLmNwcAord2FzbS9qcy9KU1RvV2FzbS5oCit3YXNtL2pzL0pTV2ViQXNz
ZW1ibHkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNv
bXBpbGVFcnJvci5jcHAKQEAgLTk3NCw2ICs5ODIsOCBAQCB3YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAK
K3dhc20vanMvV2FzbVRvSlMuY3BwCit3YXNtL2pzL1dhc21Ub0pTLmgKIHdhc20vanMvV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JQcm90b3R5cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAppbmRleCAxNTVmNzVmLi5kYTQ4Yzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTE3OSw3ICsxNzksNyBA
QCBDYWxsU2l0ZUluZGV4IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6b3JpZ2luYWxDYWxsU2l0ZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gc3R1Ygogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVt
aXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7Ci0g
ICAgaml0LT5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1f
dm0pOworICAgIGppdC0+Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIobV92bS50b3BFbnRyeUZyYW1lKTsKICAgICBpZiAobmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJ
ZkV4Y2VwdGlvbigpKSB7CiAgICAgICAgIC8vIFRvIHRoZSBKSVQgdGhhdCBwcm9kdWNlcyB0aGUg
b3JpZ2luYWwgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAgICAgIC8vIGNhbGwgc2l0ZSwgdGhleSB3
aWxsIGV4cGVjdCB0aGUgT1NSIGV4aXQgdG8gYmUgYXJyaXZlZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKaW5kZXggMzQ4YzY4Yy4uNzcxNmU4OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTQsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQogICoKQEAgLTY1Miw4ICs2NTIsOCBAQCB2b2lkIERlYnVn
Z2VyOjpzdGVwT3V0T2ZGdW5jdGlvbigpCiAgICAgaWYgKCFtX2lzUGF1c2VkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1F
bnRyeUZyYW1lOwotICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZSA/
IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKSA6IG51bGxw
dHI7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsK
KyAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRD
YWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5RnJhbWUpIDogbnVsbHB0cjsKICAgICBtX3Bh
dXNlT25TdGVwT3V0ID0gdHJ1ZTsKICAgICBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRW5h
YmxlZCk7CiAgICAgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygpOwpAQCAtODMx
LDggKzgzMSw4IEBAIHZvaWQgRGVidWdnZXI6OnJldHVybkV2ZW50KENhbGxGcmFtZSogY2FsbEZy
YW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOwot
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZy
YW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IG1f
dm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50
Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKIAogICAgIC8vIFJldHVybmlu
ZyBmcm9tIGEgY2FsbCwgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBleHByZXNzaW9uIG9uIHRoZSBz
dGF0ZW1lbnQgd2UgYXJlIHJldHVybmluZyB0by4KICAgICBtX3Bhc3RGaXJzdEV4cHJlc3Npb25J
blN0YXRlbWVudCA9IHRydWU7CkBAIC04NTYsOCArODU2LDggQEAgdm9pZCBEZWJ1Z2dlcjo6dW53
aW5kRXZlbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJh
bWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1l
ID0gbV92bS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IG1f
Y3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRy
eUZyYW1lKiB0b3BFbnRyeUZyYW1lID0gbV92bS50b3BFbnRyeUZyYW1lOworICAgIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcEVudHJ5
RnJhbWUpOwogCiAgICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciBhbiBleGNlcHRpb24gbG9jYXRp
b24gbGlrZSBhIHN0ZXAtb3V0LgogICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVz
ZU9uQ2FsbEZyYW1lKQpAQCAtODg2LDggKzg4Niw4IEBAIHZvaWQgRGVidWdnZXI6OmRpZEV4ZWN1
dGVQcm9ncmFtKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlmICghbV9jdXJyZW50Q2FsbEZy
YW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFt
ZSA9IG1fdm0udG9wVk1FbnRyeUZyYW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBt
X2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgRW50
cnlGcmFtZSogdG9wRW50cnlGcmFtZSA9IG1fdm0udG9wRW50cnlGcmFtZTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRy
eUZyYW1lKTsKIAogICAgIC8vIFJldHVybmluZyBmcm9tIGEgcHJvZ3JhbSwgY291bGQgYmUgZXZh
bCgpLCB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lIGV4cHJlc3Npb24gb24gdGhlIHN0YXRlbWVudCB3
ZSBhcmUgcmV0dXJuaW5nIHRvLgogICAgIG1fcGFzdEZpcnN0RXhwcmVzc2lvbkluU3RhdGVtZW50
ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
aW5kZXggOTI2OTdiMy4uMzA2NTUxMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpj
b21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogICAgIGlmICghbV9leGNlcHRpb25DaGVja3NXaXRo
Q2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dp
dGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1l
KTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lIGlz
IHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1l
KikuCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMoKQogICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkgewogICAg
ICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZy
YW1lKTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28g
YXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggNTgzYmY5OC4uMDIxZWFh
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMTcsNyArMzE3LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICBSZWdpc3RlclNl
dCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKIAogICAgIHVuc2lnbmVkIHJlZ2lzdGVy
Q291bnQgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsKLSAgICBWTUVudHJ5UmVjb3Jk
KiByZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLT50b3BWTUVudHJ5RnJhbWUpOworICAgIFZNRW50
cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0tPnRvcEVudHJ5RnJhbWUpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCBjdXJyZW50RW50cnkgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0
KGkpOwogICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWco
KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCBkNDMwMzk4
Li5kZTZhM2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihDb250ZXh0JiBjb250ZXh0CiAgICAgUmVnaXN0ZXJT
ZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsK
ICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKIAot
ICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BWTUVu
dHJ5RnJhbWUpOworICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29y
ZCh2bS50b3BFbnRyeUZyYW1lKTsKICAgICB1aW50cHRyX3QqIGNhbGxlZVNhdmVCdWZmZXIgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KGVudHJ5UmVjb3JkLT5jYWxsZWVTYXZlUmVnaXN0
ZXJzQnVmZmVyKTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcy4KQEAgLTE0OCw3
ICsxNDgsNyBAQCBzdGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCiAgICAgVk0mIHZtID0gKmNvbnRleHQuYXJn
PFZNKj4oKTsKICAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKIAotICAgIFZNRW50
cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BWTUVudHJ5RnJhbWUp
OworICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BF
bnRyeUZyYW1lKTsKICAgICB2b2lkKiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNvcmQtPmNh
bGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxs
Q2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwpAQCAt
MTA0NCw3ICsxMDQ0LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVPU1JF
eGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEdlbmVyaWNV
bndpbmQpIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2Nh
dGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCiAgICAgICAg
ICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2lu
dGVyLgotICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigqdm0pOworICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAg
ICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgfQogICAgICAgICBqaXQuYWRkUHRy
KApAQCAtMTM5Niw3ICsxMzk2LDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhl
bHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGppdC5l
bWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgLy8gRG8g
YWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRo
ZSBzdGFjay4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVu
a3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCmluZGV4IGI5
ZTRhY2YuLjc0NWIyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAK
QEAgLTE0Myw3ICsxNDMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dl
bmVyYXRvcihWTSogdm0pCiAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdVbnJlYXNvbmFibGVP
U1JFbnRyeUp1bXBEZXN0aW5hdGlvbik7CiAKICAgICBvay5saW5rKCZqaXQpOwotICAgIGppdC5y
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsK
KyAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVn
aXN0ZXJzKCk7CiAKICAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAppbmRleCBmZjJjZTU2Li5mZjI0Njc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2
b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlc3VsdCYgc2FmZXBvaW50UmVz
dWx0KQogCiAgICAgLy8gRW1pdCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuCiAgICAgKnN0YXRlLmV4
Y2VwdGlvbkhhbmRsZXIgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggN2MwMTgxZC4uMmEx
ZWI3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Myw3ICsx
NDMsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKIAogICAgICAgICAgICAgYXV0byBu
b0V4Y2VwdGlvbiA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVh
bCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDAp
KTsKLSAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKTsKKyAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBqaXQuY2FsbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDNiYTQ1
YWYuLjM3NDlkZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKQEAgLTI2NCw3ICsyNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICAgICAgICAgICAgICAgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BF
bnRyeUZyYW1lKTsKIAogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHAKaW5kZXggOGUwODFkNy4uMWM3ZTY4NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4
Niw3ICsxODYsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAvLyBUaGUgZmlyc3Qg
dGhpbmcgd2UgbmVlZCB0byBkbyBpcyByZXN0YWJsaXNoIG91ciBmcmFtZSBpbiB0aGUgY2FzZSBv
ZiBhbiBleGNlcHRpb24uCiAgICAgaWYgKGV4aXQuaXNHZW5lcmljVW53aW5kSGFuZGxlcigpKSB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7IC8vIFRoZSBm
aXJzdCB0aW1lIHdlIGhpdCB0aGlzIGV4aXQsIGxpa2UgYXQgYWxsIG90aGVyIHRpbWVzLCB0aGlz
IGZpZWxkIHNob3VsZCBiZSBub24tbnVsbC4KLSAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOworICAgICAgICBqaXQucmVz
dG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50
cnlGcmFtZSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JD
YXRjaCgpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2lu
dGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CkBAIC00MTIsOCArNDEyLDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2
ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAg
PSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlv
bkhhbmRsZXIoKSkgewotICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcFZNRW50cnlGcmFtZSwg
R1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwg
R1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cigmdm0tPnRvcEVudHJ5RnJhbWUs
IEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBH
UFJJbmZvOjpyZWdUMSk7CiAgICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgp
OyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggOWZhMjlkMC4uYmU2
MWE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIw
MTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5saW5lQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiVk1FbnRy
eVNjb3BlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5n
UHJpbnRTdHJlYW0uaD4KQEAgLTIxNyw3ICsyMTgsNyBAQCBKU0dsb2JhbE9iamVjdCogQ2FsbEZy
YW1lOjp3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgaWYgKCFjYWxsZWUoKS5pc1dhc20oKSkKICAgICAgICAgcmV0dXJuIGxl
eGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gV2FzbTo6bG9hZENvbnRleHQodm0pLT5n
bG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gdm0ud2FzbUNvbnRleHQubG9hZCgpLT5nbG9iYWxP
YmplY3QoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICByZXR1cm4gbGV4aWNh
bEdsb2JhbE9iamVjdCgpOwpAQCAtMjM3LDI0ICsyMzgsMjQgQEAgYm9vbCBDYWxsRnJhbWU6Omlz
QW55V2FzbUNhbGxlZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1DYWxsRnJhbWUqIENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50cnlGcmFtZSkKK0NhbGxG
cmFtZSogQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZShFbnRyeUZyYW1lKiYgY3VyckVudHJ5RnJhbWUp
CiB7Ci0gICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJyVk1FbnRyeUZy
YW1lKSB7Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIGN1cnJWTUVudHJ5UmVjb3JkID0gdm1FbnRy
eVJlY29yZChjdXJyVk1FbnRyeUZyYW1lKTsKLSAgICAgICAgY3VyclZNRW50cnlGcmFtZSA9IGN1
cnJWTUVudHJ5UmVjb3JkLT5wcmV2VG9wVk1FbnRyeUZyYW1lKCk7CisgICAgaWYgKGNhbGxlckZy
YW1lT3JFbnRyeUZyYW1lKCkgPT0gY3VyckVudHJ5RnJhbWUpIHsKKyAgICAgICAgVk1FbnRyeVJl
Y29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJFbnRyeUZyYW1lKTsK
KyAgICAgICAgY3VyckVudHJ5RnJhbWUgPSBjdXJyVk1FbnRyeVJlY29yZC0+cHJldlRvcEVudHJ5
RnJhbWUoKTsKICAgICAgICAgcmV0dXJuIGN1cnJWTUVudHJ5UmVjb3JkLT5wcmV2VG9wQ2FsbEZy
YW1lKCk7CiAgICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJG
cmFtZU9yVk1FbnRyeUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUq
PihjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsKIH0KIAotU1VQUFJFU1NfQVNBTiBDYWxsRnJh
bWUqIENhbGxGcmFtZTo6dW5zYWZlQ2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYgY3VyclZNRW50
cnlGcmFtZSkKK1NVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2FmZUNhbGxl
ckZyYW1lKEVudHJ5RnJhbWUqJiBjdXJyRW50cnlGcmFtZSkKIHsKLSAgICBpZiAodW5zYWZlQ2Fs
bGVyRnJhbWVPclZNRW50cnlGcmFtZSgpID09IGN1cnJWTUVudHJ5RnJhbWUpIHsKLSAgICAgICAg
Vk1FbnRyeVJlY29yZCogY3VyclZNRW50cnlSZWNvcmQgPSB2bUVudHJ5UmVjb3JkKGN1cnJWTUVu
dHJ5RnJhbWUpOwotICAgICAgICBjdXJyVk1FbnRyeUZyYW1lID0gY3VyclZNRW50cnlSZWNvcmQt
PnVuc2FmZVByZXZUb3BWTUVudHJ5RnJhbWUoKTsKKyAgICBpZiAodW5zYWZlQ2FsbGVyRnJhbWVP
ckVudHJ5RnJhbWUoKSA9PSBjdXJyRW50cnlGcmFtZSkgeworICAgICAgICBWTUVudHJ5UmVjb3Jk
KiBjdXJyVk1FbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQoY3VyckVudHJ5RnJhbWUpOworICAg
ICAgICBjdXJyRW50cnlGcmFtZSA9IGN1cnJWTUVudHJ5UmVjb3JkLT51bnNhZmVQcmV2VG9wRW50
cnlGcmFtZSgpOwogICAgICAgICByZXR1cm4gY3VyclZNRW50cnlSZWNvcmQtPnVuc2FmZVByZXZU
b3BDYWxsRnJhbWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+
KHVuc2FmZUNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENhbGxGcmFtZSo+KHVuc2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkpOwogfQogCiBT
b3VyY2VPcmlnaW4gQ2FsbEZyYW1lOjpjYWxsZXJTb3VyY2VPcmlnaW4oKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDYyMzA5YTAuLjZkNWQ3
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgK
QEAgLTE0MSwxMiArMTQxLDEyIEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBDYWxsRnJh
bWUmIG9wZXJhdG9yPShjb25zdCBSZWdpc3RlciYgcikgeyAqc3RhdGljX2Nhc3Q8UmVnaXN0ZXIq
Pih0aGlzKSA9IHI7IHJldHVybiAqdGhpczsgfQogCi0gICAgICAgIENhbGxGcmFtZSogY2FsbGVy
RnJhbWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFt
ZU9yVk1FbnRyeUZyYW1lKCkpOyB9Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lT3JWTUVudHJ5
RnJhbWUoKSBjb25zdCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0K
LSAgICAgICAgU1VQUFJFU1NfQVNBTiB2b2lkKiB1bnNhZmVDYWxsZXJGcmFtZU9yVk1FbnRyeUZy
YW1lKCkgY29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVyRnJhbWVBbmRQQygpLmNhbGxlckZyYW1l
OyB9CisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpKTsgfQorICAgICAg
ICB2b2lkKiBjYWxsZXJGcmFtZU9yRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGNhbGxlckZy
YW1lQW5kUEMoKS5jYWxsZXJGcmFtZTsgfQorICAgICAgICBTVVBQUkVTU19BU0FOIHZvaWQqIHVu
c2FmZUNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gdW5zYWZlQ2FsbGVy
RnJhbWVBbmRQQygpLmNhbGxlckZyYW1lOyB9CiAKLSAgICAgICAgQ2FsbEZyYW1lKiB1bnNhZmVD
YWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUoVk1FbnRyeUZyYW1lKiYpOworICAgICAgICBDYWxsRnJhbWUq
IHVuc2FmZUNhbGxlckZyYW1lKEVudHJ5RnJhbWUqJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoRW50cnlGcmFtZSomKTsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBTb3VyY2VPcmlnaW4gY2FsbGVyU291cmNlT3JpZ2luKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaAppbmRleCBj
NWI2YjgzLi43NmFjZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvRnJhbWVUcmFjZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ZyYW1lVHJhY2Vycy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0
cnVjdCBWTUVudHJ5RnJhbWU7CitzdHJ1Y3QgRW50cnlGcmFtZTsKIAogY2xhc3MgU3VzcGVuZEV4
Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoKQEAgLTc0LDMzICs3NCwzMyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBBU1NFUlQodm0pOwogICAgICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKLSAgICAg
ICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxGcmFtZSkgPCByZWludGVycHJl
dF9jYXN0PHZvaWQqPih2bS0+dG9wVk1FbnRyeUZyYW1lKSk7CisgICAgICAgIEFTU0VSVChyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihjYWxsRnJhbWUpIDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
dm0tPnRvcEVudHJ5RnJhbWUpKTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9IGNhbGxGcmFt
ZTsKICAgICB9CiB9OwogCiBjbGFzcyBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB7
CiBwdWJsaWM6Ci0gICAgQUxXQVlTX0lOTElORSBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVz
dG9yZShWTSogdm0sIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKKyAgICBBTFdBWVNfSU5MSU5FIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3Jl
KFZNKiB2bSwgRW50cnlGcmFtZSogRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAg
ICAgICAgIDogbV92bSh2bSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSk7CiAgICAgICAgIEFT
U0VSVChjYWxsRnJhbWUpOwotICAgICAgICBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lID0gdm0tPnRv
cFZNRW50cnlGcmFtZTsKKyAgICAgICAgbV9zYXZlZFRvcEVudHJ5RnJhbWUgPSB2bS0+dG9wRW50
cnlGcmFtZTsKICAgICAgICAgbV9zYXZlZFRvcENhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7
Ci0gICAgICAgIHZtLT50b3BWTUVudHJ5RnJhbWUgPSB2bUVudHJ5RnJhbWU7CisgICAgICAgIHZt
LT50b3BFbnRyeUZyYW1lID0gRW50cnlGcmFtZTsKICAgICAgICAgdm0tPnRvcENhbGxGcmFtZSA9
IGNhbGxGcmFtZTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5OYXRpdmVDYWxsRnJhbWVU
cmFjZXJXaXRoUmVzdG9yZSgpCiAgICAgewotICAgICAgICBtX3ZtLT50b3BWTUVudHJ5RnJhbWUg
PSBtX3NhdmVkVG9wVk1FbnRyeUZyYW1lOworICAgICAgICBtX3ZtLT50b3BFbnRyeUZyYW1lID0g
bV9zYXZlZFRvcEVudHJ5RnJhbWU7CiAgICAgICAgIG1fdm0tPnRvcENhbGxGcmFtZSA9IG1fc2F2
ZWRUb3BDYWxsRnJhbWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwotICAgIFZN
RW50cnlGcmFtZSogbV9zYXZlZFRvcFZNRW50cnlGcmFtZTsKKyAgICBFbnRyeUZyYW1lKiBtX3Nh
dmVkVG9wRW50cnlGcmFtZTsKICAgICBDYWxsRnJhbWUqIG1fc2F2ZWRUb3BDYWxsRnJhbWU7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAppbmRleCAzZDAxMWFkLi43NDVhMzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTY1Myw5ICs2NTMsOSBAQCBwdWJs
aWM6CiAKICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFt
ZSk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2aXNpdG9yKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodmlzaXRvcik7CiAKLSAgICAgICAgYm9vbCBzaG91bGRTdG9wVW53aW5kaW5n
ID0gdmlzaXRvci0+Y2FsbGVySXNWTUVudHJ5RnJhbWUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRT
dG9wVW53aW5kaW5nID0gdmlzaXRvci0+Y2FsbGVySXNFbnRyeUZyYW1lKCk7CiAgICAgICAgIGlm
IChzaG91bGRTdG9wVW53aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6
RG9uZTsKIApAQCAtNjYzLDcgKzY2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0
YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAg
ICB7CiAjaWYgRU5BQkxFKEpJVCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMg
PiAwCiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSB2
aXNpdG9yLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CkBAIC02NzYsNyArNjc2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgaW50cHRyX3QqIGZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdCo+
KG1fY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJD
b3VudCA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+c2l6ZSgpOwotICAgICAgICBWTUVudHJ5UmVjb3Jk
KiByZWNvcmQgPSB2bUVudHJ5UmVjb3JkKG1fdm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAg
Vk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRvcEVudHJ5RnJhbWUp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7
CiAgICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IGN1cnJlbnRDYWxs
ZWVTYXZlcy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGN1
cnJlbnRFbnRyeS5yZWcoKSkpCkBAIC03MDIsNyArNzAyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRs
ZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1l
LCBFeGMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBp
ZiAodW53aW5kU3RhcnQgPT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7Ci0gICAgICAgIGlmIChj
YWxsRnJhbWUtPmNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJh
bWUpCisgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlckZyYW1lT3JFbnRyeUZyYW1lKCkgPT0g
dm0udG9wRW50cnlGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAg
IGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKaW5kZXggODVkMTQ3YS4u
ZDA4MmI2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxOCArNDQsMTggQEAgU3RhY2tWaXNp
dG9yOjpTdGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0pCiAgICAgQ2Fs
bEZyYW1lKiB0b3BGcmFtZTsKICAgICBpZiAoc3RhcnRGcmFtZSkgewogICAgICAgICBBU1NFUlQo
dm0pOwotICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFt
ZTsKKyAgICAgICAgbV9mcmFtZS5tX2VudHJ5RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKICAg
ICAgICAgdG9wRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgICAgICAKLSAgICAgICAgaWYg
KHRvcEZyYW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKSA9
PSBzdGF0aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7Ci0gICAgICAgICAgICB0b3BGcmFtZSA9
IHZtRW50cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFt
ZTsKLSAgICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1f
ZnJhbWUubV9WTUVudHJ5RnJhbWUpLT5tX3ByZXZUb3BWTUVudHJ5RnJhbWU7CisgICAgICAgIGlm
ICh0b3BGcmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFtZS5tX2VudHJ5RnJhbWUpID09
IHN0YXRpY19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKKyAgICAgICAgICAgIHRvcEZyYW1lID0g
dm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fZW50cnlGcmFtZSktPm1fcHJldlRvcENhbGxGcmFtZTsK
KyAgICAgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1l
Lm1fZW50cnlGcmFtZSktPm1fcHJldlRvcEVudHJ5RnJhbWU7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gMDsKKyAgICAgICAgbV9mcmFt
ZS5tX2VudHJ5RnJhbWUgPSAwOwogICAgICAgICB0b3BGcmFtZSA9IDA7CiAgICAgfQotICAgIG1f
ZnJhbWUubV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IGZhbHNlOworICAgIG1fZnJhbWUubV9jYWxs
ZXJJc0VudHJ5RnJhbWUgPSBmYWxzZTsKICAgICByZWFkRnJhbWUodG9wRnJhbWUpOwogCiAgICAg
Ly8gRmluZCB0aGUgZnJhbWUgdGhlIGNhbGxlciB3YW50cyB0byBzdGFydCB1bndpbmRpbmcgZnJv
bS4KQEAgLTc1LDE0ICs3NSwxNCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSgp
CiAgICAgICAgICAgICAgICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCAm
aW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIpOwogICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZSA9IG1fZnJhbWUuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlG
cmFtZTsKKyAgICAgICAgICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0gbV9mcmFtZS5tX2NhbGxl
ckVudHJ5RnJhbWU7CiAgICAgICAgICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFtZSgp
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUu
Y2FsbEZyYW1lKCksIGNhbGxlckNvZGVPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBt
X2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9lbnRyeUZyYW1lID0g
bV9mcmFtZS5tX2NhbGxlckVudHJ5RnJhbWU7CiAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVy
RnJhbWUoKSk7CiB9CiAKQEAgLTE1Miw5ICsxNTIsOSBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVh
ZE5vbklubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9y
aQogewogICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgbV9mcmFtZS5t
X2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpOwotICAgIG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWUgPSBtX2ZyYW1l
Lm1fVk1FbnRyeUZyYW1lOwotICAgIG1fZnJhbWUubV9jYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUobV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSk7Ci0gICAgbV9mcmFtZS5t
X2NhbGxlcklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZSAhPSBt
X2ZyYW1lLm1fVk1FbnRyeUZyYW1lOworICAgIG1fZnJhbWUubV9jYWxsZXJFbnRyeUZyYW1lID0g
bV9mcmFtZS5tX2VudHJ5RnJhbWU7CisgICAgbV9mcmFtZS5tX2NhbGxlckZyYW1lID0gY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZShtX2ZyYW1lLm1fY2FsbGVyRW50cnlGcmFtZSk7CisgICAgbV9mcmFt
ZS5tX2NhbGxlcklzRW50cnlGcmFtZSA9IG1fZnJhbWUubV9jYWxsZXJFbnRyeUZyYW1lICE9IG1f
ZnJhbWUubV9lbnRyeUZyYW1lOwogICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwog
CiAgICAgQ2FsbGVlQml0cyBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwpAQCAtNTAwLDcg
KzUwMCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
LCBJbmRlbnRlciBpbmRlbnQsIHN0ZDo6ZnVuY3Rpb248CiAKICAgICAgICAgICAgIGluZGVudC0t
OwogICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludChpbmRlbnQsICJ2bUVudHJ5RnJhbWU6ICIs
IFJhd1BvaW50ZXIodm1FbnRyeUZyYW1lKCkpLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KGlu
ZGVudCwgIkVudHJ5RnJhbWU6ICIsIFJhd1BvaW50ZXIobV9lbnRyeUZyYW1lKSwgIlxuIik7CiAg
ICAgICAgIGluZGVudC0tOwogICAgIH0KICAgICBvdXQucHJpbnQoaW5kZW50LCAifVxuIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5k
ZXggOGFkMDk0MC4uZTJhMTM2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgog
CiAgICAgICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAg
ICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgfQotICAgICAgICBib29sIGNhbGxlcklzVk1FbnRy
eUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc1ZNRW50cnlGcmFtZTsgfQorICAgICAg
ICBib29sIGNhbGxlcklzRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNFbnRy
eUZyYW1lOyB9CiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVy
biBtX2NhbGxlckZyYW1lOyB9CiAgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsZWU7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jazsgfQpAQCAtOTcsNyArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICAgICAg
Q2xvbmVkQXJndW1lbnRzKiBjcmVhdGVBcmd1bWVudHMoKTsKLSAgICAgICAgVk1FbnRyeUZyYW1l
KiB2bUVudHJ5RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX1ZNRW50cnlGcmFtZTsgfQogICAgICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBJbmRlbnRlciA9IEluZGVu
dGVyKCkpIGNvbnN0OwpAQCAtMTE0LDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBtX2lubGluZUNhbGxGcmFtZTsKICNlbmRpZgogICAgICAgICBDYWxsRnJhbWUq
IG1fY2FsbEZyYW1lOwotICAgICAgICBWTUVudHJ5RnJhbWUqIG1fVk1FbnRyeUZyYW1lOwotICAg
ICAgICBWTUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICBFbnRyeUZy
YW1lKiBtX2VudHJ5RnJhbWU7CisgICAgICAgIEVudHJ5RnJhbWUqIG1fY2FsbGVyRW50cnlGcmFt
ZTsKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwogICAgICAgICBDYWxsZWVCaXRz
IG1fY2FsbGVlOwogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtMTIzLDcgKzEy
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7CiAgICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIFdhc206Oklu
ZGV4T3JOYW1lIG1fd2FzbUZ1bmN0aW9uSW5kZXhPck5hbWU7Ci0gICAgICAgIGJvb2wgbV9jYWxs
ZXJJc1ZNRW50cnlGcmFtZSA6IDE7CisgICAgICAgIGJvb2wgbV9jYWxsZXJJc0VudHJ5RnJhbWUg
OiAxOwogICAgICAgICBib29sIG1faXNXYXNtRnJhbWUgOiAxOwogCiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdGFja1Zpc2l0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1ZNRW50cnlSZWNvcmQuaAppbmRleCBmMzZjMmJlLi4wMTAzYTc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1FbnRyeVJlY29yZC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUVudHJ5UmVjb3JkLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
NyArMjksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFZNRW50cnlGcmFtZTsKK3N0
cnVjdCBFbnRyeUZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKQEAgLTQwLDcg
KzQwLDcgQEAgc3RydWN0IFZNRW50cnlSZWNvcmQgewogICAgICAqLwogICAgIFZNKiBtX3ZtOwog
ICAgIEV4ZWNTdGF0ZSogbV9wcmV2VG9wQ2FsbEZyYW1lOwotICAgIFZNRW50cnlGcmFtZSogbV9w
cmV2VG9wVk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIG1fcHJldlRvcEVudHJ5RnJhbWU7
CiAKICNpZiBFTkFCTEUoSklUKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+
IDAKICAgICBpbnRwdHJfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW05VTUJFUl9PRl9DQUxM
RUVfU0FWRVNfUkVHSVNURVJTXTsKQEAgLTQ5LDIwICs0OSwyMCBAQCBzdHJ1Y3QgVk1FbnRyeVJl
Y29yZCB7CiAgICAgRXhlY1N0YXRlKiBwcmV2VG9wQ2FsbEZyYW1lKCkgeyByZXR1cm4gbV9wcmV2
VG9wQ2FsbEZyYW1lOyB9CiAgICAgU1VQUFJFU1NfQVNBTiBFeGVjU3RhdGUqIHVuc2FmZVByZXZU
b3BDYWxsRnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BDYWxsRnJhbWU7IH0KIAotICAgIFZNRW50
cnlGcmFtZSogcHJldlRvcFZNRW50cnlGcmFtZSgpIHsgcmV0dXJuIG1fcHJldlRvcFZNRW50cnlG
cmFtZTsgfQotICAgIFNVUFBSRVNTX0FTQU4gVk1FbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wVk1F
bnRyeUZyYW1lKCkgeyByZXR1cm4gbV9wcmV2VG9wVk1FbnRyeUZyYW1lOyB9CisgICAgRW50cnlG
cmFtZSogcHJldlRvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBtX3ByZXZUb3BFbnRyeUZyYW1lOyB9
CisgICAgU1VQUFJFU1NfQVNBTiBFbnRyeUZyYW1lKiB1bnNhZmVQcmV2VG9wRW50cnlGcmFtZSgp
IHsgcmV0dXJuIG1fcHJldlRvcEVudHJ5RnJhbWU7IH0KIH07CiAKLWV4dGVybiAiQyIgVk1FbnRy
eVJlY29yZCogdm1FbnRyeVJlY29yZChWTUVudHJ5RnJhbWUqKTsKK2V4dGVybiAiQyIgVk1FbnRy
eVJlY29yZCogdm1FbnRyeVJlY29yZChFbnRyeUZyYW1lKik7CiAKLXN0cnVjdCBWTUVudHJ5RnJh
bWUgeworc3RydWN0IEVudHJ5RnJhbWUgewogI2lmIEVOQUJMRShKSVQpICYmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgdm1FbnRyeVJl
Y29yZE9mZnNldCgpCiAgICAgewotICAgICAgICBWTUVudHJ5RnJhbWUqIGZha2VWTUVudHJ5RnJh
bWUgPSByZWludGVycHJldF9jYXN0PFZNRW50cnlGcmFtZSo+KDB4MTAwMCk7Ci0gICAgICAgIFZN
RW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQoZmFrZVZNRW50cnlGcmFtZSk7Cisg
ICAgICAgIEVudHJ5RnJhbWUqIGZha2VFbnRyeUZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxFbnRy
eUZyYW1lKj4oMHgxMDAwKTsKKyAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRy
eVJlY29yZChmYWtlRW50cnlGcmFtZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVjb3JkKSAtIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZha2VWTUVudHJ5RnJhbWUpKTsKKyAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlY29yZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihm
YWtlRW50cnlGcmFtZSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FsbGVlU2F2
ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAKaW5kZXggZTdhZjc3Ny4uZmY3NWU1MiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNTgyLDcgKzU4Miw3IEBA
IHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoVk0mIHZtLCBHUFJSZWcgc2Ny
YXRjaDAsIEdQUlJlZyBzY3JhdGNoMSwKIH0KICNlbmRpZgogCi12b2lkIEFzc2VtYmx5SGVscGVy
czo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZN
JiB2bSkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQogewogI2lm
IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZz
ZXRzKCk7CkBAIC02MDUsOCArNjA1LDggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVD
YWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0KICAgICB9
CiAgICAgQVNTRVJUKHNjcmF0Y2ggIT0gSW52YWxpZEdQUlJlZyk7CiAKLSAgICBsb2FkUHRyKCZ2
bS50b3BWTUVudHJ5RnJhbWUsIHNjcmF0Y2gpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1F
bnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoKTsK
KyAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHNj
cmF0Y2gpOwogCiAgICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzIGV4Y2VwdCBmb3IgdGhl
IHNjcmF0Y2guCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkr
KykgewpAQCAtNjI3LDcgKzYyNyw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtCiAgICAgQVNT
RVJUKHNjcmF0Y2ggPT0gZW50cnkucmVnKCkuZ3ByKCkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhz
Y3JhdGNoLCBlbnRyeS5vZmZzZXQoKSksIHNjcmF0Y2gpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0odm0pOworICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKICNlbmRpZgogfQogCkBA
IC03NzgsNDEgKzc3OCw0MSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1
ZVRvQm9vbGVhbihWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZQogfQogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dChH
UFJSZWcgZHN0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KEdQUlJlZyBkc3QpCiB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBpZiAoV2FzbTo6
dXNlRmFzdFRMU0ZvckNvbnRleHQoKSkgeworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0
VExTKCkpIHsKICAgICAgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRMU09mZnNldEZvcktleShXVEZf
V0FTTV9DT05URVhUX0tFWSksIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
LSAgICBtb3ZlKFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRQb2lu
dGVyLCBkc3QpOworICAgIG1vdmUoV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNt
Q29udGV4dEluc3RhbmNlUG9pbnRlciwgZHN0KTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnN0b3JlV2FzbUNvbnRleHQoR1BSUmVnIHNyYykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIHNyYykKIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNf
SklUKQotICAgIGlmIChXYXNtOjp1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7CisgICAgaWYgKFdh
c206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgewogICAgICAgICBzdG9yZVRvVExTUHRyKHNyYywg
ZmFzdFRMU09mZnNldEZvcktleShXVEZfV0FTTV9DT05URVhUX0tFWSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgbW92ZShzcmMsIFdhc206OlBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkud2FzbUNvbnRleHRQb2ludGVyKTsKKyAgICBtb3ZlKHNyYywgV2FzbTo6UGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKS53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiB9CiAKLWJv
b2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lz
dGVyKCkKK2Jvb2wgQXNzZW1ibHlIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAg
aWYgKFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6
OnVzZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIGxvYWRGcm9tVExTUHRyTmVlZHNNYWNyb1Nj
cmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEFz
c2VtYmx5SGVscGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIo
KQorYm9vbCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKQogewogI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgaWYg
KFdhc206OnVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKICAgICAgICAgcmV0dXJuIHN0b3JlVG9UTFNQdHJOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CkBAIC04NzUsMTAgKzg3NSwx
MCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZGVidWdDYWxsKFZNJiB2bSwgVl9EZWJ1Z09wZXJh
dGlvbl9FUFAgZnVuY3Rpb24sIHZvaWQqIGFyZwogICAgIH0KIH0KIAotdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNh
dmVzQnVmZmVyKQogewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
QnVmZmVyT2Zmc2V0KCkpLCBjYWxsZWVTYXZlc0J1ZmZlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBjYWxs
ZWVTYXZlc0J1ZmZlcik7CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2
ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVy
U2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBlMWU0YTVi
Li5lNTMyNWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTM2MCwyOCArMzYwLDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSUmVnIHZtR1BSKQogICAgIHsKICNp
ZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHZtR1BSLCBWTTo6dG9wVk1FbnRyeUZyYW1lT2Zmc2V0KCkpLCB2bUdQUik7Ci0gICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHZt
R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHZtR1BSLCBWTTo6dG9wRW50cnlGcmFtZU9m
ZnNldCgpKSwgdm1HUFIpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwodm1HUFIpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHZt
R1BSKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0p
CisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihF
bnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSwgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfSkKICAg
ICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIEdQ
UlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0
cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAgICAgICAgbG9hZFB0
cigmdG9wRW50cnlGcmFtZSwgdGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwodGVtcDEpOwogI2Vsc2UKLSAgICAgICAgVU5VU0VE
X1BBUkFNKHZtKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOwogICAgICAg
ICBVTlVTRURfUEFSQU0odXNlZFJlZ2lzdGVycyk7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lk
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYp
OworICAgIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcihFbnRyeUZyYW1lKiYpOwogCi0gICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVP
clJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRl
bXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpIH0pCisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJl
Z2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5
RnJhbWUsIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1c2VkUmVn
aXN0ZXJzLmdldEZyZWVHUFIoMCk7CkBAIC0zOTIsOCArMzkyLDggQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrKCkpOwogCiAgICAgICAgIC8vIENvcHkgc2F2ZWQgY2FsbGVlU2F2
ZXMgb24gc3RhY2sgb3IgdW5zYXZlZCBjYWxsZWVTYXZlcyBpbiByZWdpc3RlciB0byB2bSBjYWxs
ZWVTYXZlIGJ1ZmZlcgotICAgICAgICBsb2FkUHRyKCZ2bS50b3BWTUVudHJ5RnJhbWUsIHRlbXAx
KTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxlZVNhdmVS
ZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHRlbXAxKTsKKyAgICAgICAgbG9hZFB0cigmdG9wRW50
cnlGcmFtZSwgdGVtcDEpOworICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6
OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHRlbXAxKTsKIAogICAgICAgICBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2
ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY3VycmVu
dENhbGxlZVNhdmVzID0gY29kZUJsb2NrKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKQEAgLTQw
MSwxMiArNDAxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9
IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCB2
bUVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOwotICAgICAgICAgICAgaWYgKGRvbnRDb3B5
UmVnaXN0ZXJzLmdldCh2bUVudHJ5LnJlZygpKSkKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7CisgICAgICAgICAgICBpZiAoZG9udENv
cHlSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGN1cnJlbnRGcmFtZUVudHJ5ID0gY3VycmVu
dENhbGxlZVNhdmVzLT5maW5kKHZtRW50cnkucmVnKCkpOworICAgICAgICAgICAgUmVnaXN0ZXJB
dE9mZnNldCogY3VycmVudEZyYW1lRW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmZpbmQoZW50
cnkucmVnKCkpOwogCi0gICAgICAgICAgICBpZiAodm1FbnRyeS5yZWcoKS5pc0dQUigpKSB7Cisg
ICAgICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkgewogICAgICAgICAgICAgICAgIEdQ
UlJlZyByZWdUb1N0b3JlOwogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWVFbnRyeSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIGNhbGxlZVNhdmUgZnJvbSBzdGFjayBpbnRv
IHRlbXAgcmVnaXN0ZXIKQEAgLTQxNCw5ICs0MTQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcmFtZVBvaW50ZXJSZWdpc3RlciwgY3VycmVudEZyYW1l
RW50cnktPm9mZnNldCgpKSwgcmVnVG9TdG9yZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIC8vIEp1c3Qgc3RvcmUgY2FsbGVlIHNhdmUgZGlyZWN0bHkKLSAg
ICAgICAgICAgICAgICAgICAgcmVnVG9TdG9yZSA9IHZtRW50cnkucmVnKCkuZ3ByKCk7CisgICAg
ICAgICAgICAgICAgICAgIHJlZ1RvU3RvcmUgPSBlbnRyeS5yZWcoKS5ncHIoKTsKIAotICAgICAg
ICAgICAgICAgIHN0b3JlUHRyKHJlZ1RvU3RvcmUsIEFkZHJlc3ModGVtcDEsIHZtRW50cnkub2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihyZWdUb1N0b3JlLCBBZGRyZXNzKHRl
bXAxLCBlbnRyeS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBGUFJSZWcgZnBSZWdUb1N0b3JlOwogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RnJh
bWVFbnRyeSkgewpAQCAtNDI1LDEzICs0MjUsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBsb2FkRG91YmxlKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRGcmFt
ZUVudHJ5LT5vZmZzZXQoKSksIGZwUmVnVG9TdG9yZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3Qgc3RvcmUgY2FsbGVlIHNhdmUgZGlyZWN0bHkK
LSAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gdm1FbnRyeS5yZWcoKS5mcHIoKTsK
KyAgICAgICAgICAgICAgICAgICAgZnBSZWdUb1N0b3JlID0gZW50cnkucmVnKCkuZnByKCk7CiAK
LSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1RvU3RvcmUsIEFkZHJlc3ModGVtcDEs
IHZtRW50cnkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1Rv
U3RvcmUsIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgICAgIFVOVVNF
RF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHVzZWRSZWdpc3Rl
cnMpOwogI2VuZGlmCiAgICAgfQpAQCAtMTY0NiwxNCArMTY0NiwxNCBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICB2b2lkIGxvYWRXYXNtQ29udGV4dChH
UFJSZWcgZHN0KTsKLSAgICB2b2lkIHN0b3JlV2FzbUNvbnRleHQoR1BSUmVnIHNyYyk7Ci0gICAg
c3RhdGljIGJvb2wgbG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpOwot
ICAgIHN0YXRpYyBib29sIHN0b3JlV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVy
KCk7CisgICAgdm9pZCBsb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJSZWcgZHN0KTsKKyAgICB2
b2lkIHN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShHUFJSZWcgc3JjKTsKKyAgICBzdGF0aWMgYm9v
bCBsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKKyAg
ICBzdGF0aWMgYm9vbCBzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJl
Z2lzdGVyKCk7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVm
ZmVyKTsKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIpOwogCiAgICAgQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKICAgICBDb2RlQmxvY2sqIG1fYmFzZWxpbmVDb2RlQmxvY2s7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKaW5kZXggNGE0YmI4ZC4uNmFmNDUwYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6
YXRpb25DaGVjaygpCiAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQs
IFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnko
KSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVPZmZzZXQpOwogCi0gICAgY29weUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KnZtKCkpOworICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwpAQCAtODg5
LDcgKzg4OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkK
ICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkp
IHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0
aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCp2bSgpKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhl
IFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogCkBAIC05MDksNyArOTA5LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogICAgICAgICBtX2V4
Y2VwdGlvbkhhbmRsZXIgPSBsYWJlbCgpOwogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5r
KHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoKnZtKCkpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICAvLyBsb29rdXBF
eGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBl
eGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4
Y2VwdGlvbnMuY3BwCmluZGV4IGNhMmRiOGMuLmYyMDE4Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDggKzU2LDggQEAgdm9p
ZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIFVud2luZFN0YXJ0
IHVud2luZFN0YXJ0KQogICAgIAogICAgIEV4ZWNTdGF0ZSogc2hhZG93Q2hpY2tlblRvcEZyYW1l
ID0gY2FsbEZyYW1lOwogICAgIGlmICh1bndpbmRTdGFydCA9PSBVbndpbmRGcm9tQ2FsbGVyRnJh
bWUpIHsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1F
bnRyeUZyYW1lOwotICAgICAgICBzaGFkb3dDaGlja2VuVG9wRnJhbWUgPSBjYWxsRnJhbWUtPmNh
bGxlckZyYW1lKHRvcFZNRW50cnlGcmFtZSk7CisgICAgICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5
RnJhbWUgPSB2bS0+dG9wRW50cnlGcmFtZTsKKyAgICAgICAgc2hhZG93Q2hpY2tlblRvcEZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh0b3BFbnRyeUZyYW1lKTsKICAgICB9CiAgICAgdm0t
PnNoYWRvd0NoaWNrZW4oKS5sb2coKnZtLCBzaGFkb3dDaGlja2VuVG9wRnJhbWUsIFNoYWRvd0No
aWNrZW46OlBhY2tldDo6dGhyb3dQYWNrZXQoKSk7CiAgICAgCkBAIC04NCw3ICs4NCw3IEBAIHZv
aWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBVbndpbmRTdGFy
dCB1bndpbmRTdGFydCkKICAgICB9IGVsc2UKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gTExJbnQ6
OmdldENvZGVQdHIoaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24pOwogICAgIAotICAgIEFTU0VSVChi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsRnJhbWUpIDwgYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odm0tPnRvcFZNRW50cnlGcmFtZSkpOworICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihjYWxsRnJhbWUpIDwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odm0tPnRvcEVudHJ5RnJh
bWUpKTsKIAogICAgIHZtLT5jYWxsRnJhbWVGb3JDYXRjaCA9IGNhbGxGcmFtZTsKICAgICB2bS0+
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cgPSBjYXRjaFJvdXRpbmU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA1ZjMxZTY3Li5kNDU0ZWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNU
b1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKKyAgICBjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJv
dywgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwpAQCAtNTM5LDcg
KzUzOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1Qz
LCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAg
LTk1Nyw3ICs5NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaQogICAgIGlmIChjYW5CZU9w
dGltaXplZCgpKSB7CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgICAgICBjb3B5
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigqdm0oKSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsK
ICAgICAgICAgSnVtcCBub09wdGltaXplZEVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1
cm5WYWx1ZUdQUik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKaW5kZXggNTA5YTk4NS4uYjJmNjBjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2Eu
Y29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzcwLDcgKzc3MCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX25lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFT
U0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAgICAgZW1p
dExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJl
Z1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKQEAgLTgzMSw3ICs4MzEs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIHJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CisgICAgcmVzdG9yZUNh
bGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZy
YW1lKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIC8vIG9w
ZXJhdGlvblRocm93IHJldHVybnMgdGhlIGNhbGxGcmFtZSBmb3IgdGhlIGhhbmRsZXIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA0OGNiNmVkLi4w
NjU1MDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
QEAgLTEwMywxNCArMTAzLDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayoKICAgICBWTSogdm0g
PSBjb2RlQmxvY2stPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlG
cmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1F
bnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJh
bWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5
RnJhbWUpOwogICAgIGlmICghY2FsbGVyRnJhbWUpIHsKICAgICAgICAgY2FsbGVyRnJhbWUgPSBl
eGVjOwotICAgICAgICB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOworICAgICAg
ICBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CiAgICAgfQogCi0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZy
YW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVu
dHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
ZXJGcmFtZSwgc2NvcGUpOwogfQogCkBAIC0xMjAsMTAgKzEyMCwxMCBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGhyb3dEaXZpZGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlG
cmFtZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1F
bnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJh
bWU7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5
RnJhbWUpOwogCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZt
LCB2bUVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJX
aXRoUmVzdG9yZSB0cmFjZXIodm0sIGVudHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICBFcnJv
ckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSgqdm0pOwogICAgIHRocm93RXhjZXB0aW9uKGNhbGxl
ckZyYW1lLCBzY29wZSwgY3JlYXRlRXJyb3IoY2FsbGVyRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiRGl2
aXNpb24gYnkgemVybyBvciBkaXZpc2lvbiBvdmVyZmxvdy4iKSkpOwogfQpAQCAtMTMzLDEwICsx
MzMsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93T3V0T2ZCb3VuZHNBY2Nl
c3NFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAotICAgIFZNRW50cnlGcmFt
ZSogdm1FbnRyeUZyYW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZy
YW1lKiBlbnRyeUZyYW1lID0gdm0tPnRvcEVudHJ5RnJhbWU7CisgICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwogCi0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxlckZy
YW1lKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIGVu
dHJ5RnJhbWUsIGNhbGxlckZyYW1lKTsKICAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29w
ZSgqdm0pOwogICAgIHRocm93RXhjZXB0aW9uKGNhbGxlckZyYW1lLCBzY29wZSwgY3JlYXRlRXJy
b3IoY2FsbGVyRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiT3V0LW9mLWJvdW5kcyBhY2Nlc3MuIikpKTsK
IH0KQEAgLTE0OSw5ICsxNDksOSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2soRXhlY1N0YXRlKiBleGVjKQogCiAgICAgaW50MzJfdCBtaXNzaW5nQXJnQ291
bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgKnZtLCBDb2RlRm9yQ2Fs
bCk7CiAgICAgaWYgKG1pc3NpbmdBcmdDb3VudCA8IDApIHsKLSAgICAgICAgVk1FbnRyeUZyYW1l
KiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgICAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKLSAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUs
IGNhbGxlckZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BF
bnRyeUZyYW1lOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVy
RnJhbWUoZW50cnlGcmFtZSk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0
b3JlIHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgICAgICB0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUpOwogICAgIH0KIApAQCAtMTY1LDkg
KzE2NSw5IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNo
ZWNrKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29t
bW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsICp2bSwgQ29kZUZvckNvbnN0cnVjdCk7
CiAgICAgaWYgKG1pc3NpbmdBcmdDb3VudCA8IDApIHsKLSAgICAgICAgVk1FbnRyeUZyYW1lKiB2
bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgICAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKLSAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNh
bGxlckZyYW1lKTsKKyAgICAgICAgRW50cnlGcmFtZSogZW50cnlGcmFtZSA9IHZtLT50b3BFbnRy
eUZyYW1lOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJh
bWUoZW50cnlGcmFtZSk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3Jl
IHRyYWNlcih2bSwgZW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogICAgICAgICB0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihjYWxsZXJGcmFtZSwgc2NvcGUpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IGZiODdlMDAuLmYxZGRl
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAK
QEAgLTY2LDcgKzY2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiAgICAgLy8gZXZlbiB0aG91Z2ggd2Ugd29u
J3QgdXNlIGl0LgogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKIAotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CisgICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKIAog
ICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKQEAgLTM2Myw3ICszNjMsNyBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlbmVyYXRvcihWTSogdm0sIENvZGVTcGVjaWFsaXph
dGlvbktpbmQgawogICAgIC8vIEhhbmRsZSBhbiBleGNlcHRpb24KICAgICBleGNlcHRpb25IYW5k
bGVyLmxpbmsoJmppdCk7CiAKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigqdm0pOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgaml0LnN0b3JlUHRy
KEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwog
CiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5k
ZXggZDNlZTI4ZC4uNjU4MWY5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTIwNDcsOCArMjA0
Nyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0ZEVycihF
eGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIHByaW50CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRHVtcENhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZSA9IHZtLnRv
cFZNRW50cnlGcmFtZTsKLSAgICBFeGVjU3RhdGUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVy
RnJhbWUodG9wVk1FbnRyeUZyYW1lKTsKKyAgICBFbnRyeUZyYW1lKiB0b3BFbnRyeUZyYW1lID0g
dm0udG9wRW50cnlGcmFtZTsKKyAgICBFeGVjU3RhdGUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2Fs
bGVyRnJhbWUodG9wRW50cnlGcmFtZSk7CiAgICAgaWYgKGNhbGxlckZyYW1lKQogICAgICAgICB2
bS5pbnRlcnByZXRlci0+ZHVtcENhbGxGcmFtZShjYWxsZXJGcmFtZSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDU0Y2VhMzIuLjhhMGUxYWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtNDgxLDEz
ICs0ODEsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3RhY2tfY2hlY2spCiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZyYW1lID0gdm0udG9wVk1FbnRyeUZy
YW1lOwotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2bUVu
dHJ5RnJhbWUpOworICAgIEVudHJ5RnJhbWUqIHRvcEVudHJ5RnJhbWUgPSB2bS50b3BFbnRyeUZy
YW1lOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh0b3BF
bnRyeUZyYW1lKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKSB7CiAgICAgICAgIGNhbGxlckZyYW1l
ID0gZXhlYzsKLSAgICAgICAgdm1FbnRyeUZyYW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOworICAg
ICAgICB0b3BFbnRyeUZyYW1lID0gdm0udG9wRW50cnlGcmFtZTsKICAgICB9Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKCZ2bSwgdm1FbnRyeUZyYW1lLCBjYWxs
ZXJGcmFtZSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKCZ2
bSwgdG9wRW50cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9T
VFVCUygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcApp
bmRleCAzNmY2NDg2Li41Mjk2N2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyArMTE2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
dm1FbnRyeVRvTmF0aXZlKHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzLCBWTSogdm0sIFByb3RvQ2Fs
bEZyYW1lKgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotZXh0ZXJu
ICJDIiBWTUVudHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKFZNRW50cnlGcmFtZSogZW50cnlGcmFt
ZSkKK2V4dGVybiAiQyIgVk1FbnRyeVJlY29yZCogdm1FbnRyeVJlY29yZChFbnRyeUZyYW1lKiBl
bnRyeUZyYW1lKQogewogICAgIC8vIFRoZSBDIExvb3AgZG9lc24ndCBoYXZlIGFueSBjYWxsZWUg
c2F2ZSByZWdpc3RlcnMsIHNvIHRoZSBWTUVudHJ5UmVjb3JkIGlzIGFsbG9jYXRlZCBhdCB0aGUg
YmFzZSBvZiB0aGUgZnJhbWUuCiAgICAgaW50cHRyX3Qgc3RhY2tBbGlnbm1lbnQgPSBzdGFja0Fs
aWdubWVudEJ5dGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggYWI4ODhkMy4uNWRhZDExNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAt
NjU5LDcgKzY1OSw3IEBAIGVuZAogCiBtYWNybyBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtLCB0ZW1wKQogICAgIGlmIEFSTTY0IG9yIFg4Nl82NCBvciBY
ODZfNjRfV0lOCi0gICAgICAgIGxvYWRwIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dLCB0ZW1wCisg
ICAgICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwgdGVtcAogICAgICAgICB2bUVudHJ5
UmVjb3JkKHRlbXAsIHRlbXApCiAgICAgICAgIGxlYXAgVk1FbnRyeVJlY29yZDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVyc0J1ZmZlclt0ZW1wXSwgdGVtcAogICAgICAgICBpZiBBUk02NApAQCAtNzAxLDcg
KzcwMSw3IEBAIGVuZAogCiBtYWNybyByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCiAgICAgaWYgQVJNNjQgb3IgWDg2XzY0IG9yIFg4
Nl82NF9XSU4KLSAgICAgICAgbG9hZHAgVk06OnRvcFZNRW50cnlGcmFtZVt2bV0sIHRlbXAKKyAg
ICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1dLCB0ZW1wCiAgICAgICAgIHZtRW50cnlS
ZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBWTUVudHJ5UmVjb3JkOjpjYWxsZWVTYXZl
UmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCiAgICAgICAgIGlmIEFSTTY0CkBAIC0xMTQ0LDcg
KzExNDQsNyBAQCBpZiBub3QgQ19MT09QCiAgICAgICAgIHN0b3JlcCBhZGRyZXNzLCBWTTo6bV9s
YXN0U3RhY2tUb3Bbdm1dCiAgICAgICAgIHJldAogICAgIAotICAgICMgVk1FbnRyeVJlY29yZCog
dm1FbnRyeVJlY29yZChjb25zdCBWTUVudHJ5RnJhbWUqIGVudHJ5RnJhbWUpCisgICAgIyBWTUVu
dHJ5UmVjb3JkKiB2bUVudHJ5UmVjb3JkKGNvbnN0IEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUpCiAg
ICAgZ2xvYmFsIF92bUVudHJ5UmVjb3JkCiAgICAgX3ZtRW50cnlSZWNvcmQ6CiAgICAgICAgIGlm
IFg4NiBvciBYODZfV0lOCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDRhNDc1ODIuLjBlNzEyYjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCkBAIC0xMjUsOCArMTI1LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VD
YWxsKQogICAgIHN0b3JlcCB2bSwgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0KICAgICBsb2FkcCBW
TTo6dG9wQ2FsbEZyYW1lW3ZtXSwgdDQKICAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1f
cHJldlRvcENhbGxGcmFtZVtzcF0KLSAgICBsb2FkcCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXSwg
dDQKLSAgICBzdG9yZXAgdDQsIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtz
cF0KKyAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0sIHQ0CisgICAgc3RvcmVwIHQ0LCBW
TUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3NwXQogCiAgICAgIyBBbGlnbiBzdGFj
ayBwb2ludGVyCiAgICAgaWYgWDg2X1dJTiBvciBNSVBTCkBAIC0xODksOCArMTg5LDggQEAgbWFj
cm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3Bd
LCB0NQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVtzcF0sIHQ0
CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9wQ2FsbEZyYW1lW3Q1XQotICAgIGxvYWRwIFZNRW50cnlS
ZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTTo6
dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVu
dHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0b3JlcCB0NCwgVk06OnRvcEVudHJ5RnJhbWVbdDVdCiAK
ICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwg
dDUKQEAgLTI0MSw3ICsyNDEsNyBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAKIC5jb3B5
QXJnc0RvbmU6CiAgICAgc3RvcmVwIHNwLCBWTTo6dG9wQ2FsbEZyYW1lW3ZtXQotICAgIHN0b3Jl
cCBjZnIsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdm1dCisgICAgc3RvcmVwIGNmciwgVk06OnRvcEVu
dHJ5RnJhbWVbdm1dCiAKICAgICBtYWtlQ2FsbChlbnRyeSwgdDMsIHQ0KQogCkBAIC0yNTUsOCAr
MjU1LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNv
cmQ6Om1fdm1bc3BdLCB0NQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxG
cmFtZVtzcF0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTTo6dG9wQ2FsbEZyYW1lW3Q1XQotICAgIGxv
YWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVtzcF0sIHQ0Ci0gICAgc3Rv
cmVwIHQ0LCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Q1XQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6
Om1fcHJldlRvcEVudHJ5RnJhbWVbc3BdLCB0NAorICAgIHN0b3JlcCB0NCwgVk06OnRvcEVudHJ5
RnJhbWVbdDVdCiAKICAgICBpZiBBUk12NwogICAgICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0
ZXJTYXZlU2l6ZSwgdDUKQEAgLTMyNCw4ICszMjQsOCBAQCBfaGFuZGxlVW5jYXVnaHRFeGNlcHRp
b246CiAgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV92bVtzcF0sIHQzCiAgICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV9wcmV2VG9wQ2FsbEZyYW1lW3NwXSwgdDUKICAgICBzdG9yZXAgdDUsIFZN
Ojp0b3BDYWxsRnJhbWVbdDNdCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1F
bnRyeUZyYW1lW3NwXSwgdDUKLSAgICBzdG9yZXAgdDUsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDNd
CisgICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0sIHQ1Cisg
ICAgc3RvcmVwIHQ1LCBWTTo6dG9wRW50cnlGcmFtZVt0M10KIAogICAgIGlmIEFSTXY3CiAgICAg
ICAgIHN1YnAgY2ZyLCBDYWxsZWVSZWdpc3RlclNhdmVTaXplLCB0MwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCA4
NWM3N2QyLi45NzcxNDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMTI5LDggKzEyOSw4IEBAIG1hY3JvIGRv
Vk1FbnRyeShtYWtlQ2FsbCkKICAgICBzdG9yZXAgdm0sIFZNRW50cnlSZWNvcmQ6Om1fdm1bc3Bd
CiAgICAgbG9hZHAgVk06OnRvcENhbGxGcmFtZVt2bV0sIHQ0CiAgICAgc3RvcmVwIHQ0LCBWTUVu
dHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbc3BdCi0gICAgbG9hZHAgVk06OnRvcFZNRW50
cnlGcmFtZVt2bV0sIHQ0Ci0gICAgc3RvcmVwIHQ0LCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BW
TUVudHJ5RnJhbWVbc3BdCisgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1dLCB0NAorICAg
IHN0b3JlcCB0NCwgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVtzcF0KIAogICAg
IGxvYWRpIFByb3RvQ2FsbEZyYW1lOjpwYWRkZWRBcmdDb3VudFtwcm90b0NhbGxGcmFtZV0sIHQ0
CiAgICAgYWRkcCBDYWxsRnJhbWVIZWFkZXJTbG90cywgdDQsIHQ0CkBAIC0xNzEsOCArMTcxLDgg
QEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1f
dm1bdDRdLCB2bQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0
NF0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BDYWxsRnJh
bWVbdm1dCi0gICAgbG9hZHAgVk1FbnRyeVJlY29yZDo6bV9wcmV2VG9wVk1FbnRyeUZyYW1lW3Q0
XSwgZXh0cmFUZW1wUmVnCi0gICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcFZNRW50cnlG
cmFtZVt2bV0KKyAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ByZXZUb3BFbnRyeUZyYW1lW3Q0
XSwgZXh0cmFUZW1wUmVnCisgICAgc3RvcmVwIGV4dHJhVGVtcFJlZywgVk06OnRvcEVudHJ5RnJh
bWVbdm1dCiAKICAgICBzdWJwIGNmciwgQ2FsbGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAt
MjIwLDcgKzIyMCw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBlbHNlCiAgICAg
ICAgIHN0b3JlcCBzcCwgVk06OnRvcENhbGxGcmFtZVt2bV0KICAgICBlbmQKLSAgICBzdG9yZXAg
Y2ZyLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3ZtXQorICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BFbnRy
eUZyYW1lW3ZtXQogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoZXh0cmFUZW1wUmVn
LCAweGJhZDBkYzAyKQogCkBAIC0yMzYsOCArMjM2LDggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VD
YWxsKQogICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fdm1bdDRdLCB2bQogICAgIGxvYWRwIFZN
RW50cnlSZWNvcmQ6Om1fcHJldlRvcENhbGxGcmFtZVt0NF0sIHQyCiAgICAgc3RvcmVwIHQyLCBW
TTo6dG9wQ2FsbEZyYW1lW3ZtXQotICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcFZN
RW50cnlGcmFtZVt0NF0sIHQyCi0gICAgc3RvcmVwIHQyLCBWTTo6dG9wVk1FbnRyeUZyYW1lW3Zt
XQorICAgIGxvYWRwIFZNRW50cnlSZWNvcmQ6Om1fcHJldlRvcEVudHJ5RnJhbWVbdDRdLCB0Mgor
ICAgIHN0b3JlcCB0MiwgVk06OnRvcEVudHJ5RnJhbWVbdm1dCiAKICAgICBzdWJwIGNmciwgQ2Fs
bGVlUmVnaXN0ZXJTYXZlU2l6ZSwgc3AKIApAQCAtMjc2LDcgKzI3Niw2IEBAIG1hY3JvIG1ha2VI
b3N0RnVuY3Rpb25DYWxsKGVudHJ5LCB0ZW1wKQogICAgIGVuZAogZW5kCiAKLQogX2hhbmRsZVVu
Y2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MwogICAgIGFuZHAgTWFy
a2VkQmxvY2tNYXNrLCB0MwpAQCAtMjkxLDggKzI5MCw4IEBAIF9oYW5kbGVVbmNhdWdodEV4Y2Vw
dGlvbjoKICAgICBsb2FkcCBWTUVudHJ5UmVjb3JkOjptX3ZtW3QyXSwgdDMKICAgICBsb2FkcCBW
TUVudHJ5UmVjb3JkOjptX3ByZXZUb3BDYWxsRnJhbWVbdDJdLCBleHRyYVRlbXBSZWcKICAgICBz
dG9yZXAgZXh0cmFUZW1wUmVnLCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQotICAgIGxvYWRwIFZNRW50
cnlSZWNvcmQ6Om1fcHJldlRvcFZNRW50cnlGcmFtZVt0Ml0sIGV4dHJhVGVtcFJlZwotICAgIHN0
b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BWTUVudHJ5RnJhbWVbdDNdCisgICAgbG9hZHAgVk1F
bnRyeVJlY29yZDo6bV9wcmV2VG9wRW50cnlGcmFtZVt0Ml0sIGV4dHJhVGVtcFJlZworICAgIHN0
b3JlcCBleHRyYVRlbXBSZWcsIFZNOjp0b3BFbnRyeUZyYW1lW3QzXQogCiAgICAgc3VicCBjZnIs
IENhbGxlZVJlZ2lzdGVyU2F2ZVNpemUsIHNwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCmluZGV4IGEzN2UyNDYuLjhiZGYwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMTQ0LDYgKzE0NCw3IEBAIHZvaWQgSlNMb2NrOjpk
aWRBY3F1aXJlTG9jaygpCiAgICAgbV92bS0+c2V0U3RhY2tQb2ludGVyQXRWTUVudHJ5KHApOwog
CiAgICAgbV92bS0+c2V0TGFzdFN0YWNrVG9wKHRocmVhZC5zYXZlZExhc3RTdGFja1RvcCgpKTsK
KyAgICBBU1NFUlQodGhyZWFkLnN0YWNrKCkuY29udGFpbnMobV92bS0+bGFzdFN0YWNrVG9wKCkp
KTsKIAogICAgIG1fdm0tPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAppbmRleCBiMGI2OTQyLi5hZTk3N2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIHJl
Y29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgICAgICBPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eSgpID0gZmFsc2U7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5KCkpCi0gICAg
ICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdFRMUygpID0gZmFsc2U7CisgICAgICAgIE9w
dGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpID0gZmFsc2U7CiAgICAgCiAgICAgaWYg
KE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXgg
ZWM0ODQ1NS4uNWQ5NGExNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aApAQCAtNDY4LDggKzQ2OCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwog
ICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RmFzdE1lbW9yeVJlZHpvbmVQYWdlcywgMTI4LCBO
b3JtYWwsICJXZWJBc3NlbWJseSBmYXN0IG1lbW9yaWVzIHVzZSA0R2lCIHZpcnR1YWwgYWxsb2Nh
dGlvbnMsIHBsdXMgYSByZWR6b25lIChjb3VudGVkIGFzIG11bHRpcGxlIG9mIDY0S2lCIFdlYkFz
c2VtYmx5IHBhZ2VzKSBhdCB0aGUgZW5kIHRvIGNhdGNoIHJlZytpbW0gYWNjZXNzZXMgd2hpY2gg
ZXhjZWVkIDMyLWJpdCwgYW55dGhpbmcgYmV5b25kIHRoZSByZWR6b25lIGlzIGV4cGxpY2l0bHkg
Ym91bmRzLWNoZWNrZWQiKSBcCiAgICAgdihib29sLCBjcmFzaElmV2ViQXNzZW1ibHlDYW50RmFz
dE1lbW9yeSwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgY3Jhc2ggaWYgd2UgY2Fu
J3Qgb2J0YWluIGZhc3QgbWVtb3J5IGZvciB3YXNtLiIpIFwKICAgICB2KHVuc2lnbmVkLCBtYXhO
dW1XZWJBc3NlbWJseUZhc3RNZW1vcmllcywgNCwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihi
b29sLCB1c2VXZWJBc3NlbWJseUZhc3RUTFMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdp
bGwgdHJ5IHRvIHVzZSBmYXN0IHRocmVhZC1sb2NhbCBzdG9yYWdlIGlmIGF2YWlsYWJsZSBvbiB0
aGUgY3VycmVudCBwbGF0Zm9ybS4iKSBcCi0gICAgdihib29sLCB1c2VGYXN0VExTRm9yV2FzbUNv
bnRleHQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUgKGFuZCBmYXN0IFRMUyBpcyBlbmFibGVkKSwg
d2Ugd2lsbCBzdG9yZSBjb250ZXh0IGluIGZhc3QgVExTLiBJZiBmYWxzZSwgd2Ugd2lsbCBwaW4g
aXQgdG8gYSByZWdpc3Rlci4iKSBcCisgICAgdihib29sLCB1c2VGYXN0VExTRm9yV2FzbUNvbnRl
eHQsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgc3RvcmUgY29udGV4dCBpbiBmYXN0
IFRMUy4gSWYgZmFsc2UsIHdlIHdpbGwgcGluIGl0IHRvIGEgcmVnaXN0ZXIuIikgXAogICAgIHYo
Ym9vbCwgdXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzLCB0cnVlLCBOb3JtYWwsICJJ
ZiB0cnVlLCB3ZSB3aWxsIHVzZSBDYWxsTGlua0luZm8gdG8gaW5saW5lIGNhY2hlIFdhc20gdG8g
SlMgY2FsbHMuIikgXAogICAgIHYoYm9vbCwgdXNlT2JqZWN0UmVzdFNwcmVhZCwgdHJ1ZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBlbmFibGUgT2JqZWN0IFJlc3QvU3ByZWFkIGZlYXR1cmUu
IikgXAogICAgIHYoYm9vbCwgdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nLCB0cnVlLCBOb3Jt
YWwsICJJZiB0cnVlLCB3ZSB3aWxsIHVzZSBvdXIgbm9ybWFsIGFycmF5IGFsbG9jYXRpb24gcHJv
ZmlsaW5nLiBJZiBmYWxzZSwgdGhlIGFsbG9jYXRpb24gcHJvZmlsZSB3aWxsIGFsd2F5cyBjbGFp
bSB0byBiZSB1bmRlY2lkZWQuIilcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4IGE0YmU5NWIuLjNiY2Y2YzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBA
IC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBGcmFtZVdhbGtlcihWTSYgdm0sIEV4ZWNTdGF0
ZSogY2FsbEZyYW1lLCBjb25zdCBBYnN0cmFjdExvY2tlciYgY29kZUJsb2NrU2V0TG9ja2VyLCBj
b25zdCBBYnN0cmFjdExvY2tlciYgbWFjaGluZVRocmVhZHNMb2NrZXIpCiAgICAgICAgIDogbV92
bSh2bSkKICAgICAgICAgLCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCi0gICAgICAgICwgbV92bUVu
dHJ5RnJhbWUodm0udG9wVk1FbnRyeUZyYW1lKQorICAgICAgICAsIG1fZW50cnlGcmFtZSh2bS50
b3BFbnRyeUZyYW1lKQogICAgICAgICAsIG1fY29kZUJsb2NrU2V0TG9ja2VyKGNvZGVCbG9ja1Nl
dExvY2tlcikKICAgICAgICAgLCBtX21hY2hpbmVUaHJlYWRzTG9ja2VyKG1hY2hpbmVUaHJlYWRz
TG9ja2VyKQogICAgIHsKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgU1VQUFJF
U1NfQVNBTgogICAgIHZvaWQgYWR2YW5jZVRvUGFyZW50RnJhbWUoKQogICAgIHsKLSAgICAgICAg
bV9jYWxsRnJhbWUgPSBtX2NhbGxGcmFtZS0+dW5zYWZlQ2FsbGVyRnJhbWUobV92bUVudHJ5RnJh
bWUpOworICAgICAgICBtX2NhbGxGcmFtZSA9IG1fY2FsbEZyYW1lLT51bnNhZmVDYWxsZXJGcmFt
ZShtX2VudHJ5RnJhbWUpOwogICAgIH0KIAogICAgIGJvb2wgaXNBdFRvcCgpIGNvbnN0CkBAIC0x
ODgsNyArMTg4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgVk0mIG1fdm07CiAgICAgRXhlY1N0YXRl
KiBtX2NhbGxGcmFtZTsKLSAgICBWTUVudHJ5RnJhbWUqIG1fdm1FbnRyeUZyYW1lOworICAgIEVu
dHJ5RnJhbWUqIG1fZW50cnlGcmFtZTsKICAgICBjb25zdCBBYnN0cmFjdExvY2tlciYgbV9jb2Rl
QmxvY2tTZXRMb2NrZXI7CiAgICAgY29uc3QgQWJzdHJhY3RMb2NrZXImIG1fbWFjaGluZVRocmVh
ZHNMb2NrZXI7CiAgICAgYm9vbCBtX2JhaWxpbmdPdXQgeyBmYWxzZSB9OwpAQCAtNTc3LDcgKzU3
Nyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNl
cygpCiAgICAgICAgICAgICAgICAgLy8gV2UgcmV1c2UgTExJbnQgQ29kZUJsb2NrcyBmb3IgdGhl
IGJhc2VsaW5lIEpJVCwgc28gd2UgbmVlZCB0byBjaGVjayBmb3IgYm90aCBqaXQgdHlwZXMuCiAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBhbHNvIGJlIGZhbHNlIGZvciB2YXJpb3VzIHJl
YXNvbnMgKGtub3duIGFuZCB1bmtub3duKSwgZXZlbiB0aG91Z2gKICAgICAgICAgICAgICAgICAv
LyBpdCdzIHN1cGVyIHVubGlrZWx5LiBPbmUgcmVhc29uIHRoYXQgdGhpcyBjYW4gYmUgZmFsc2Ug
aXMgd2hlbiB3ZSB0aHJvdyBmcm9tIGEgREZHIGZyYW1lLAotICAgICAgICAgICAgICAgIC8vIGFu
ZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGEgVk1FbnRyeUZyYW1lLCB3ZSB3aWxs
IGVuZCB1cCBleGVjdXRpbmcKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2UgZW5kIHVwIGhhdmlu
ZyB0byB1bndpbmQgcGFzdCBhbiBFbnRyeUZyYW1lLCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcK
ICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIExMSW50J3MgaGFuZGxlVW5jYXVnaHRFeGNl
cHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2FpbnN0IHRoaXMKICAgICAgICAgICAgICAgICAv
LyBieSBpZ25vcmluZyBpdC4KICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2Nv
cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKaW5k
ZXggMDZlOTMwMy4uNGM2NWQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGhyb3dTY29wZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTcsMTMgKzU3LDEzIEBAIFRocm93U2NvcGU6On5UaHJvd1Njb3BlKCkK
IAogICAgIGJvb2wgd2lsbEJlSGFuZGxlQnlMTEludE9ySklUID0gZmFsc2U7CiAgICAgdm9pZCog
cHJldmlvdXNTY29wZSA9IG1fcHJldmlvdXNTY29wZTsKLSAgICB2b2lkKiB0b3BWTUVudHJ5RnJh
bWUgPSBtX3ZtLnRvcFZNRW50cnlGcmFtZTsKKyAgICB2b2lkKiB0b3BFbnRyeUZyYW1lID0gbV92
bS50b3BFbnRyeUZyYW1lOwogCi0gICAgLy8gSWYgdGhlIHRvcFZNRW50cnlGcmFtZSB3YXMgcHVz
aGVkIG9uIHRoZSBzdGFjayBhZnRlciB0aGUgcHJldmlvdXNTY29wZSB3YXMgaW5zdGFudGlhdGVk
LAorICAgIC8vIElmIHRoZSB0b3BFbnRyeUZyYW1lIHdhcyBwdXNoZWQgb24gdGhlIHN0YWNrIGFm
dGVyIHRoZSBwcmV2aW91c1Njb3BlIHdhcyBpbnN0YW50aWF0ZWQsCiAgICAgLy8gdGhlbiB0aGlz
IHRocm93U2NvcGUgd2lsbCBiZSByZXR1cm5pbmcgdG8gTExJTlQgb3IgSklUIGNvZGUgdGhhdCBh
bHdheXMgZG8gYW4gZXhjZXB0aW9uCiAgICAgLy8gY2hlY2suIEluIHRoYXQgY2FzZSwgc2tpcCB0
aGUgc2ltdWxhdGVkIHRocm93IGJlY2F1c2UgdGhlIExMSW50IGFuZCBKSVQgd2lsbCBiZQogICAg
IC8vIGNoZWNraW5nIGZvciB0aGUgZXhjZXB0aW9uIHRoZWlyIG93biB3YXkgaW5zdGVhZCBvZiBj
YWxsaW5nIFRocm93U2NvcGU6OmV4Y2VwdGlvbigpLgotICAgIGlmICh0b3BWTUVudHJ5RnJhbWUg
JiYgcHJldmlvdXNTY29wZSA+IHRvcFZNRW50cnlGcmFtZSkKKyAgICBpZiAodG9wRW50cnlGcmFt
ZSAmJiBwcmV2aW91c1Njb3BlID4gdG9wRW50cnlGcmFtZSkKICAgICAgICAgd2lsbEJlSGFuZGxl
QnlMTEludE9ySklUID0gdHJ1ZTsKICAgICAKICAgICBpZiAoIXdpbGxCZUhhbmRsZUJ5TExJbnRP
ckpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBkNGIwNjRkLi5kY2Q0
ZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xODUsNyArMTg1LDcg
QEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2VuZGlmCiAgICAg
LCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQotICAgICwgdG9wVk1FbnRyeUZy
YW1lKG51bGxwdHIpCisgICAgLCB0b3BFbnRyeUZyYW1lKG51bGxwdHIpCiAgICAgLCB0b3BDYWxs
RnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQogICAgICwgcHJvbWlzZURlZmVycmVkVGltZXIo
c3RkOjptYWtlX3VuaXF1ZTxQcm9taXNlRGVmZXJyZWRUaW1lcj4oKnRoaXMpKQogICAgICwgbV9h
dG9taWNTdHJpbmdUYWJsZSh2bVR5cGUgPT0gRGVmYXVsdCA/IFRocmVhZDo6Y3VycmVudCgpLmF0
b21pY1N0cmluZ1RhYmxlKCkgOiBuZXcgQXRvbWljU3RyaW5nVGFibGUpCkBAIC0zNzAsNyArMzcw
LDcgQEAgVk06On5WTSgpCiAgICAgcHJvbWlzZURlZmVycmVkVGltZXItPnN0b3BSdW5uaW5nVGFz
a3MoKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKFdhc206OmV4aXN0aW5nV29y
a2xpc3RPck51bGwoKSkKLSAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5zdG9wQWxsUGxh
bnNGb3JWTSgqdGhpcyk7CisgICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuc3RvcEFsbFBs
YW5zRm9yQ29udGV4dCh3YXNtQ29udGV4dCk7CiAjZW5kaWYKICAgICBpZiAoVU5MSUtFTFkobV93
YXRjaGRvZykpCiAgICAgICAgIG1fd2F0Y2hkb2ctPndpbGxEZXN0cm95Vk0odGhpcyk7CkBAIC03
NjcsMTEgKzc2NywxMiBAQCB2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0qIHZtKQogewogICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlU2FuaXRpemVTdGFjaygpICYmIHZtLT50b3BDYWxsRnJhbWUpIHsK
ICAgICAgICAgaW50IGR1bW15OworICAgICAgICBhdXRvJiBzdGFja0JvdW5kcyA9IFRocmVhZDo6
Y3VycmVudCgpLnN0YWNrKCk7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiU2FuaXRp
emluZyBzdGFjayB3aXRoIHRvcCBjYWxsIGZyYW1lIGF0ICIsIFJhd1BvaW50ZXIodm0tPnRvcENh
bGxGcmFtZSksCisgICAgICAgICAgICAiU2FuaXRpemluZyBzdGFjayBmb3IgVk0gPSAiLCBSYXdQ
b2ludGVyKHZtKSwgIiB3aXRoIHRvcCBjYWxsIGZyYW1lIGF0ICIsIFJhd1BvaW50ZXIodm0tPnRv
cENhbGxGcmFtZSksCiAgICAgICAgICAgICAiLCBjdXJyZW50IHN0YWNrIHBvaW50ZXIgYXQgIiwg
UmF3UG9pbnRlcigmZHVtbXkpLCAiLCBpbiAiLAotICAgICAgICAgICAgcG9pbnRlckR1bXAodm0t
PnRvcENhbGxGcmFtZS0+Y29kZUJsb2NrKCkpLCAiIGFuZCBsYXN0IGNvZGUgb3JpZ2luID0gIiwK
LSAgICAgICAgICAgIHZtLT50b3BDYWxsRnJhbWUtPmNvZGVPcmlnaW4oKSwgIlxuIik7CisgICAg
ICAgICAgICBwb2ludGVyRHVtcCh2bS0+dG9wQ2FsbEZyYW1lLT5jb2RlQmxvY2soKSksICIsIGxh
c3QgY29kZSBvcmlnaW4gPSAiLAorICAgICAgICAgICAgdm0tPnRvcENhbGxGcmFtZS0+Y29kZU9y
aWdpbigpLCAiLCBsYXN0IHN0YWNrIHRvcCA9ICIsIFJhd1BvaW50ZXIodm0tPmxhc3RTdGFja1Rv
cCgpKSwgIiwgaW4gc3RhY2sgcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhY2tCb3VuZHMub3JpZ2lu
KCkpLCAiLCAiLCBSYXdQb2ludGVyKHN0YWNrQm91bmRzLmVuZCgpKSwgIl1cbiIpOwogICAgIH0K
IH0KIApAQCAtOTIxLDYgKzkyMiwxMSBAQCB2b2lkIFF1ZXVlZFRhc2s6OnJ1bigpCiB2b2lkIHNh
bml0aXplU3RhY2tGb3JWTShWTSogdm0pCiB7CiAgICAgbG9nU2FuaXRpemVTdGFjayh2bSk7Cisg
ICAgaWYgKHZtLT50b3BDYWxsRnJhbWUpIHsKKyAgICAgICAgYXV0byYgc3RhY2tCb3VuZHMgPSBU
aHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpOworICAgICAgICBBU1NFUlQodm0tPmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN0YWNrQm91bmRz
LCBzdGFja0JvdW5kcy5jb250YWlucyh2bS0+bGFzdFN0YWNrVG9wKCkpKTsKKyAgICB9CiAjaWYg
IUVOQUJMRShKSVQpCiAgICAgdm0tPmludGVycHJldGVyLT5jbG9vcFN0YWNrKCkuc2FuaXRpemVT
dGFjaygpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDI5NmY1MWEu
LjJmNzk5NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNTUsNiArNTUsNyBA
QAogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlZNRW50
cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQu
aCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxs
b2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CkBAIC0zMjksMTQg
KzMzMCwxNSBAQCBwdWJsaWM6CiAKICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENsaWVudERhdGEq
IGNsaWVudERhdGE7Ci0gICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWU7CisgICAgRW50
cnlGcmFtZSogdG9wRW50cnlGcmFtZTsKICAgICAvLyBOT1RFOiBXaGVuIHRocm93aW5nIGFuIGV4
Y2VwdGlvbiB3aGlsZSByb2xsaW5nIGJhY2sgdGhlIGNhbGwgZnJhbWUsIHRoaXMgbWF5IGJlIGVx
dWFsIHRvCi0gICAgLy8gdG9wVk1FbnRyeUZyYW1lLgorICAgIC8vIHRvcEVudHJ5RnJhbWUuCiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgdm9pZCosIGJlY2F1c2UgaXQgbWlnaHQgbm90
IHBvaW50IHRvIGEgQ2FsbEZyYW1lLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjA0NDEKICAgICBFeGVjU3RhdGUqIHRvcENhbGxGcmFtZSB7IG51bGxw
dHIgfTsKLSAgICAvLyBGSVhNRTogU2F2ZSB0aGlzIHN0YXRlIGVsc2V3aGVyZSB0byBhbGxvdyBQ
SUMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3NzMKLSAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0IHsgbnVsbHB0ciB9OworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKyAgICBXYXNtOjpDb250ZXh0IHdhc21Db250ZXh0OworI2VuZGlmCiAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKQEAgLTUwMiw5ICs1MDQsOSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRhcmdldE1hY2hpbmVQ
Q0ZvclRocm93KTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IHRvcFZNRW50cnlGcmFt
ZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BFbnRyeUZyYW1lT2Zmc2V0KCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcFZNRW50cnlGcmFtZSk7
CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcEVudHJ5RnJhbWUpOwogICAg
IH0KIAogICAgIHZvaWQgcmVzdG9yZVByZXZpb3VzRXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0
aW9uKSB7IHNldEV4Y2VwdGlvbihleGNlcHRpb24pOyB9CkBAIC03NzgsNyArNzgwLDcgQEAgcHJp
dmF0ZToKICNpZiAhRU5BQkxFKEpJVCkKICAgICB2b2lkKiBtX2Nsb29wU3RhY2tMaW1pdCB7IG51
bGxwdHIgfTsKICNlbmRpZgotICAgIHZvaWQqIG1fbGFzdFN0YWNrVG9wOworICAgIHZvaWQqIG1f
bGFzdFN0YWNrVG9wIHsgbnVsbHB0ciB9OwogCiAgICAgRXhjZXB0aW9uKiBtX2V4Y2VwdGlvbiB7
IG51bGxwdHIgfTsKICAgICBFeGNlcHRpb24qIG1fbGFzdEV4Y2VwdGlvbiB7IG51bGxwdHIgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggZTIzNmVkMy4u
YTIwZDA5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFw
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKQEAg
LTg5LDcgKzg5LDcgQEAgaW5saW5lIENhbGxGcmFtZSogc2FuaXRpemVkVG9wQ2FsbEZyYW1lKENh
bGxGcmFtZSogdG9wQ2FsbEZyYW1lKQogICAgIHJldHVybiB0b3BDYWxsRnJhbWU7CiB9CiAKLXN0
YXRpYyBib29sIGlzU2FuZUZyYW1lKENhbGxGcmFtZSogZnJhbWUsIENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIFZNRW50cnlGcmFtZSogZW50cnlGcmFtZSwgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMp
CitzdGF0aWMgYm9vbCBpc1NhbmVGcmFtZShDYWxsRnJhbWUqIGZyYW1lLCBDYWxsRnJhbWUqIGNh
bGxlZUZyYW1lLCBFbnRyeUZyYW1lKiBlbnRyeUZyYW1lLCBTdGFja0JvdW5kcyBzdGFja0JvdW5k
cykKIHsKICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnJhbWUpID49IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGVudHJ5RnJhbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MjEsMTggKzEyMSwxOCBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMo
U2lnbmFsQ29udGV4dCYgY29udGV4dCwgU3RhY2tCb3VuZHMgc3RhYwogICAgIH0KIAogICAgIENv
ZGVCbG9jayogZm91bmRDb2RlQmxvY2sgPSBudWxscHRyOwotICAgIFZNRW50cnlGcmFtZSogdm1F
bnRyeUZyYW1lID0gdm0udG9wVk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIGVudHJ5RnJh
bWUgPSB2bS50b3BFbnRyeUZyYW1lOwogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNhbGxlZSB0
byBzdGFydCB3aXRoLiBTbywgdXNlIHRoZSBlbmQgb2YgdGhlIHN0YWNrIHRvIGtlZXAgdGhlCiAg
ICAgLy8gaXNTYW5lRnJhbWUoKSBjaGVja2VyIGJlbG93IGhhcHB5IGZvciB0aGUgZmlyc3QgaXRl
cmF0aW9uLiBJdCB3aWxsIHN0aWxsIGNoZWNrCiAgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIGFk
ZHJlc3MgaXMgaW4gdGhlIHN0YWNrQm91bmRzLgogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUg
PSByZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KHN0YWNrQm91bmRzLmVuZCgpKTsKIAotICAg
IGlmICghdm1FbnRyeUZyYW1lIHx8ICFjYWxsRnJhbWUpCisgICAgaWYgKCFlbnRyeUZyYW1lIHx8
ICFjYWxsRnJhbWUpCiAgICAgICAgIHJldHVybjsgLy8gTm90IHJ1bm5pbmcgSlMgY29kZS4gTGV0
IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgogCiAgICAgZG8gewotICAgICAgICBp
ZiAoIWlzU2FuZUZyYW1lKGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIHZtRW50cnlGcmFtZSwgc3Rh
Y2tCb3VuZHMpKQorICAgICAgICBpZiAoIWlzU2FuZUZyYW1lKGNhbGxGcmFtZSwgY2FsbGVlRnJh
bWUsIGVudHJ5RnJhbWUsIHN0YWNrQm91bmRzKSkKICAgICAgICAgICAgIHJldHVybjsgLy8gTGV0
IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgogCiAgICAgICAgIENvZGVCbG9jayog
Y2FuZGlkYXRlQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKQEAgLTE0Miw5ICsx
NDIsOSBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoU2lnbmFsQ29u
dGV4dCYgY29udGV4dCwgU3RhY2tCb3VuZHMgc3RhYwogICAgICAgICB9CiAKICAgICAgICAgY2Fs
bGVlRnJhbWUgPSBjYWxsRnJhbWU7Ci0gICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUodm1FbnRyeUZyYW1lKTsKKyAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZShlbnRyeUZyYW1lKTsKIAotICAgIH0gd2hpbGUgKGNhbGxGcmFtZSAmJiB2bUVu
dHJ5RnJhbWUpOworICAgIH0gd2hpbGUgKGNhbGxGcmFtZSAmJiBlbnRyeUZyYW1lKTsKIAogICAg
IGlmICghZm91bmRDb2RlQmxvY2spIHsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUganVzdCBlbnRl
cmVkIHRoZSBmcmFtZSBhbmQgdGhlIGNvZGVCbG9jayBwb2ludGVyIGlzIG5vdApAQCAtMTgxLDE3
ICsxODEsMTcgQEAgdm9pZCBWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soTG9j
a2VyPExvY2s+JiwgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWUKIAogICAgIG1fbmVlZFRvSW52YWxp
ZGF0ZWRDb2RlQmxvY2tzID0gZmFsc2U7CiAKLSAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFt
ZSA9IHZtKCkudG9wVk1FbnRyeUZyYW1lOworICAgIEVudHJ5RnJhbWUqIGVudHJ5RnJhbWUgPSB2
bSgpLnRvcEVudHJ5RnJhbWU7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB0b3BDYWxsRnJh
bWU7CiAKLSAgICBpZiAoIXZtRW50cnlGcmFtZSkKKyAgICBpZiAoIWVudHJ5RnJhbWUpCiAgICAg
ICAgIHJldHVybjsgLy8gTm90IHJ1bm5pbmcgSlMgY29kZS4gTm90aGluZyB0byBpbnZhbGlkYXRl
LgogCiAgICAgd2hpbGUgKGNhbGxGcmFtZSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgICAg
IGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9WTVRyYXBzKTsKLSAg
ICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJhbWUpOwor
ICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKGVudHJ5RnJhbWUpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCmluZGV4IGJhYzhkYzEuLjQ1MDNjZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTQ5LDggKzQ5LDYgQEAKICNp
bmNsdWRlICJCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCkBAIC0xNzgsNyAr
MTc2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAg
ICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIEIzSVJHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCopOworICAgIEIzSVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25N
b2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2Vw
dGlvbik7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVu
dHMoY29uc3QgU2lnbmF0dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMjQ3LDcgKzI0NSw3IEBAIHByaXZhdGU6
CiAKICAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0
KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOwogCi0gICAgdm9pZCByZXN0b3JlV2FzbUNvbnRl
eHQoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayosIFZhbHVlKik7CisgICAgdm9pZCByZXN0b3JlV2Fz
bUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwgVmFsdWUqKTsKICAgICB2
b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9u
JiwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKik7CiAKICAgICBPcmln
aW4gb3JpZ2luKCk7CkBAIC0yNjcsNyArMjY1LDcgQEAgcHJpdmF0ZToKICAgICBJbnNlcnRpb25T
ZXQgbV9jb25zdGFudEluc2VydGlvblZhbHVlczsKICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BS
IHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlk
R1BSUmVnIH07Ci0gICAgR1BSUmVnIG1fd2FzbUNvbnRleHRHUFIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRHUFJSZWcgfTsK
ICAgICBib29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CiAKICAgICBWYWx1ZSogbV9pbnN0YW5j
ZVZhbHVlIHsgbnVsbHB0ciB9OyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0byBl
bnN1cmUgdGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCkBAIC0y
OTEsMzcgKzI4OSwzNyBAQCBpbnQzMl90IEIzSVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNP
ZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3Qgb2ZmcwogICAgIHJldHVybiBvZmZz
ZXQ7CiB9CiAKLXZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0KFByb2NlZHVy
ZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlKiBhcmcpCit2b2lkIEIzSVJHZW5lcmF0
b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9j
ayogYmxvY2ssIFZhbHVlKiBhcmcpCiB7Ci0gICAgaWYgKHVzZUZhc3RUTFNGb3JDb250ZXh0KCkp
IHsKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CiAgICAgICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9j
LCBCMzo6Vm9pZCwgT3JpZ2luKCkpOwotICAgICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpzdG9yZVdh
c21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQorICAgICAgICBpZiAoQ0NhbGxI
ZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVy
KCkpCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5l
ZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwogICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVs
cGVyczo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHQocGFyYW1zWzBdLmdwcigpKTsKKyAgICAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2go
aml0LCBDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3Jh
dGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0
YW5jZShwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMg
d2FzbUNvbnRleHQgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8g
cmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgLy8gRklYTUU6IEJlY2F1c2UgV2Fz
bVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRv
ZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNp
ZGUuCiAgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50UmVnIHRvIHRo
aXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KICAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJv
YywgQjM6OlZvaWQsIE9yaWdpbigpKTsKICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7CiAgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwogICAgIGVmZmVjdHMucmVh
ZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZm
ZWN0czsKLSAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250
ZXh0R1BSKSk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNt
Q29udGV4dEluc3RhbmNlR1BSKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFs
dWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7Ci0gICAgR1BSUmVnIHdhc21Db250ZXh0R1BS
ID0gbV93YXNtQ29udGV4dEdQUjsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9
IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbSkgewotICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRHUFIp
OworICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQ
Uik7CiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0
aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGls
YXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQor
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0
aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2Rl
KQogICAgICwgbV9jb21waWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQpAQCAtMzM5LDkgKzMz
Nyw5IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgbV9tZW1vcnlCYXNlR1BSID0gcGlu
bmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV9tZW1v
cnlCYXNlR1BSKTsKIAotICAgIG1fd2FzbUNvbnRleHRHUFIgPSBwaW5uZWRSZWdzLndhc21Db250
ZXh0UG9pbnRlcjsKLSAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIG1f
cHJvYy5waW5SZWdpc3RlcihtX3dhc21Db250ZXh0R1BSKTsKKyAgICBtX3dhc21Db250ZXh0SW5z
dGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOworICAgIGlm
ICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV93
YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKIAogICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNp
Z25hbGluZykgewogICAgICAgICBBU1NFUlQoIXBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5z
aXplT2Zmc2V0KTsKQEAgLTM1MCw2ICszNDgsOSBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJh
dG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQog
ICAgICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsKICAg
ICB9CiAKKyAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICAgICBUaHVua3M6OnNpbmds
ZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pOworCiAgICAg
aWYgKGluZm8ubWVtb3J5KSB7CiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUikgewogICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwpA
QCAtMzYzLDYgKzM2NCwxOSBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwogICAgICAgICB9KTsKKworICAgICAgICBzd2l0
Y2ggKG1fbW9kZSkgeworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgor
ICAgICAgICAgICAgLy8gTW9zdCBtZW1vcnkgYWNjZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUgZG9u
J3QgZG8gYW4gZXhwbGljaXQKKyAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNl
IHRoZXkgY2FuIHJlbHkgb24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0CisgICAgICAgICAgICAv
LyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBGYXVsdFNpZ25hbEhhbmRsZXIgbm9uZXRoZWxlc3Mg
bmVlZHMgdGhlCisgICAgICAgICAgICAvLyB0aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNhbiBq
dW1wIHRvIHRoYXQgdGh1bmsuCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2lu
Z2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgm
Y29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJy
ZW50QmxvY2spOwpAQCAtMzczLDEyICszODcsMTIgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVy
YXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUK
ICAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gc3RhY2tPdmVyZmxvd0NoZWNrOwogICAgICAgICBz
dGFja092ZXJmbG93Q2hlY2stPmFwcGVuZFNvbWVSZWdpc3RlcihmcmFtZVBvaW50ZXIpOwogICAg
ICAgICBzdGFja092ZXJmbG93Q2hlY2stPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKLSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2Fz
bUNvbnRleHQgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVz
dG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFz
dFRMUygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwg
Y2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9y
ZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KICAgICAgICAg
ICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChs
b2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCiAgICAgICAgICAgICBzdGFja092
ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7CiAgICAgICAgICAgICBz
dGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwotICAgICAgICAg
ICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyht
X3dhc21Db250ZXh0R1BSKTsKKyAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0
Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAg
ICAgICAgfQogICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cyA9IDI7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewpAQCAtNDAxLDcgKzQxNSw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAg
ICAgICBib29sIG5lZWRVbmRlcmZsb3dDaGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVj
a1NpemUpID4gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpOwogICAgICAgICAgICAgYm9vbCBu
ZWVkc092ZXJmbG93Q2hlY2sgPSBtX21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5p
bXVtUGFyZW50Q2hlY2tTaXplIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKIAotICAgICAgICAgICAg
R1BSUmVnIGNvbnRleHQgPSB1c2VGYXN0VExTRm9yQ29udGV4dCgpID8gcGFyYW1zWzBdLmdwcigp
IDogbV93YXNtQ29udGV4dEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2Ug
PSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyBwYXJhbXNbMF0uZ3ByKCkgOiBtX3dhc21Db250ZXh0
SW5zdGFuY2VHUFI7CiAKICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGxlYWYgZnVuY3Rpb25z
IHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJhbWUgc2l6ZSBpcyB3aXRoaW4KICAg
ICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRoZWlyIGNhbGxlciB3b3VsZCBoYXZl
IGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCkBAIC00MTEsMTAgKzQyNSwxMCBAQCBCM0lSR2VuZXJh
dG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZQogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHBhcmFtcy5n
cFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcGFyYW1zLmdw
U2NyYXRjaCgxKTsKIAotICAgICAgICAgICAgICAgIGlmICh1c2VGYXN0VExTRm9yQ29udGV4dCgp
KQotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGNvbnRleHQpOworICAg
ICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgICAgICAgICAg
ICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOwogCi0gICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHQsIENv
bnRleHQ6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOworICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2Us
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzY3Jh
dGNoMik7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigtY2hlY2tTaXplKSwgZnAsIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KG5lZWRVbmRlcmZsb3dDaGVjaykpCkBAIC00MjMsMTAgKzQzNywxMCBAQCBCM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUm
IHByb2NlZHVyZQogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5zdHVi
KHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZh
bHVlICYmIHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
bV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2Ug
dmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3QuCi0gICAgICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJz
Ojpsb2FkV2FzbUNvbnRleHROZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAg
ICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxw
ZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0
YW5jZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQg
d2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2Ug
aXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRjaHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQg
aGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFjayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9t
IGdldHRpbmcgcmVtb3ZlZC4KICAgICAgICAgICAgIH0KQEAgLTQzOCw3ICs0NTIsNyBAQCBCM0lS
R2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQ
cm9jZWR1cmUmIHByb2NlZHVyZQogCiB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3Nl
bWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZhbHVlKiBp
bnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKLSAgICByZXN0
b3JlV2FzbUNvbnRleHQocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKyAgICByZXN0b3JlV2FzbUNv
bnRleHRJbnN0YW5jZShwcm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAgaWYgKCEhbWVtb3J5
KSB7CiAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVncyA9ICZQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAtNDU4LDEyICs0NzIsMTIgQEAgdm9pZCBCM0lSR2Vu
ZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShjb25zdCBNZW1vcnlJbmZvcm1h
dGlvbiYgbWVtb3IKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJl
Z3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3Mt
PmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
Zk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mV2FzbU1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBjb25zdCBhdXRv
JiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAgICBBU1NF
UlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1sw
XS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQg
MCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAw
LgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1v
cnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6
ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFz
ZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZU1lbW9yeSwgTWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdp
c3Rlcik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZU1lbW9yeSwgTWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCiAgICAg
ICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVn
c1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5z
aXplUmVnaXN0ZXIpOwogICAgICAgICB9KTsKQEAgLTU0MSwyNCArNTU1LDIyIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGludDMyX3QgKCpncm93TWVt
b3J5KSAoQ29udGV4dCosIGludDMyX3QpID0gW10gKENvbnRleHQqIHdhc21Db250ZXh0LCBpbnQz
Ml90IGRlbHRhKSAtPiBpbnQzMl90IHsKLSAgICAgICAgVk0mIHZtID0gKndhc21Db250ZXh0LT52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogd2FzbU1lbW9yeSA9IHdhc21Db250ZXh0LT5tZW1v
cnkoKTsKLQorICAgIGludDMyX3QgKCpncm93TWVtb3J5KShKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
LCBpbnQzMl90KSA9IFtdIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBpbnQzMl90
IGRlbHRhKSAtPiBpbnQzMl90IHsKICAgICAgICAgaWYgKGRlbHRhIDwgMCkKICAgICAgICAgICAg
IHJldHVybiAtMTsKIAotICAgICAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVy
ZSA9IGZhbHNlOwotICAgICAgICAvLyBncm93KCkgZG9lcyBub3QgcmVxdWlyZSBFeGVjU3RhdGUq
IGlmIGl0IGRvZXNuJ3QgdGhyb3cgZXhjZXB0aW9ucy4KLSAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gbnVsbHB0cjsKLSAgICAgICAgUGFnZUNvdW50IHJlc3VsdCA9IHdhc21NZW1vcnktPmdyb3co
dm0sIGV4ZWMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihkZWx0YSksIHNob3VsZFRocm93RXhjZXB0
aW9uc09uRmFpbHVyZSk7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigp
OwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
YXV0byBncm93biA9IGluc3RhbmNlLT5pbnRlcm5hbE1lbW9yeSgpLmdyb3coUGFnZUNvdW50KGRl
bHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jvd24u
ZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZh
bGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFs
aWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291
bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29u
OjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gcmVzdWx0LnBhZ2VDb3VudCgpOworICAgICAg
ICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKICAgICB9OwogCiAgICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMyLCBv
cmlnaW4oKSwKQEAgLTU3MiwxMyArNTg0LDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jv
d01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAog
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpKTsKKyAgICBWYWx1ZSogbWVtb3J5T2Jq
ZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQz
Ml90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mV2FzbU1lbW9yeSgpKSk7CiAKLSAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqPihudWxscHRyKS0+bWVtb3J5KCktPm1lbW9yeSgpLnNpemUoKSkpID09IHNpemVv
Zih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBWYWx1ZSog
c2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7CisgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8TWVtb3J5Kj4obnVsbHB0ciktPnNpemUoKSkpID09IHNp
emVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKKyAgICBWYWx1
ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KE1l
bW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsKICAgICAKICAgICBjb25zdGV4cHIgdWludDMyX3Qgc2hp
ZnRWYWx1ZSA9IDE2OwotICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAx
IDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUg
Y29ycmVjdC4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVs
bCA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJl
IGNvcnJlY3QuIik7CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKICAgICAgICAgc2l6ZSwgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNoaWZ0
VmFsdWUpKTsKIApAQCAtMTA2OSwxNCArMTA4MSwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
CiAgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0Nh
bGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCiAgICAg
ICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVy
YXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRl
ZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgIFZhbHVlKiBmdW5jdGlvbkltcG9ydCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgp
KSk7Ci0gICAgICAgIFZhbHVlKiBqc1R5cGVPZkltcG9ydCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4oKSwgZnVuY3Rpb25JbXBv
cnQsIHNhZmVDYXN0PGludDMyX3Q+KEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpKTsKLSAg
ICAgICAgVmFsdWUqIGlzV2FzbUNhbGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwganNUeXBlT2ZJbXBvcnQsIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBXZWJBc3NlbWJseUZ1
bmN0aW9uVHlwZSkpOworICAgICAgICBWYWx1ZSogdGFyZ2V0SW5zdGFuY2UgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAg
ICAgICBWYWx1ZSogaXNXYXNtQ2FsbCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgTm90RXF1YWwsIG9yaWdpbigpLCB0YXJnZXRJbnN0YW5jZSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKTsKIAogICAg
ICAgICBCYXNpY0Jsb2NrKiBpc1dhc21CbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAg
ICBCYXNpY0Jsb2NrKiBpc0pTQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFz
aWNCbG9jayogaXNFbWJlZGRlckJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3Jp
Z2luKCksIGlzV2FzbUNhbGwsIEZyZXF1ZW50ZWRCbG9jayhpc1dhc21CbG9jayksIEZyZXF1ZW50
ZWRCbG9jayhpc0pTQmxvY2spKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVx
dWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2Nr
KSk7CiAKICAgICAgICAgVmFsdWUqIHdhc21DYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0Iz
VHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50KSB7CkBAIC0xMDk3LDE1ICsxMTA4LDEzIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwK
ICAgICAgICAgVXBzaWxvblZhbHVlKiB3YXNtQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBl
ID09IFZvaWQgPyBudWxscHRyIDogaXNXYXNtQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHdhc21DYWxsUmVzdWx0KTsKICAgICAgICAgaXNXYXNtQmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRp
b24pOwogCi0gICAgICAgIC8vIEZJWE1FOiBMZXRzIHJlbW92ZSB0aGlzIGluZGlyZWN0aW9uIGJ5
IGNyZWF0aW5nIGEgUElDIGZyaWVuZGx5IElDCisgICAgICAgIC8vIEZJWE1FOiBMZXQncyByZW1v
dmUgdGhpcyBpbmRpcmVjdGlvbiBieSBjcmVhdGluZyBhIFBJQyBmcmllbmRseSBJQwogICAgICAg
ICAvLyBmb3IgY2FsbHMgb3V0IHRvIEpTLiBUaGlzIHNob3VsZG4ndCBiZSB0aGF0IGhhcmQgdG8g
ZG8uIFdlIGNvdWxkIHByb2JhYmx5Ci0gICAgICAgIC8vIGltcGxlbWVudCB0aGUgSUMgdG8gYmUg
b3ZlciBXYXNtOjpDb250ZXh0Ki4KKyAgICAgICAgLy8gaW1wbGVtZW50IHRoZSBJQyB0byBiZSBv
dmVyIENvbnRleHQqLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcwMzc1Ci0gICAgICAgIFZhbHVlKiBjb2RlQmxvY2sgPSBpc0pTQmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAotICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSk7Ci0gICAgICAgIFZhbHVlKiBq
dW1wRGVzdGluYXRpb24gPSBpc0pTQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LAotICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNvZGVCbG9jaywg
c2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRX
YXNtVG9KU1N0dWIoZnVuY3Rpb25JbmRleCkpKTsKLSAgICAgICAgVmFsdWUqIGpzQ2FsbFJlc3Vs
dCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzSlNCbG9jaywg
b3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAorICAgICAgICBWYWx1ZSoganVt
cERlc3RpbmF0aW9uID0gaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywKKyAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5j
ZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZXYXNtVG9FbWJlZGRlclN0dWJFeGVjdXRhYmxlQWRkcmVzcyhmdW5jdGlvbkluZGV4KSkpOwor
ICAgICAgICBWYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9u
KCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9C
M1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbJl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlu
bmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlu
bmVkID0gdHJ1ZTsKQEAgLTExMTksOCArMTEyOCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwK
ICAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/
IDAgOiAxXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgVXBzaWxvblZhbHVlKiBqc0NhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBW
b2lkID8gbnVsbHB0ciA6IGlzSlNCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwganNDYWxsUmVzdWx0KTsKLSAgICAgICAgaXNKU0Jsb2NrLT5hcHBlbmROZXdD
b250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgVXBzaWxvblZhbHVlKiBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9
PSBWb2lkID8gbnVsbHB0ciA6IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgZW1iZWRkZXJDYWxsUmVzdWx0KTsKKyAgICAgICAgaXNFbWJl
ZGRlckJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwg
Y29udGludWF0aW9uKTsKIAogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsK
IApAQCAtMTEyOSw3ICsxMTM4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFBoaSwgdG9CM1R5cGUocmV0dXJuVHlwZSksIG9yaWdpbigpKTsKICAgICAgICAg
ICAgIHdhc21DYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7Ci0gICAgICAgICAgICBq
c0NhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAgICAgIGVtYmVkZGVy
Q2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFu
Y2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KQEAgLTExNjUsMTcg
KzExNzQsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICBtX21heE51bUpTQ2FsbEFy
Z3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXI7Ci0gICAgRXhwcmVzc2lvblR5cGUganNGdW5jdGlvbkJ1ZmZlcjsKKyAgICBF
eHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXI7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlclNpemU7CiAgICAgewogICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWJs
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNh
ZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKSk7
CisgICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtVGFibGUoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIHRhYmxlLCBz
YWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkp
KTsKLSAgICAgICAganNGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAg
ICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZz
ZXRPZkpTRnVuY3Rpb25zKCkpKTsKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90
PihUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSkpOworICAgICAgICBpbnN0YW5jZXNCdWZmZXIg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMy
X3Q+KFRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXJTaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksCi0gICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8
aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZlNpemUoKSkpOworICAgICAgICAg
ICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRhYmxlOjpvZmZzZXRPZlNpemUoKSkpOwogICAg
IH0KIAogICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQu
CkBAIC0xMTk1LDYgKzEyMDQsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgIEV4cHJl
c3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIG9mZnNl
dCk7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxp
emVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5k
aWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgorICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUg
dHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWdu
YXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3MjEwCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2FsbGFibGVGdW5jdGlv
bjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50MzJfdCksICJMb2FkIGNvZGVnZW4gYXNz
dW1lcyBpMzIiKTsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIs
IG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihPQkpFQ1RfT0ZG
U0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKSk7CiAgICAgewpAQCAtMTIy
MywxOSArMTIzMywxNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgIHsKICAgICAgICAg
VmFsdWUqIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
TXVsLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAotICAgICAgICAgICAg
Y29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pKSk7
Ci0gICAgICAgIFZhbHVlKiBqc09iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCi0gICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2lu
KCksIGpzRnVuY3Rpb25CdWZmZXIsIG9mZnNldCkpOworICAgICAgICAgICAgY29uc3RhbnQocG9p
bnRlclR5cGUoKSwgc2l6ZW9mKEluc3RhbmNlKikpKTsKKyAgICAgICAgVmFsdWUqIG5ld0NvbnRl
eHRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1
ZmZlciwgb2Zmc2V0KSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9w
cm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIEJhc2ljQmxvY2sqIGRvQ29udGV4dFN3aXRjaCA9IG1f
cHJvYy5hZGRCbG9jaygpOwogCi0gICAgICAgIFZhbHVlKiBuZXdDb250ZXh0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgp
LCBvcmlnaW4oKSwKLSAgICAgICAgICAgIGpzT2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSk7Ci0gICAgICAgIFZhbHVl
KiBpc1NhbWVDb250ZXh0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBFcXVhbCwgb3JpZ2luKCksCi0gICAgICAgICAgICBuZXdDb250ZXh0LCBpbnN0YW5jZVZhbHVl
KCkpOworICAgICAgICBWYWx1ZSogaXNTYW1lQ29udGV4dEluc3RhbmNlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCisgICAgICAgICAg
ICBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNlVmFsdWUoKSk7CiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4o
KSwKLSAgICAgICAgICAgIGlzU2FtZUNvbnRleHQsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRp
b24pLCBGcmVxdWVudGVkQmxvY2soZG9Db250ZXh0U3dpdGNoKSk7CisgICAgICAgICAgICBpc1Nh
bWVDb250ZXh0SW5zdGFuY2UsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBGcmVxdWVu
dGVkQmxvY2soZG9Db250ZXh0U3dpdGNoKSk7CiAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMu
d3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAgLTEyNDMsMjYgKzEyNTEsMjYgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3Rv
cjxFeHByZXNzaW8KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRo
aXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShN
ZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9p
bnQtPmFwcGVuZChuZXdDb250ZXh0LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKG5ld0NvbnRleHRJbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dCA9IHBhcmFtc1sw
XS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0ID0gcGFyYW1zWzFdLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3By
KCk7CiAgICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQ
aW5uZWRSZWdpc3RlckluZm86OmdldCgpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJl
Z3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1l
bW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgICAgICAgICBBU1NFUlQo
bmV3Q29udGV4dCAhPSBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNhY2hlZFN0YWNr
TGltaXQoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1v
cnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZkNh
Y2hlZFN0YWNrTGltaXQoKSkpOwotICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHQobmV3
Q29udGV4dCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
bmV3Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBK
U1dlYkFzc2VtYmx5TWVtb3J5Ki4KKyAgICAgICAgICAgIEFTU0VSVChuZXdDb250ZXh0SW5zdGFu
Y2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5j
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwor
ICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFu
Y2UpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0Nv
bnRleHRJbnN0YW5jZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnko
KSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnkqLgogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdz
LnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIgIT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyICE9IG5ld0NvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNp
emVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwogICAgICAgICAgICAgQVNTRVJUKCFz
aXplUmVnc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNp
emUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbU1l
bW9yeTo6dm9pZCouCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZU1lbW9yeSwgTWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVS
ZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIE1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJh
c2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQqLgogICAgICAgICB9KTsKICAgICAgICAgZG9Db250
ZXh0U3dpdGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwg
Y29udGludWF0aW9uKTsKIApAQCAtMTMzOSwxOTQgKzEzNDcsNiBAQCB2b2lkIEIzSVJHZW5lcmF0
b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3Qg
RXhwcmVzcwogICAgIGRhdGFMb2dMbigpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGls
YXRpb25Db250ZXh0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkK
LXsKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpjb21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBv
aW50SklUOwotCi0gICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVu
Y3Rpb24+KCk7Ci0gICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0KLSAgICAvLyBGSVhN
RSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTMyMQotICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTY0KDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVM
b2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5z
dG9yZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0ciogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2Nh
dGlvbjsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxl
ZU1vdmVMb2NhdGlvbik7Ci0gICAgfSk7Ci0KLSAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8m
IHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwotICAgIFJlZ2lzdGVyU2V0
IHRvU2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1vZGUpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgIHVuc2lnbmVkIHRvU2F2ZVNpemUgPSB0b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCk7Ci0g
ICAgLy8gVGhleSBzaG91bGQgYWxsIGJlIGNhbGxlZSBzYXZlcy4KLSAgICB0b1NhdmUuZmlsdGVy
KFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIEFTU0VSVCh0b1NhdmUu
bnVtYmVyT2ZTZXRHUFJzKCkgPT0gdG9TYXZlU2l6ZSk7Ci0jZW5kaWYKLQotICAgIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwodG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlz
dDo6T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJhc2VkKTsKLSAgICByZXN1bHQtPmVudHJ5
cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7Ci0KLSAgICB1bnNp
Z25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZv
aWQqKTsKLSAgICB0b3RhbEZyYW1lU2l6ZSArPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRl
clNpemVJbkJ5dGVzKCk7Ci0gICAgdG90YWxGcmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpOwotICAgIHVuc2lnbmVkIG51bUdQUnMgPSAwOwotICAgIHVuc2lnbmVkIG51bUZQUnMg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKLSAg
ICAgICAgY2FzZSBXYXNtOjpJNjQ6Ci0gICAgICAgIGNhc2UgV2FzbTo6STMyOgotICAgICAgICAg
ICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUo
KSkKLSAgICAgICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOwotICAg
ICAgICAgICAgKytudW1HUFJzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2Fz
bTo6RjMyOgotICAgICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgICAgIGlmIChudW1GUFJz
ID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAgICAgICsrbnVt
RlBSczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRv
dGFsRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgdG90YWxGcmFtZVNpemUpOwotICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0KLSAgICAvLyBXZSBzYXZlIGFsbCB0aGVzZSByZWdpc3RlcnMgcmVnYXJkbGVz
cyBvZiBoYXZpbmcgYSBtZW1vcnkgb3Igbm90LgotICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCB3
ZSB1c2Ugb25lIG9mIHRoZXNlIGFzIGEgc2NyYXRjaC4gVGhhdCBzYWlkLAotICAgIC8vIGFsbW9z
dCBhbGwgcmVhbCB3YXNtIHByb2dyYW1zIHVzZSBtZW1vcnksIHNvIGl0J3Mgbm90IHJlYWxseQot
ICAgIC8vIHdvcnRoIG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIHRoYXQgdGhleSBkb24ndC4KLSAg
ICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9T
cGlsbCkgewotICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0g
ICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKLSAgICAgICAg
aml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgd2FzbUNvbnRleHRHUFIg
PSBwaW5uZWRSZWdzLndhc21Db250ZXh0UG9pbnRlcjsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgICAgIG51bUdQUnMgPSAwOwotICAgICAg
ICBudW1GUFJzID0gMDsKLSAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQg
cmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCi0gICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBh
IHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KLSAgICAgICAgR1BSUmVn
IHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotCi0gICAgICAgIHB0
cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICAgICAgLy8gdm1FbnRyeVRvV2FzbSBwYXNzZXMgV2FzbTo6
Q29udGV4dCogYXMgdGhlIGZpcnN0IEpTIGFyZ3VtZW50IHdoZW4gd2UncmUKLSAgICAgICAgLy8g
bm90IHVzaW5nIGZhc3QgVExTIHRvIGhvbGQgdGhlIFdhc206OkNvbnRleHQqLgotICAgICAgICBp
ZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQp
LCB3YXNtQ29udGV4dEdQUik7Ci0gICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZih2b2lkKik7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKysp
IHsKLSAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAg
ICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJn
cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChp
KSA9PSBXYXNtOjpJMzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCks
IHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRj
aFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBz
Y3JhdGNoUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hS
ZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0
dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkkzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5n
cHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJz
XS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbnVtR1BSczsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAg
ICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KHdhc21PZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dCh3YXNtT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCopOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6
RjMyKQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbnVtRlBSczsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAganNPZmZzZXQg
Kz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
IWluZm8ubWVtb3J5KSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5i
YXNlTWVtb3J5UG9pbnRlcjsKLQotICAgICAgICBpZiAoIXVzZUZhc3RUTFNGb3JDb250ZXh0KCkp
Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNvbnRl
eHRHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHQoYmFz
ZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFz
ZU1lbW9yeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpT
aWduYWxpbmcpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVn
cy5zaXplUmVnaXN0ZXJzOwotICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAx
KTsKLSAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBm
b2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNl
cXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tp
XS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXpl
UmVnaXN0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5
KCkpLCBiYXNlTWVtb3J5KTsKLSAgICB9Ci0KLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9
IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICB1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCk7
Ci0gICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGluZm8uZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBj
YWxsLCBmdW5jdGlvbkluZGV4U3BhY2VdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChjYWxsKSwgZnVuY3Rpb25JbmRleFNwYWNlIH0pOwotICAgIH0pOwotCi0KLSAg
ICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9T
cGlsbCkgewotICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Ci0g
ICAgICAgIEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBw
dHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7Ci0gICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zm
c2V0KSwgcmVnKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkp
IHsKLSAgICBjYXNlIFdhc206OkYzMjoKLSAgICAgICAgaml0Lm1vdmVGbG9hdFRvMzIoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBqaXQuZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCiBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogewogICAgIE9w
Y29kZU9yaWdpbiBvcmlnaW4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUoKSwgbV9wYXJzZXItPmN1
cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKTsKQEAgLTE1MzQsNyArMTM1NCw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gT3JpZ2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxPcmlnaW4+KG9yaWdpbik7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCitF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1
aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9k
ZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQogewogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5h
bEZ1bmN0aW9uPigpOwogCkBAIC0xNTU4LDExICsxMzc4LDExIEBAIEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGls
YXRpb25DCiAgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZl
bCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgp
KTsKIAotICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dChpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5n
ZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVu
Y3Rpb25JbmRleCwgdGllclVwKTsKLSAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBw
YXJzZXIoY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwg
aW5mbyk7CisgICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJl
c3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEZ1bmN0
aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKLSAgICBjb250ZXh0Lmluc2VydENvbnN0YW50
cygpOworICAgIGlyR2VuZXJhdG9yLmluc2VydENvbnN0YW50cygpOwogCiAgICAgcHJvY2VkdXJl
LnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlMmM2YWRi
Li42OWJlNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAj
aW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CisjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2lu
Y2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3Vu
dC5oIgpAQCAtNTQsOSArNTUsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlwcm9k
dWN0czsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhf
dCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1v
ZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwotCi1z
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENv
bXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCk7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGls
YXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRy
LCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBs
YW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4
IDIyZWRkMTYuLmQwZWFmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAKQEAgLTI5LDggKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNp
bmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTUzLDIx
ICs1MSwyMSBAQCBuYW1lc3BhY2UgV2FzbUJCUVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oVk0qIHZtLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCi0gICAgOiBCYXNlKHZtLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spKQorQkJR
UGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGlu
Zm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKKyAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92
ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRp
b24pCiAgICAgLCBtX3N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpCiAgICAgLCBtX2FzeW5jV29yayh3
b3JrKQogewogfQogCi1CQlFQbGFuOjpCQlFQbGFuKFZNKiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYg
c291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQkJR
UGxhbih2bSwgYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJjZSkp
KSwgd29yaywgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4
dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRh
c2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIs
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBCQlFQbGFuKGNv
bnRleHQsIGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShzb3VyY2UpKSks
IHdvcmssIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhy
b3dXYXNtRXhjZXB0aW9uKQogewogICAgIG1fc3RhdGUgPSBTdGF0ZTo6SW5pdGlhbDsKIH0KIAot
QkJRUGxhbjo6QkJRUGxhbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNv
dXJjZUxlbmd0aCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6
IEJhc2Uodm0sIHNvdXJjZSwgc291cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6
QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBz
b3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAg
OiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQogICAg
ICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CkBA
IC0yNjksNyArMjY3LDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKIAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1
bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7CiAgICAgICAg
IFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZt
X3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gcGFy
c2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0
c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9u
SW5kZXgsIHRpZXJVcCk7CisgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBD
b21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dh
c21FeGNlcHRpb24pOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVz
dWx0KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAt
Mjg1LDcgKzI4Myw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiAKICAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMu
Y29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9qc1RvV2FzbUludGVy
bmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIobV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9l
bWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBtX2NyZWF0
ZUVtYmVkZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIHNp
Z25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOwogICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgfQog
CkBAIC0zMTQsMTQgKzMxMiwxNCBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53
YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKGF1dG8ganNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9qc1RvV2FzbUludGVybmFsRnVu
Y3Rpb25zLmdldChmdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgaWYgKGF1dG8gZW1iZWRk
ZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rp
b25zLmdldChmdW5jdGlvbkluZGV4KSkgewogICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcigqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChsb2NrZXIs
IG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBlbnRyeXBv
aW50IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBqc1RvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgZW1iZWRkZXJU
b1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0g
JXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCiAgICAgICAgICAgICAgICAgICAgIFdU
Rk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCAzNTlmMTNiLi5jNmVh
NDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKQEAgLTI4LDEy
ICsyOCwxMiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0
aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21Q
bGFuLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5o
PgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtNDEsOCArNDEsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxM
aW5rSW5mbzsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7
CiAKIG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTAsMTIgKzQ4LDEzIEBAIGNsYXNzIEJCUVBsYW4g
ZmluYWwgOiBwdWJsaWMgUGxhbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47CiAg
ICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsK
KwogICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5j
ZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4K
LSAgICBCQlFQbGFuKFZNKiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21w
bGV0aW9uVGFzayYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKFZNKiwgVmVjdG9y
PHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgQkJRUGxhbihD
b250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFz
ayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKENvbnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5
bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dX
YXNtRXhjZXB0aW9uKTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBvbmx5
IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVpbGRpbmcgYSBtb2R1bGUgZS5nLiB2
YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgZ2V0IHJpZCBv
ZiBmdW5jdGlvbiB0ZXN0cyB3ZSBzaG91bGQgcmVtb3ZlIEFzeW5jV29yayBmcm9tIHRoaXMgY29u
c3RydWN0b3IuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihWTSosIGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQXN5bmNX
b3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVs
ZSgpOwogCkBAIC0xNDEsNyArMTQwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAg
SGFzaFNldDx1aW50MzJfdCwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1
bmN0aW9uSW5kaWNlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fanNUb1dhc21JbnRl
cm5hbEZ1bmN0aW9uczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2Nv
bXBpbGF0aW9uQ29udGV4dHM7CiAgICAgVmVjdG9yPFRpZXJVcENvdW50PiBtX3RpZXJVcENvdW50
czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5J
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMu
aAppbmRleCAxYjhiNTZmLi40NDQ3OTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbklubGluZXMuaApAQCAtMzksMTAgKzM5LDEwIEBAIHZvaWQgQkJRUGxh
bjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgRnVuY3RvciYgY2FsbGJhY2spCiAgICAgQVNTRVJU
KCFmYWlsZWQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAw
OyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7
ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7CiAKLSAgICAgICAgUmVmUHRyPFdhc206OkNhbGxl
ZT4ganNFbnRyeXBvaW50Q2FsbGVlOwotICAgICAgICBpZiAoYXV0byBqc1RvV2FzbUZ1bmN0aW9u
ID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgp
KSB7Ci0gICAgICAgICAgICBqc0VudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKGpzVG9XYXNtRnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihqc1RvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3Zl
TG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oanNFbnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7
CisgICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsK
KyAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgeworICAgICAg
ICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6Q2FsbGVlOjpjcmVhdGUoV1RG
TW92ZShlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2Fs
bGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENh
bGxlZS5nZXQoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVu
Y3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdl
dCgpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNv
bnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50
cnlwb2ludENhbGxlZSA9IFdhc206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVu
dHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVT
ZWN0aW9uLmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKIAotICAgICAgICBjYWxsYmFj
ayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoanNFbnRyeXBvaW50Q2FsbGVlKSwgV1RG
TW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1
bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3
YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IDY3Y2NmNWUuLjQ5MTBjODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTI5LDU5NiArMjksMTQgQEAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNp
bmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKLSNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJOYXRpdmVFcnJvckNvbnN0cnVjdG9y
LmgiCi0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgiCi0jaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKLSNpbmNsdWRlICJXYXNtRXhj
ZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiB1c2lu
ZyBKSVQgPSBDQ2FsbEhlbHBlcnM7CiAKLXN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlND
ZWxsKEpJVCYgaml0LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKLXsKLSAg
ICAvLyBXZSdyZSBjYWxsaW5nIG91dCBvZiB0aGUgY3VycmVudCBXZWJBc3NlbWJseS5JbnN0YW5j
ZS4gVGhhdCBJbnN0YW5jZSBoYXMgYSBsaXN0IG9mIGFsbCBpdHMgaW1wb3J0IGZ1bmN0aW9ucy4K
LSAgICBqaXQubG9hZFdhc21Db250ZXh0KHJlc3VsdCk7Ci0gICAgaml0LmxvYWRQdHIoSklUOjpB
ZGRyZXNzKHJlc3VsdCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0
aW9uKGltcG9ydEluZGV4KSksIHJlc3VsdCk7Ci19Ci0KLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pzKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5m
bz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25l
ZCBpbXBvcnRJbmRleCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHBy
b3Blcmx5IGFic3RyYWN0IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KLSAgICAvLyBJdCdk
IGJlIHN1cGVyIGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjk0MDEKLSAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9
IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwotICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9u
JiBqc0NDID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAg
IHVuc2lnbmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBKSVQg
aml0OwotCi0gICAgLy8gTm90ZTogV2FzbUIzSVJHZW5lcmF0b3IgYXNzdW1lcyB0aGF0IHRoaXMg
c3R1YiB0cmVhdHMgU1AgYXMgYSBjYWxsZWUgc2F2ZS4KLSAgICAvLyBJZiB3ZSBldmVyIGNoYW5n
ZSB0aGlzLCB3ZSB3aWxsIGFsc28gbmVlZCB0byBjaGFuZ2UgV2FzbUIzSVJHZW5lcmF0b3IuCi0K
LSAgICAvLyBCZWxvdywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBp
cyBhbHdheXMgb24gdGhlIHN0YWNrLgotICAgIEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6ZSgp
KTsKLSAgICBBU1NFUlQoIWpzQ0MubV9mcHJBcmdzLnNpemUoKSk7Ci0KLSAgICBqaXQuZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigwKSwg
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJWE1F
IFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1MzIxCi0KLSAgICB7Ci0gICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0g
ZmFsc2U7Ci0gICAgICAgIGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpID09
IEk2NDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3Vu
dCAmJiAhaGFzQmFkSTY0VXNlOyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAg
ICAgICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotCi0gICAgICAgICAgICBjYXNlIEk2NDogewotICAgICAgICAgICAgICAg
IGhhc0JhZEk2NFVzZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7Ci0gICAg
ICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigqdm0pOwotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
KEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIENhbGxlZS4K
LSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6
YXJndW1lbnRHUFIyLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKLQotICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGpp
dC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICAgICAgICAgIHZvaWQgKCp0aHJv
d0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikgPSBbXSAoRXhlY1N0
YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0KSAtPiB2b2lkIHsK
LSAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSgqdm0pOwotICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICBh
dXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGdsb2JhbE9iamVj
dC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVNDSUlMaXRlcmFs
KCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0
ZWQgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+
Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWls
dXJlOjpPdXRPZk1lbW9yeSk7Ci0KLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0
aHJvd0JhZEk2NCk7Ci0gICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWld
IiwgaW1wb3J0SW5kZXgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEhlcmUgd2UgYXNz
dW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZlcyBhdCBsZWFzdCBhbGwgdGhl
IHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBzYXZlIGFuZCBy
ZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNhbGxlZSBhbHJlYWR5IHRvb2sg
Y2FyZSBvZiB0aGlzLgotICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdDYWxsZWVTYXZlcyA9IHdhc21D
Qy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgbWlzc2luZ0NhbGxlZVNhdmVzLmV4Y2x1ZGUo
anNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOwotICAgIEFTU0VSVChtaXNzaW5nQ2FsbGVlU2F2
ZXMuaXNFbXB0eSgpKTsKLQotICAgIGlmICghT3B0aW9uczo6dXNlQ2FsbElDc0ZvcldlYkFzc2Vt
Ymx5VG9KU0NhbGxzKCkpIHsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhcmdDb3VudCAqIHNpemVvZih1aW50NjRfdCkpOwot
ICAgICAgICBjaGFyKiBidWZmZXIgPSBhcmdDb3VudCA/IHN0YXRpY19jYXN0PGNoYXIqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogbnVsbHB0cjsKLSAgICAgICAgdW5zaWduZWQgbWFy
c2hhbGxlZEdQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0g
ICAgICAgIHVuc2lnbmVkIGJ1ZmZlck9mZnNldCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zm
c2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBjb25zdCBHUFJSZWcgc2NyYXRjaEdQUiA9IEdQ
UkluZm86OnJlZ0NTMDsKLSAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNp
emVvZihSZWdpc3RlcikpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpOwotCi0gICAgICAgIGZvciAo
dW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAg
ICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKLSAgICAg
ICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAg
ICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAg
Y2FzZSBJNjQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGdwclJlZzsK
LSAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3YXNtQ0MubV9ncHJBcmdzLnNp
emUoKSkKLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0gd2FzbUNDLm1fZ3ByQXJnc1ttYXJz
aGFsbGVkR1BSc10uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdp
c3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBzY3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBncHJS
ZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
NjQoSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGdw
clJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0
cihncHJSZWcsIGdwclJlZyk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBi
dWZmZXIgKyBidWZmZXJPZmZzZXQpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEdQUnM7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IEYzMjogewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7Ci0gICAgICAgICAgICAgICAg
aWYgKG1hcnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBh
bHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFi
bGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJn
dW1lbnRGUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KEpJVDo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAg
ICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoZnByUmVnLCBm
cHJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChmcHJSZWcsIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciAr
IGJ1ZmZlck9mZnNldCk7Ci0gICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRjY0OiB7
Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKLSAgICAgICAgICAgICAgICBpZiAobWFy
c2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
c3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBz
Y3JhdGNoLgotICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjA7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOwotICAgICAgICAgICAg
ICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBidWZmZXJP
ZmZzZXQpOwotICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1
ZmZlck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlciksIHNjcmF0Y2hHUFIpOwotICAgICAgICBpZiAoYXJnQ291bnQpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSBHQyBzaG91bGQgbm90IGxvb2sgYXQgdGhpcyBidWZmZXIgYXQgYWxsLCB0
aGVzZSBhcmVuJ3QgSlNWYWx1ZXMuCi0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHVpbnQ2NF90ICgqY2FsbEZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
U2lnbmF0dXJlSW5kZXgsIHVpbnQ2NF90KikgPQotICAgICAgICAgICAgW10gKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGNhbGxlZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVp
bnQ2NF90KiBidWZmZXIpIC0+IHVpbnQ2NF90IHsgCi0gICAgICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAg
ICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVy
ZS5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGFyZzsKLSAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgVm9pZDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBq
c051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihidWZmZXJbYXJnTnVtXSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRjMyOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9
IGpzTnVtYmVyKGJpdHdpc2VfY2FzdDxkb3VibGU+KGJ1ZmZlclthcmdOdW1dKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICAgICAgICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gY2FsbGVlLT5tZXRob2RUYWJsZSgqdm0pLT5nZXRDYWxsRGF0YShjYWxsZWUsIGNh
bGxEYXRhKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxs
VHlwZTo6Tm9uZSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMs
IGNhbGxlZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKLSAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIDApOwotCi0gICAgICAg
ICAgICAgICAgdWludDY0X3QgcmVhbFJlc3VsdDsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAgICAgICAgIGNhc2UgSTY0OgotICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlYWxSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHJlc3VsdC50b0ludDMyKGV4ZWMpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAg
ICAgICAgICAgICBjYXNlIEYzMjogewotICAgICAgICAgICAgICAgICAgICByZWFsUmVzdWx0ID0g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihyZXN1bHQudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVhbFJlc3VsdDsKLSAgICAgICAgICAgIH07Ci0gICAgICAg
IAotICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0g
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgICAg
ICAKLSAgICAgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJbmRleCwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1i
ZXJPZkFyZ3VtZW50UmVnaXN0ZXJzID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0aCB0aGUgY2Fs
bCBiZWxvdy4iKTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUlu
ZGV4KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOwotICAgICAgICBhdXRv
IGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmVtaXRF
eGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVj
ayk7Ci0KLSAgICAgICAgLy8gZXhjZXB0aW9uIGhlcmUuCi0gICAgICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7Ci0gICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSog
ZXhlYykgLT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAg
ICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAg
ICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2Fs
bEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICB9OwotICAgICAgICBhdXRvIGV4Y2VwdGlvbkNhbGwg
PSBqaXQuY2FsbCgpOwotICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwot
Ci0gICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7Ci0gICAgICAgIHN3aXRjaCAoc2lnbmF0
dXJlLnJldHVyblR5cGUoKSkgewotICAgICAgICBjYXNlIEY2NDogewotICAgICAgICAgICAgaml0
Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEYz
MjogewotICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgICAgICBqaXQuY29udmVydERv
dWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVl
RlBSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGppdC5lbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOwotICAgICAgICBqaXQucmV0KCk7Ci0KLSAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKLSAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkp
OwotCi0gICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjYWxsRnVuYyk7Ci0gICAgICAgIGxp
bmtCdWZmZXIubGluayhleGNlcHRpb25DYWxsLCBkb1Vud2luZGluZyk7Ci0KLSAgICAgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBp
bXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCku
ZGF0YSgpKSk7Ci0gICAgfQotCi0gICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3Jt
IGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJUkdlbmVyYXRvcgotICAgIC8vIHdpbGwg
ZG8gdGhlIHN0YWNrIGNoZWNrIGZvciB1cy4gV2hlbmV2ZXIgaXQgZGV0ZWN0cyB0aGF0IGl0IG1p
Z2h0IG1ha2UKLSAgICAvLyBhIGNhbGwgdG8gdGhpcyB0aHVuaywgaXQnbGwgbWFrZSBzdXJlIGl0
cyBzdGFjayBjaGVjayBpbmNsdWRlcyBzcGFjZQotICAgIC8vIGZvciB1cyBoZXJlLgotCi0gICAg
Y29uc3QgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gYXJnQ291bnQgKyAxOyAvLyBUaGVy
ZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KLSAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlJlZ3NG
b3JDYWxsID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBudW1iZXJPZlBhcmFt
ZXRlcnM7Ci0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBudW1iZXJP
ZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KTsKLSAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKLSAgICBq
aXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIEpJVDo6QWRkcmVzcyBjYWxs
ZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOwotCi0gICAgLy8gRklYTUUgbWFrZSB0aGVzZSBsb29wcyB3aGljaCBzd2l0Y2ggb24g
U2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suIEl0J2xs
IG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdlIHNpZ25hdHVyZXMuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1NDcKLSAgICAKLSAgICAvLyBGaXJzdCBnbyB0aHJv
dWdoIHRoZSBpbnRlZ2VyIHBhcmFtZXRlcnMsIGZyZWVpbmcgdXAgdGhlaXIgcmVnaXN0ZXIgZm9y
IHVzZSBhZnRlcndhcmRzLgotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEdQUnMg
PSAwOwotICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBScyA9IDA7Ci0gICAgICAgIHVuc2ln
bmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIHVuc2lnbmVkIGZyT2Zm
c2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFy
Z051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0g
c2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUp
IHsKLSAgICAgICAgICAgIGNhc2UgVm9pZDoKLSAgICAgICAgICAgIGNhc2UgRnVuYzoKLSAgICAg
ICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgICAgIGNhc2UgSTY0OgotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCi0gICAg
ICAgICAgICBjYXNlIEkzMjogewotICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFyc2hhbGxl
ZEdQUnNdLmdwcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJz
IGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgZ3ByUmVnID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEpJ
VDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBncHJSZWcp
OwotICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJzOwotICAgICAg
ICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJSZWcsIGdwclJlZyk7IC8vIENsZWFy
IG5vbi1pbnQzMiBhbmQgbm9uLXRhZyBiaXRzLgotICAgICAgICAgICAgICAgIGppdC5ib3hJbnQz
MihncHJSZWcsIEpTVmFsdWVSZWdzKGdwclJlZyksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0g
ICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0
KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQg
Kz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNhc2UgRjMyOgotICAgICAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAg
ICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBiZWxvdy4KLSAgICAgICAgICAgICAgICBpZiAo
bWFyc2hhbGxlZEZQUnMgPj0gd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKytt
YXJzaGFsbGVkRlBSczsKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIHsKLSAgICAgICAgLy8gSW50ZWdlciByZWdpc3RlcnMg
aGF2ZSBhbHJlYWR5IGJlZW4gc3BpbGxlZCwgdGhlc2UgYXJlIG5vdyBhdmFpbGFibGUuCi0gICAg
ICAgIEdQUlJlZyBkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQ
UjA7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwotICAg
ICAgICBib29sIGhhc01hdGVyaWFsaXplZERvdWJsZUVuY29kZU9mZnNldCA9IGZhbHNlOwotICAg
ICAgICBhdXRvIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0ID0gWyZoYXNNYXRlcmlhbGl6
ZWREb3VibGVFbmNvZGVPZmZzZXQsICZqaXRdIChHUFJSZWcgZGVzdCkgewotICAgICAgICAgICAg
aWYgKCFoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfYXNzZXJ0KERvdWJsZUVuY29kZU9mZnNldCA9PSAxbGwgPDwgNDgsICJjb2RlZ2Vu
IGFzc3VtZXMgdGhpcyBiZWxvdyIpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1
c3RlZEltbTMyKDEpLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBqaXQubHNoaWZ0NjQoSklUOjpU
cnVzdGVkSW1tMzIoNDgpLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBoYXNNYXRlcmlhbGl6ZWRE
b3VibGVFbmNvZGVPZmZzZXQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsKLSAgICAgICAgdW5zaWduZWQgbWFy
c2hhbGxlZEZQUnMgPSAwOwotICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENh
bGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpOwotICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0p
IHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0p
OwotICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFZvaWQ6
Ci0gICAgICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAg
ICAgICAgICBjYXNlIEk2NDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgotICAgICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAg
ICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBhYm92ZS4KLSAgICAgICAgICAgICAgICBpZiAo
bWFyc2hhbGxlZEdQUnMgPj0gd2FzbUNDLm1fZ3ByQXJncy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgKytt
YXJzaGFsbGVkR1BSczsKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBG
MzI6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAgICAgICAgICAgIGlm
IChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQotICAgICAgICAgICAg
ICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIoKTsK
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxy
ZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxl
IGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFyZ3Vt
ZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKLSAgICAgICAg
ICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywgZnBy
UmVnKTsKLSAgICAgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7Ci0gICAgICAgICAg
ICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaCk7Ci0gICAgICAgICAgICAg
ICAgbWF0ZXJpYWxpemVEb3VibGVFbmNvZGVPZmZzZXQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVn
KTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBz
Y3JhdGNoKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVl
RnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICArK21hcnNo
YWxsZWRGUFJzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOwotICAgICAg
ICAgICAgICAgIGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQot
ICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRG
UFJzXS5mcHIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBh
cmUgYXZhaWxhYmxlIGFzIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQ
UkluZm86OmFyZ3VtZW50RlBSMDsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUo
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJl
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oZnByUmVnKTsK
LSAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgICAgICBtYXRlcmlhbGl6ZURvdWJsZUVuY29kZU9mZnNldChkb3VibGVFbmNvZGVP
ZmZzZXRHUFJSZWcpOwotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChkb3VibGVFbmNvZGVPZmZz
ZXRHUFJSZWcsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gs
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICBjYWxsZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgICsrbWFyc2hhbGxlZEZQUnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBqaXQubG9hZFdhc21D
b250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgIEdQUlJlZyBpbXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJ
bmZvOjpyZWdUMDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwIGZvciBzbG93IHBhdGgg
YmVsb3cuCi0gICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBv
cnRKU0NlbGxHUFJSZWcpKTsKLQotICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKGppdCwgaW1w
b3J0SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0KLSAgICBqaXQuc3RvcmU2NChpbXBvcnRK
U0NlbGxHUFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIGppdC5zdG9yZTMy
KEpJVDo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhP
ZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpU
cnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxG
cmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKLQotICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBp
cyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4Ci0KLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKCk7Ci0gICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIGltcG9ydEpTQ2VsbEdQUlJlZyk7Ci0g
ICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVQ6OlRydXN0ZWRJbW1Q
dHIgaW5pdGlhbFJpZ2h0VmFsdWUoMCk7Ci0gICAgSklUOjpKdW1wIHNsb3dQYXRoID0gaml0LmJy
YW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQ
UlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0VmFsdWUpOwotICAgIEpJVDo6Q2FsbCBm
YXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgIEpJVDo6SnVtcCBkb25lID0gaml0Lmp1bXAo
KTsKLSAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBp
biByZWdUMCBoZXJlLgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJl
IGluIHJlZ1QyLgotICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAg
IGRvbmUubGluaygmaml0KTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9u
Q2hlY2tzOwotCi0gICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7Ci0gICAgY2Fz
ZSBWb2lkOgotICAgICAgICAvLyBEaXNjYXJkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1
bmM6Ci0gICAgY2FzZSBBbnlmdW5jOgotICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1i
ZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVy
biBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJNjQ6
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92
ZS4KLSAgICB9Ci0gICAgY2FzZSBJMzI6IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBkb25lOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwotICAgICAgICBzbG93UGF0aC5hcHBl
bmQoaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRv
UHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0g
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAgIHNsb3dQYXRoLmxpbmso
JmppdCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAg
ICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwot
Ci0gICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0g
W10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCi0gICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQzMihleGVjKTsK
LSAgICAgICAgfTsKLSAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0kz
Mik7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgRjMyOiB7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKLSAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVy
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAg
ICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwotICAgICAgICAvLyBX
ZSdyZSBhbiBpbnQzMgotICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZl
cnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgaXNE
b3VibGUubGluaygmaml0KTsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFn
VHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hZGQ2
NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAg
ICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBk
b25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7
Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNl
cHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwotCi0gICAg
ICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKLSAgICAgICAgICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1i
ZXIoZXhlYykpOwotICAgICAgICB9OwotICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
Y29udmVydFRvRjMyKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOwotICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNo
SWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVy
cyk7Ci0gICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVl
UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0g
ICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCi0gICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAg
ICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0K
LSAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAg
ICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGRvbmUuYXBwZW5kKGppdC5q
dW1wKCkpOwotCi0gICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKLSAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBl
bmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7Ci0KLSAgICAgICAgZG91YmxlICgqY29u
dmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdikgLT4gZG91YmxlIHsgCi0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
ICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOwotICAgICAgICB9KTsKLQotICAg
ICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAg
ICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBpZiAo
IWV4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5r
KCZqaXQpOwotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigqdm0pOwotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoKTsKLSAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgICAg
ICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykg
LT4gdm9pZCB7Ci0gICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgICAgICAgICAgZ2Vu
ZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOwotICAgICAgICB9OwotCi0gICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxs
LCBkb1Vud2luZGluZyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0g
ICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQotICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKLQot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0g
ICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhC
ZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKLSAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGwoZmFzdENhbGwpOwotICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0
dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKLQotICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9y
dFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpKTsKLX0KLQogRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVy
ZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKIHsKICAgICBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwpAQCAt
NjMzLDI0ICs1MSwyMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdG
YWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIEFTU0VSVChzaXpl
UmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CiAgICAgR1BSUmVnIHNpemVSZWdBc1Nj
cmF0Y2ggPSBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXI7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxDb250ZXh0LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U+Ojp2YWx1ZSwgIlRoaXMg
aXMgYXNzdW1lZCBpbiB0aGUgY29kZSBiZWxvdy4iKTsKICAgICAvLyBCMydzIGNhbGwgY29kZWdl
biBlbnN1cmVzIHRoYXQgdGhlIEpTQ2VsbCBpcyBhIFdlYkFzc2VtYmx5RnVuY3Rpb24uCi0gICAg
aml0LmxvYWRXYXNtQ29udGV4dChzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgot
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24oaW1wb3J0SW5kZXgpKSwgc2NyYXRj
aCk7Ci0KLSAgICAvLyBHZXQgdGhlIGNhbGxlZSdzIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGFuZCBz
ZXQgaXQgYXMgV2FzbUNvbnRleHQuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9y
aW5nIGl0cyBvd24gSW5zdGFuY2UuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0
Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mSW5zdGFuY2UoKSksIGJhc2VNZW1vcnkp
OyAvLyBJbnN0YW5jZSouCi0gICAgaml0LnN0b3JlV2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7Cisg
ICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQg
SW5zdGFuY2UqCisgICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXZWJBc3NlbWJseS5JbnN0YW5jZSBh
bmQgc2V0IGl0IGFzIFdhc21Db250ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtl
IGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCisgICAgaml0LmxvYWRQdHIoSklU
OjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZUYXJnZXRJbnN0YW5jZShpbXBvcnRJbmRleCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3Nl
bWJseUluc3RhbmNlKi4KKyAgICAvLyBXaGlsZSB3ZSdyZSBhY2Nlc3NpbmcgdGhhdCBjYWNoZWxp
bmUsIGFsc28gZ2V0IHRoZSB3YXNtIGVudHJ5cG9pbnQgc28gd2UgY2FuIHRhaWwgY2FsbCB0byBp
dCBiZWxvdy4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21FbnRyeXBvaW50KGltcG9ydEluZGV4
KSksIHNjcmF0Y2gpOyAvLyBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbi4KKyAgICBq
aXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKGJhc2VNZW1vcnkpOwogCiAgICAgaml0LmxvYWRQ
dHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVnQXNTY3JhdGNoKTsKICAgICBqaXQu
c3RvcmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKIAogICAgIC8v
IEZJWE1FIHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdlYkFzc2VtYmx5Lklu
c3RhbmNlIGhhdmUgdGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3Mg
YmFzZU1lbW9yeSByZWdpc3RlciBhcyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMu
Ci0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBKU1dlYkFzc2VtYmx5
TWVtb3J5Ki4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBX
YXNtOjpNZW1vcnkqLgogICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRo
ZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1
YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXpl
KCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICBqaXQu
bG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zm
c2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtTWVtb3J5Ojp2b2lkKi4KKyAgICBq
aXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRP
ZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAg
IGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNl
dE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
QVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAg
QVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdpc3RlciAhPSBzY3JhdGNoKTsKQEAgLTY1OCw3ICs3
NSw2IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdh
c21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgfQogCiAgICAgLy8gVGFpbCBjYWxs
IGludG8gdGhlIGNhbGxlZSBXZWJBc3NlbWJseSBmdW5jdGlvbi4KLSAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3Moc2NyYXRjaCwgV2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbigpKSwgc2NyYXRjaCk7CiAgICAgaml0LmxvYWRQdHIoc2NyYXRj
aCwgc2NyYXRjaCk7CiAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5oCmluZGV4IDRlMjYyYmEuLmZlYzZiZDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw5ICsyOCw3IEBACiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIlZN
LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00NCw3ICs0Miw2IEBA
IGVudW0gY2xhc3MgQmluZGluZ0ZhaWx1cmUgewogfTsKIAogRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRl
eCk7Ci1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNt
VG9KcyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRl
eCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCmluZGV4IDcw
ZmVmYjAuLmRkMjdlNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suY3BwCkBAIC0zMSwyMCArMzEsMjggQEAKIAogI2luY2x1ZGUgIldhc21CQlFQbGFuSW5s
aW5lcy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
CiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5m
b3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQorUmVmPENvZGVCbG9jaz4gQ29kZUJsb2NrOjpj
cmVhdGUoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlv
biYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAg
ICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKENvZGVCbG9j
aykpKSBDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24sIFdURk1vdmUo
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKnJlc3VsdCk7Cit9CisKK0NvZGVCbG9jazo6Q29kZUJsb2NrKENvbnRleHQqIGNv
bnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0
aW9uLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBtX2NhbGxlZUNvdW50KG1v
ZHVsZUluZm9ybWF0aW9uLmludGVybmFsRnVuY3Rpb25Db3VudCgpKQogICAgICwgbV9tb2RlKG1v
ZGUpCiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7Ci0gICAg
bV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKG51bGxwdHIsIG1ha2VSZWYobW9kdWxlSW5m
b3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpD
YWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlz
KV0gKFZNKiwgUGxhbiYpIHsKKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihj
b250ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBpbGUs
IGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgewogICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgpKSB7CiAg
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7Ci0gICAg
ICAgICAgICBtX3BsYW4gPSBudWxscHRyOworICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5p
c2hlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY2LDEwICs3NCwx
MCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKICAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0g
bV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOwogICAgICAgICBtX3RpZXJVcENvdW50
cyA9IG1fcGxhbi0+dGFrZVRpZXJVcENvdW50cygpOwogCi0gICAgICAgIG1fcGxhbiA9IG51bGxw
dHI7Ci0gICAgfSkpKTsKLQorICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAg
fSksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7
CiAgICAgbV9wbGFuLT5zZXRNb2RlKG1vZGUpOworCiAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNt
OjplbnN1cmVXb3JrbGlzdCgpOwogICAgIC8vIE5vdGUsIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGVu
cXVldWUgdGhlIHBsYW4sIHRoZXJlIGlzIGEgY2hhbmNlIHRoZSBhYm92ZSBjYWxsYmFjayB3aWxs
IGJlIGNhbGxlZC4KICAgICB3b3JrbGlzdC5lbnF1ZXVlKG1ha2VSZWYoKm1fcGxhbi5nZXQoKSkp
OwpAQCAtOTIsNyArMTAwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OndhaXRVbnRpbEZpbmlzaGVkKCkK
ICAgICAvLyBlbHNlLCBpZiB3ZSBkb24ndCBoYXZlIGEgcGxhbiwgd2UncmUgYWxyZWFkeSBjb21w
aWxlZC4KIH0KIAotdm9pZCBDb2RlQmxvY2s6OmNvbXBpbGVBc3luYyhWTSYgdm0sIEFzeW5jQ29t
cGlsYXRpb25DYWxsYmFjayYmIHRhc2spCit2b2lkIENvZGVCbG9jazo6Y29tcGlsZUFzeW5jKENv
bnRleHQqIGNvbnRleHQsIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiB7CiAgICAg
UmVmUHRyPFBsYW4+IHBsYW47CiAgICAgewpAQCAtMTA0LDEyICsxMTIsMTEgQEAgdm9pZCBDb2Rl
QmxvY2s6OmNvbXBpbGVBc3luYyhWTSYgdm0sIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRh
c2spCiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8ga2VlcCBhIFJlZlB0ciBvbiB0aGUgUGxh
biBiZWNhdXNlIHRoZSB3b3JrbGlzdCB3aWxsIGtlZXAKICAgICAgICAgLy8gYSBSZWZQdHIgb24g
dGhlIFBsYW4gdW50aWwgdGhlIHBsYW4gZmluaXNoZXMgbm90aWZ5aW5nIGFsbCBvZiBpdHMgY2Fs
bGJhY2tzLgogICAgICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsK
LSAgICAgICAgcGxhbi0+YWRkQ29tcGxldGlvblRhc2sodm0sIGNyZWF0ZVNoYXJlZFRhc2s8UGxh
bjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgdGFzayA9IFdURk1vdmUodGFzayksIHByb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoVk0qIHZtLCBQbGFuJikgewotICAgICAgICAg
ICAgQVNTRVJUKHZtKTsKLSAgICAgICAgICAgIHRhc2stPnJ1bigqdm0sIG1ha2VSZWYoKnRoaXMp
KTsKKyAgICAgICAgcGxhbi0+YWRkQ29tcGxldGlvblRhc2soY29udGV4dCwgY3JlYXRlU2hhcmVk
VGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCB0YXNrID0gV1RGTW92ZSh0YXNrKSwgcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgeworICAgICAgICAg
ICAgdGFzay0+cnVuKG1ha2VSZWYoKnRoaXMpKTsKICAgICAgICAgfSkpOwogICAgIH0gZWxzZQot
ICAgICAgICB0YXNrLT5ydW4odm0sIG1ha2VSZWYoKnRoaXMpKTsKKyAgICAgICAgdGFzay0+cnVu
KG1ha2VSZWYoKnRoaXMpKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKE1lbW9y
eU1vZGUgbWVtb3J5TW9kZSkKQEAgLTEzMCw2ICsxMzcsMTMgQEAgYm9vbCBDb2RlQmxvY2s6Omlz
U2FmZVRvUnVuKE1lbW9yeU1vZGUgbWVtb3J5TW9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
Kwordm9pZCBDb2RlQmxvY2s6OnNldENvbXBpbGF0aW9uRmluaXNoZWQoKQoreworICAgIG1fcGxh
biA9IG51bGxwdHI7CisgICAgbV9jb21waWxhdGlvbkZpbmlzaGVkLnN0b3JlKHRydWUpOworfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IDJk
YmY3ZTQuLjlmYzE5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJs
b2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIK
ICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM3LDExICszOCwxMCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgQ2FsbGVlOworc3Ry
dWN0IENvbnRleHQ7CiBjbGFzcyBCQlFQbGFuOwogY2xhc3MgT01HUGxhbjsKIHN0cnVjdCBNb2R1
bGVJbmZvcm1hdGlvbjsKQEAgLTUxLDIwICs1MSwxNiBAQCBlbnVtIGNsYXNzIE1lbW9yeU1vZGUg
OiB1aW50OF90OwogICAgIAogY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPENvZGVCbG9jaz4gewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5
cGUoVk0mLCBSZWY8Q29kZUJsb2NrPiYmKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBl
KFJlZjxDb2RlQmxvY2s+JiYpOwogICAgIHVzaW5nIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayA9
IFJlZlB0cjxXVEY6OlNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBlPj47Ci0gICAgc3RhdGljIFJlZjxD
b2RlQmxvY2s+IGNyZWF0ZShNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1
bGVJbmZvcm1hdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvZGVC
bG9jayhtb2RlLCBtb2R1bGVJbmZvcm1hdGlvbikpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPENv
ZGVCbG9jaz4gY3JlYXRlKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYs
IENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgdm9p
ZCB3YWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHZvaWQgY29tcGlsZUFzeW5jKFZNJiwgQXN5bmND
b21waWxhdGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBB
c3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CiAKICAgICBib29sIGNvbXBpbGF0aW9uRmluaXNo
ZWQoKQogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAg
ICAgICByZXR1cm4gIW1fcGxhbjsKKyAgICAgICAgcmV0dXJuIG1fY29tcGlsYXRpb25GaW5pc2hl
ZC5sb2FkKCk7CiAgICAgfQogICAgIGJvb2wgcnVubmFibGUoKSB7IHJldHVybiBjb21waWxhdGlv
bkZpbmlzaGVkKCkgJiYgIW1fZXJyb3JNZXNzYWdlOyB9CiAKQEAgLTc5LDggKzc1LDExIEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVy
biBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpOyB9CiAKKyAgICAvLyBUaGVzZSB0d28gY2Fs
bGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25jZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9w
dWxhdGVkLgorCiAgICAgQ2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VS
VChydW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNl
ID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4
ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogCkBAIC05MCw2
ICs4OSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgQ2FsbGVlJiB3YXNtRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAg
IHsKKyAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChm
dW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKICAgICAgICAgdW5z
aWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENv
dW50KCk7CiAgICAgICAgIGlmIChtX29wdGltaXplZENhbGxlZXNbY2FsbGVlSW5kZXhdKQpAQCAt
MTE3LDcgKzExNyw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE9NR1Bs
YW47CiAKLSAgICBDb2RlQmxvY2soTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mKTsKKyAg
ICBDb2RlQmxvY2soQ29udGV4dCosIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiwgQ3Jl
YXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgdm9pZCBzZXRD
b21waWxhdGlvbkZpbmlzaGVkKCk7CiAgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKICAgICBN
ZW1vcnlNb2RlIG1fbW9kZTsKICAgICBWZWN0b3I8UmVmUHRyPENhbGxlZT4+IG1fY2FsbGVlczsK
QEAgLTEyOCw2ICsxMjksNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKICAgICBWZWN0b3I8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAgUmVmUHRyPEJCUVBs
YW4+IG1fcGxhbjsKKyAgICBzdGQ6OmF0b21pYzxib29sPiBtX2NvbXBpbGF0aW9uRmluaXNoZWQg
eyBmYWxzZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBMb2NrIG1fbG9jazsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5jcHAKaW5kZXggZmVh
MTZkZS4uY2YzNDg1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0
LmNwcApAQCAtMjgsMzAgKzI4LDQxIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNp
bmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1
ZGUgIk9wdGlvbnMuaCIKKwogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9GYXN0VExT
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLUNvbnRleHQqIGxvYWRD
b250ZXh0KFZNJiB2bSkKK2Jvb2wgQ29udGV4dDo6dXNlRmFzdFRMUygpCit7CisjaWYgRU5BQkxF
KEZBU1RfVExTX0pJVCkKKyAgICByZXR1cm4gT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250
ZXh0KCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIENvbnRleHQ6OmxvYWQoKSBjb25zdAogewogI2lmIEVOQUJMRShGQVNUX1RM
U19KSVQpCi0gICAgaWYgKHVzZUZhc3RUTFNGb3JDb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8Q29udGV4dCo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdChXVEZfV0FT
TV9DT05URVhUX0tFWSkpOworICAgIGlmICh1c2VGYXN0VExTKCkpCisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNf
ZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZKSk7CiAjZW5kaWYKLSAgICByZXR1cm4gdm0ud2Fz
bUNvbnRleHQ7CisgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCi12b2lkIHN0b3JlQ29udGV4dChW
TSYgdm0sIENvbnRleHQqIGNvbnRleHQpCit2b2lkIENvbnRleHQ6OnN0b3JlKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdCwgdm9pZCogc29mdFN0YWNrTGltaXQpCiB7CiAjaWYgRU5BQkxFKEZB
U1RfVExTX0pJVCkKLSAgICBpZiAodXNlRmFzdFRMU0ZvckNvbnRleHQoKSkKLSAgICAgICAgX3B0
aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZLCBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KGNvbnRleHQpKTsKKyAgICBpZiAodXNlRmFzdFRMUygpKQorICAgICAgICBfcHRo
cmVhZF9zZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVksIGJpdHdpc2VfY2Fz
dDx2b2lkKj4oaW5zdCkpOwogI2VuZGlmCi0gICAgdm0ud2FzbUNvbnRleHQgPSBjb250ZXh0Owot
ICAgIGlmIChjb250ZXh0KQotICAgICAgICBjb250ZXh0LT5zZXRDYWNoZWRTdGFja0xpbWl0KHZt
LnNvZnRTdGFja0xpbWl0KCkpOworICAgIGluc3RhbmNlID0gaW5zdDsKKyAgICBpZiAoaW5zdGFu
Y2UpCisgICAgICAgIGluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KHNvZnRTdGFja0xpbWl0
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29udGV4dC5oCmluZGV4IDNjZjY1ZmIuLmMyYjUxZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaApAQCAtMjcsMzcgKzI3LDIwIEBACiAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIK
LSNpbmNsdWRlICJPcHRpb25zLmgiCi0KIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKK2Ns
YXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIAogbmFtZXNwYWNlIFdhc20gewogCi0vLyBGSVhN
RTogV2UgbWlnaHQgd2FudCB0aGlzIHRvIGJlIHNvbWV0aGluZyBlbHNlIGF0IHNvbWUgcG9pbnQ6
Ci0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMjYwCi11c2lu
ZyBDb250ZXh0ID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOwotCi1pbmxpbmUgYm9vbCB1c2VGYXN0
VExTKCkKLXsKLSNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIHJldHVybiBPcHRpb25zOjp1
c2VXZWJBc3NlbWJseUZhc3RUTFMoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19CitzdHJ1Y3QgQ29udGV4dCB7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5j
ZSB7IG51bGxwdHIgfTsKIAotaW5saW5lIGJvb2wgdXNlRmFzdFRMU0ZvckNvbnRleHQoKQotewot
ICAgIGlmICh1c2VGYXN0VExTKCkpCi0gICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VGYXN0VExT
Rm9yV2FzbUNvbnRleHQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBsb2FkKCkgY29uc3Q7CisgICAgdm9pZCBzdG9yZShKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqLCB2b2lkKiBzb2Z0U3RhY2tMaW1pdCk7CiAKLUNvbnRleHQqIGxvYWRDb250ZXh0KFZN
Jik7Ci12b2lkIHN0b3JlQ29udGV4dChWTSYsIENvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCB1
c2VGYXN0VExTKCk7Cit9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjIyODc5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOyAvLyBGSVhNRSB0
aGlzIHNob3VsZCBiZSBXYXNtOjpJbnN0YW5jZSwgc28gc2hvdWxkIHVzZSBiZWxvdy4gaHR0cHM6
Ly93ZWJraXQub3JnL2IvMTc3NDcyCisKK25hbWVzcGFjZSBXYXNtIHsKKworc3RydWN0IENvbXBp
bGF0aW9uQ29udGV4dDsKK3N0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uOworc3RydWN0IE1vZHVsZUlu
Zm9ybWF0aW9uOworY2xhc3MgU2lnbmF0dXJlOworc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNh
bGw7CisKKy8vIENyZWF0ZSB3cmFwcGVyIGNvZGUgdG8gY2FsbCBmcm9tIGVtYmVkZGVyIC0+IFdl
YkFzc2VtYmx5LgordXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4oQ29tcGlsYXRpb25Db250ZXh0JiwgY29u
c3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCk+OworCisvLyBDYWxsZWQgYXMg
c29vbiBhcyBhbiBleGNlcHRpb24gaXMgZGV0ZWN0ZWQuIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhl
IFBDIHRvIGNvbnRpbnVlIGF0LgordXNpbmcgVGhyb3dXYXNtRXhjZXB0aW9uID0gdm9pZCogKCop
KEV4ZWNTdGF0ZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSop
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmNwcAppbmRleCAyYjFkODI4Li5jYzFlN2QxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAt
MzAsMTEgKzMwLDExIEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiTWFjaGluZUNvbnRleHQuaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21F
eGNlcHRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21U
aHVua3MuaCIKIAorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFk
cy9TaWduYWxzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmgKaW5kZXggMzgxMjgzNi4uZTVlMDdhOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaApAQCAtMjcs
OCArMjcsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBX
YXNtIHsKIAogdm9pZCByZWdpc3RlckNvZGUodm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggYjIyMjIxNy4uZTdiM2RmNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtNDQsMTQgKzQ0LDE1
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU0Z1bmN0aW9uOwotCiBuYW1lc3BhY2Ug
QjMgewogY2xhc3MgQ29tcGlsYXRpb247CiB9CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAorc3RydWN0
IENvbXBpbGF0aW9uQ29udGV4dDsKK3N0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKKwogaW5saW5l
IGJvb2wgaXNWYWx1ZVR5cGUoVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiZTBlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKworI2luY2x1ZGUgIlJlZ2lzdGVyLmgi
CisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK25hbWVzcGFjZSB7
CitzaXplX3QgZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoTW9kdWxlJiBtb2R1bGUpCit7CisgICAgcmV0
dXJuIG1vZHVsZS5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHMuc2l6ZSgpICogc2l6ZW9mKFJl
Z2lzdGVyKTsKK30KK30KKworSW5zdGFuY2U6Okluc3RhbmNlKFJlZjxNb2R1bGU+JiYgbW9kdWxl
KQorICAgIDogbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQorICAgICwgbV9nbG9iYWxzKE1hbGxv
Y1B0cjx1aW50NjRfdD46Om1hbGxvYyhnbG9iYWxNZW1vcnlCeXRlU2l6ZShtX21vZHVsZS5nZXQo
KSkpKQoreworfQorCitJbnN0YW5jZTo6fkluc3RhbmNlKCkgeyB9CisKK3NpemVfdCBJbnN0YW5j
ZTo6ZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBnbG9iYWxNZW1v
cnlCeXRlU2l6ZShtX21vZHVsZS5nZXQoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21JbnN0YW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjA2ZmI4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSW5zdGFuY2UuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgor
I2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBJbnN0YW5jZSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxJbnN0YW5jZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SW5z
dGFuY2U+IGNyZWF0ZShSZWY8TW9kdWxlPiYmIG1vZHVsZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEluc3RhbmNlKFdURk1vdmUobW9kdWxlKSkpOworICAgIH0KKworICAg
IHZvaWQgZmluYWxpemVDcmVhdGlvbihSZWY8Q29kZUJsb2NrPiYmIGNvZGVCbG9jaykKKyAgICB7
CisgICAgICAgIG1fY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxvY2spOworICAgIH0KKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5JbnN0YW5jZSgpOworCisgICAgc2l6ZV90IGV4dHJhTWVtb3J5
QWxsb2NhdGVkKCkgY29uc3Q7CisKKyAgICBNb2R1bGUmIG1vZHVsZSgpIHsgcmV0dXJuIG1fbW9k
dWxlLmdldCgpOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVC
bG9jay5nZXQoKTsgfQorICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0
KCk7IH0KKyAgICBUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CisKKyAg
ICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxzLmdldCgpW2ldOyB9CisgICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQorICAgIGZsb2F0IGxvYWRGMzJHbG9i
YWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihsb2FkSTMy
R2xvYmFsKGkpKTsgfQorICAgIGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9CisgICAg
dm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFscy5nZXQo
KVtpXSA9IGJpdHM7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZFN0YWNr
TGltaXQpOyB9CisgICAgdm9pZCogY2FjaGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkU3RhY2tMaW1pdDsgfQorICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBs
aW1pdCkgeyBtX2NhY2hlZFN0YWNrTGltaXQgPSBsaW1pdDsgfQorCisgICAgZnJpZW5kIGNsYXNz
IEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOyAvLyBGSVhNRSByZW1vdmUgdGhpcyBvbmNlIHJl
ZmFjdG9yZWQgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTc3NDcyLgorCitwcml2YXRlOgorICAgIElu
c3RhbmNlKFJlZjxNb2R1bGU+JiYpOworCisgICAgUmVmPE1vZHVsZT4gbV9tb2R1bGU7CisgICAg
UmVmUHRyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CisgICAgUmVmUHRyPE1lbW9yeT4gbV9tZW1v
cnk7CisgICAgUmVmUHRyPFRhYmxlPiBtX3RhYmxlOworICAgIE1hbGxvY1B0cjx1aW50NjRfdD4g
bV9nbG9iYWxzOworICAgIHZvaWQqIG1fY2FjaGVkU3RhY2tMaW1pdCB7IGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkgfTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGM1ZjQ4ZTku
LjFjMWNmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBA
IC0yOCwxMyArMjgsMTkgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUg
IlZNLmgiCi0jaW5jbHVkZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09TQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8
d3RmL1BhZ2VCbG9jay5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxtdXRleD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTEsMTkgKzU3LDE5IEBAIE5FVkVS
X0lOTElORSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd2ViQXNzZW1ibHlDb3VsZG50R2V0
RmFzdE1lbW9yeSgpIHsgQ1JBCiBzdHJ1Y3QgTWVtb3J5UmVzdWx0IHsKICAgICBlbnVtIEtpbmQg
ewogICAgICAgICBTdWNjZXNzLAotICAgICAgICBTdWNjZXNzQW5kQXN5bmNHQywKLSAgICAgICAg
U3luY0dDQW5kUmV0cnkKKyAgICAgICAgU3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlLAor
ICAgICAgICBTeW5jVHJ5VG9SZWNsYWltTWVtb3J5CiAgICAgfTsKLSAgICAKKwogICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB0b1N0cmluZyhLaW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKICAgICAgICAgY2FzZSBTdWNjZXNzOgogICAgICAgICAgICAgcmV0dXJuICJTdWNj
ZXNzIjsKLSAgICAgICAgY2FzZSBTdWNjZXNzQW5kQXN5bmNHQzoKLSAgICAgICAgICAgIHJldHVy
biAiU3VjY2Vzc0FuZEFzeW5jR0MiOwotICAgICAgICBjYXNlIFN5bmNHQ0FuZFJldHJ5OgotICAg
ICAgICAgICAgcmV0dXJuICJTeW5jR0NBbmRSZXRyeSI7CisgICAgICAgIGNhc2UgU3VjY2Vzc0Fu
ZE5vdGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAgICAgcmV0dXJuICJTdWNjZXNzQW5kTm90
aWZ5TWVtb3J5UHJlc3N1cmUiOworICAgICAgICBjYXNlIFN5bmNUcnlUb1JlY2xhaW1NZW1vcnk6
CisgICAgICAgICAgICByZXR1cm4gIlN5bmNUcnlUb1JlY2xhaW1NZW1vcnkiOwogICAgICAgICB9
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtOTgsMTcgKzEwNCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIE1lbW9yeVJlc3Vs
dCByZXN1bHQgPSBbJl0gewogICAgICAgICAgICAgYXV0byBob2xkZXIgPSBob2xkTG9jayhtX2xv
Y2spOwogICAgICAgICAgICAgaWYgKG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6
OlN5bmNHQ0FuZFJldHJ5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KG51
bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3luY1RyeVRvUmVjbGFpbU1lbW9yeSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IEdpZ2FjYWdlOjp0cnlBbGxvY2F0ZVZpcnR1
YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsK
ICAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlS
ZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlU
b1JlY2xhaW1NZW1vcnkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX21lbW9yaWVzLmFw
cGVuZChyZXN1bHQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVz
dWx0KAogICAgICAgICAgICAgICAgIHJlc3VsdCwKLSAgICAgICAgICAgICAgICBtX21lbW9yaWVz
LnNpemUoKSA+PSBtX21heENvdW50IC8gMiA/IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5j
R0MgOiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3MpOworICAgICAgICAgICAgICAgIG1fbWVtb3JpZXMu
c2l6ZSgpID49IG1fbWF4Q291bnQgLyAyID8gTWVtb3J5UmVzdWx0OjpTdWNjZXNzQW5kTm90aWZ5
TWVtb3J5UHJlc3N1cmUgOiBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3MpOwogICAgICAgICB9KCk7CiAg
ICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bG9nV2ViQXNzZW1ibHlNZW1vcnkoKSkKQEAg
LTE1MywxMiArMTU5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgTWVtb3J5UmVzdWx0OjpLaW5kIHJl
c3VsdCA9IFsmXSB7CiAgICAgICAgICAgICBhdXRvIGhvbGRlciA9IGhvbGRMb2NrKG1fbG9jayk7
CiAgICAgICAgICAgICBpZiAobV9waHlzaWNhbEJ5dGVzICsgYnl0ZXMgPiBtZW1vcnlMaW1pdCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5Owor
ICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQ6OlN5bmNUcnlUb1JlY2xhaW1NZW1v
cnk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fcGh5c2ljYWxCeXRlcyArPSBieXRlczsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fcGh5c2ljYWxCeXRlcyA+PSBtZW1vcnlM
aW1pdCgpIC8gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNz
QW5kQXN5bmNHQzsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0OjpTdWNjZXNz
QW5kTm90aWZ5TWVtb3J5UHJlc3N1cmU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVy
biBNZW1vcnlSZXN1bHQ6OlN1Y2Nlc3M7CiAgICAgICAgIH0oKTsKQEAgLTIwNSw3ICsyMTEsNyBA
QCBzdGF0aWMgTWVtb3J5TWFuYWdlciYgbWVtb3J5TWFuYWdlcigpCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Ci1ib29sIHRyeUFuZEdDKFZNJiB2bSwgY29uc3QgRnVuYyYgYWxsb2NhdGUp
Citib29sIHRyeUFsbG9jYXRlKGNvbnN0IEZ1bmMmIGFsbG9jYXRlLCBjb25zdCBXVEY6OkZ1bmN0
aW9uPHZvaWQoTWVtb3J5OjpOb3RpZnlQcmVzc3VyZSk+JiBub3RpZnlNZW1vcnlQcmVzc3VyZSwg
Y29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKE1lbW9yeTo6U3luY1RyeVRvUmVjbGFpbSk+JiBzeW5j
VHJ5VG9SZWNsYWltTWVtb3J5KQogewogICAgIHVuc2lnbmVkIG51bVRyaWVzID0gMjsKICAgICBi
b29sIGRvbmUgPSBmYWxzZTsKQEAgLTIxNCwxNCArMjIwLDE2IEBAIGJvb2wgdHJ5QW5kR0MoVk0m
IHZtLCBjb25zdCBGdW5jJiBhbGxvY2F0ZSkKICAgICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN1
Y2Nlc3M6CiAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZEFzeW5jR0M6Ci0gICAgICAgICAgICB2
bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICBjYXNl
IE1lbW9yeVJlc3VsdDo6U3VjY2Vzc0FuZE5vdGlmeU1lbW9yeVByZXNzdXJlOgorICAgICAgICAg
ICAgaWYgKG5vdGlmeU1lbW9yeVByZXNzdXJlKQorICAgICAgICAgICAgICAgIG5vdGlmeU1lbW9y
eVByZXNzdXJlKE1lbW9yeTo6Tm90aWZ5UHJlc3N1cmVUYWcpOwogICAgICAgICAgICAgZG9uZSA9
IHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNZW1vcnlSZXN1bHQ6OlN5
bmNHQ0FuZFJldHJ5OgorICAgICAgICBjYXNlIE1lbW9yeVJlc3VsdDo6U3luY1RyeVRvUmVjbGFp
bU1lbW9yeToKICAgICAgICAgICAgIGlmIChpICsgMSA9PSBudW1UcmllcykKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNj
b3BlOjpGdWxsKTsKKyAgICAgICAgICAgIGlmIChzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KQorICAg
ICAgICAgICAgICAgIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkoTWVtb3J5OjpTeW5jVHJ5VG9SZWNs
YWltVGFnKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMjMwLDMy
ICsyMzgsMzIgQEAgYm9vbCB0cnlBbmRHQyhWTSYgdm0sIGNvbnN0IEZ1bmMmIGFsbG9jYXRlKQog
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotY29uc3QgY2hhciogbWFrZVN0cmluZyhNZW1v
cnlNb2RlIG1vZGUpCitNZW1vcnk6Ok1lbW9yeSgpCiB7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0g
ICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogcmV0dXJuICJCb3VuZHNDaGVja2lu
ZyI7Ci0gICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHJldHVybiAiU2lnbmFsaW5nIjsK
LSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIiI7
CiB9CiAKLU1lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11
bSkKK01lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIEZ1
bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwg
V1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYg
Z3Jvd1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9t
YXhpbXVtKG1heGltdW0pCisgICAgLCBtX25vdGlmeU1lbW9yeVByZXNzdXJlKFdURk1vdmUobm90
aWZ5TWVtb3J5UHJlc3N1cmUpKQorICAgICwgbV9zeW5jVHJ5VG9SZWNsYWltTWVtb3J5KFdURk1v
dmUoc3luY1RyeVRvUmVjbGFpbU1lbW9yeSkpCisgICAgLCBtX2dyb3dTdWNjZXNzQ2FsbGJhY2so
V1RGTW92ZShncm93U3VjY2Vzc0NhbGxiYWNrKSkKIHsKICAgICBBU1NFUlQoIWluaXRpYWwuYnl0
ZXMoKSk7CiAgICAgQVNTRVJUKG1fbW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyk7
CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwg
KnRoaXMpOwogfQogCi1NZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0
aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2Rl
IG1vZGUpCitNZW1vcnk6Ok1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQ
YWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlIG1vZGUs
IEZ1bmN0aW9uPHZvaWQoTm90aWZ5UHJlc3N1cmUpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBG
dW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnks
IFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYm
IGdyb3dTdWNjZXNzQ2FsbGJhY2spCiAgICAgOiBtX21lbW9yeShtZW1vcnkpCiAgICAgLCBtX3Np
emUoaW5pdGlhbC5ieXRlcygpKQogICAgICwgbV9pbml0aWFsKGluaXRpYWwpCiAgICAgLCBtX21h
eGltdW0obWF4aW11bSkKICAgICAsIG1fbWFwcGVkQ2FwYWNpdHkobWFwcGVkQ2FwYWNpdHkpCiAg
ICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fbm90aWZ5TWVtb3J5UHJlc3N1cmUoV1RGTW92ZShu
b3RpZnlNZW1vcnlQcmVzc3VyZSkpCisgICAgLCBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnkoV1RG
TW92ZShzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSkKKyAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFj
ayhXVEZNb3ZlKGdyb3dTdWNjZXNzQ2FsbGJhY2spKQogewogICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJNZW1vcnk6Ok1lbW9yeSBhbGxvY2F0aW5nICIsICp0aGlzKTsKIH0KQEAgLTI3NSw3ICsy
ODMsMTIgQEAgc3RhdGljIHZvaWQgY29tbWl0WmVyb1BhZ2VzKHZvaWQqIHN0YXJ0QWRkcmVzcywg
c2l6ZV90IHNpemVJbkJ5dGVzKQogI2VuZGlmCiB9CiAKLVJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6
Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKQorUmVm
UHRyPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVtb3J5KCkpOworfQorCitSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShQYWdlQ291bnQg
aW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVz
c3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5
VG9SZWNsYWltKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQo
R3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNr
KQogewogICAgIEFTU0VSVChpbml0aWFsKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbWF4aW11bSB8
fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91
ciBjYWxsZXIuCkBAIC0yODMsMzMgKzI5NiwyNyBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNy
ZWF0ZShWTSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICBj
b25zdCBzaXplX3QgaW5pdGlhbEJ5dGVzID0gaW5pdGlhbC5ieXRlcygpOwogICAgIGNvbnN0IHNp
emVfdCBtYXhpbXVtQnl0ZXMgPSBtYXhpbXVtID8gbWF4aW11bS5ieXRlcygpIDogMDsKIAotICAg
IC8vIFdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNv
ZGUuCi0gICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
CiAgICAgaWYgKG1heGltdW0gJiYgIW1heGltdW1CeXRlcykgewogICAgICAgICAvLyBVc2VyIHNw
ZWNpZmllZCBhIHplcm8gbWF4aW11bSwgaW5pdGlhbCBzaXplIG11c3QgYWxzbyBiZSB6ZXJvLgog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtLCBXVEZNb3ZlKG5vdGlmeU1lbW9yeVBy
ZXNzdXJlKSwgV1RGTW92ZShzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KSwgV1RGTW92ZShncm93U3Vj
Y2Vzc0NhbGxiYWNrKSkpOwogICAgIH0KICAgICAKLSAgICBib29sIGRvbmUgPSB0cnlBbmRHQygK
LSAgICAgICAgdm0sCisgICAgYm9vbCBkb25lID0gdHJ5QWxsb2NhdGUoCiAgICAgICAgIFsmXSAo
KSAtPiBNZW1vcnlSZXN1bHQ6OktpbmQgewogICAgICAgICAgICAgcmV0dXJuIG1lbW9yeU1hbmFn
ZXIoKS50cnlBbGxvY2F0ZVBoeXNpY2FsQnl0ZXMoaW5pdGlhbEJ5dGVzKTsKLSAgICAgICAgfSk7
CisgICAgICAgIH0sIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5
KTsKICAgICBpZiAoIWRvbmUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAg
ICBjaGFyKiBmYXN0TWVtb3J5ID0gbnVsbHB0cjsKICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNz
ZW1ibHlGYXN0TWVtb3J5KCkpIHsKLSAgICAgICAgdHJ5QW5kR0MoCi0gICAgICAgICAgICB2bSwK
KyAgICAgICAgdHJ5QWxsb2NhdGUoCiAgICAgICAgICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0
OjpLaW5kIHsKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1lbW9yeU1hbmFnZXIoKS50
cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcygpOwogICAgICAgICAgICAgICAgIGZhc3RNZW1vcnkgPSBi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHJlc3VsdC5iYXNlUHRyKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0LmtpbmQ7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0sIG5vdGlmeU1l
bW9yeVByZXNzdXJlLCBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5KTsKICAgICB9CiAgICAgCiAgICAg
aWYgKGZhc3RNZW1vcnkpIHsKQEAgLTMyMCwxNSArMzI3LDE1IEBAIFJlZlB0cjxNZW1vcnk+IE1l
bW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVt
KQogICAgICAgICB9CiAKICAgICAgICAgY29tbWl0WmVyb1BhZ2VzKGZhc3RNZW1vcnksIGluaXRp
YWxCeXRlcyk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShm
YXN0TWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpLCBN
ZW1vcnlNb2RlOjpTaWduYWxpbmcpKTsKKworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1l
bW9yeShmYXN0TWVtb3J5LCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRl
cygpLCBNZW1vcnlNb2RlOjpTaWduYWxpbmcsIFdURk1vdmUobm90aWZ5TWVtb3J5UHJlc3N1cmUp
LCBXVEZNb3ZlKHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBXVEZNb3ZlKGdyb3dTdWNjZXNzQ2Fs
bGJhY2spKSk7CiAgICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpjcmFzaElm
V2ViQXNzZW1ibHlDYW50RmFzdE1lbW9yeSgpKSkKICAgICAgICAgd2ViQXNzZW1ibHlDb3VsZG50
R2V0RmFzdE1lbW9yeSgpOwogCiAgICAgaWYgKCFpbml0aWFsQnl0ZXMpCi0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTWVtb3J5KGluaXRpYWwsIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSwgV1RGTW92ZShub3RpZnlNZW1v
cnlQcmVzc3VyZSksIFdURk1vdmUoc3luY1RyeVRvUmVjbGFpbU1lbW9yeSksIFdURk1vdmUoZ3Jv
d1N1Y2Nlc3NDYWxsYmFjaykpKTsKICAgICAKICAgICB2b2lkKiBzbG93TWVtb3J5ID0gR2lnYWNh
Z2U6OnRyeUFsaWduZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RGOjpwYWdlU2l6ZSgp
LCBpbml0aWFsQnl0ZXMpOwogICAgIGlmICghc2xvd01lbW9yeSkgewpAQCAtMzM2LDcgKzM0Myw3
IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDb3VudCBtYXhpbXVtKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgbWVtc2V0KHNsb3dNZW1vcnksIDAsIGluaXRpYWxCeXRlcyk7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNZW1vcnkoc2xvd01lbW9yeSwgaW5pdGlhbCwgbWF4aW11bSwgaW5pdGlhbEJ5dGVz
LCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVtb3J5KHNsb3dNZW1vcnksIGluaXRpYWwsIG1heGltdW0sIGluaXRpYWxCeXRlcywgTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmcsIFdURk1vdmUobm90aWZ5TWVtb3J5UHJlc3N1cmUpLCBXVEZN
b3ZlKHN5bmNUcnlUb1JlY2xhaW1NZW1vcnkpLCBXVEZNb3ZlKGdyb3dTdWNjZXNzQ2FsbGJhY2sp
KSk7CiB9CiAKIE1lbW9yeTo6fk1lbW9yeSgpCkBAIC0zNDUsNyArMzUyLDEwIEBAIE1lbW9yeTo6
fk1lbW9yeSgpCiAgICAgICAgIG1lbW9yeU1hbmFnZXIoKS5mcmVlUGh5c2ljYWxCeXRlcyhtX3Np
emUpOwogICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgewogICAgICAgICBjYXNlIE1lbW9yeU1vZGU6
OlNpZ25hbGluZzoKLSAgICAgICAgICAgIG1wcm90ZWN0KG1fbWVtb3J5LCBNZW1vcnk6OmZhc3RN
YXBwZWRCeXRlcygpLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgICAgICAgICAgIGlmICht
cHJvdGVjdChtX21lbW9yeSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSwgUFJPVF9SRUFEIHwg
UFJPVF9XUklURSkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJtcHJvdGVjdCBmYWlsZWQ6
ICIsIHN0cmVycm9yKGVycm5vKSwgIlxuIik7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbW9yeU1hbmFn
ZXIoKS5mcmVlVmlydHVhbFBhZ2VzKG1fbWVtb3J5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgpAQCAtMzcxLDM0ICszODEsNTAg
QEAgYm9vbCBNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2b2lkKiBhZGRyZXNz
KQogICAgIHJldHVybiBtZW1vcnlNYW5hZ2VyKCkuY29udGFpbnNBZGRyZXNzKGFkZHJlc3MpOwog
fQogCi1ib29sIE1lbW9yeTo6Z3JvdyhWTSYgdm0sIFBhZ2VDb3VudCBuZXdTaXplKQorRXhwZWN0
ZWQ8UGFnZUNvdW50LCBNZW1vcnk6Okdyb3dGYWlsUmVhc29uPiBNZW1vcnk6Omdyb3coUGFnZUNv
dW50IGRlbHRhKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG5ld1NpemUgPiBQYWdlQ291bnQ6OmZy
b21CeXRlcyhtX3NpemUpKTsKKyAgICBjb25zdCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50
ID0gc2l6ZUluUGFnZXMoKTsKIAotICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdy
b3cgdG8gIiwgbmV3U2l6ZSwgIiBmcm9tICIsICp0aGlzKTsKKyAgICBpZiAoIWRlbHRhLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpJbnZh
bGlkRGVsdGEpOworICAgIAorICAgIGNvbnN0IFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQg
PSBvbGRQYWdlQ291bnQgKyBkZWx0YTsKKyAgICBpZiAoIW5ld1BhZ2VDb3VudCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemUpOwog
Ci0gICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gbWF4aW11bSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byBzdWNjZXNzID0gWyZdICgpIHsKKyAgICAgICAgbV9ncm93U3Vj
Y2Vzc0NhbGxiYWNrKEdyb3dTdWNjZXNzVGFnLCBvbGRQYWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7
CisgICAgICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CisgICAgfTsKIAotICAgIHNpemVfdCBkZXNp
cmVkU2l6ZSA9IG5ld1NpemUuYnl0ZXMoKTsKKyAgICBpZiAoZGVsdGEucGFnZUNvdW50KCkgPT0g
MCkKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoKTsKKworICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJNZW1vcnk6Omdyb3coIiwgZGVsdGEsICIpIHRvICIsIG5ld1BhZ2VDb3VudCwgIiBmcm9tICIs
ICp0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdQYWdlQ291bnQgPiBQYWdlQ291bnQ6OmZy
b21CeXRlcyhtX3NpemUpKTsKKworICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3UGFnZUNvdW50ID4g
bWF4aW11bSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoR3Jvd0ZhaWxSZWFzb246
OldvdWxkRXhjZWVkTWF4aW11bSk7CisKKyAgICBzaXplX3QgZGVzaXJlZFNpemUgPSBuZXdQYWdl
Q291bnQuYnl0ZXMoKTsKICAgICBSRUxFQVNFX0FTU0VSVChkZXNpcmVkU2l6ZSA+IG1fc2l6ZSk7
CiAgICAgc2l6ZV90IGV4dHJhQnl0ZXMgPSBkZXNpcmVkU2l6ZSAtIG1fc2l6ZTsKICAgICBSRUxF
QVNFX0FTU0VSVChleHRyYUJ5dGVzKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnlBbmRHQygKLSAg
ICAgICAgdm0sCisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VzcyA9IHRyeUFsbG9jYXRlKAogICAg
ICAgICBbJl0gKCkgLT4gTWVtb3J5UmVzdWx0OjpLaW5kIHsKICAgICAgICAgICAgIHJldHVybiBt
ZW1vcnlNYW5hZ2VyKCkudHJ5QWxsb2NhdGVQaHlzaWNhbEJ5dGVzKGV4dHJhQnl0ZXMpOwotICAg
ICAgICB9KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCisgICAgICAgIH0sIG1fbm90aWZ5TWVtb3J5UHJlc3N1cmUsIG1fc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSk7CisgICAgaWYgKCFhbGxvY2F0aW9uU3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKEdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeSk7CisKICAgICBzd2l0Y2gg
KG1vZGUoKSkgewogICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0gMCk7Ci0gICAgICAgIAorCiAg
ICAgICAgIHZvaWQqIG5ld01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIFdURjo6cGFnZVNpemUoKSwgZGVzaXJlZFNpemUpOwogICAgICAgICBp
ZiAoIW5ld01lbW9yeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkpOworCiAgICAg
ICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOwogICAgICAgICBtZW1zZXQo
c3RhdGljX2Nhc3Q8Y2hhcio+KG5ld01lbW9yeSkgKyBtX3NpemUsIDAsIGRlc2lyZWRTaXplIC0g
bV9zaXplKTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQpAQCAtNDA2LDcgKzQzMiw3IEBAIGJvb2wg
TWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1NpemUpCiAgICAgICAgIG1fbWVtb3J5
ID0gbmV3TWVtb3J5OwogICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNpemU7CiAg
ICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3MoKTsKICAgICB9CiAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxp
bmc6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9tZW1vcnkpOwpAQCAtNDE1LDE2ICs0NDEs
MTcgQEAgYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291bnQgbmV3U2l6ZSkKICAgICAg
ICAgCiAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5nIFdlYkFzc2VtYmx5IG1l
bW9yeSdzICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiIGFzIHJlYWQrd3JpdGUgaW4gcmFuZ2Ug
WyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9pbnRlcihzdGFydEFkZHJl
c3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKICAgICAgICAgaWYgKG1wcm90ZWN0KHN0YXJ0QWRkcmVz
cywgZXh0cmFCeXRlcywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKLSAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJNZW1vcnk6Omdyb3cgaW4tcGxhY2UgZmFpbGVkICIsICp0aGlz
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRhdGFMb2coIm1wcm90
ZWN0IGZhaWxlZDogIiwgc3RyZXJyb3IoZXJybm8pLCAiXG4iKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgY29tbWl0WmVyb1Bh
Z2VzKHN0YXJ0QWRkcmVzcywgZXh0cmFCeXRlcyk7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRT
aXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0KLSAgICAKKyAgICAgICAgcmV0dXJu
IHN1Y2Nlc3MoKTsKKyAgICB9CisgICAgfQorCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKIH0KIAog
dm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCA2MGE5YmI3Li5jZDU4NmE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC0yNyw4ICsyNywxMSBAQAogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV2FzbU1lbW9yeU1vZGUuaCIKICNpbmNs
dWRlICJXYXNtUGFnZUNvdW50LmgiCiAKKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzgsMTggKzQxLDggQEAgY2xhc3MgUHJpbnRTdHJlYW07
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsKLQogbmFtZXNwYWNlIFdhc20gewogCi0v
LyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgb3RoZXIgbW9kZXMuIHNlZTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5MwotZW51bSBjbGFzcyBNZW1vcnlNb2Rl
IDogdWludDhfdCB7Ci0gICAgQm91bmRzQ2hlY2tpbmcsCi0gICAgU2lnbmFsaW5nCi19Owotc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7Ci1KU19FWFBPUlRf
UFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOwotCiBjbGFzcyBNZW1v
cnkgOiBwdWJsaWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTgsNyArNTEsMTIg
QEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9tZW1vcnk7IH0KICAgICAKLSAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKFZN
JiwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtKTsKKyAgICBlbnVtIE5vdGlm
eVByZXNzdXJlIHsgTm90aWZ5UHJlc3N1cmVUYWcgfTsKKyAgICBlbnVtIFN5bmNUcnlUb1JlY2xh
aW0geyBTeW5jVHJ5VG9SZWNsYWltVGFnIH07CisgICAgZW51bSBHcm93U3VjY2VzcyB7IEdyb3dT
dWNjZXNzVGFnIH07CisKKyAgICBzdGF0aWMgUmVmUHRyPE1lbW9yeT4gY3JlYXRlKCk7CisgICAg
c3RhdGljIFJlZlB0cjxNZW1vcnk+IGNyZWF0ZShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVt
b3J5UHJlc3N1cmUsIFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4mJiBzeW5j
VHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VD
b3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAogICAgIH5NZW1vcnko
KTsKIApAQCAtNzUsMjIgKzczLDM0IEBAIHB1YmxpYzoKIAogICAgIE1lbW9yeU1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogCi0gICAgLy8gZ3JvdygpIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBmcm9tIHRoZSBKU1dlYkFzc2VtYmx5TWVtb3J5IG9iamVjdCBzaW5jZSB0aGF0IG9i
amVjdCBuZWVkcyB0byB1cGRhdGUgaW50ZXJuYWwKLSAgICAvLyBwb2ludGVycyB3aXRoIHRoZSBj
dXJyZW50IGJhc2UgYW5kIHNpemUuCi0gICAgYm9vbCBncm93KFZNJiwgUGFnZUNvdW50KTsKKyAg
ICBlbnVtIGNsYXNzIEdyb3dGYWlsUmVhc29uIHsKKyAgICAgICAgSW52YWxpZERlbHRhLAorICAg
ICAgICBJbnZhbGlkR3Jvd1NpemUsCisgICAgICAgIFdvdWxkRXhjZWVkTWF4aW11bSwKKyAgICAg
ICAgT3V0T2ZNZW1vcnksCisgICAgfTsKKyAgICBFeHBlY3RlZDxQYWdlQ291bnQsIEdyb3dGYWls
UmVhc29uPiBncm93KFBhZ2VDb3VudCk7CiAKICAgICB2b2lkIGNoZWNrKCkgeyAgQVNTRVJUKCFk
ZWxldGlvbkhhc0JlZ3VuKCkpOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVt
b3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1lbW9yeSwgbV9tZW1vcnkpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
TWVtb3J5LCBtX3NpemUpOyB9CisKIHByaXZhdGU6Ci0gICAgTWVtb3J5KHZvaWQqIG1lbW9yeSwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNp
dHksIE1lbW9yeU1vZGUpOwotICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0pOworICAgIE1lbW9yeSgpOworICAgIE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VD
b3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBN
ZW1vcnlNb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoTm90aWZ5UHJlc3N1cmUpPiYmIG5vdGlmeU1l
bW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3lu
Y1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdl
Q291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjayk7CisgICAgTWVtb3J5KFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgV1RGOjpGdW5jdGlvbjx2b2lkKE5v
dGlmeVByZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lk
KFN5bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rp
b248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNz
Q2FsbGJhY2spOwogCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoZXNlIHRvIHRoZSBp
bnN0YW5jZSB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNlIGNhbGxzLgorICAg
IC8vIEZJWE1FOiB3ZSBjYWNoZSB0aGVzZSBvbiB0aGUgaW5zdGFuY2VzIHRvIGF2b2lkIGEgbG9h
ZCBvbiBpbnN0YW5jZS0+aW5zdGFuY2UgY2FsbHMuIFRoaXMgd2lsbCByZXF1aXJlIHVwZGF0aW5n
IGFsbCB0aGUgaW5zdGFuY2VzIHdoZW4gZ3JvdyBpcyBjYWxsZWQuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUKICAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxw
dHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwogICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7
CiAgICAgUGFnZUNvdW50IG1fbWF4aW11bTsKICAgICBzaXplX3QgbV9tYXBwZWRDYXBhY2l0eSB7
IDAgfTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
IH07CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKE5vdGlmeVByZXNzdXJlKT4gbV9ub3RpZnlNZW1v
cnlQcmVzc3VyZTsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+IG1f
c3luY1RyeVRvUmVjbGFpbU1lbW9yeTsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nl
c3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4gbV9ncm93U3VjY2Vzc0NhbGxiYWNrOwogfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCmluZGV4IGJmNTY1ZjAuLmI1YzM0YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9y
bWF0aW9uLmNwcApAQCAtNTcsNyArNTcsNyBAQCBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIFBp
bm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkKICAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNQaW5uZWRS
ZWdpc3RlckluZm9GbGFnLCBbXSAoKSB7CiAgICAgICAgIFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0
ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOwogICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIg
PSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBHUFJSZWcgd2FzbUNvbnRleHRQb2ludGVyID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyID0g
SW52YWxpZEdQUlJlZzsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9y
ZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3RlciwgYW5kIHdlIHNob3VsZCBhbGxvdyBkaWZm
ZXJlbnQKICAgICAgICAgLy8gICAgICAgIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHRvIGhhdmUgZGlm
ZmVyZW50IHBpbnMuIFJpZ2h0IG5vdyB3ZSB0YWtlIGEgdmVjdG9yIHdpdGggb25seSBvbmUgZW50
cnkuCkBAIC02NSwyNyArNjUsMjcgQEAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBQaW5uZWRS
ZWdpc3RlckluZm86OmdldCgpCiAgICAgICAgIC8vICAgICAgICBzZWU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAgICAgVmVjdG9yPHVuc2lnbmVk
PiBwaW5uZWRTaXplcyA9IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBpbm5lZFJl
Z2lzdGVycyA9IHBpbm5lZFNpemVzLnNpemUoKSArIDE7Ci0gICAgICAgIGlmICghdXNlRmFzdFRM
U0ZvckNvbnRleHQoKSkKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAg
ICAgICAgICArK251bWJlck9mUGlubmVkUmVnaXN0ZXJzOwogICAgICAgICBWZWN0b3I8R1BSUmVn
PiBwaW5uZWRSZWdzID0gZ2V0UGlubmVkUmVnaXN0ZXJzKG51bWJlck9mUGlubmVkUmVnaXN0ZXJz
KTsKIAogICAgICAgICBiYXNlTWVtb3J5UG9pbnRlciA9IHBpbm5lZFJlZ3MudGFrZUxhc3QoKTsK
LSAgICAgICAgaWYgKCF1c2VGYXN0VExTRm9yQ29udGV4dCgpKQotICAgICAgICAgICAgd2FzbUNv
bnRleHRQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOworICAgICAgICBpZiAoIUNvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
ID0gcGlubmVkUmVncy50YWtlTGFzdCgpOwogCiAgICAgICAgIEFTU0VSVChwaW5uZWRTaXplcy5z
aXplKCkgPT0gcGlubmVkUmVncy5zaXplKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcGlubmVkU2l6ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBzaXplUmVnaXN0ZXJz
LmFwcGVuZCh7IHBpbm5lZFJlZ3NbaV0sIHBpbm5lZFNpemVzW2ldIH0pOwotICAgICAgICBzdGF0
aWNQaW5uZWRSZWdpc3RlckluZm8uY29uc3RydWN0KFdURk1vdmUoc2l6ZVJlZ2lzdGVycyksIGJh
c2VNZW1vcnlQb2ludGVyLCB3YXNtQ29udGV4dFBvaW50ZXIpOworICAgICAgICBzdGF0aWNQaW5u
ZWRSZWdpc3RlckluZm8uY29uc3RydWN0KFdURk1vdmUoc2l6ZVJlZ2lzdGVycyksIGJhc2VNZW1v
cnlQb2ludGVyLCB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgfSk7CiAKICAgICBy
ZXR1cm4gc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvLmdldCgpOwogfQogCi1QaW5uZWRSZWdpc3Rl
ckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4m
JiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIsIEdQUlJlZyB3YXNtQ29u
dGV4dFBvaW50ZXIpCitQaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0
b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1l
bW9yeVBvaW50ZXIsIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcikKICAgICA6IHNp
emVSZWdpc3RlcnMoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSkKICAgICAsIGJhc2VNZW1vcnlQb2lu
dGVyKGJhc2VNZW1vcnlQb2ludGVyKQotICAgICwgd2FzbUNvbnRleHRQb2ludGVyKHdhc21Db250
ZXh0UG9pbnRlcikKKyAgICAsIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKHdhc21Db250ZXh0
SW5zdGFuY2VQb2ludGVyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCmluZGV4IDQyMzdiYWMuLjIzMzI5ZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ0LDcgKzQ0LDcgQEAgc3RydWN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8gewogc3RydWN0IFBp
bm5lZFJlZ2lzdGVySW5mbyB7CiAgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNp
emVSZWdpc3RlcnM7CiAgICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyOwotICAgIEdQUlJlZyB3
YXNtQ29udGV4dFBvaW50ZXI7CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
OwogICAgIHN0YXRpYyBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIGdldCgpOwogICAgIFBpbm5l
ZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiwgR1BSUmVnLCBH
UFJSZWcpOwogCkBAIC01Miw4ICs1Miw4IEBAIHN0cnVjdCBQaW5uZWRSZWdpc3RlckluZm8gewog
ICAgIHsKICAgICAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwogICAgICAgICByZXN1bHQuc2V0KGJh
c2VNZW1vcnlQb2ludGVyKTsKLSAgICAgICAgaWYgKHdhc21Db250ZXh0UG9pbnRlciAhPSBJbnZh
bGlkR1BSUmVnKQotICAgICAgICAgICAgcmVzdWx0LnNldCh3YXNtQ29udGV4dFBvaW50ZXIpOwor
ICAgICAgICBpZiAod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgICAgIHJlc3VsdC5zZXQod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwogICAg
ICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKICAgICAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgaW5mbyA6IHNpemVSZWdpc3RlcnMpCiAgICAgICAgICAgICAgICAgcmVz
dWx0LnNldChpbmZvLnNpemVSZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5TW9kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5TW9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YjFiYzk4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnlNb2RlLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2FzbU1lbW9yeU1vZGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CisKK2NvbnN0IGNoYXIqIG1ha2VTdHJpbmcoTWVtb3J5TW9kZSBtb2RlKQoreworICAgIHN3aXRj
aCAobW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHJldHVybiAi
Qm91bmRzQ2hlY2tpbmciOworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiByZXR1cm4g
IlNpZ25hbGluZyI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuICIiOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeU1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnlNb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyODU1YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlN
b2RlLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisj
aW5jbHVkZSAiSlNFeHBvcnRNYWNyb3MuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKKworLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG90aGVyIG1vZGVzLiBzZWU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKK2VudW0gY2xhc3Mg
TWVtb3J5TW9kZSA6IHVpbnQ4X3QgeworICAgIEJvdW5kc0NoZWNraW5nLAorICAgIFNpZ25hbGlu
ZworfTsKKworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTnVtYmVyT2ZNZW1vcnlNb2RlcyA9IDI7
CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKE1lbW9yeU1vZGUpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCmluZGV4IGQ2ODNh
ZTkuLjBiMjFjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3Bw
CkBAIC01NiwyNyArNTYsMjYgQEAgc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtl
VmFsaWRhdGlvblJlc3VsdChCQlFQbGFuJiBwbGFuKQogCiBzdGF0aWMgUGxhbjo6Q29tcGxldGlv
blRhc2sgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxi
YWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2Fs
bGJhY2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFZNKiB2bSwgUGxhbiYg
cGxhbikgeworICAgIHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4o
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChQbGFuJiBwbGFuKSB7CiAgICAgICAgIEFT
U0VSVCghcGxhbi5oYXNXb3JrKCkpOwotICAgICAgICBBU1NFUlQodm0pOwotICAgICAgICBjYWxs
YmFjay0+cnVuKCp2bSwgbWFrZVZhbGlkYXRpb25SZXN1bHQoc3RhdGljX2Nhc3Q8QkJRUGxhbiY+
KHBsYW4pKSk7CisgICAgICAgIGNhbGxiYWNrLT5ydW4obWFrZVZhbGlkYXRpb25SZXN1bHQoc3Rh
dGljX2Nhc3Q8QkJRUGxhbiY+KHBsYW4pKSk7CiAgICAgfSk7CiB9CiAKLU1vZHVsZTo6VmFsaWRh
dGlvblJlc3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYm
IHNvdXJjZSkKK01vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBNb2R1bGU6OnZhbGlkYXRlU3luYyhD
b250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpCiB7Ci0gICAgUmVmPEJC
UVBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oJnZtLCBXVEZNb3ZlKHNvdXJjZSks
IEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgUmVmPEJC
UVBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgV1RGTW92ZShzb3Vy
Y2UpLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSwgbnVsbHB0ciwg
bnVsbHB0cikpOwogICAgIHBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKICAgICByZXR1
cm4gbWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbi5nZXQoKSk7CiB9CiAKLXZvaWQgTW9kdWxlOjp2
YWxpZGF0ZUFzeW5jKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFz
eW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit2b2lkIE1vZHVsZTo6dmFsaWRhdGVB
c3luYyhDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6
QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBSZWY8UGxhbj4gcGxh
biA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbigmdm0sIFdURk1vdmUoc291cmNlKSwgQkJRUGxhbjo6
VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkpKTsK
KyAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBXVEZN
b3ZlKHNvdXJjZSksIEJCUVBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2so
V1RGTW92ZShjYWxsYmFjaykpLCBudWxscHRyLCBudWxscHRyKSk7CiAgICAgV2FzbTo6ZW5zdXJl
V29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOwogfQogCi1SZWY8Q29kZUJsb2NrPiBN
b2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSkKK1JlZjxDb2RlQmxv
Y2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5
TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIs
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7CiAgICAgUmVmUHRyPENv
ZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
QEAgLTg3LDIzICs4NiwyMyBAQCBSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29k
ZUJsb2NrKE1lbW9yeU1vZGUgbW9kZSkKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBi
YWNrIG9mZiByZXRyeWluZyBhdCBzb21lIHBvaW50OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2MDcKICAgICBpZiAoIWNvZGVCbG9jayB8fCAoY29k
ZUJsb2NrLT5jb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIWNvZGVCbG9jay0+cnVubmFibGUoKSkp
IHsKLSAgICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUobW9kZSwgY29uc3RfY2Fz
dDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpKTsKKyAgICAgICAgY29k
ZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUoY29udGV4dCwgbW9kZSwgY29uc3RfY2FzdDxNb2R1
bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpLCBXVEZNb3ZlKGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgICAgIG1fY29kZUJsb2Nrc1tz
dGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0gPSBjb2RlQmxvY2s7CiAgICAgfQogICAgIHJldHVy
biBjb2RlQmxvY2sucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmPENvZGVCbG9jaz4gTW9kdWxl
Ojpjb21waWxlU3luYyhNZW1vcnlNb2RlIG1vZGUpCitSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNv
bXBpbGVTeW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uKQogewotICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9y
Q3JlYXRlQ29kZUJsb2NrKG1vZGUpOworICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdl
dE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJX
cmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBjb2RlQmxvY2stPndhaXRVbnRpbEZp
bmlzaGVkKCk7CiAgICAgcmV0dXJuIGNvZGVCbG9jazsKIH0KIAotdm9pZCBNb2R1bGU6OmNvbXBp
bGVBc3luYyhWTSYgdm0sIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0
aW9uQ2FsbGJhY2smJiB0YXNrKQordm9pZCBNb2R1bGU6OmNvbXBpbGVBc3luYyhDb250ZXh0KiBj
b250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxi
YWNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVy
LCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewotICAgIFJlZjxDb2Rl
QmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKG1vZGUpOwotICAgIGNvZGVC
bG9jay0+Y29tcGlsZUFzeW5jKHZtLCBXVEZNb3ZlKHRhc2spKTsKKyAgICBSZWY8Q29kZUJsb2Nr
PiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9jayhjb250ZXh0LCBtb2RlLCBXVEZNb3Zl
KGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgY29kZUJs
b2NrLT5jb21waWxlQXN5bmMoY29udGV4dCwgV1RGTW92ZSh0YXNrKSk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgK
aW5kZXggYTFhZjc1OC4uYTZhZTI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIldhc21Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8
d3RmL0xvY2suaD4KQEAgLTM2LDE5ICszNywyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCitzdHJ1Y3QgQ29udGV4dDsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsK
IGNsYXNzIFBsYW47CiAKIHVzaW5nIFNpZ25hdHVyZUluZGV4ID0gdWludDMyX3Q7Ci0gICAgCisK
IGNsYXNzIE1vZHVsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGU+IHsKIHB1
YmxpYzoKICAgICB1c2luZyBWYWxpZGF0aW9uUmVzdWx0ID0gV1RGOjpFeHBlY3RlZDxSZWZQdHI8
TW9kdWxlPiwgU3RyaW5nPjsKLSAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZNJiwgVmFs
aWRhdGlvblJlc3VsdCYmKTsKKyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFZhbGlkYXRp
b25SZXN1bHQmJik7CiAgICAgdXNpbmcgQXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2sgPSBSZWZQdHI8
U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKIAotICAgIHN0YXRpYyBWYWxpZGF0aW9uUmVzdWx0
IHZhbGlkYXRlU3luYyhWTSYsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7Ci0gICAgc3RhdGlj
IHZvaWQgdmFsaWRhdGVBc3luYyhWTSYsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxl
OjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmKTsKKyAgICBzdGF0aWMgVmFsaWRhdGlvblJlc3Vs
dCB2YWxpZGF0ZVN5bmMoQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7CisgICAg
c3RhdGljIHZvaWQgdmFsaWRhdGVBc3luYyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291
cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgc3RhdGljIFJl
ZjxNb2R1bGU+IGNyZWF0ZShSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRp
b24pCiAgICAgewpAQCAtNTgsMTQgKzYwLDE0IEBAIHB1YmxpYzoKICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVu
Y3Rpb25JbmRleFNwYWNlKSBjb25zdDsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
biYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpOyB9CiAKLSAgICBSZWY8Q29kZUJsb2NrPiBjb21waWxlU3luYyhNZW1vcnlNb2RlKTsK
LSAgICB2b2lkIGNvbXBpbGVBc3luYyhWTSYsIE1lbW9yeU1vZGUsIENvZGVCbG9jazo6QXN5bmND
b21waWxhdGlvbkNhbGxiYWNrJiYpOworICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKENv
bnRleHQqLCBNZW1vcnlNb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhj
ZXB0aW9uKTsKKyAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ29k
ZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVy
JiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+TW9kdWxl
KCk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihNZW1vcnlNb2RlIG1vZGUpIHsgcmV0
dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0uZ2V0KCk7IH0KIHBy
aXZhdGU6Ci0gICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxvY2soTWVtb3J5TW9k
ZSk7CisgICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCosIE1l
bW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwog
CiAgICAgTW9kdWxlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJik7CiAgICAgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA2Yzk0OGI1Li42ZDQ0YWMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAt
MjksNyArMjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIklkZW50
aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhYmxlLmgiCiAjaW5jbHVk
ZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgpAQCAtMjY1LDcgKzI2NCw3IEBAIGF1dG8gTW9k
dWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRp
YWwsIG1heGltdW0pOwogICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKICAgICAgICAgcmV0dXJu
IGxpbWl0cy5nZXRVbmV4cGVjdGVkKCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighSlNXZWJB
c3NlbWJseVRhYmxlOjppc1ZhbGlkU2l6ZShpbml0aWFsKSwgIlRhYmxlJ3MgaW5pdGlhbCBwYWdl
IGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW5pdGlhbCA+IG1heFRhYmxlRW50cmllcywgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNv
dW50IG9mICIsIGluaXRpYWwsICIgaXMgdG9vIGJpZywgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJp
ZXMpOwogCiAgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzN2Y2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaApAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJXYXNtTmFtZS5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKworc3RydWN0IE5hbWVTZWN0aW9uIDogVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8TmFtZVNlY3Rpb24+IHsKKyAgICBzdGF0aWMgUmVmPE5hbWVTZWN0aW9uPiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmFtZVNlY3Rpb24oKSk7CisgICAg
fQorCisgICAgTmFtZSBtb2R1bGVOYW1lOworICAgIFZlY3RvcjxOYW1lPiBmdW5jdGlvbk5hbWVz
OworICAgIGNvbnN0IE5hbWUqIGdldChzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGZ1bmN0aW9uTmFtZXMuc2l6ZSgp
ID8gJmZ1bmN0aW9uTmFtZXNbZnVuY3Rpb25JbmRleFNwYWNlXSA6IG51bGxwdHI7CisgICAgfQor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA3NGNmNjUzLi5jY2RmNzJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2lu
Y2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21DYWxs
ZWUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhy
ZWFkcy5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKQEAgLTUxLDEwICs1MiwxMCBAQCBuYW1l
c3BhY2UgV2FzbU9NR1BsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiB9CiAKLU9NR1BsYW46Ok9NR1BsYW4oUmVmPE1vZHVsZT4gbW9kdWxlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykK
LSAgICA6IEJhc2UobnVsbHB0ciwgbWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9u
Jj4obW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSksIFdURk1vdmUodGFzaykpCi0gICAgLCBt
X21vZHVsZShtb2R1bGUuY29weVJlZigpKQotICAgICwgbV9jb2RlQmxvY2soKm1vZHVsZS0+Y29k
ZUJsb2NrRm9yKG1vZGUpKQorT01HUGxhbjo6T01HUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8
TW9kdWxlPiYmIG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2Rl
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29u
c3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkp
LCBXVEZNb3ZlKHRhc2spKQorICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQorICAgICwg
bV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCiAgICAgLCBtX2Z1bmN0
aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKICAgICBzZXRNb2RlKG1vZGUpOwpAQCAtMTYyLDEz
ICsxNjMsMTMgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNv
bXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwogfQogCi12b2lkIHJ1bk9NR1BsYW5Gb3JJbmRleChD
b250ZXh0KiBjb250ZXh0LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQordm9pZCBPTUdQbGFuOjpy
dW5Gb3JJbmRleChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogewotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNv
bnRleHQtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb250ZXh0LT5tZW1vcnlNb2RlKCkgPT0g
Y29kZUJsb2NrLT5tX2NvZGVCbG9jay0+bW9kZSgpKTsKKyAgICBXYXNtOjpDb2RlQmxvY2smIGNv
ZGVCbG9jayA9IGluc3RhbmNlLT53YXNtQ29kZUJsb2NrKCk7CisgICAgQVNTRVJUKGluc3RhbmNl
LT53YXNtTWVtb3J5KCktPm1vZGUoKSA9PSBjb2RlQmxvY2subW9kZSgpKTsKIAotICAgIGlmIChj
b2RlQmxvY2stPm1fY29kZUJsb2NrLT50aWVyVXBDb3VudChmdW5jdGlvbkluZGV4KS5zaG91bGRT
dGFydFRpZXJVcCgpKSB7Ci0gICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBP
TUdQbGFuKGNvbnRleHQtPm1vZHVsZSgpLT5tb2R1bGUoKSwgZnVuY3Rpb25JbmRleCwgY29kZUJs
b2NrLT5tX2NvZGVCbG9jay0+bW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAgIGlm
IChjb2RlQmxvY2sudGllclVwQ291bnQoZnVuY3Rpb25JbmRleCkuc2hvdWxkU3RhcnRUaWVyVXAo
KSkgeworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0
YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+d2FzbU1vZHVsZSgp
KSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkp
KTsKICAgICAgICAgZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAg
ICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAg
ICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5oCmluZGV4IDcxNjRhOWUuLmI4MDgyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5o
IgogI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgpAQCAtNDEs
MTcgKzQwLDIwIEBAIG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIE9NR1BsYW4gZmluYWwgOiBwdWJs
aWMgUGxhbiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBsYW47Ci0gICAgLy8gTm90ZTog
Q29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90
aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR1BsYW4oUmVm
PE1vZHVsZT4sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25U
YXNrJiYpOwogCiAgICAgYm9vbCBoYXNXb3JrKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1f
Y29tcGxldGVkOyB9CiAgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsK
ICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQogCisgICAgc3RhdGljIHZvaWQgcnVuRm9ySW5kZXgoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCk7CisKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVh
c29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KICAgICB1
c2luZyBCYXNlOjptX2xvY2s7CiAKKyAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQg
bm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUg
YSByZWZlcmVuY2UgY3ljbGUuCisgICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CisK
ICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbXBsZXRl
ZDsgfQogICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikgb3Zl
cnJpZGUKICAgICB7CkBAIC02NSw4ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9m
dW5jdGlvbkluZGV4OwogfTsKIAotdm9pZCBydW5PTUdQbGFuRm9ySW5kZXgoQ29udGV4dCosIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgpOwotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBhZ2VDb3VudC5oCmluZGV4IGU0Mzg0N2MuLmVmMDVmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CiAgICAgfQorICAg
IAorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNWYWxp
ZChtX3BhZ2VDb3VudCk7CisgICAgfQogCiAgICAgc3RhdGljIFBhZ2VDb3VudCBmcm9tQnl0ZXMo
dWludDY0X3QgYnl0ZXMpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
Y3BwCmluZGV4IGJhMjdjZjkuLmQwNjNjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksOCArMjksNiBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtNTEsMjAg
KzQ5LDI3IEBAIG5hbWVzcGFjZSBXYXNtUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotUGxhbjo6UGxhbihWTSogdm0sIFJlZjxNb2R1bGVJbmZv
cm1hdGlvbj4gaW5mbywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0
KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYg
dGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9tb2R1bGVJbmZvcm1h
dGlvbihXVEZNb3ZlKGluZm8pKQorICAgICwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoV1RGTW92
ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpKQorICAgICwgbV90aHJvd1dhc21FeGNlcHRpb24odGhy
b3dXYXNtRXhjZXB0aW9uKQogICAgICwgbV9zb3VyY2UobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291
cmNlLmRhdGEoKSkKICAgICAsIG1fc291cmNlTGVuZ3RoKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNv
dXJjZS5zaXplKCkpCiB7Ci0gICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKHZtLCBXVEZNb3ZlKHRhc2spKSk7CisgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKIH0KIAotUGxhbjo6UGxhbihW
TSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCwgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IFBsYW4oY29u
dGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgbnVsbHB0ciwgbnVsbHB0cikKK3sK
K30KKworUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2Us
IHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IG1fbW9k
dWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWlu
dDhfdD4oKSkpKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV9zb3VyY2VMZW5ndGgo
c291cmNlTGVuZ3RoKQogewotICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcih2bSwgV1RGTW92ZSh0YXNrKSkpOworICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9CiAKIHZvaWQgUGxhbjo6
cnVuQ29tcGxldGlvblRhc2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKQEAgLTcyLDE4ICs3Nywx
OCBAQCB2b2lkIFBsYW46OnJ1bkNvbXBsZXRpb25UYXNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYp
CiAgICAgQVNTRVJUKGlzQ29tcGxldGUoKSAmJiAhaGFzV29yaygpKTsKIAogICAgIGZvciAoYXV0
byYgdGFzayA6IG1fY29tcGxldGlvblRhc2tzKQotICAgICAgICB0YXNrLnNlY29uZC0+cnVuKHRh
c2suZmlyc3QsICp0aGlzKTsKKyAgICAgICAgdGFzay5zZWNvbmQtPnJ1bigqdGhpcyk7CiAgICAg
bV9jb21wbGV0aW9uVGFza3MuY2xlYXIoKTsKICAgICBtX2NvbXBsZXRlZC5ub3RpZnlBbGwoKTsK
IH0KIAotdm9pZCBQbGFuOjphZGRDb21wbGV0aW9uVGFzayhWTSYgdm0sIENvbXBsZXRpb25UYXNr
JiYgdGFzaykKK3ZvaWQgUGxhbjo6YWRkQ29tcGxldGlvblRhc2soQ29udGV4dCogY29udGV4dCwg
Q29tcGxldGlvblRhc2smJiB0YXNrKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7
CiAgICAgaWYgKCFpc0NvbXBsZXRlKCkpCi0gICAgICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcigmdm0sIFdURk1vdmUodGFzaykpKTsKKyAgICAgICAgbV9jb21wbGV0
aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsK
ICAgICBlbHNlCi0gICAgICAgIHRhc2stPnJ1bigmdm0sICp0aGlzKTsKKyAgICAgICAgdGFzay0+
cnVuKCp0aGlzKTsKIH0KIAogdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCkBAIC05NCwx
OSArOTksMTkgQEAgdm9pZCBQbGFuOjp3YWl0Rm9yQ29tcGxldGlvbigpCiAgICAgfQogfQogCi1i
b29sIFBsYW46OnRyeVJlbW92ZVZNQW5kQ2FuY2VsSWZMYXN0KFZNJiB2bSkKK2Jvb2wgUGxhbjo6
dHJ5UmVtb3ZlQ29udGV4dEFuZENhbmNlbElmTGFzdChDb250ZXh0JiBjb250ZXh0KQogewogICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
ewotICAgICAgICAvLyBXZSBhbGxvdyB0aGUgZmlyc3QgY29tcGxldGlvbiB0YXNrIHRvIG5vdCBo
YXZlIGEgdm0uCisgICAgICAgIC8vIFdlIGFsbG93IHRoZSBmaXJzdCBjb21wbGV0aW9uIHRhc2sg
dG8gbm90IGhhdmUgYSBDb250ZXh0LgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
bV9jb21wbGV0aW9uVGFza3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBBU1NFUlQobV9jb21w
bGV0aW9uVGFza3NbaV0uZmlyc3QpOwogICAgIH0KIAogICAgIGJvb2wgcmVtb3ZlZEFueVRhc2tz
ID0gZmFsc2U7Ci0gICAgbV9jb21wbGV0aW9uVGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChj
b25zdCBzdGQ6OnBhaXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4mIHBhaXIpIHsKLSAgICAgICAgYm9v
bCBzaG91bGRSZW1vdmUgPSBwYWlyLmZpcnN0ID09ICZ2bTsKKyAgICBtX2NvbXBsZXRpb25UYXNr
cy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNvbnN0IHN0ZDo6cGFpcjxDb250ZXh0KiwgQ29tcGxl
dGlvblRhc2s+JiBwYWlyKSB7CisgICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcGFpci5maXJz
dCA9PSAmY29udGV4dDsKICAgICAgICAgcmVtb3ZlZEFueVRhc2tzIHw9IHNob3VsZFJlbW92ZTsK
ICAgICAgICAgcmV0dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5oCmluZGV4IDEwZjhhMWIuLjdhMDdiZmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uaApAQCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5o
IgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgpAQCAtMzksMjUgKzM5LDI3IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbExpbmtJbmZvOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7
Ci1jbGFzcyBKU1Byb21pc2VEZWZlcnJlZDsKIAogbmFtZXNwYWNlIFdhc20gewogCitzdHJ1Y3Qg
Q29udGV4dDsKKwogY2xhc3MgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFu
PiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkIENhbGxiYWNrVHlwZShWTSosIFBsYW4mKTsK
KyAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFBsYW4mKTsKICAgICB1c2luZyBDb21wbGV0
aW9uVGFzayA9IFJlZlB0cjxTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4+OwotICAgIHN0YXRpYyBD
b21wbGV0aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENh
bGxiYWNrVHlwZT4oW10oVk0qLCBQbGFuJikgeyB9KTsgfQotICAgIFBsYW4oVk0qLCBSZWY8TW9k
dWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKKworICAgIHN0YXRpYyBDb21wbGV0
aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNr
VHlwZT4oW10oUGxhbiYpIHsgfSk7IH0KKyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5m
b3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhy
b3dXYXNtRXhjZXB0aW9uKTsKKyAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRp
b24+LCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Ig
c2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1v
ZHVsZSBlLmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBQbGFuKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgQ29tcGxldGlvblRhc2smJik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihDb250ZXh0KiwgY29uc3QgdWludDhfdCosIHNpemVf
dCwgQ29tcGxldGlvblRhc2smJik7CiAgICAgdmlydHVhbCBKU19FWFBPUlRfUFJJVkFURSB+UGxh
bigpOwogCiAgICAgLy8gSWYgeW91IGd1YXJhbnRlZSB0aGUgb3JkZXJpbmcgaGVyZSwgeW91IGNh
biByZWx5IG9uIEZJRk8gb2YgdGhlCiAgICAgLy8gY29tcGxldGlvbiB0YXNrcyBiZWluZyBjYWxs
ZWQuCi0gICAgdm9pZCBhZGRDb21wbGV0aW9uVGFzayhWTSYsIENvbXBsZXRpb25UYXNrJiYpOwor
ICAgIHZvaWQgYWRkQ29tcGxldGlvblRhc2soQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwog
CiAgICAgdm9pZCBzZXRNb2RlKE1lbW9yeU1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CiAg
ICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkBAIC03Miw3ICs3
NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgaXQgY2FuY2VsbGVkIHRoZSBwbGFuLgotICAgIGJvb2wgdHJ5UmVtb3Zl
Vk1BbmRDYW5jZWxJZkxhc3QoVk0mKTsKKyAgICBib29sIHRyeVJlbW92ZUNvbnRleHRBbmRDYW5j
ZWxJZkxhc3QoQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBydW5Db21wbGV0aW9u
VGFza3MoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKQEAgLTgzLDcgKzg1LDEwIEBAIHByb3RlY3Rl
ZDoKIAogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKIAot
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Vk0qLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlv
blRhc2tzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiwg
MT4gbV9jb21wbGV0aW9uVGFza3M7CisKKyAgICBDcmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVh
dGVFbWJlZGRlcldyYXBwZXI7CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhj
ZXB0aW9uIHsgbnVsbHB0ciB9OwogCiAgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAg
Y29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2lnbmF0dXJlLmNwcAppbmRleCA4YjYwMGVkLi42YTQyZDUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsMTAgQEAKIAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2lnbmF0dXJlLmgKaW5kZXggZTQxM2IyNS4uYWFjZWQ1ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw4ICs0Myw2IEBAIGNsYXNzIFBy
aW50U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIG5hbWVzcGFjZSBX
YXNtIHsKIAogdXNpbmcgU2lnbmF0dXJlQXJnQ291bnQgPSB1aW50MzJfdDsKQEAgLTE1Niw3ICsx
NTQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2FzbTo6U2lnbmF0dXJl
SGFzaD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCi0vLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBh
bmQgc2hhcmVkIGJ5IFZNcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRo
aXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5k
IG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4K
Ky8vIFNpZ25hdHVyZSBpbmZvcm1hdGlvbiBpcyBoZWxkIGdsb2JhbGx5IGFuZCBzaGFyZWQgYnkg
dGhlIGVudGlyZSBwcm9jZXNzIHRvIGFsbG93IGFsbCBzaWduYXR1cmVzIHRvIGJlIHVuaXF1ZS4g
VGhpcyBpcyByZXF1aXJlZCB3aGVuIHdhc20gY2FsbHMgYW5vdGhlciB3YXNtIGluc3RhbmNlLCBh
bmQgbXVzdCB3b3JrIHdoZW4gbW9kdWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgVk1z
LgogLy8gTm90ZTogc2lnbmF0dXJlcyBhcmUgbmV2ZXIgcmVtb3ZlZCBiZWNhdXNlIHRoYXQgd291
bGQgcmVxdWlyZSBhY2NvdW50aW5nIGZvciBhbGwgV2ViQXNzZW1ibHkuTW9kdWxlIGFuZCB3aGlj
aCBzaWduYXR1cmVzIHRoZXkgdXNlLiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBp
cyBib3VuZGVkLCBhbmQgaXNuJ3Qgd29ydGggdGhlIGNvdW50aW5nIG92ZXJoZWFkLiBXZSBjb3Vs
ZCBjbGVhciBldmVyeXRoaW5nIHdoZW4gd2UgcmVhY2ggemVybyBvdXRzdGFuZGluZyBXZWJBc3Nl
bWJseS5Nb2R1bGUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYw
MzcKIGNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTaWduYXR1cmVJbmZvcm1hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRh
YmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmVhOGQwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcApA
QCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUuaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5o
PgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworUmVmUHRyPFRhYmxlPiBUYWJs
ZTo6Y3JlYXRlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW0pCit7CisgICAgaWYgKCFpc1ZhbGlkU2l6ZShpbml0aWFsKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgZmFzdE1hbGxvYyhzaXpl
b2YoVGFibGUpKSkgVGFibGUoaW5pdGlhbCwgbWF4aW11bSkpOworfQorCitUYWJsZTo6flRhYmxl
KCkKK3sKK30KKworVGFibGU6OlRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW0pCit7CisgICAgbV9zaXplID0gaW5pdGlhbDsKKyAgICBtX21heGlt
dW0gPSBtYXhpbXVtOworICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3NpemUpKTsKKyAgICBBU1NF
UlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7CisKKyAgICAvLyBGSVhNRTog
SXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRo
ZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCisgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5v
dCBkb2luZyB0aGF0LgorICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxl
RnVuY3Rpb24+OjptYWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICBtX2luc3RhbmNlcyA9IE1hbGxvY1B0cjxKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqPjo6bWFsbG9jKHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
KSAqIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ld
KSBDYWxsYWJsZUZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtp
XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdl
IHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBtX2luc3RhbmNlcy5nZXQo
KVtpXSA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBUYWJs
ZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKK3sKKyAgICBpZiAoZGVsdGEgPT0gMCkKKyAgICAgICAg
cmV0dXJuIHNpemUoKTsKKworICAgIHVzaW5nIENoZWNrZWQgPSBDaGVja2VkPHVpbnQzMl90LCBS
ZWNvcmRPdmVyZmxvdz47CisgICAgQ2hlY2tlZCBuZXdTaXplQ2hlY2tlZCA9IHNpemUoKTsKKyAg
ICBuZXdTaXplQ2hlY2tlZCArPSBkZWx0YTsKKyAgICB1aW50MzJfdCBuZXdTaXplOworICAgIGlm
IChuZXdTaXplQ2hlY2tlZC5zYWZlR2V0KG5ld1NpemUpID09IENoZWNrZWRTdGF0ZTo6RGlkT3Zl
cmZsb3cpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAobWF4aW11bSgp
ICYmIG5ld1NpemUgPiAqbWF4aW11bSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBhdXRvIGNoZWNrZWRHcm93ID0gWyZdIChhdXRvJiBjb250YWluZXIpIHsKKyAg
ICAgICAgQ2hlY2tlZCByZWFsbG9jU2l6ZUNoZWNrZWQgPSBuZXdTaXplQ2hlY2tlZDsKKyAgICAg
ICAgcmVhbGxvY1NpemVDaGVja2VkICo9IHNpemVvZigqY29udGFpbmVyLmdldCgpKTsKKyAgICAg
ICAgdWludDMyX3QgcmVhbGxvY1NpemU7CisgICAgICAgIGlmIChyZWFsbG9jU2l6ZUNoZWNrZWQu
c2FmZUdldChyZWFsbG9jU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29udGFpbmVyLnJlYWxsb2MocmVhbGxvY1Np
emUpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kp
CisgICAgICAgICAgICBuZXcgKCZjb250YWluZXIuZ2V0KClbaV0pIHN0ZDo6cmVtb3ZlX3JlZmVy
ZW5jZV90PGRlY2x0eXBlKCpjb250YWluZXIuZ2V0KCkpPigpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9OworCisgICAgaWYgKCFjaGVja2VkR3JvdyhtX2Z1bmN0aW9ucykpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFjaGVja2VkR3JvdyhtX2luc3RhbmNlcykp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBtX3NpemUgPSBuZXdTaXplOwor
CisgICAgcmV0dXJuIG5ld1NpemU7Cit9CisKK3ZvaWQgVGFibGU6OmNsZWFyRnVuY3Rpb24odWlu
dDMyX3QgaW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAg
IG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAg
ICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206
OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVk
IGNvZGUuCisgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXhdID0gbnVsbHB0cjsKK30KKwordm9p
ZCBUYWJsZTo6c2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgsIENhbGxhYmxlRnVuY3Rpb24gZnVu
Y3Rpb24sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1
bmN0aW9uOworICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IGluc3RhbmNlOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6VGFibGUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYTkyYTlhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJX
YXNtTGltaXRzLmgiCisjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTsgLy8gRklYTUUgdGhpcyBzaG91bGQgYmUgV2FzbTo6SW5zdGFuY2UgaHR0cHM6Ly93
ZWJraXQub3JnL2IvMTc3NDcyCisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgVGFibGUgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGFibGU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmUHRyPFRhYmxlPiBjcmVhdGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gbWF4aW11bSk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+VGFibGUoKTsKKworICAg
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGlt
dW07IH0KKyAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gZ3Jvdyh1aW50MzJfdCBkZWx0YSkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCk7CisgICAgdm9pZCBzZXRG
dW5jdGlvbih1aW50MzJfdCwgQ2FsbGFibGVGdW5jdGlvbiwgSlNXZWJBc3NlbWJseUluc3RhbmNl
Kik7IC8vIEZJWE1FIG1ha2UgdGhpcyBXYXNtOjpJbnN0YW5jZS4gaHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTc3NDcyCisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9zaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1fZnVu
Y3Rpb25zKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZXMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1faW5zdGFuY2VzKTsgfQorCisgICAgc3RhdGlj
IGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6ZSkgeyByZXR1cm4gc2l6ZSA8IG1heFRhYmxl
RW50cmllczsgfQorCitwcml2YXRlOgorICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOworCisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gbV9tYXhpbXVtOworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICBNYWxsb2NQdHI8Q2FsbGFi
bGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7CisgICAgLy8gY2FsbF9pbmRpcmVjdCBuZWVkcyB0byBk
byBhbiBJbnN0YW5jZSBjaGVjayB0byBwb3RlbnRpYWxseSBjb250ZXh0IHN3aXRjaCB3aGVuIGNh
bGxpbmcgYSBmdW5jdGlvbiB0byBhbm90aGVyIGluc3RhbmNlLiBXZSBjYW4gaG9sZCByYXcgcG9p
bnRlcnMgdG8gSW5zdGFuY2UgaGVyZSBiZWNhdXNlIHRoZSBlbWJlZGRlciBlbnN1cmVzIHRoYXQg
VGFibGUga2VlcHMgYWxsIHRoZSBpbnN0YW5jZXMgYWxpdmUuIFdlIGNvdWxkbid0IGhvbGQgYSBS
ZWYgaGVyZSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGN5Y2xlcy4KKyAgICBNYWxsb2NQdHI8SlNX
ZWJBc3NlbWJseUluc3RhbmNlKj4gbV9pbnN0YW5jZXM7IC8vIEZJWE1FIG1ha2UgdGhpcyBhIFdh
c206Okluc3RhbmNlLiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCmluZGV4IDk3N2IwMWIuLmMyMzU5
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBAIC0yOSwx
MSArMjksOSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgotI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgogI2luY2x1ZGUgIkhlYXBDZWxsSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCkBAIC00OCw0NiArNDYsMTggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25z
dCBBYnN0cmFjdExvY2tlciYKIAogICAgIC8vIFRoZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVz
dCBtb3ZlIEV4Y2VwdGlvblR5cGUgaW50byB0aGUgYXJndW1lbnRHUFIxIGJlZm9yZSBqdW1waW5n
IGhlcmUuCiAgICAgLy8gV2UncmUgYWxsb3dlZCB0byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZS4g
V2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSBjYWxsZWUgc2F2ZXMuCi0gICAgaml0LmxvYWRXYXNt
Q29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjIsIENvbnRleHQ6Om9mZnNldE9mVk0o
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3Rh
bmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwog
ICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICAgICBqaXQuYnJlYWtwb2lu
dCgpOyAvLyBXZSBzaG91bGQgbm90IHJlYWNoIHRoaXMuCiAKLSAgICB2b2lkKiAoKnRocm93V2Fz
bUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgV2FzbTo6Q29udGV4
dCopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBXYXNt
OjpDb250ZXh0KiB3YXNtQ29udGV4dCkgLT4gdm9pZCogewotICAgICAgICBWTSogdm0gPSB3YXNt
Q29udGV4dC0+dm0oKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmplY3QoKTsKLQotICAgICAgICAgICAgSlNPYmpl
Y3QqIGVycm9yOyAKLSAgICAgICAgICAgIGlmICh0eXBlID09IEV4Y2VwdGlvblR5cGU6OlN0YWNr
T3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVTdGFja092ZXJmbG93RXJy
b3IoZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZShleGVjLCAqdm0sIGds
b2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJy
b3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7Ci0gICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgIH0KLQotICAgICAgICBnZW5l
cmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNh
dGNoKTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKLSAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6Ci0gICAgICAgIC8vIFRo
aXMgaXMgYSB0b3RhbCBoYWNrLCBidXQgdGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5k
bGVVbmNhdWdodEV4Y2VwdGlvbikKLSAgICAgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNh
bGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVx
dWlyZQotICAgICAgICAvLyB0aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFu
dCBWTSBwb2ludGVyLikgV2UgY291bGQgbWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCi0gICAg
ICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBj
YWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBqdW1waW5nCi0gICAgICAgIC8vIHRvIHRoZSBleGNl
cHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJp
YmxlIGhhY2suCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzA0NDAKLSAgICAgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4od2FzbUNvbnRleHQtPndl
YkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKLSAgICAgICAgcmV0dXJuIHZtLT50YXJnZXRNYWNoaW5l
UENGb3JUaHJvdzsKLSAgICB9OwotCisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7CisgICAg
UkVMRUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0
aHJvd1dhc21FeGNlcHRpb24pOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0
cih0aHJvd1dhc21FeGNlcHRpb24pKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKSk7CiB9CiAKQEAgLTExOSw4ICs4OSwx
MCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9y
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKICNlbmRpZgogICAgIHVuc2lnbmVkIG51bWJlck9mU3Rh
Y2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3Bp
bGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsKIAotICAgIGppdC5sb2FkV2FzbUNvbnRleHQoR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihydW5PTUdQbGFuRm9ySW5kZXgpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpSdW4pKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSosIHVpbnQzMl90KTsKKyAgICBSdW4gcnVuID0gT01HUGxhbjo6cnVuRm9ySW5kZXg7
CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocnVuKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmNhbGwo
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKIAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBS
ZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRp
b24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKQEAgLTE0Miw2ICsxMTQsMTkgQEAgVGh1bmtzJiBUaHVu
a3M6OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuICp0aHVua3M7CiB9CiAKK3ZvaWQgVGh1bmtzOjpz
ZXRUaHJvd1dhc21FeGNlcHRpb24oVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlv
bikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgLy8gVGhlIHRo
dW5rcyBhcmUgdW5pcXVlIGZvciB0aGUgZW50aXJlIHByb2Nlc3MsIHRoZXJlZm9yZSBjaGFuZ2lu
ZyB0aGUgdGhyb3dpbmcgZnVuY3Rpb24gY2hhbmdlcyBpdCBmb3IgYWxsIHVzZXMgb2YgV2ViQXNz
ZW1ibHkuCisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdGhyb3dXYXNtRXhjZXB0aW9uIHx8IG1fdGhy
b3dXYXNtRXhjZXB0aW9uID09IHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgbV90aHJvd1dhc21F
eGNlcHRpb24gPSB0aHJvd1dhc21FeGNlcHRpb247Cit9CisKK1Rocm93V2FzbUV4Y2VwdGlvbiBU
aHVua3M6OnRocm93V2FzbUV4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIG1fdGhyb3dXYXNtRXhj
ZXB0aW9uOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtzOjpzdHViKFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKaW5kZXggZGYxNGNhMi4uNTI5
NzY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaApAQCAtMjgsNiAr
MjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC00Miw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBpbml0aWFsaXplKCk7CiAgICAgc3RhdGljIFRodW5rcyYgc2luZ2xldG9uKCk7CiAK
KyAgICB2b2lkIHNldFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24pOworICAg
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24oKTsKKwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzdHViKFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsKQEAgLTUw
LDYgKzU0LDcgQEAgcHJpdmF0ZToKICAgICBUaHVua3MoKSA9IGRlZmF1bHQ7CiAKICAgICBIYXNo
TWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fc3R1YnM7CisgICAg
VGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAg
IExvY2sgbV9sb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3Jr
bGlzdC5jcHAKaW5kZXggOWM1YjY4NC4uMmZlMTMyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ildhc21Xb3JrbGlzdC5oIgogCkBAIC0xNzIsMTMgKzE3MywxMyBAQCB2b2lkIFdvcmtsaXN0Ojpj
b21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCiAgICAgcGxhbi53YWl0Rm9yQ29t
cGxldGlvbigpOwogfQogCi12b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0p
Cit2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JDb250ZXh0KENvbnRleHQmIGNvbnRleHQp
CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgVmVjdG9yPFF1ZXVlRWxl
bWVudD4gZWxlbWVudHM7CiAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewogICAgICAg
ICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUuZGVxdWV1ZSgpOwotICAgICAgICBib29s
IGRpZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0p
OworICAgICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4
dEFuZENhbmNlbElmTGFzdChjb250ZXh0KTsKICAgICAgICAgaWYgKCFkaWRDYW5jZWwpCiAgICAg
ICAgICAgICBlbGVtZW50cy5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgfQpAQCAtMTg4
LDcgKzE4OSw3IEBAIHZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKIAog
ICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV90aHJlYWRzKSB7CiAgICAgICAgIGlmICh0aHJlYWQt
PmVsZW1lbnQucGxhbikgewotICAgICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVs
ZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRDYW5jZWxJZkxhc3Qodm0pOworICAgICAgICAgICAg
Ym9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlQ29udGV4dEFu
ZENhbmNlbElmTGFzdChjb250ZXh0KTsKICAgICAgICAgICAgIGlmIChkaWRDYW5jZWwpIHsKICAg
ICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBkZWFkbG9j
a2luZyBzaW5jZSB0aGUgdGhyZWFkIGNhbid0IGJsb2NrIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGEg
bmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0aGUgbG9jayB0byBkbyBzby4KICAgICAgICAgICAgICAg
ICB0aHJlYWQtPnN5bmNocm9uaXplLndhaXQoKm1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Xb3JrbGlzdC5oCmluZGV4IDZiNjkzNTIuLjc0OGE5ZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJWTS5oIgotCiAjaW5jbHVkZSA8cXVl
dWU+CiAKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CkBAIC0zNywxMCArMzUsOSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7Ci0KIG5hbWVz
cGFjZSBXYXNtIHsKIAorc3RydWN0IENvbnRleHQ7CiBjbGFzcyBQbGFuOwogCiBjbGFzcyBXb3Jr
bGlzdCB7CkBAIC01MCwxMyArNDcsMTAgQEAgcHVibGljOgogICAgIH5Xb3JrbGlzdCgpOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbnF1ZXVlKFJlZjxQbGFuPik7Ci0gICAgdm9pZCBz
dG9wQWxsUGxhbnNGb3JWTShWTSYpOworICAgIHZvaWQgc3RvcEFsbFBsYW5zRm9yQ29udGV4dChD
b250ZXh0Jik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXBsZXRlUGxhblN5bmNo
cm9ub3VzbHkoUGxhbiYpOwogCi0gICAgdm9pZCBhY3RpdmF0ZVBsYW4oSlNQcm9taXNlRGVmZXJy
ZWQqLCBQbGFuKik7Ci0gICAgdm9pZCBkZWFjdGl2ZVBsYW4oSlNQcm9taXNlRGVmZXJyZWQqLCBQ
bGFuKik7Ci0KICAgICBlbnVtIGNsYXNzIFByaW9yaXR5IHsKICAgICAgICAgU2h1dGRvd24sCiAg
ICAgICAgIFN5bmNocm9ub3VzLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjcxMDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAK
QEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1RvV2FzbS5oIgor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGls
YXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4KQoreworICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0
aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRKSVQ7CisKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFr
ZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoKTsKKworICAgIC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgaml0LnN0b3JlNjQo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJl
c3VsdC0+Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoY2FsbGVlTW92ZUxvY2F0aW9uKTsKKyAgICB9KTsKKworICAgIGNvbnN0
IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlubmVkUmVncy50b1NhdmUobW9kZSk7CisK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5u
dW1iZXJPZlNldEdQUnMoKTsKKyAgICAvLyBUaGV5IHNob3VsZCBhbGwgYmUgY2FsbGVlIHNhdmVz
LgorICAgIHRvU2F2ZS5maWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CisgICAgQVNTRVJUKHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKSA9PSB0b1NhdmVTaXplKTsKKyNl
bmRpZgorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUs
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQp
OworICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJz
VG9TcGlsbDsKKworICAgIHVuc2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGls
bC5zaXplKCkgKiBzaXplb2Yodm9pZCopOworICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxs
aW5nQ29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAt
PSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7Cisg
ICAgdW5zaWduZWQgbnVtRlBScyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVy
ZS5hcmd1bWVudChpKSkgeworICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgY2FzZSBX
YXNtOjpJMzI6CisgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9
IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICArK251bUdQUnM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAg
ICAgICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdz
LnNpemUoKSkKKyAgICAgICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCop
OworICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdG90YWxGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCB0b3RhbEZyYW1lU2l6ZSk7CisgICAgaml0LnN1YlB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRvdGFsRnJhbWVTaXplKSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdlIHNhdmUgYWxsIHRoZXNl
IHJlZ2lzdGVycyByZWdhcmRsZXNzIG9mIGhhdmluZyBhIG1lbW9yeSBvciBub3QuCisgICAgLy8g
VGhlIHJlYXNvbiBpcyB0aGF0IHdlIHVzZSBvbmUgb2YgdGhlc2UgYXMgYSBzY3JhdGNoLiBUaGF0
IHNhaWQsCisgICAgLy8gYWxtb3N0IGFsbCByZWFsIHdhc20gcHJvZ3JhbXMgdXNlIG1lbW9yeSwg
c28gaXQncyBub3QgcmVhbGx5CisgICAgLy8gd29ydGggb3B0aW1pemluZyBmb3IgdGhlIGNhc2Ug
dGhhdCB0aGV5IGRvbid0LgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRP
ZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9m
ZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0
Lm9mZnNldCgpOworICAgICAgICBqaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCkpOworICAgIH0KKworICAgIEdQ
UlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3Rh
bmNlUG9pbnRlcjsKKworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxl
ZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSk7CisgICAgICAgIG51bUdQUnMgPSAwOworICAgICAgICBudW1GUFJzID0gMDsKKyAgICAg
ICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMu
IFNvCisgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5j
ZSB3ZSBzYXZlZCBpdCBhYm92ZS4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5uZWRS
ZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENh
bGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisKKyAg
ICAgICAgLy8gdm1FbnRyeVRvV2FzbSBwYXNzZXMgV2FzbTo6Q29udGV4dConcyBpbnN0YW5jZSBh
cyB0aGUgZmlyc3QgSlMgYXJndW1lbnQgd2hlbiB3ZSdyZQorICAgICAgICAvLyBub3QgdXNpbmcg
ZmFzdCBUTFMgdG8gaG9sZCB0aGUgV2FzbTo6Q29udGV4dConcyBpbnN0YW5jZS4KKyAgICAgICAg
aWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQp
LCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwdHJkaWZmX3Qgd2FzbU9m
ZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7IGkrKykgeworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsK
KyAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6
CisgICAgICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCku
bV9ncHJBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFy
Z3VtZW50KGkpID09IFdhc206OkkzMikgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmxv
YWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpz
T2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUz
MihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
NjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09m
ZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
c2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yo
dm9pZCopOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251
bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdz
W251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytu
dW1HUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXYXNtOjpG
MzI6CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgICAgICBpZiAobnVt
RlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1l
LndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53
aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9
PSBXYXNtOjpGMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJs
ZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zm
c2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBq
c09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKCEhaW5mby5tZW1vcnkpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5u
ZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFz
dFRMUygpKQorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdh
c21Db250ZXh0SW5zdGFuY2VHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNt
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBqaXQu
bG9hZFdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZldhc21NZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAgICAgICBj
b25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNp
emVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBz
dGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0
aXZlIHRvIDAuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNp
emVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJl
Z3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9CisKKyAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9y
eTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgIH0KKworICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAg
IHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmltcG9y
dEZ1bmN0aW9uQ291bnQoKTsKKyAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5mby5m
dW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNhbGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7
CisgICAgfSk7CisKKworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZz
ZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNl
dC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOworICAgIH0KKworICAgIHN3aXRjaCAoc2lnbmF0
dXJlLnJldHVyblR5cGUoKSkgeworICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBqaXQubW92
ZUZsb2F0VG8zMihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgaml0Lm1v
dmVEb3VibGVUbzY0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGI5OGQxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20u
aApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKwor
I2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisj
aW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVy
ZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJs
eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcApz
aW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vSlNXZWJBc3NlbWJseS5jcHAKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9KU1dlYkFzc2VtYmx5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5LmgKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmgKaW5kZXggMGZhZjk3Ny4uYzU3OGRmMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuaApAQCAtMjgsMzEg
KzI4LDMxIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKLSNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCi0jaW5jbHVkZSAi
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUxp
bmtFcnJvci5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCIKLSNpbmNsdWRl
ICJqcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvci5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlUYWJsZS5oIgotI2luY2x1
ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJq
cy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgiCi0j
aW5jbHVkZSAianMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUg
ImpzL1dlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNz
ZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVBy
b3RvdHlwZS5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0
b3IuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgot
I2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgImpz
L1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJqcy9XZWJBc3NlbWJseVRv
SlNDYWxsZWUuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxp
bmtFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUNvbXBp
bGVFcnJvclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNp
bmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWJB
c3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlMaW5rRXJy
b3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBl
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1
bGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmgi
CisjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRlICJXZWJBc3Nl
bWJseVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZS5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIldlYkFz
c2VtYmx5VGFibGVQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlNDYWxsZWUu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKaW5kZXggZjkxZTZjNy4uZTE1
Y2EzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKQEAgLTMxLDkgKzMxLDggQEAKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgi
Ci0jaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRp
b24uaCIKKyNpbmNsdWRlICJXYXNtVG9KUy5oIgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CiAKQEAgLTQxLDExICs0MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJ
bmZvIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q29kZUJs
b2NrIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKSB9OwogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUoVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiBjb2Rl
QmxvY2ssIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSkKK0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZShWTSYgdm0sIFJlZjxXYXNtOjpDb2Rl
QmxvY2s+IGNvZGVCbG9jaywgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUlu
Zm9ybWF0aW9uKQogewotICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJ
bmZvcm1hdGlvbiA9IG1vZHVsZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKTsKLSAgICBh
dXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRG
dW5jdGlvbkNvdW50KCkpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgV1RGTW92ZShjb2Rl
QmxvY2spLCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2
bSwgbW9kdWxlKTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayh2bSwgV1RGTW92ZShjb2RlQmxvY2spLCBtb2R1bGVJbmZvcm1hdGlvbik7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTgsNyAr
NTYsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZN
JiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMu
cmVzZXJ2ZUNhcGFjaXR5KG1fY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAg
IGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBvcnRJbmRleCA8IG1fY29kZUJsb2Nr
LT5mdW5jdGlvbkltcG9ydENvdW50KCk7ICsraW1wb3J0SW5kZXgpIHsKICAgICAgICAgV2FzbTo6
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRG
dW5jdGlvblNpZ25hdHVyZUluZGljZXMuYXQoaW1wb3J0SW5kZXgpOwotICAgICAgICBhdXRvIGJp
bmRpbmcgPSBXYXNtOjp3YXNtVG9Kcygmdm0sIG1fY2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5k
ZXgsIGltcG9ydEluZGV4KTsKKyAgICAgICAgYXV0byBiaW5kaW5nID0gV2FzbTo6d2FzbVRvSlMo
JnZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRJbmRleCk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWSghYmluZGluZykpIHsKICAgICAgICAgICAgIHN3aXRjaCAoYmluZGlu
Zy5lcnJvcigpKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkJpbmRpbmdGYWlsdXJlOjpPdXRP
Zk1lbW9yeToKQEAgLTY4LDE0ICs2NiwxMiBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiBjbwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAg
ICBtX3dhc21Ub0pTRXhpdFN0dWJzLnVuY2hlY2tlZEFwcGVuZChiaW5kaW5nLnZhbHVlKCkpOwot
ICAgICAgICBpbXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpID0gbV93YXNtVG9KU0V4aXRT
dHVic1tpbXBvcnRJbmRleF0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogfQog
Ci12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKQordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwot
ICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKIH0KIAogdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTgzLDExICs3OSw2IEBAIHZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAgICAgc3Rh
dGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9jaygpOwogfQogCi1ib29sIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzU2FmZVRvUnVuKG1lbW9yeS0+bWVtb3J5
KCkubW9kZSgpKTsKLX0KLQogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjbGVhckpTQ2Fs
bElDcyhWTSYgdm0pCiB7CiAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVn
aW4oKTsgISFpdGVyOyArK2l0ZXIpCkBAIC0xMDAsNyArOTEsNiBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlKTsKIAogICAgIHZpc2l0b3IuYWRkVW5j
b25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVy
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaAppbmRleCA1MjcwM2Y4Li44OTBlMjcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCkBA
IC00MCw3ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1dlYkFzc2VtYmx5
TW9kdWxlOwogY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeTsKIAogbmFtZXNwYWNlIFdhc20gewpA
QCAtNTIsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogY3JlYXRlKFZNJiwgUmVmPFdhc206OkNvZGVCbG9jaz4sIEpTV2ViQXNzZW1ibHlNb2R1
bGUqKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiwgUmVm
PFdhc206OkNvZGVCbG9jaz4sIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhD
ZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwpAQCAtNjQsMzggKzYzLDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICZ2bS53ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlOwogICAg
IH0KIAotICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpOyB9Ci0gICAgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLQotICAgIGJv
b2wgaXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSopIGNvbnN0OwotCi0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqKTsKLQotICAgIC8vIFRoZXNl
IHR3byBjYWxsZWUgZ2V0dGVycyBhcmUgb25seSB2YWxpZCBvbmNlIHRoZSBjYWxsZWVzIGhhdmUg
YmVlbiBwb3B1bGF0ZWQuCi0KLSAgICBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2st
PmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNw
YWNlKTsKLSAgICB9Ci0gICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKLSAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICB9Ci0KLSAgICBXYXNtOjpX
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVuc2ln
bmVkIGltcG9ydEluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwotICAg
ICAgICByZXR1cm4gJmltcG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1Yih1bnNpZ25lZCBp
bXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydFN0dWJzKCkg
KyBzaXplb2Yodm9pZCopICogaW1wb3J0SW5kZXg7Ci0gICAgfQotCiAgICAgV2FzbTo6Q29kZUJs
b2NrJiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQorICAgIAorICAg
IHZvaWQqIHdhc21Ub0VtYmVkZGVyU3R1YkV4ZWN1dGFibGVBZGRyZXNzKHNpemVfdCBpbXBvcnRG
dW5jdGlvbk51bSkgeyByZXR1cm4gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRGdW5jdGlvbk51
bV0uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKIAogICAgIHZvaWQgY2xlYXJKU0NhbGxJQ3MoVk0mKTsKIApAQCAtMTE0LDI3ICs4
NiwxMSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydFN0dWJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6ZW9mKEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2spKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25T
aXplKENoZWNrZWQ8c2l6ZV90PiBmdW5jdGlvbkltcG9ydENvdW50KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIChvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogZnVuY3Rpb25J
bXBvcnRDb3VudCkudW5zYWZlR2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZComIGltcG9ydFdhc21U
b0pTU3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAqYml0
d2lzZV9jYXN0PHZvaWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1w
b3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KSk7Ci0gICAgfQotCiAgICAgY2xhc3MgVW5jb25k
aXRpb25hbEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewog
ICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CiAgICAgfTsK
IAogICAgIFJlZjxXYXNtOjpDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwotICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPiBtX3dhc21Ub0pTRXhpdFN0dWJzOwogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2Fs
bExpbmtJbmZvczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IGM3N2ZhMDUuLjk2NDkyOTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcApAQCAtNDksMTIgKzQ5LDE3IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMpCitKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0
YW5jZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW5zdGFuY2UoV1RGTW92
ZShpbnN0YW5jZSkpCiAgICAgLCBtX3ZtKCZ2bSkKKyAgICAsIG1fd2FzbU1vZHVsZShtX2luc3Rh
bmNlLT5tb2R1bGUoKSkKKyAgICAsIG1fd2FzbVRhYmxlKG1faW5zdGFuY2UtPm1fdGFibGUuZ2V0
KCkpCisgICAgLCBtX2dsb2JhbHMobV9pbnN0YW5jZS0+bV9nbG9iYWxzLmdldCgpKQogICAgICwg
bV9udW1JbXBvcnRGdW5jdGlvbnMobnVtSW1wb3J0RnVuY3Rpb25zKQogewotICAgIG1lbXNldChp
bXBvcnRGdW5jdGlvbnMoKSwgMCwgbV9udW1JbXBvcnRGdW5jdGlvbnMgKiBzaXplb2YoV3JpdGVC
YXJyaWVyPEpTT2JqZWN0PikpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUlt
cG9ydEZ1bmN0aW9uczsgKytpKQorICAgICAgICBuZXcgKGltcG9ydEZ1bmN0aW9uSW5mbyhpKSkg
SW1wb3J0RnVuY3Rpb25JbmZvKCk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCkKQEAgLTYzLDEyICs2OCwx
MCBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKIAogICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgbW9kdWxlKTsKLSAgICBjb25zdCBz
aXplX3QgZXh0cmFNZW1vcnlTaXplID0gZ2xvYmFsTWVtb3J5Qnl0ZVNpemUoKTsKLSAgICBtX2ds
b2JhbHMgPSBNYWxsb2NQdHI8dWludDY0X3Q+OjptYWxsb2MoZXh0cmFNZW1vcnlTaXplKTsKLSAg
ICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5U2l6ZSk7Ci0K
ICAgICBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5zZXQodm0sIHRoaXMsIG1vZHVsZU5hbWVzcGFj
ZU9iamVjdCk7CiAgICAgbV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBtb2R1bGUtPmNhbGxlZSgpKTsK
KyAgICAKKyAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdGFuY2Ut
PmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC04OCw0MCArOTEsNDkgQEAgdm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9jYWxsZWUpOwotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHRoaXNPYmplY3QtPmdsb2JhbE1lbW9yeUJ5dGVTaXplKCkpOworICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPm1faW5zdGFuY2UtPmV4dHJhTWVtb3J5
QWxsb2NhdGVkKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5t
X251bUltcG9ydEZ1bmN0aW9uczsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5pbXBvcnRGdW5jdGlvbnMoKVtpXSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPmltcG9ydEZ1bmN0aW9uSW5mbyhpKS0+aW1wb3J0RnVuY3Rpb24pOyAvLyBUaGlzIGFs
c28ga2VlcHMgdGhlIGZ1bmN0aW9ucycgSlNXZWJBc3NlbWJseUluc3RhbmNlIGFsaXZlLgogfQog
CiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgUmVmPFdhc206OkNvZGVCbG9jaz4mJiB3YXNtQ29kZUJsb2NrKQogewor
ICAgIG1faW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24od2FzbUNvZGVCbG9jay5jb3B5UmVmKCkp
OworICAgIG1fd2FzbUNvZGVCbG9jayA9IHdhc21Db2RlQmxvY2sucHRyKCk7CisKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXdhc21Db2RlQmxv
Y2stPnJ1bm5hYmxlKCkpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIEpT
V2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJlKCksIHdhc21Db2RlQmxvY2stPmVycm9yTWVzc2Fn
ZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVCh3YXNt
Q29kZUJsb2NrLT5pc1NhZmVUb1J1bihtZW1vcnlNb2RlKCkpKTsKLSAgICBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtb2R1bGUoKS0+Y29kZUJsb2NrKG1lbW9yeU1vZGUoKSk7
Ci0gICAgaWYgKGNvZGVCbG9jaykgeworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGpzQ29k
ZUJsb2NrID0gbV9tb2R1bGUtPmNvZGVCbG9jayhtZW1vcnlNb2RlKCkpOworICAgIGlmIChqc0Nv
ZGVCbG9jaykgewogICAgICAgICAvLyBBIENvZGVCbG9jayBtaWdodCBoYXZlIGFscmVhZHkgYmVl
biBjb21waWxlZC4gSWYgc28sIGl0IG1lYW5zCiAgICAgICAgIC8vIHRoYXQgdGhlIENvZGVCbG9j
ayB3ZSBhcmUgdHJ5aW5nIHRvIGNvbXBpbGUgbXVzdCBiZSB0aGUgc2FtZQogICAgICAgICAvLyBi
ZWNhdXNlIHdlIHdpbGwgbmV2ZXIgY29tcGlsZSBhIENvZGVCbG9jayBhZ2FpbiBvbmNlIGl0J3MK
ICAgICAgICAgLy8gcnVubmFibGUuCi0gICAgICAgIEFTU0VSVCgmY29kZUJsb2NrLT5jb2RlQmxv
Y2soKSA9PSB3YXNtQ29kZUJsb2NrLnB0cigpKTsKLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZt
LCB0aGlzLCBjb2RlQmxvY2spOworICAgICAgICBBU1NFUlQoJmpzQ29kZUJsb2NrLT5jb2RlQmxv
Y2soKSA9PSB3YXNtQ29kZUJsb2NrLnB0cigpKTsKKyAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZt
LCB0aGlzLCBqc0NvZGVCbG9jayk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrID0g
SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYo
KSwgbV9tb2R1bGUuZ2V0KCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jay0+cnVu
bmFibGUoKSkpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dl
YkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCBjb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7
CisgICAgICAgIGpzQ29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZt
LCBXVEZNb3ZlKHdhc21Db2RlQmxvY2spLCB3YXNtTW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24o
KSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghanNDb2RlQmxvY2stPnJ1bm5hYmxlKCkpKSB7Cisg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtF
cnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJy
b3JTdHJ1Y3R1cmUoKSwganNDb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBj
b2RlQmxvY2spOwotICAgICAgICBtb2R1bGUoKS0+c2V0Q29kZUJsb2NrKHZtLCBtZW1vcnlNb2Rl
KCksIGNvZGVCbG9jayk7CisgICAgICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywganNDb2Rl
QmxvY2spOworICAgICAgICBtX21vZHVsZS0+c2V0Q29kZUJsb2NrKHZtLCBtZW1vcnlNb2RlKCks
IGpzQ29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51
bSA9IDA7IGltcG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraW1wb3J0
RnVuY3Rpb25OdW0pIHsKKyAgICAgICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbmZvID0gaW1wb3J0
RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKTsKKyAgICAgICAgaW5mby0+d2FzbVRvRW1i
ZWRkZXJTdHViRXhlY3V0YWJsZUFkZHJlc3MgPSBtX2NvZGVCbG9jay0+d2FzbVRvRW1iZWRkZXJT
dHViRXhlY3V0YWJsZUFkZHJlc3MoaW1wb3J0RnVuY3Rpb25OdW0pOwogICAgIH0KIAogICAgIGF1
dG8qIG1vZHVsZVJlY29yZCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KG1fbW9k
dWxlTmFtZXNwYWNlT2JqZWN0LT5tb2R1bGVSZWNvcmQoKSk7Ci0gICAgbW9kdWxlUmVjb3JkLT5s
aW5rKGV4ZWMsIG1vZHVsZSgpLCB0aGlzKTsKKyAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywg
bV9tb2R1bGUuZ2V0KCksIHRoaXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAKICAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0
ZShleGVjKTsKQEAgLTEyOSw3ICsxNDEsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgUmVmPFdhc206OgogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2Jq
ZWN0LCBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlKQorSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
SlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0
cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0YW5j
ZSkKIHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0x
NTgsOCArMTcwLDggQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogICAgIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2UgPSBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5h
bWVzcGFjZShleGVjKTsKICAgICAvLyBGSVhNRTogVGhlc2Ugb2JqZWN0cyBjb3VsZCBiZSBwcmV0
dHkgYmlnIHdlIHNob3VsZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCi0gICAgYXV0byogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZt
LmhlYXAsIGFsbG9jYXRpb25TaXplKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291
bnQoKSkpKSBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uodm0sIGluc3RhbmNlU3RydWN0dXJlLCBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpOwotICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbih2bSwganNNb2R1bGUsIG1vZHVsZU5hbWVzcGFjZSk7CisgICAgYXV0byoganNJ
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rp
b25Db3VudCgpKSkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUs
IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSwgV1RGTW92ZShpbnN0YW5j
ZSkpOworICAgIGpzSW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBqc01vZHVsZSwgbW9kdWxl
TmFtZXNwYWNlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OwogCiAgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVzIGJlIGluaXRpYWxseS1l
bXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMsIFdlYkFzc2VtYmx5Lk1l
bW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3RzLCByZXNwZWN0aXZlbHku
CkBAIC0xOTAsMTUgKzIwMiwyMSBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAg
ICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBpbXBvcnRGYWlsTWVz
c2FnZShpbXBvcnQsICJpbXBvcnQgZnVuY3Rpb24iLCAibXVzdCBiZSBjYWxsYWJsZSIpKSk7CiAK
KyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY2FsbGVlSW5zdGFuY2UgPSBudWxs
cHRyOworICAgICAgICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVu
dHJ5cG9pbnQgPSBudWxscHRyOwogICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganND
YXN0PEpTT2JqZWN0Kj4odmFsdWUpOworCiAgICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBF
eHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0OgogICAgICAgICAgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogd2FzbUZ1bmN0aW9uOwogICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb247CiAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJs
eUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5j
dGlvbikpIHsKICAgICAgICAgICAgICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9l
cyBub3QgbWF0Y2ggdGhlIHNpZ25hdHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtF
cnJvci4KICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25h
dHVyZUluZGV4OwotICAgICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAg
ICAgICAgaWYgKHdhc21GdW5jdGlvbikgewogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNp
Z25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAg
ICAgICAgICAgICBjYWxsZWVJbnN0YW5jZSA9IHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgd2FzbUVudHJ5cG9pbnQgPSB3YXNtRnVuY3Rpb24tPndhc21FbnRy
eXBvaW50TG9hZExvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2Fz
bVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAg
Ly8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KQEAgLTIxNSw3ICsyMzMsMTAgQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUg
SlNDZWxsIHRvIHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRz
IGIuIGFib3ZlICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFu
ZCB2LiBiZWxvdyAodGhlIEpTRnVuY3Rpb24pLgogCiAgICAgICAgICAgICBBU1NFUlQobnVtSW1w
b3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOwotICAgICAgICAgICAgaW5zdGFuY2Ut
PmltcG9ydEZ1bmN0aW9ucygpW251bUltcG9ydEZ1bmN0aW9ucysrXS5zZXQodm0sIGluc3RhbmNl
LCBmdW5jdGlvbik7CisgICAgICAgICAgICBJbXBvcnRGdW5jdGlvbkluZm8qIGluZm8gPSBqc0lu
c3RhbmNlLT5pbXBvcnRGdW5jdGlvbkluZm8obnVtSW1wb3J0RnVuY3Rpb25zKyspOworICAgICAg
ICAgICAgaW5mby0+dGFyZ2V0SW5zdGFuY2UgPSBjYWxsZWVJbnN0YW5jZTsKKyAgICAgICAgICAg
IGluZm8tPndhc21FbnRyeXBvaW50ID0gd2FzbUVudHJ5cG9pbnQ7CisgICAgICAgICAgICBpbmZv
LT5pbXBvcnRGdW5jdGlvbi5zZXQodm0sIGpzSW5zdGFuY2UsIGZ1bmN0aW9uKTsKICAgICAgICAg
ICAgIC8vIHYuIEFwcGVuZCBjbG9zdXJlIHRvIGltcG9ydHMuCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMjQzLDcgKzI2NCw4IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCiAgICAgICAgICAgICAvLyBp
aWkuIEFwcGVuZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgaW5zdGFuY2Ut
Pm1fdGFibGUuc2V0KHZtLCBpbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0YW5j
ZS0+bV90YWJsZS5zZXQodm0sIGpzSW5zdGFuY2UsIHRhYmxlKTsKKyAgICAgICAgICAgIGpzSW5z
dGFuY2UtPm1fd2FzbVRhYmxlID0gdGFibGUtPnRhYmxlKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCkBAIC0yNzMsOCArMjk1LDggQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlMK
IAogICAgICAgICAgICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgogICAgICAgICAgICAg
Ly8gaWlpLiBBcHBlbmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBBU1NF
UlQoIWluc3RhbmNlLT5tX21lbW9yeSk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+bV9tZW1vcnku
c2V0KHZtLCBpbnN0YW5jZSwgbWVtb3J5KTsKKyAgICAgICAgICAgIEFTU0VSVCghanNJbnN0YW5j
ZS0+bV9tZW1vcnkpOworICAgICAgICAgICAganNJbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBtZW1v
cnkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yOTEsMTMgKzMxMywxMyBAQCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2
bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2Jh
bHMgPT0gaW1wb3J0LmtpbmRJbmRleCk7CiAgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9y
bWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgewogICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpJMzI6Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBv
cnRHbG9iYWxzKyssIHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgICAgIGpzSW5z
dGFuY2UtPmluc3RhbmNlKCkuc2V0R2xvYmFsKG51bUltcG9ydEdsb2JhbHMrKywgdmFsdWUudG9J
bnQzMihleGVjKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdh
c206OkYzMjoKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKG51bUltcG9ydEds
b2JhbHMrKywgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKSk7Cisg
ICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwobnVtSW1wb3J0
R2xvYmFscysrLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZXhlYykpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgotICAg
ICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwobnVtSW1wb3J0R2xvYmFscysrLCBiaXR3
aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBq
c0luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzE1LDE0ICszMzcsMjEgQEAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YywgSlMKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkg
JiYgIWhhc01lbW9yeUltcG9ydCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVs
ZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0
ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIFJl
ZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtLCBtb2R1
bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnku
bWF4aW11bSgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkuaXNJbXBvcnQoKSk7CisKKyAgICAgICAgICAgIGF1dG8qIGpzTWVtb3J5ID0gSlNX
ZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKKworICAgICAgICAgICAgUmVmUHRy
PFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUobW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0o
KSwKKyAgICAgICAgICAgICAgICBbJnZtXSAoV2FzbTo6TWVtb3J5OjpOb3RpZnlQcmVzc3VyZSkg
eyB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAg
ICAgICAgICAgIFsmdm1dIChXYXNtOjpNZW1vcnk6OlN5bmNUcnlUb1JlY2xhaW0pIHsgdm0uaGVh
cC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICAgICAgICAg
IFsmdm0sIGpzTWVtb3J5XSAoV2FzbTo6TWVtb3J5OjpHcm93U3VjY2VzcywgV2FzbTo6UGFnZUNv
dW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCkgeyBqc01lbW9y
eS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOyB9
KTsKICAgICAgICAgICAgIGlmICghbWVtb3J5KQogICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAKLSAgICAgICAgICAgIGluc3Rh
bmNlLT5tX21lbW9yeS5zZXQodm0sIGluc3RhbmNlLAotICAgICAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBtZW1vcnkucmVsZWFzZU5vbk51bGwoKSkp
OworICAgICAgICAgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwganNNZW1vcnkpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTMzNiwxOSArMzY1LDI0IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTCiAg
ICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24gJiYgIWhhc1Rh
YmxlSW1wb3J0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbW9kdWxlSW5mb3JtYXRp
b24udGFibGVJbmZvcm1hdGlvbi5pc0ltcG9ydCgpKTsKICAgICAgICAgICAgIC8vIFdlIGNyZWF0
ZSBhIFRhYmxlIHdoZW4gaXQncyBhIFRhYmxlIGRlZmluaXRpb24uCi0gICAgICAgICAgICBKU1dl
YkFzc2VtYmx5VGFibGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVy
ZSgpLAotICAgICAgICAgICAgICAgIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24u
aW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7
CisgICAgICAgICAgICBSZWZQdHI8V2FzbTo6VGFibGU+IHdhc21UYWJsZSA9IFdhc206OlRhYmxl
OjpjcmVhdGUobW9kdWxlSW5mb3JtYXRpb24udGFibGVJbmZvcm1hdGlvbi5pbml0aWFsKCksIG1v
ZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24ubWF4aW11bSgpKTsKKyAgICAgICAgICAg
IGlmICghd2FzbVRhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgImNvdWxkbid0IGNyZWF0ZSBUYWJsZSIp
KTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBKU1dlYkFzc2VtYmx5
VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZSBhIEpTV2Vi
QXNzZW1ibHlUYWJsZSB3ZSd2ZSBkZWZpbmVkLgogICAgICAgICAgICAgLy8gSWYgaXQncyBkZWZp
bmVkIHRvIGJlIHRvbyBsYXJnZSwgd2Ugc2hvdWxkIGhhdmUgdGhyb3duIGEgdmFsaWRhdGlvbiBl
cnJvci4KICAgICAgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAg
ICAgICAgIEFTU0VSVCh0YWJsZSk7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+bV90YWJsZS5zZXQo
dm0sIGluc3RhbmNlLCB0YWJsZSk7CisgICAgICAgICAgICBqc0luc3RhbmNlLT5tX3RhYmxlLnNl
dCh2bSwganNJbnN0YW5jZSwgdGFibGUpOworICAgICAgICAgICAganNJbnN0YW5jZS0+bV93YXNt
VGFibGUgPSB0YWJsZS0+dGFibGUoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAo
IWluc3RhbmNlLT5tZW1vcnkoKSkgeworICAgIGlmICghanNJbnN0YW5jZS0+bWVtb3J5KCkpIHsK
ICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBkdW1teSBtZW1vcnksIHNvIHRoYXQgd2Fz
bSAtPiB3YXNtIHRodW5rcyBhdm9pZCBjaGVja2luZyBmb3IgYSBudWxscHRyIE1lbW9yeSB3aGVu
IHRyeWluZyB0byBzZXQgcGlubmVkIHJlZ2lzdGVycy4KLSAgICAgICAgaW5zdGFuY2UtPm1fbWVt
b3J5LnNldCh2bSwgaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVjLCB2
bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVy
ZSgpLCBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgMCwgMCkucmVsZWFzZU5vbk51bGwoKSkpOwor
ICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShleGVj
LCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVj
dHVyZSgpKTsKKyAgICAgICAganNNZW1vcnktPmFkb3B0KFdhc206Ok1lbW9yeTo6Y3JlYXRlKCku
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwganNN
ZW1vcnkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIp
OwogICAgIH0KICAgICAKQEAgLTM2MCwyMCArMzk0LDEzIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTCiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSAhPSBXYXNt
OjpHbG9iYWw6OklzSW1wb3J0KTsKICAgICAgICAgICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRp
b25UeXBlID09IFdhc206Okdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydCkgewogICAgICAgICAgICAg
ICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8IG51bUltcG9ydEds
b2JhbHMpOwotICAgICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgs
IGluc3RhbmNlLT5sb2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVy
KSk7CisgICAgICAgICAgICAgICAganNJbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwoZ2xv
YmFsSW5kZXgsIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkubG9hZEk2NEdsb2JhbChnbG9iYWwuaW5p
dGlhbEJpdHNPckltcG9ydE51bWJlcikpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgZ2xvYmFsLmluaXRpYWxCaXRz
T3JJbXBvcnROdW1iZXIpOworICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCku
c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQoIWluc3RhbmNlLT5jb2RlQmxvY2soKSk7
Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLXNpemVfdCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Omdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tb2R1bGUt
Pm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkgKiBzaXplb2YoUmVnaXN0ZXIpOwor
ICAgIHJldHVybiBqc0luc3RhbmNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgK
aW5kZXggM2NmZTU0OS4uYmIzMWNlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTMyLDYgKzMyLDggQEAKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWJsZS5oIgorI2luY2x1ZGUgIldh
c21Db250ZXh0LmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC0zOSw3NSArNDEsMTAwIEBAIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Owog
Y2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNzIFdlYkFzc2VtYmx5VG9KU0NhbGxlZTsK
IAorbmFtZXNwYWNlIFdhc20geworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgVGFibGU7IC8vIEZJ
WE1FIHJlbW92ZSB0aGlzIGFmdGVyIHJlZmFjdG9yaW5nLiBodHRwczovL3dlYmtpdC5vcmcvYi8x
Nzc0NzIKK30KKwogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIDogcHVibGljIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBF
eGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwg
U3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZN
JiwgRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmpl
Y3QsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpJbnN0YW5jZT4mJik7CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBj
b2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogICAgIHZvaWQg
ZmluYWxpemVDcmVhdGlvbihWTSYsIEV4ZWNTdGF0ZSosIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYp
OwotCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2R1bGUuZ2V0KCk7IH0KLQotICAgIEpTT2JqZWN0KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBp
ZHgpIHsgUkVMRUFTRV9BU1NFUlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOyByZXR1cm4g
aW1wb3J0RnVuY3Rpb25zKClbaWR4XS5nZXQoKTsgfQotCisgICAgCisgICAgV2FzbTo6SW5zdGFu
Y2UmIGluc3RhbmNlKCkgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQorICAgIFdhc206OkNv
bnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiAmbV92bS0+d2FzbUNvbnRleHQ7IH0KICAg
ICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KCkgeyByZXR1
cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3QuZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5nZXQoKTsgfQorICAgIFdlYkFzc2VtYmx5VG9K
U0NhbGxlZSogd2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkgeyByZXR1cm4gbV9jYWxsZWUuZ2V0KCk7
IH0KIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5
LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5
KiB2YWx1ZSkgeyBBU1NFUlQoIW1lbW9yeSgpKTsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1
ZSk7IH0KKyAgICB2b2lkIHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZh
bHVlKSB7IEFTU0VSVCghbWVtb3J5KCkpOyBtX21lbW9yeS5zZXQodm0sIHRoaXMsIHZhbHVlKTsg
bV93YXNtTWVtb3J5ID0gJm1lbW9yeSgpLT5tZW1vcnkoKTsgfQogICAgIFdhc206Ok1lbW9yeU1v
ZGUgbWVtb3J5TW9kZSgpIHsgcmV0dXJuIG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KIAot
ICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9
Ci0KLSAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxzLmdldCgpW2ldOyB9Ci0gICAgaW50NjRfdCBsb2FkSTY0R2xvYmFsKHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQotICAgIGZsb2F0IGxvYWRG
MzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGZsb2F0Pihs
b2FkSTMyR2xvYmFsKGkpKTsgfQotICAgIGRvdWJsZSBsb2FkRjY0R2xvYmFsKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KGxvYWRJNjRHbG9iYWwoaSkpOyB9
Ci0gICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKSB7IG1fZ2xvYmFs
cy5nZXQoKVtpXSA9IGJpdHM7IH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1v
cnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX21l
bW9yeSk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxlKTsgfQorICAgIC8v
IFRhaWwgYWNjZXNzb3JzLgorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZUYWlsKCkgeyByZXR1
cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1aW50NjRfdCk+KHNpemVvZihKU1dl
YkFzc2VtYmx5SW5zdGFuY2UpKTsgfQorICAgIHN0cnVjdCBJbXBvcnRGdW5jdGlvbkluZm8gewor
ICAgICAgICAvLyBUYXJnZXQgaW5zdGFuY2UgYW5kIGVudHJ5cG9pbnQgYXJlIG9ubHkgc2V0IGZv
ciB3YXNtLT53YXNtIGNhbGxzLCBhbmQgYXJlIG90aGVyd2lzZSBudWxscHRyLiBUaGUgZW1iZWRk
ZXItc3BlY2lmaWMgbG9naWMgb2NjdXJzIHRocm91Z2ggaW1wb3J0IGZ1bmN0aW9uLgorICAgICAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIHRhcmdldEluc3RhbmNlIHsgbnVsbHB0ciB9OworICAg
ICAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCB7IG51
bGxwdHIgfTsKKyAgICAgICAgdm9pZCogd2FzbVRvRW1iZWRkZXJTdHViRXhlY3V0YWJsZUFkZHJl
c3MgeyBudWxscHRyIH07CisgICAgICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gaW1wb3J0RnVu
Y3Rpb24geyBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCkgfTsKKyAgICB9OworICAgIEltcG9ydEZ1
bmN0aW9uSW5mbyogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGltcG9ydEZ1bmN0aW9uTnVtIDwgbV9udW1J
bXBvcnRGdW5jdGlvbnMpOworICAgICAgICByZXR1cm4gJmJpdHdpc2VfY2FzdDxJbXBvcnRGdW5j
dGlvbkluZm8qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZUYWlsKCkpW2lt
cG9ydEZ1bmN0aW9uTnVtXTsKKyAgICB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlRhcmdl
dEluc3RhbmNlKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWls
KCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JK
RUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgdGFyZ2V0SW5zdGFuY2UpOyB9CisgICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50KHNpemVfdCBpbXBvcnRGdW5jdGlv
bk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVv
ZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5m
bywgd2FzbUVudHJ5cG9pbnQpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21Ub0Vt
YmVkZGVyU3R1YkV4ZWN1dGFibGVBZGRyZXNzKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyBy
ZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRG
dW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbVRv
RW1iZWRkZXJTdHViRXhlY3V0YWJsZUFkZHJlc3MpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zm
c2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbklu
Zm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVuY3Rpb24p
OyB9CisgICAgSlNPYmplY3QqIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9u
TnVtKSB7IHJldHVybiBpbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0RnVuY3Rpb25OdW0pLT5pbXBv
cnRGdW5jdGlvbi5nZXQoKTsgfQorCisgICAgLy8gRklYTUUgcmVtb3ZlIHRoZXNlIGFmdGVyIHJl
ZmFjdG9yaW5nIHRoZW0gb3V0LiBodHRwczovL3dlYmtpdC5vcmcvYi8xNzc0NzIKKyAgICBXYXNt
OjpNZW1vcnkmIGludGVybmFsTWVtb3J5KCkgeyByZXR1cm4gbWVtb3J5KCktPm1lbW9yeSgpOyB9
CisgICAgV2FzbTo6Q29kZUJsb2NrJiB3YXNtQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gKm1f
aW5zdGFuY2UtPmNvZGVCbG9jaygpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZldh
c21UYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2Us
IG1fd2FzbVRhYmxlKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWxsZWUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2NhbGxlZSk7
IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mVk0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJB
c3NlbWJseUluc3RhbmNlLCBtX3ZtKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZH
bG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwg
bV9nbG9iYWxzKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2NvZGVCbG9j
ayk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbUNvZGVCbG9jaygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fd2FzbUNvZGVCbG9j
ayk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fY2FjaGVkU3Rh
Y2tMaW1pdCk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkg
eyByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlND
ZWxsPik+KHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsgfQotICAgIHN0YXRpYyBzaXpl
X3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0
dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVv
ZihzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pKTsgfQotCi0gICAgV2ViQXNzZW1ibHlUb0pT
Q2FsbGVlKiB3ZWJBc3NlbWJseVRvSlNDYWxsZWUoKSB7IHJldHVybiBtX2NhbGxlZS5nZXQoKTsg
fQotCi0gICAgdm9pZCogY2FjaGVkU3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVk
U3RhY2tMaW1pdDsgfQotICAgIHZvaWQgc2V0Q2FjaGVkU3RhY2tMaW1pdCh2b2lkKiBsaW1pdCkg
eyBtX2NhY2hlZFN0YWNrTGltaXQgPSBsaW1pdDsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZXYXNtTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSwgbV93YXNtTWVtb3J5KTsgfQorICAgIHZvaWQqIGNhY2hlZFN0YWNrTGltaXQoKSBj
b25zdCB7IFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2UtPmNhY2hlZFN0YWNrTGltaXQoKSA9PSBt
X2NhY2hlZFN0YWNrTGltaXQpOyByZXR1cm4gbV9jYWNoZWRTdGFja0xpbWl0OyB9CisgICAgdm9p
ZCBzZXRDYWNoZWRTdGFja0xpbWl0KHZvaWQqIGxpbWl0KSB7IG1faW5zdGFuY2UtPnNldENhY2hl
ZFN0YWNrTGltaXQobGltaXQpOyBtX2NhY2hlZFN0YWNrTGltaXQgPSBsaW1pdDsgfQorICAgIFdh
c206Ok1lbW9yeSogd2FzbU1lbW9yeSgpIHsgcmV0dXJuIG1fd2FzbU1lbW9yeTsgfQorICAgIFdh
c206Ok1vZHVsZSYgd2FzbU1vZHVsZSgpIHsgcmV0dXJuIG1fd2FzbU1vZHVsZTsgfQogCiBwcm90
ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQgbnVtSW1wb3J0RnVuY3Rpb25zKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBT
dHJ1Y3R1cmUqLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMsIFJlZjxXYXNtOjpJbnN0YW5j
ZT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUq
LCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4g
bnVtSW1wb3J0RnVuY3Rpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIChvZmZzZXRPZkltcG9y
dEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIG51bUltcG9ydEZ1
bmN0aW9ucykudW5zYWZlR2V0KCk7CisgICAgICAgIHJldHVybiAob2Zmc2V0T2ZUYWlsKCkgKyBz
aXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSAqIG51bUltcG9ydEZ1bmN0aW9ucykudW5zYWZlR2V0
KCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZNKiBtX3ZtOwotICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4qIGltcG9ydEZ1bmN0aW9ucygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1w
b3J0RnVuY3Rpb25zKCkpOyB9Ci0gICAgc2l6ZV90IGdsb2JhbE1lbW9yeUJ5dGVTaXplKCkgY29u
c3Q7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2R1bGUuZ2V0KCk7IH0KKworICAgIFJlZjxXYXNtOjpJbnN0YW5jZT4gbV9pbnN0YW5jZTsKIAor
ICAgIFZNKiBtX3ZtOwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21v
ZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxv
Y2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5h
bWVzcGFjZU9iamVjdDsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9t
ZW1vcnk7CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlUYWJsZT4gbV90YWJsZTsKICAg
ICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlUb0pTQ2FsbGVlPiBtX2NhbGxlZTsKLSAgICBNYWxs
b2NQdHI8dWludDY0X3Q+IG1fZ2xvYmFsczsKKyAgICAKKyAgICAvLyBGSVhNRSByZW1vdmUgdGhl
c2UgYWZ0ZXIgcmVmYWN0b3JpbmcgdGhlbSBvdXQuIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3NzQ3
MgogICAgIHZvaWQqIG1fY2FjaGVkU3RhY2tMaW1pdCB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkgfTsKKyAgICBXYXNtOjpDb2RlQmxv
Y2sqIG1fd2FzbUNvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAgICBXYXNtOjpNb2R1bGUmIG1fd2Fz
bU1vZHVsZTsKKyAgICBXYXNtOjpNZW1vcnkqIG1fd2FzbU1lbW9yeSB7IG51bGxwdHIgfTsKKyAg
ICBXYXNtOjpUYWJsZSogbV93YXNtVGFibGUgeyBudWxscHRyIH07CisgICAgdWludDY0X3QqIG1f
Z2xvYmFscyB7IG51bGxwdHIgfTsKKwogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVuY3Rpb25z
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcAppbmRleCAyMjNjNThiLi5kNjQwYTQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcApAQCAt
MzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1lbW9yeSIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseU1l
bW9yeSkgfTsKIAotSlNXZWJBc3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdh
c206Ok1lbW9yeT4mJiBtZW1vcnkpCitKU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAg
LTUwLDEwICs1MCwxNiBAQCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5
OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdAogICAgIGlmICghZ2xvYmFs
T2JqZWN0LT53ZWJBc3NlbWJseUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVFdmFsRXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseURpc2FibGVkRXJy
b3JNZXNzYWdlKCkpKTsKIAotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1lbW9yeT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1v
cnkodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShtZW1vcnkpKTsKLSAgICBpbnN0YW5jZS0+bV9tZW1v
cnktPmNoZWNrKCk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICByZXR1
cm4gaW5zdGFuY2U7CisgICAgYXV0byogbWVtb3J5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNXZWJBc3NlbWJseU1lbW9yeT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1vcnkodm0s
IHN0cnVjdHVyZSk7CisgICAgbWVtb3J5LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJu
IG1lbW9yeTsKK30KKyAgICAKK3ZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6YWRvcHQoUmVmPFdh
c206Ok1lbW9yeT4mJiBtZW1vcnkpCit7CisgICAgbV9tZW1vcnkuc3dhcChtZW1vcnkpOworICAg
IEFTU0VSVChtX21lbW9yeS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICBtX21lbW9yeS0+Y2hlY2so
KTsKIH0KIAogU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
QEAgLTYxLDEzICs2NywxMCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseU1l
bW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBS
ZWY8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNz
ZW1ibHlNZW1vcnkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSkKLSAgICAsIG1fbWVtb3J5KFdURk1vdmUobWVtb3J5KSkKKyAgICAsIG1fbWVt
b3J5KFdhc206Ok1lbW9yeTo6Y3JlYXRlKCkucmVsZWFzZU5vbk51bGwoKSkKIHsKLSAgICBBU1NF
UlQobV9tZW1vcnktPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgbV9tZW1vcnlCYXNlID0gbV9tZW1v
cnktPm1lbW9yeSgpOwotICAgIG1fbWVtb3J5U2l6ZSA9IG1fbWVtb3J5LT5zaXplKCk7CiB9CiAK
IEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmJ1ZmZlcihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC04NSw1MiArODgsNDUgQEAgSlNBcnJheUJ1ZmZl
ciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKICAgICByZXR1cm4gbV9idWZmZXJXcmFwcGVyLmdldCgpOwogfQogCi1XYXNt
OjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJl
KQorV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdyb3coVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIHVpbnQzMl90IGRlbHRhKQogewotICAgIC8vIE5vdGU6IFdlIGNhbiBvbmx5
IHVzZSBleGVjIGlmIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSBpcyB0cnVlLgogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgV2FzbTo6
UGFnZUNvdW50IG9sZFBhZ2VDb3VudCA9IG1lbW9yeSgpLnNpemVJblBhZ2VzKCk7Ci0KLSAgICBp
ZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChkZWx0YSkpIHsKLSAgICAgICAgaWYgKHNob3Vs
ZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKKyAgICBhdXRvIGdyb3duID0gbWVtb3J5KCkuZ3Jv
dyhXYXNtOjpQYWdlQ291bnQoZGVsdGEpKTsKKyAgICBpZiAoIWdyb3duKSB7CisgICAgICAgIHN3
aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0Zh
aWxSZWFzb246OkludmFsaWREZWx0YToKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3Nl
bWJseS5NZW1vcnkuZ3JvdyBleHBlY3RzIHRoZSBkZWx0YSB0byBiZSBhIHZhbGlkIHBhZ2UgY291
bnQiKSkpOwotICAgICAgICByZXR1cm4gV2FzbTo6UGFnZUNvdW50KCk7Ci0gICAgfQotCi0gICAg
V2FzbTo6UGFnZUNvdW50IG5ld1NpemUgPSBvbGRQYWdlQ291bnQgKyBXYXNtOjpQYWdlQ291bnQo
ZGVsdGEpOwotICAgIGlmICghbmV3U2l6ZSkgewotICAgICAgICBpZiAoc2hvdWxkVGhyb3dFeGNl
cHRpb25zT25GYWlsdXJlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6
TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZEdyb3dTaXplOgogICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGdyb3duIHNpemUg
dG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50IikpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdhc206Ok1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToK
KyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBl
eGNlZWQgdGhlIG1lbW9yeSdzIGRlY2xhcmVkIG1heGltdW0gc2l6ZSIpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRP
Zk1lbW9yeToKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwogICAgIH0KIAotICAgIGlmIChk
ZWx0YSkgewotICAgICAgICBib29sIHN1Y2Nlc3MgPSBtZW1vcnkoKS5ncm93KHZtLCBuZXdTaXpl
KTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9tZW1vcnlC
YXNlID09IG1lbW9yeSgpLm1lbW9yeSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX21lbW9yeVNp
emUgPT0gbWVtb3J5KCkuc2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvd0V4Y2Vw
dGlvbnNPbkZhaWx1cmUpCi0gICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7Ci0gICAgICAgICAgICByZXR1
cm4gV2FzbTo6UGFnZUNvdW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9tZW1vcnlCYXNlID0g
bWVtb3J5KCkubWVtb3J5KCk7Ci0gICAgICAgIG1fbWVtb3J5U2l6ZSA9IG1lbW9yeSgpLnNpemUo
KTsKLSAgICB9CisgICAgcmV0dXJuIGdyb3duLnZhbHVlKCk7Cit9CiAKLSAgICAvLyBXZSBuZWVk
IHRvIGNsZWFyIG91dCB0aGUgb2xkIGFycmF5IGJ1ZmZlciBiZWNhdXNlIGl0IG1pZ2h0IG5vdyBi
ZSBwb2ludGluZwotICAgIC8vIHRvIHN0YWxlIG1lbW9yeS4KK3ZvaWQgSlNXZWJBc3NlbWJseU1l
bW9yeTo6Z3Jvd1N1Y2Nlc3NDYWxsYmFjayhWTSYgdm0sIFdhc206OlBhZ2VDb3VudCBvbGRQYWdl
Q291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291bnQpCit7CisgICAgLy8gV2UgbmVlZCB0
byBjbGVhciBvdXQgdGhlIG9sZCBhcnJheSBidWZmZXIgYmVjYXVzZSBpdCBtaWdodCBub3cgYmUg
cG9pbnRpbmcgdG8gc3RhbGUgbWVtb3J5LgogICAgIC8vIE5ldXRlciB0aGUgb2xkIGFycmF5Lgog
ICAgIGlmIChtX2J1ZmZlcikgewogICAgICAgICBtX2J1ZmZlci0+bmV1dGVyKHZtKTsKICAgICAg
ICAgbV9idWZmZXIgPSBudWxscHRyOwogICAgICAgICBtX2J1ZmZlcldyYXBwZXIuY2xlYXIoKTsK
ICAgICB9Ci0KKyAgICAKICAgICBtZW1vcnkoKS5jaGVjaygpOwotCi0gICAgdm0uaGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZChXYXNtOjpQYWdlQ291bnQoZGVsdGEpLmJ5dGVzKCkpOwot
ICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CisgICAgCisgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1l
bW9yeUFsbG9jYXRlZChuZXdQYWdlQ291bnQuYnl0ZXMoKSAtIG9sZFBhZ2VDb3VudC5ieXRlcygp
KTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmgKaW5kZXggMWQwNmM0Yy4uNGJiYmNjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaApAQCAtNDgsMjYgKzQ4LDIzIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZ2bS5lYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmpl
Y3RTcGFjZTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1lbW9yeSogY3JlYXRl
KEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1lbW9yeT4mJik7CisgICAg
c3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVj
dHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCisgICAg
dm9pZCBhZG9wdChSZWY8V2FzbTo6TWVtb3J5PiYmKTsKICAgICBXYXNtOjpNZW1vcnkmIG1lbW9y
eSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CiAgICAgSlNBcnJheUJ1ZmZlciogYnVmZmVy
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhWTSYs
IEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09u
RmFpbHVyZSk7Ci0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1fbWVtb3J5QmFzZSk7IH0K
LSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1dlYkFzc2VtYmx5TWVtb3J5LCBtX21lbW9yeVNpemUpOyB9CisgICAgV2FzbTo6UGFn
ZUNvdW50IGdyb3coVk0mLCBFeGVjU3RhdGUqLCB1aW50MzJfdCBkZWx0YSk7CisgICAgdm9pZCBn
cm93U3VjY2Vzc0NhbGxiYWNrKFZNJiwgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2Fz
bTo6UGFnZUNvdW50IG5ld1BhZ2VDb3VudCk7CiAKIHByaXZhdGU6Ci0gICAgSlNXZWJBc3NlbWJs
eU1lbW9yeShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpNZW1vcnk+JiYpOworICAgIEpTV2Vi
QXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkKiBtX21l
bW9yeUJhc2U7Ci0gICAgc2l6ZV90IG1fbWVtb3J5U2l6ZTsKICAgICBSZWY8V2FzbTo6TWVtb3J5
PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4gbV9idWZmZXJXcmFw
cGVyOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IGJh
YjExODEuLjQwYzEwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
V2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVt
b3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCiAj
aW5jbHVkZSAiV2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgpAQCAtNjEsNiArNjIsNyBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAorCiBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFJlZjxXYXNtOjpNb2R1bGU+JiYgbW9kdWxlKQogICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQogICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQpAQCAtOTEsNiArOTMsMzYgQEAg
dm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6dHJ5Q2xlYW51cCgpOwogfQogCitjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYgSlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24o
KSBjb25zdAoreworICAgIHJldHVybiBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKTsKK30K
KworU3ltYm9sVGFibGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmV4cG9ydFN5bWJvbFRhYmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9leHBvcnRTeW1ib2xUYWJsZS5nZXQoKTsKK30KKworV2Fz
bTo6U2lnbmF0dXJlSW5kZXggSlNXZWJBc3NlbWJseU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9tb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4U3BhY2UpOworfQorCitXZWJBc3NlbWJseVRvSlNDYWxsZWUqIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNhbGxlZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FsbGVlLmdl
dCgpOworfQorCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
b2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKQoreworICAgIHJldHVybiBtX2NvZGVCbG9j
a3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihtb2RlKV0uZ2V0KCk7Cit9CisKK1dhc206Ok1vZHVsZSYg
SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlKCkKK3sKKyAgICByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29kZUJsb2NrKFZNJiB2bSwg
V2FzbTo6TWVtb3J5TW9kZSBtb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHNpemVfdD4obW9kZSldLnNldCh2bSwg
dGhpcywgY29kZUJsb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaAppbmRleCAzZGM2N2EzLi4wMWI1ZDA3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBA
IC0zMCwxNSArMzAsMTkgQEAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgot
I2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5TW9kZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogbmFtZXNwYWNlIFdhc20gewogY2xhc3MgTW9kdWxlOworc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uOwogY2xhc3MgUGxhbjsKK3VzaW5nIFNpZ25hdHVyZUluZGV4ID0gdWludDMy
X3Q7CiB9CiAKIGNsYXNzIFN5bWJvbFRhYmxlOwpAQCAtNTIsMjMgKzU2LDIwIEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlU3R1YihWTSYsIEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlU3R1YihWTSYsIEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIFdURjo6RXhwZWN0ZWQ8UmVmUHRyPFdhc206Ok1vZHVsZT4sIFN0
cmluZz4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAotICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpOyB9Ci0gICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9leHBvcnRTeW1ib2xUYWJsZS5nZXQoKTsgfQotICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBm
dW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9tb2R1bGUt
PnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2Up
OwotICAgIH0KLSAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIGNhbGxlZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGVlLmdldCgpOyB9CisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24m
IG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3Q7CisgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJv
bFRhYmxlKCkgY29uc3Q7CisgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3Q7
CisgICAgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKiBjYWxsZWUoKSBjb25zdDsKIAotICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpIHsgcmV0
dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDxzaXplX3Q+KG1vZGUpXS5nZXQoKTsgfQorICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUp
OworICAgIHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgV2FzbTo6TWVtb3J5TW9kZSwgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayopOwogCiAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UoKSBj
b25zdDsKIAotICAgIFdhc206Ok1vZHVsZSYgbW9kdWxlKCkgeyByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7IH0KLSAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBXYXNtOjpNb2R1bGUm
IG1vZHVsZSgpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAKaW5kZXggZmY0NmQ0ZC4uYWExNzJjNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCkBAIC0yOSwz
MCArMjksMjIgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJp
dGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuVGFibGUiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlUYWJs
ZSkgfTsKIAotSlNXZWJBc3NlbWJseVRhYmxlKiBKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGlu
aXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCitKU1dlYkFzc2VtYmx5VGFi
bGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206OlRhYmxlPiYmIHRhYmxlKQogewogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGdsb2Jh
bE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAotICAgIGF1dG8gZXhjZXB0
aW9uID0gWyZdIChKU09iamVjdCogZXJyb3IpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgZXJyb3IpOworICAgIGlmICghZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eUVuYWJsZWQoKSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBj
cmVhdGVFdmFsRXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseURpc2FibGVkRXJy
b3JNZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfTsKLQotICAgIGlm
ICghZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbihjcmVhdGVFdmFsRXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseURp
c2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKLQotICAgIGlmICghaXNWYWxpZFNpemUoaW5pdGlhbCkp
Ci0gICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7
CisgICAgfQogCi0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5VGFibGUodm0sIHN0
cnVjdHVyZSwgaW5pdGlhbCwgbWF4aW11bSk7CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5VGFibGU+KHZtLmhlYXApKSBKU1dlYkFz
c2VtYmx5VGFibGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZSh0YWJsZSkpOwogICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNjIsMjMg
KzU0LDE1IEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5VGFibGU6OkpTV2Vi
QXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbml0
aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQorSlNXZWJBc3NlbWJseVRhYmxl
OjpKU1dlYkFzc2VtYmx5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdh
c206OlRhYmxlPiYmIHRhYmxlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV90
YWJsZShXVEZNb3ZlKHRhYmxlKSkKIHsKLSAgICBtX3NpemUgPSBpbml0aWFsOwotICAgIEFTU0VS
VChpc1ZhbGlkU2l6ZShtX3NpemUpKTsKLSAgICBtX21heGltdW0gPSBtYXhpbXVtOwotICAgIEFT
U0VSVCghbV9tYXhpbXVtIHx8ICptX21heGltdW0gPj0gbV9zaXplKTsKLQogICAgIC8vIEZJWE1F
OiBJdCBtaWdodCBiZSB3b3J0aCB0cnlpbmcgdG8gcHJlLWFsbG9jYXRlIG1heGltdW0gaGVyZS4g
VGhlIHNwZWMgcmVjb21tZW5kcyBkb2luZyBzby4KICAgICAvLyBCdXQgZm9yIG5vdywgd2UncmUg
bm90IGRvaW5nIHRoYXQuCi0gICAgbV9mdW5jdGlvbnMgPSBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFi
bGVGdW5jdGlvbj46Om1hbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSkpOwotICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8
V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2Jq
ZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSkpOwotICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBtX3NpemU7ICsraSkgewotICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQo
KVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwotICAgICAgICBBU1NFUlQobV9mdW5jdGlv
bnMuZ2V0KClbaV0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5k
ZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KLSAgICAgICAgbmV3ICgm
bV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwotICAgIH0K
KyAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+Ojpt
YWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihzaXplKCkpKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCisg
ICAgICAgIG5ldygmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PigpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQpAQCAtOTksNyArODMsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0aGlzT2JqZWN0LT5tX3NpemU7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdGhpc09iamVjdC0+c2l6ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pOwogfQogCkBAIC0xMDcsNDcgKzkxLDQ0IEBA
IGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRhKQogewogICAgIGlm
IChkZWx0YSA9PSAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz4gbmV3U2l6ZUNoZWNrZWQgPSBtX3NpemU7Ci0gICAgbmV3U2l6ZUNo
ZWNrZWQgKz0gZGVsdGE7Ci0gICAgdWludDMyX3QgbmV3U2l6ZTsKLSAgICBpZiAobmV3U2l6ZUNo
ZWNrZWQuc2FmZUdldChuZXdTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1heGltdW0oKSAmJiBuZXdTaXplID4gKm1heGlt
dW0oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6
ZSkpCisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHNpemUoKTsKKworICAgIGF1dG8gZ3JldyA9IG1f
dGFibGUtPmdyb3coZGVsdGEpOworICAgIGlmICghZ3JldykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgbV9mdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlv
bikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG5ld1NpemUpKTsKLSAgICBtX2pzRnVuY3Rpb25zLnJl
YWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihuZXdTaXplKSk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBncmV3LnZhbHVlKCk7CisgICAgbV9q
c0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIG5ld1Np
emUpOwogCi0gICAgZm9yICh1aW50MzJfdCBpID0gbV9zaXplOyBpIDwgbmV3U2l6ZTsgKytpKSB7
Ci0gICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uKCk7CisgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXplOyArK2kpCiAg
ICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdyaXRlQmFycmllcjxKU09iamVj
dD4oKTsKLSAgICB9Ci0gICAgbV9zaXplID0gbmV3U2l6ZTsKKwogICAgIHJldHVybiB0cnVlOwog
fQogCitKU09iamVjdCogSlNXZWJBc3NlbWJseVRhYmxlOjpnZXRGdW5jdGlvbih1aW50MzJfdCBp
bmRleCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IHNpemUoKSk7CisgICAgcmV0dXJu
IG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOworfQorCiB2b2lkIEpTV2ViQXNzZW1i
bHlUYWJsZTo6Y2xlYXJGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV90YWJsZS0+Y2xlYXJGdW5jdGlvbihpbmRleCk7
CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
KCk7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlv
bigpOwotICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2lnbmF0dXJlSW5kZXgg
PT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4g
Y29tcGlsZWQgY29kZS4KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9u
KFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICBtX3RhYmxlLT5zZXRG
dW5jdGlvbihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgZnVuY3Rpb24tPmlu
c3RhbmNlKCkpOwogICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNldCh2bSwgdGhpcywg
ZnVuY3Rpb24pOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IGZ1bmN0aW9uLT5jYWxs
YWJsZUZ1bmN0aW9uKCk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlv
bihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogZnVu
Y3Rpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgIG1fdGFi
bGUtPnNldEZ1bmN0aW9uKGluZGV4LCBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpLCBmdW5j
dGlvbi0+aW5zdGFuY2UoKSk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2V0KHZt
LCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rp
b24tPmNhbGxhYmxlRnVuY3Rpb24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCmluZGV4
IGRmODNlOTcuLjQ0ODc1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDU3ICsyOSw0MiBAQAogCiAjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldh
c21MaW1pdHMuaCIKKyNpbmNsdWRlICJXYXNtVGFibGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNp
bmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1uYW1lc3BhY2Ug
V2FzbSB7Ci1zdHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbjsKLX0KLQogY2xhc3MgSlNXZWJBc3NlbWJs
eVRhYmxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJs
eVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBpbml0
aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKKyAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseVRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqLCBSZWY8V2Fz
bTo6VGFibGU+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVt
OyB9Ci0gICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHN0
YXRpYyBib29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNpemUpIHsgcmV0dXJuIFdhc206OlRhYmxl
Ojppc1ZhbGlkU2l6ZShzaXplKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW0oKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5tYXhpbXVtKCk7IH0KKyAgICB1aW50MzJfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+c2l6ZSgpOyB9CiAgICAgYm9vbCBncm93KHVp
bnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgSlNPYmplY3QqIGdldEZ1bmN0
aW9uKHVpbnQzMl90IGluZGV4KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXgg
PCBtX3NpemUpOwotICAgICAgICByZXR1cm4gbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uZ2V0
KCk7Ci0gICAgfQotICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCBpbmRleCk7Ci0gICAg
dm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9u
Kik7Ci0gICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiopOwotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX3NpemUpOyB9
Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fZnVuY3Rpb25zKTsgfQotICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKU0Z1bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1dlYkFzc2VtYmx5VGFibGUsIG1fanNGdW5jdGlvbnMpOyB9CisgICAgSlNPYmplY3QqIGdl
dEZ1bmN0aW9uKHVpbnQzMl90KTsKKyAgICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QpOwor
ICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCwgV2ViQXNzZW1ibHlGdW5jdGlvbiop
OworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCwgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24qKTsKIAotICAgIHN0YXRpYyBib29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNpemUp
Ci0gICAgewotICAgICAgICAvLyBUaGlzIHRvcHMgb3V0IGF0IH4zODQgTUIgd29ydGggb2YgZGF0
YSBpbiB0aGlzIGNsYXNzLgotICAgICAgICByZXR1cm4gc2l6ZSA8ICgxIDw8IDI0KTsKLSAgICB9
CisgICAgV2FzbTo6VGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5wdHIoKTsgfQogCiBw
cml2YXRlOgotICAgIEpTV2ViQXNzZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90
IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pOworICAgIEpTV2ViQXNz
ZW1ibHlUYWJsZShWTSYsIFN0cnVjdHVyZSosIFJlZjxXYXNtOjpUYWJsZT4mJik7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwog
Ci0gICAgTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+IG1fZnVuY3Rpb25zOworICAg
IFJlZjxXYXNtOjpUYWJsZT4gbV90YWJsZTsKICAgICBNYWxsb2NQdHI8V3JpdGVCYXJyaWVyPEpT
T2JqZWN0Pj4gbV9qc0Z1bmN0aW9uczsKLSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtX21h
eGltdW07Ci0gICAgdWludDMyX3QgbV9zaXplOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxZDBkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtMCwwICsxLDY2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJGcmFtZVRyYWNlcnMu
aCIKKyNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgorI2lu
Y2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0Lmgi
CisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKKwordXNpbmcgSklUID0gQ0NhbGxIZWxwZXJzOworCitzdGF0aWMgdm9pZCBt
YXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgLy8gV2UncmUgY2FsbGluZyBvdXQgb2YgdGhlIGN1cnJlbnQg
V2ViQXNzZW1ibHkuSW5zdGFuY2UuIFRoYXQgSW5zdGFuY2UgaGFzIGEgbGlzdCBvZiBhbGwgaXRz
IGltcG9ydCBmdW5jdGlvbnMuCisgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHJlc3Vs
dCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHJlc3VsdCwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSksIHJlc3VsdCk7Cit9
CisgICAgCitzdGF0aWMgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFp
bHVyZT4gaGFuZGxlQmFkSTY0VXNlKFZNKiB2bSwgSklUJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKK3sKKyAgICB1bnNpZ25lZCBhcmdDb3Vu
dCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisKKyAgICBib29sIGhhc0JhZEk2NFVzZSA9
IGZhbHNlOworICAgIGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpID09IEk2
NDsKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50ICYmICFo
YXNCYWRJNjRVc2U7ICsrYXJnTnVtKSB7CisgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVy
ZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAg
Y2FzZSBWb2lkOgorICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgY2FzZSBJ
NjQ6IHsKKyAgICAgICAgICAgIGhhc0JhZEk2NFVzZSA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChoYXNCYWRJNjRVc2UpIHsKKyAgICAgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZy
YW1lKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworCisgICAgICAgIC8vIFN0b3JlIENhbGxlZS4KKyAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwg
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAgICAgICAg
YXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIoKnZtKTsKKworICAgICAgICB2b2lkICgqdGhyb3dCYWRJNjQpKEV4ZWNTdGF0ZSosIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSkgLT4gdm9pZCB7CisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICAgICAg
YXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmpl
Y3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJh
bCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9y
dGVkIGZ1bmN0aW9uIikpOworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2VuZXJpY1Vu
d2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpOworICAgICAgICB9OworCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOworICAgICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0
IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworfQorCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSogdm0sIEJhZzxDYWxsTGlua0lu
Zm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWdu
ZWQgaW1wb3J0SW5kZXgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBw
cm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCisgICAgLy8gSXQn
ZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDAxCisgICAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ0Mg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKKyAgICBjb25zdCBKU0NDYWxsaW5nQ29udmVudGlv
biYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7CisgICAgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAg
ICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisgICAgSklU
IGppdDsKKworICAgIC8vIE5vdGU6IFdhc21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlz
IHN0dWIgdHJlYXRzIFNQIGFzIGEgY2FsbGVlIHNhdmUuCisgICAgLy8gSWYgd2UgZXZlciBjaGFu
Z2UgdGhpcywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gY2hhbmdlIFdhc21CM0lSR2VuZXJhdG9yLgor
CisgICAgLy8gQmVsb3csIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24g
aXMgYWx3YXlzIG9uIHRoZSBzdGFjay4KKyAgICBBU1NFUlQoIWpzQ0MubV9ncHJBcmdzLnNpemUo
KSk7CisgICAgQVNTRVJUKCFqc0NDLm1fZnByQXJncy5zaXplKCkpOworCisgICAgaml0LmVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCks
IEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhN
RSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTMyMQorCisgICAgYXV0byBiYWRJNjQgPSBoYW5kbGVCYWRJNjRVc2Uo
dm0sIGppdCwgc2lnbmF0dXJlLCBpbXBvcnRJbmRleCk7CisgICAgaWYgKCFiYWRJNjQgfHwgYmFk
STY0LnZhbHVlKCkpCisgICAgICAgIHJldHVybiBiYWRJNjQ7CisKKyAgICAvLyBIZXJlIHdlIGFz
c3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNvbnZlbnRpb24gc2F2ZXMgYXQgbGVhc3QgYWxsIHRo
ZSB3YXNtIGNhbGxlZSBzYXZlZC4gV2UgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gc2F2ZSBhbmQg
cmVzdG9yZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB0aGUgd2FzbSBjYWxsZWUgYWxyZWFkeSB0b29r
IGNhcmUgb2YgdGhpcy4KKyAgICBSZWdpc3RlclNldCBtaXNzaW5nQ2FsbGVlU2F2ZXMgPSB3YXNt
Q0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIG1pc3NpbmdDYWxsZWVTYXZlcy5leGNsdWRl
KGpzQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBBU1NFUlQobWlzc2luZ0NhbGxlZVNh
dmVzLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoIU9wdGlvbnM6OnVzZUNhbGxJQ3NGb3JXZWJBc3Nl
bWJseVRvSlNDYWxscygpKSB7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIg
PSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYXJnQ291bnQgKiBzaXplb2YodWludDY0X3QpKTsK
KyAgICAgICAgY2hhciogYnVmZmVyID0gYXJnQ291bnQgPyBzdGF0aWNfY2FzdDxjaGFyKj4oc2Ny
YXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IG51bGxwdHI7CisgICAgICAgIHVuc2lnbmVkIG1h
cnNoYWxsZWRHUFJzID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOwor
ICAgICAgICB1bnNpZ25lZCBidWZmZXJPZmZzZXQgPSAwOworICAgICAgICB1bnNpZ25lZCBmck9m
ZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgY29uc3QgR1BSUmVnIHNjcmF0Y2hHUFIgPSBH
UFJJbmZvOjpyZWdDUzA7CisgICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBz
aXplb2YoUmVnaXN0ZXIpKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgeworICAg
ICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAg
ICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAg
ICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAg
IGNhc2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAgICAgICAgICAgIEdQUlJlZyBncHJSZWc7
CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2FzbUNDLm1fZ3ByQXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21DQy5tX2dwckFyZ3NbbWFy
c2hhbGxlZEdQUnNdLmdwcigpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVn
aXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZ3By
UmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBn
cHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Q
dHIoZ3ByUmVnLCBncHJSZWcpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KGdwclJlZywg
YnVmZmVyICsgYnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRHUFJz
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBGMzI6IHsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByUmVnOworICAgICAgICAgICAgICAg
IGlmIChtYXJzaGFsbGVkRlBScyA8IHdhc21DQy5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAg
ICAgICAgICAgICBmcHJSZWcgPSB3YXNtQ0MubV9mcHJBcmdzW21hcnNoYWxsZWRGUFJzXS5mcHIo
KTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUg
YWxyZWFkeSBzcGlsbGVkIGFsbCBhcmd1bWVudHMsIHRoZXNlIHJlZ2lzdGVycyBhcmUgYXZhaWxh
YmxlIGFzIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgICAgIGZwclJlZyA9IEZQUkluZm86OmFy
Z3VtZW50RlBSMDsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChKSVQ6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKGZwclJlZywg
ZnByUmVnKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIg
KyBidWZmZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICsrbWFyc2hhbGxlZEZQUnM7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEY2NDog
eworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1h
cnNoYWxsZWRGUFJzIDwgd2FzbUNDLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAg
ICAgIGZwclJlZyA9IHdhc21DQy5tX2ZwckFyZ3NbbWFyc2hhbGxlZEZQUnNdLmZwcigpOworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5
IHNwaWxsZWQgYWxsIGFyZ3VtZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMg
c2NyYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgZnByUmVnID0gRlBSSW5mbzo6YXJndW1lbnRG
UFIwOworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShKSVQ6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGZyT2Zmc2V0KSwgZnByUmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgZnJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KGZwclJlZywgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsgYnVmZmVy
T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi
dWZmZXJPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgICAgICBqaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKGFyZ0NvdW50KSB7CisgICAg
ICAgICAgICAvLyBUaGUgR0Mgc2hvdWxkIG5vdCBsb29rIGF0IHRoaXMgYnVmZmVyIGF0IGFsbCwg
dGhlc2UgYXJlbid0IEpTVmFsdWVzLgorICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAg
IH0KKworICAgICAgICB1aW50NjRfdCAoKmNhbGxGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCos
IFNpZ25hdHVyZUluZGV4LCB1aW50NjRfdCopID0KKyAgICAgICAgICAgIFtdIChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBjYWxsZWUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB1
aW50NjRfdCogYnVmZmVyKSAtPiB1aW50NjRfdCB7IAorICAgICAgICAgICAgICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAg
ICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
OyArK2FyZ051bSkgeworICAgICAgICAgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1
cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhcmc7Cisg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIFZvaWQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEk2NDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgSTMyOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0g
anNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYnVmZmVyW2FyZ051bV0pKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEYzMjoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSBqc051bWJlcihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihidWZmZXJbYXJnTnVtXSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgICAgICAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IGNhbGxlZS0+bWV0aG9kVGFibGUoKnZtKS0+Z2V0Q2FsbERhdGEoY2FsbGVlLCBj
YWxsRGF0YSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2Fs
bFR5cGU6Ok5vbmUpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVj
LCBjYWxsZWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7CisgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCAwKTsKKworICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IHJlYWxSZXN1bHQ7CisgICAgICAgICAgICAgICAgc3dpdGNoIChz
aWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBGdW5jOgorICAg
ICAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgICAgICBjYXNlIEk2NDoKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAgICAg
ICAgICAgICAgICByZWFsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0
PHVpbnQzMl90PihyZXN1bHQudG9JbnQzMihleGVjKSkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBGNjQ6CisgICAg
ICAgICAgICAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgICAgICAgICAgICAgcmVhbFJlc3VsdCA9
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocmVzdWx0LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxSZXN1bHQ7CisgICAgICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjph
cmd1bWVudEdQUjAsIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OworICAgICAgICAKKyAgICAgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoaml0LCBpbXBvcnRJ
bmRleCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChHUFJJ
bmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzID49IDQsICJXZSByZWx5IG9uIHRoaXMgd2l0
aCB0aGUgY2FsbCBiZWxvdy4iKTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNp
Z25hdHVyZUluZGV4KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOworICAg
ICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0g
aml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6SW52ZXJ0ZWRFeGNl
cHRpb25DaGVjayk7CisKKyAgICAgICAgLy8gZXhjZXB0aW9uIGhlcmUuCisgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlG
cmFtZSk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNTdGF0
ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAgICAgICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAg
ICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICB9OworICAgICAg
ICBhdXRvIGV4Y2VwdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0pOworCisgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7Cisg
ICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgICAgICBjYXNlIEY2
NDogeworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEYzMjogeworICAgICAgICAgICAgaml0Lm1vdmU2NFRvRG91Ymxl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAg
ICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICBqaXQucmV0KCk7CisKKyAg
ICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5n
RmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCisgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBj
YWxsRnVuYyk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25DYWxsLCBkb1Vud2lu
ZGluZyk7CisKKyAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJB
c3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVy
ZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSk7CisgICAgfQorCisgICAgLy8gTm90ZTogV2Ug
ZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJUkdl
bmVyYXRvcgorICAgIC8vIHdpbGwgZG8gdGhlIHN0YWNrIGNoZWNrIGZvciB1cy4gV2hlbmV2ZXIg
aXQgZGV0ZWN0cyB0aGF0IGl0IG1pZ2h0IG1ha2UKKyAgICAvLyBhIGNhbGwgdG8gdGhpcyB0aHVu
aywgaXQnbGwgbWFrZSBzdXJlIGl0cyBzdGFjayBjaGVjayBpbmNsdWRlcyBzcGFjZQorICAgIC8v
IGZvciB1cyBoZXJlLgorCisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0g
YXJnQ291bnQgKyAxOyAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KKyAgICBjb25zdCB1
bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7CisgICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9m
Qnl0ZXNGb3JDYWxsKTsKKyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgLy8gRklYTUUgbWFrZSB0aGVzZSBs
b29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFyZ3VtZW50
cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdlIHNpZ25hdHVy
ZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1NDcKKyAgICAK
KyAgICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRoZSBpbnRlZ2VyIHBhcmFtZXRlcnMsIGZyZWVpbmcg
dXAgdGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBhZnRlcndhcmRzLgorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgbWFyc2hhbGxlZEdQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBtYXJzaGFsbGVkRlBS
cyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xv
dDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgeworICAgICAg
ICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAg
ICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAg
ICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgIGNh
c2UgSTY0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8v
IEhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICBjYXNlIEkzMjogeworICAgICAgICAgICAgICAg
IEdQUlJlZyBncHJSZWc7CisgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxsZWRHUFJzIDwgd2Fz
bUNDLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGdwclJlZyA9IHdhc21D
Qy5tX2dwckFyZ3NbbWFyc2hhbGxlZEdQUnNdLmdwcigpOworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwaWxsZWQgYWxsIGFyZ3Vt
ZW50cywgdGhlc2UgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgYXMgc2NyYXRjaC4KKyAgICAgICAg
ICAgICAgICAgICAgZ3ByUmVnID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZDY0KEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZnJPZmZzZXQpLCBncHJSZWcpOworICAgICAgICAgICAgICAgICAgICBmck9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK21h
cnNoYWxsZWRHUFJzOworICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHJS
ZWcsIGdwclJlZyk7IC8vIENsZWFyIG5vbi1pbnQzMiBhbmQgbm9uLXRhZyBiaXRzLgorICAgICAg
ICAgICAgICAgIGppdC5ib3hJbnQzMihncHJSZWcsIEpTVmFsdWVSZWdzKGdwclJlZyksIERvTm90
SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoZ3ByUmVnLCBj
YWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZyYW1lT2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgY2FsbGVlRnJhbWVPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjMyOgorICAgICAgICAg
ICAgY2FzZSBGNjQ6CisgICAgICAgICAgICAgICAgLy8gU2tpcHBlZDogaGFuZGxlZCBiZWxvdy4K
KyAgICAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPj0gd2FzbUNDLm1fZnByQXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgKyttYXJzaGFsbGVkRlBSczsKKyAgICAgICAgICAgICAgICBjYWxs
ZWVGcmFtZU9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHsKKyAgICAgICAg
Ly8gSW50ZWdlciByZWdpc3RlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc3BpbGxlZCwgdGhlc2UgYXJl
IG5vdyBhdmFpbGFibGUuCisgICAgICAgIEdQUlJlZyBkb3VibGVFbmNvZGVPZmZzZXRHUFJSZWcg
PSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIxOworICAgICAgICBib29sIGhhc01hdGVyaWFsaXplZERvdWJsZUVuY29k
ZU9mZnNldCA9IGZhbHNlOworICAgICAgICBhdXRvIG1hdGVyaWFsaXplRG91YmxlRW5jb2RlT2Zm
c2V0ID0gWyZoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQsICZqaXRdIChHUFJSZWcg
ZGVzdCkgeworICAgICAgICAgICAgaWYgKCFoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZz
ZXQpIHsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KERvdWJsZUVuY29kZU9mZnNldCA9
PSAxbGwgPDwgNDgsICJjb2RlZ2VuIGFzc3VtZXMgdGhpcyBiZWxvdyIpOworICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKDEpLCBkZXN0KTsKKyAgICAgICAgICAgICAg
ICBqaXQubHNoaWZ0NjQoSklUOjpUcnVzdGVkSW1tMzIoNDgpLCBkZXN0KTsKKyAgICAgICAgICAg
ICAgICBoYXNNYXRlcmlhbGl6ZWREb3VibGVFbmNvZGVPZmZzZXQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIHVuc2lnbmVkIG1hcnNoYWxsZWRHUFJzID0gMDsK
KyAgICAgICAgdW5zaWduZWQgbWFyc2hhbGxlZEZQUnMgPSAwOworICAgICAgICB1bnNpZ25lZCBj
YWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKTsKKworICAgICAgICBhdXRvIG1hcnNoYWxsRlBSID0gWyZdIChGUFJSZWcg
ZnByUmVnKSB7CisgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKGZwclJlZyk7CisgICAgICAgICAg
ICBqaXQubW92ZURvdWJsZVRvNjQoZnByUmVnLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIG1hdGVy
aWFsaXplRG91YmxlRW5jb2RlT2Zmc2V0KGRvdWJsZUVuY29kZU9mZnNldEdQUlJlZyk7CisgICAg
ICAgICAgICBqaXQuYWRkNjQoZG91YmxlRW5jb2RlT2Zmc2V0R1BSUmVnLCBzY3JhdGNoKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2gsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2Fs
bGVlRnJhbWVPZmZzZXQpKTsKKyAgICAgICAgICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICs9IHNpemVv
ZihSZWdpc3Rlcik7CisgICAgICAgICAgICArK21hcnNoYWxsZWRGUFJzOworICAgICAgICB9Owor
CisgICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsr
YXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQo
YXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAgY2Fz
ZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlmdW5j
OgorICAgICAgICAgICAgY2FzZSBJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICAgICAgICAgIGNhc2UgSTMyOgor
ICAgICAgICAgICAgICAgIC8vIFNraXBwZWQ6IGhhbmRsZWQgYWJvdmUuCisgICAgICAgICAgICAg
ICAgaWYgKG1hcnNoYWxsZWRHUFJzID49IHdhc21DQy5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAg
ICAgICAgICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgICsrbWFyc2hhbGxlZEdQUnM7CisgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWVPZmZzZXQg
Kz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgRjMyOiB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAg
ICAgICBpZiAobWFyc2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10u
ZnByKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgc3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2
YWlsYWJsZSBhcyBzY3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZv
Ojphcmd1bWVudEZQUjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRmxvYXQoSklUOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBmck9mZnNldCksIGZwclJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgIGZyT2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShmcHJS
ZWcsIGZwclJlZyk7CisgICAgICAgICAgICAgICAgbWFyc2hhbGxGUFIoZnByUmVnKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRjY0OiB7
CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwclJlZzsKKyAgICAgICAgICAgICAgICBpZiAobWFy
c2hhbGxlZEZQUnMgPCB3YXNtQ0MubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZnByUmVnID0gd2FzbUNDLm1fZnByQXJnc1ttYXJzaGFsbGVkRlBSc10uZnByKCk7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
c3BpbGxlZCBhbGwgYXJndW1lbnRzLCB0aGVzZSByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSBhcyBz
Y3JhdGNoLgorICAgICAgICAgICAgICAgICAgICBmcHJSZWcgPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjA7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEpJVDo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZnJPZmZzZXQpLCBmcHJSZWcpOworICAgICAgICAgICAg
ICAgICAgICBmck9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtYXJzaGFsbEZQUihmcHJSZWcpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhbGxlZSgpKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKSVQ6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgIEdQUlJlZyBp
bXBvcnRKU0NlbGxHUFJSZWcgPSBHUFJJbmZvOjpyZWdUMDsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJl
IGluIHJlZ1QwIGZvciBzbG93IHBhdGggYmVsb3cuCisgICAgQVNTRVJUKCF3YXNtQ0MubV9jYWxs
ZWVTYXZlUmVnaXN0ZXJzLmdldChpbXBvcnRKU0NlbGxHUFJSZWcpKTsKKworICAgIG1hdGVyaWFs
aXplSW1wb3J0SlNDZWxsKGppdCwgaW1wb3J0SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7CisK
KyAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZz
ZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSkpOworICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1l
dGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7
CisgICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBp
ZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGls
bGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4CisKKyAg
ICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mb3MuYWRkKCk7CisgICAg
Y2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCks
IGltcG9ydEpTQ2VsbEdQUlJlZyk7CisgICAgSklUOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVj
azsKKyAgICBKSVQ6OlRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUoMCk7CisgICAgSklU
OjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGltcG9ydEpTQ2VsbEdQUlJlZywgdGFyZ2V0VG9DaGVjaywgaW5pdGlhbFJpZ2h0
VmFsdWUpOworICAgIEpJVDo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIEpJ
VDo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKKyAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAg
IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMCBoZXJlLgorICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsg
Ly8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyLgorICAgIEpJVDo6Q2FsbCBzbG93Q2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworICAgIGRvbmUubGluaygmaml0KTsKKworICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOworCisgICAgc3dpdGNoIChzaWduYXR1cmUu
cmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICAvLyBEaXNjYXJkLgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmM6CisgICAgY2FzZSBBbnlmdW5jOgorICAgICAgICAv
LyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMg
aW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRh
dGlvbiBlcnJvci4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJNjQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICB9CisgICAgY2FzZSBJMzI6IHsKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZO
b3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykp
OworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJl
Z3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAg
ICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwor
CisgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNh
bGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0
SnVtcElmRXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIp
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAt
PiBpbnQzMl90IHsgCisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAg
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAg
cmV0dXJuIHYudG9JbnQzMihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIGNvbnZlcnRUb0kzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUu
bGluaygmaml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRjMyOiB7CisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVy
ID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhh
dmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90
SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4
dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1v
dmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVl
R1BSMik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGppdC5j
b252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAg
ICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBq
aXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElm
RXhjZXB0aW9uKCp2bSkpOworCisgICAgICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3Rh
dGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQg
eyAKKyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1iZXIoZXhlYykpOworICAgICAgICB9OworICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjMyKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBG
NjQ6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRv
IG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQu
YnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAg
IGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9u
ZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKKyAg
ICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86
OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91
YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIG5vdEFOdW1iZXIubGlu
aygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAg
ICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7
CisKKyAgICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9
IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91YmxlIHsgCisgICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7
CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9G
NjQpOworICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICB9CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAg
ICBqaXQucmV0KCk7CisKKyAgICBpZiAoIWV4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CisgICAg
ICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOworICAgICAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOworICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgaml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKKworICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcp
KEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAgICAgICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7
CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICB9
OworCisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vud2luZGluZyk7CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKFVOTElLRUxZKHBhdGNo
QnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKworICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
Y2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2Fs
bCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKKyAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRo
T3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOworICAgIGNh
bGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhvdFBhdGhC
ZWdpbiwgaG90UGF0aE90aGVyKTsKKworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRl
eCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKK30KKwordm9pZCogd2Fz
bVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgVk0qIHZtID0gaW5zdGFu
Y2UtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisK
KyAgICB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9i
YWxPYmplY3QoKTsKKworICAgICAgICBKU09iamVjdCogZXJyb3I7CisgICAgICAgIGlmICh0eXBl
ID09IEV4Y2VwdGlvblR5cGU6OlN0YWNrT3ZlcmZsb3cpCisgICAgICAgICAgICBlcnJvciA9IGNy
ZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBnbG9iYWxPYmplY3QpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZShl
eGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUo
KSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7CisgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICB9CisKKyAgICBnZW5l
cmljVW53aW5kKHZtLCBleGVjKTsKKyAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gp
OworICAgIEFTU0VSVCghIXZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgLy8gRklY
TUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBiZXR0ZXI6CisgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhh
Y2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRsZVVuY2F1Z2h0RXhjZXB0
aW9uKQorICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0
aGUgVk0uIChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAvLyB0aGlzIHNp
bmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLikgV2UgY291bGQg
bWFrZSB0aGUgY2FsbGluZyBjb252ZW50aW9uCisgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3Qg
bG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1
bXBpbmcKKyAgICAvLyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3
ZSBjb3VsZCByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICBiaXR3aXNlX2Nhc3Q8dWludDY0
X3QqPihleGVjKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90
PihpbnN0YW5jZS0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkpOworICAgIHJldHVybiB2bS0+dGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2FzbVRvSlMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzI0YWEz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRv
SlMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtQmluZGluZy5oIgor
I2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENhbGxMaW5rSW5m
bzsKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNKiwgQmFnPENhbGxMaW5rSW5m
bz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCk7
CisKK3ZvaWQqIHdhc21Ub0pTRXhjZXB0aW9uKEV4ZWNTdGF0ZSosIFdhc206OkV4Y2VwdGlvblR5
cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCAwZDI3NzY1
Li5jNTg1ZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5nIHRvIHJ1biB3aXRoIG1hdGNoZXMg
dGhlIG9uZSB3ZSBleHBlY3QuCi0gICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+
Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5
KCkpKTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpLmNv
ZGVCbG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgp
LT5tZW1vcnkoKS5tb2RlKCkpKTsKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUg
YSBkaXNhbGxvd2VkIEk2NCB1c2UuCiAKQEAgLTgyLDExICs4MiwxMSBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKFdlYkFzc2VtYmx5RXhlY3V0ZVN0YXJ0
LCBXZWJBc3NlbWJseUV4ZWN1dGVFbmQpOwogCiAgICAgVmVjdG9yPEpTVmFsdWU+IGJveGVkQXJn
czsKLSAgICBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4dCA9IHdhc21GdW5jdGlvbi0+aW5zdGFu
Y2UoKTsKLSAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0byBzdG9yZSB0aGUgY29u
dGV4dCwgdGhlIGpzCi0gICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3RzIHRoZSBXYXNtQ29udGV4
dCogYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgotICAgIGlmICghV2FzbTo6dXNlRmFzdFRMU0ZvckNv
bnRleHQoKSkKLSAgICAgICAgYm94ZWRBcmdzLmFwcGVuZCh3YXNtQ29udGV4dCk7CisgICAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKTsK
KyAgICAvLyBXaGVuIHdlIGRvbid0IHVzZSBmYXN0IFRMUyB0byBzdG9yZSB0aGUgY29udGV4dCwg
dGhlIEpTCisgICAgLy8gZW50cnkgd3JhcHBlciBleHBlY3RzIHRoZSBpbnN0YW5jZSBhcyB0aGUg
Zmlyc3QgYXJndW1lbnQuCisgICAgaWYgKCFXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisg
ICAgICAgIGJveGVkQXJncy5hcHBlbmQoaW5zdGFuY2UpOwogCiAgICAgZm9yICh1bnNpZ25lZCBh
cmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKythcmdJ
bmRleCkgewogICAgICAgICBKU1ZhbHVlIGFyZyA9IGV4ZWMtPmFyZ3VtZW50KGFyZ0luZGV4KTsK
QEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcHJvdG9DYWxsRnJh
bWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rpb24sIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50LCBy
ZW1haW5pbmdBcmdzKTsKIAogICAgIC8vIEZJWE1FIERvIGF3YXkgd2l0aCB0aGlzIGVudGlyZSBm
dW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50IGdlbmVyYXRlZCBieSBCMy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ4NgotICAgIFdhc206OkNv
bnRleHQqIHByZXZXYXNtQ29udGV4dCA9IFdhc206OmxvYWRDb250ZXh0KHZtKTsKKyAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIHByZXZJbnN0YW5jZSA9IHZtLndhc21Db250ZXh0LmxvYWQoKTsK
ICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBzdGFjayBjaGVjayBoZXJlIGZvciB0aGUgd3Jh
cHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0CiAgICAgICAgIC8vIHdhbnQgdG8gZW1pdCBh
IHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFwcGVyIGZ1bmN0aW9uLgpAQCAtMTM3LDIyICsx
MzcsMjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2Vt
Ymx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBpZiAoVU5MSUtFTFkoKHNwIDwg
c3RhY2tTcGFjZVVzZWQpIHx8ICgoc3AgLSBzdGFja1NwYWNlVXNlZCkgPCBiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KHZtLnNvZnRTdGFja0xpbWl0KCkpKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYykpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVDb250ZXh0KHZtLCB3YXNt
Q29udGV4dCk7CisgICAgdm0ud2FzbUNvbnRleHQuc3RvcmUoaW5zdGFuY2UsIHZtLnNvZnRTdGFj
a0xpbWl0KCkpOwogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkpOwotICAgIEFT
U0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkgPT0gV2FzbTo6bG9hZENvbnRleHQodm0pKTsK
KyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpID09IHZtLndhc21Db250ZXh0Lmxv
YWQoKSk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRvV2FzbSh3YXNt
RnVuY3Rpb24tPmpzRW50cnlwb2ludCgpLCAmdm0sICZwcm90b0NhbGxGcmFtZSk7CiAgICAgLy8g
V2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBpbiBhIHJlZ2lzdGVyIG9yIG9uIHRoZSBzdGFj
ayBzaW5jZSBpdCdzIHN0b3JlZCBpbiBWZWN0b3I8SlNWYWx1ZT4uCiAgICAgLy8gVGhpcyBwcm9i
YWJseSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIHNpbmNlIHRoZSBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBzaG91bGQga2VlcCB0aGUgaW5zdGFuY2UKICAgICAvLyBhbGl2ZS4gQnV0IGl0J3MgZ29v
ZCBoeWdpZW5lLgotICAgIHdhc21Db250ZXh0LT51c2UoKTsKLSAgICBpZiAocHJldldhc21Db250
ZXh0ICE9IHdhc21Db250ZXh0KSB7CisgICAgaW5zdGFuY2UtPnVzZSgpOworICAgIGlmIChwcmV2
SW5zdGFuY2UgIT0gaW5zdGFuY2UpIHsKICAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGZvciBzb21l
IGV4dHJhIHNhZmV0eSBpbnN0ZWFkIG9mIGxlYXZpbmcgYSBjYWNoZWQKICAgICAgICAgLy8gdmFs
dWUgaW4gdGhlcmUuIElmIHdlIGV2ZXIgZm9yZ2V0IHRvIHNldCB0aGUgdmFsdWUgdG8gYmUgYSBy
ZWFsCiAgICAgICAgIC8vIGJvdW5kcywgdGhpcyB3aWxsIGZvcmNlIGV2ZXJ5IHN0YWNrIG92ZXJm
bG93IGNoZWNrIHRvIGltbWVkaWF0ZWx5CiAgICAgICAgIC8vIGZpcmUuCi0gICAgICAgIHdhc21D
b250ZXh0LT5zZXRDYWNoZWRTdGFja0xpbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1l
cmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkpOworICAgICAgICBpbnN0YW5jZS0+c2V0Q2Fj
aGVkU3RhY2tMaW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dHB0cl90Pjo6bWF4KCkpKTsKICAgICB9Ci0gICAgV2FzbTo6c3RvcmVDb250ZXh0KHZtLCBwcmV2
V2FzbUNvbnRleHQpOworICAgIHZtLndhc21Db250ZXh0LnN0b3JlKHByZXZJbnN0YW5jZSwgdm0u
c29mdFN0YWNrTGltaXQoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAogICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHAKaW5kZXggYTlkOGYwZC4uMmZkZDVhNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwCkBAIC0zMiwxMiArMzIsMTQgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUg
Ildhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xp
c3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgpAQCAtNzUsMTAgKzc3LDEwIEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShF
eGVjU3RhdGUqIGV4CiAgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1
cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0
ZSh2bSwgZXhlYywgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlKTsKKyAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpjcmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVy
ZSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZShSZWY8V2FzbTo6TW9kdWxlPihtb2R1bGUtPm1vZHVs
ZSgpKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBpbnN0
YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZXhlYywgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxl
U3luYyhpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSk7CisgICAgaW5zdGFuY2UtPmZpbmFsaXplQ3Jl
YXRpb24odm0sIGV4ZWMsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoJnZtLndhc21Db250
ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpLCAmV2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVy
LCAmV2FzbTo6d2FzbVRvSlNFeGNlcHRpb24pKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaW5zdGFuY2UpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlD
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnVjdG9yLmNwcAppbmRleCA2NDk4OWI1Li5kMDQzNWFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcApAQCAtOTYsMTMgKzk2LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRl
KiBleGVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8V2FzbTo6TWVtb3J5PiBtZW1v
cnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZSh2bSwgaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBh
Z2VDb3VudCk7CisgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVh
dGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1v
cnlTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKKworICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdhc206
Ok1lbW9yeTo6Y3JlYXRlKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsCisgICAg
ICAgIFsmdm1dIChXYXNtOjpNZW1vcnk6Ok5vdGlmeVByZXNzdXJlKSB7IHZtLmhlYXAuY29sbGVj
dEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVsbCk7IH0sCisgICAgICAgIFsmdm1dIChXYXNtOjpN
ZW1vcnk6OlN5bmNUcnlUb1JlY2xhaW0pIHsgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9u
U2NvcGU6OkZ1bGwpOyB9LAorICAgICAgICBbJnZtLCBqc01lbW9yeV0gKFdhc206Ok1lbW9yeTo6
R3Jvd1N1Y2Nlc3MsIFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3Vu
dCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2FsbGJhY2sodm0sIG9sZFBh
Z2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfSk7CiAgICAgaWYgKCFtZW1vcnkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOwogCi0gICAgYXV0byoganNNZW1vcnkgPSBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgYWRvcHRSZWYoKm1lbW9yeS5sZWFr
UmVmKCkpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotCisgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWVtb3J5KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlQcm90b3R5cGUuY3BwCmluZGV4IGU5OTRkYzguLjRmY2E4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZS5jcHAKQEAgLTc3LDggKzc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coRXhlY1N0YXRlKiBleGVjKQogICAgIHVpbnQz
Ml90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgYm9vbCBz
aG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgPSB0cnVlOwotICAgIFdhc206OlBhZ2VDb3Vu
dCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0sIGV4ZWMsIGRlbHRhLCBzaG91bGRUaHJvd0V4Y2Vw
dGlvbnNPbkZhaWx1cmUpOworICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdy
b3codm0sIGV4ZWMsIGRlbHRhKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdC5wYWdl
Q291bnQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRleCA5NjEwMjRkLi43NWI1
YjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtMTYxLDExICsxNjEsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1vZHVsZUV4cG9ydHMoRXhl
Y1N0YXRlKiBleGVjKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHRocm93U2NvcGUucmVs
ZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBzdHJ1Y3R1cmUp
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwg
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZXhlYywgV1RGTW92
ZShzb3VyY2UpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE3NSwxNiArMTc3LDE2
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5
TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZXhlYywgc2NvcGUs
ICJXZWJBc3NlbWJseS5Nb2R1bGUiKSk7CiB9CiAKLUpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVD
b25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBidWZmZXIs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseU1vZHVsZSogV2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgVmVjdG9yPHVp
bnQ4X3Q+JiYgYnVmZmVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNv
dXJjZSA9IGNyZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZXhlYywgYnVmZmVyKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGF1dG8qIHN0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5l
d1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxl
U3RydWN0dXJlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwog
CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
cmVhdGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5j
KHZtLCBXVEZNb3ZlKHNvdXJjZSkpKTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlU3R1Yih2bSwgZXhlYywgc3RydWN0dXJlLCBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlU3lu
Yygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoYnVmZmVyKSkpOwogfQogCiBXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRo
aXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKaW5kZXggNjAyNWM5OC4uMTNhY2Ez
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaApAQCAtMzAsOCArMzAsMTEgQEAKICNpbmNsdWRl
ICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTV2ViQXNzZW1ibHlN
b2R1bGU7CiBjbGFzcyBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZTsKIAogY2xhc3MgV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKQEAgLTQ0
LDcgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIEpT
VmFsdWUgY3JlYXRlTW9kdWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYnVmZmVyLCBTdHJ1Y3R1cmUq
KTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlTW9kdWxlKEV4ZWNTdGF0
ZSosIFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAppbmRleCBjYjFmZWMxLi4wYTg2NmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC05
Myw3ICs5Myw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRl
KiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUsCiAgICAgVU5VU0VEX1BBUkFNKHNj
b3BlKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+
Y29kZUJsb2NrKCk7CisgICAgV2FzbTo6Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBpbnN0YW5jZS0+
aW5zdGFuY2UoKS5jb2RlQmxvY2soKTsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
biYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAg
ICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUgPSBtb2R1bGUtPmV4cG9ydFN5bWJvbFRh
YmxlKCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICAg
ICAgICAgIC8vIFJldHVybiBUb0pTVmFsdWUodikuCiAgICAgICAgICAgICBzd2l0Y2ggKGdsb2Jh
bC50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKLSAgICAgICAgICAgICAgICBl
eHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEkzMkdsb2JhbChleHAua2luZElu
ZGV4KSk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2Ut
Pmluc3RhbmNlKCkubG9hZEkzMkdsb2JhbChleHAua2luZEluZGV4KSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STY0OgpAQCAtMTYwLDExICsxNjAs
MTEgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMs
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgotICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFs
dWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkRjMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+aW5zdGFuY2Uo
KS5sb2FkRjMyR2xvYmFsKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAgICAgICAgZXhwb3J0ZWRW
YWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxvYWRGNjRHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwor
ICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5pbnN0YW5j
ZSgpLmxvYWRGNjRHbG9iYWwoZXhwLmtpbmRJbmRleCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE3LDEyICsyMTcsMTIgQEAgSlNWYWx1ZSBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gbV9pbnN0YW5jZS0+bW9k
dWxlKCk7Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbnN0YW5j
ZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVs
ZUluZm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOworICAgIFdhc206Ok1v
ZHVsZSYgbW9kdWxlID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5tb2R1bGUoKTsKKyAgICBXYXNt
OjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuY29kZUJsb2Nr
KCk7CisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
ID0gbW9kdWxlLm1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0
YWJsZSA9IG1faW5zdGFuY2UtPnRhYmxlKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8V2FzbTo6U2Vn
bWVudDo6UHRyPiYgZGF0YSA9IG1faW5zdGFuY2UtPm1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlv
bigpLmRhdGE7CisgICAgY29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4mIGRhdGEgPSBt
b2R1bGVJbmZvcm1hdGlvbi5kYXRhOwogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGpzTWVtb3J5
ID0gbV9pbnN0YW5jZS0+bWVtb3J5KCk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPEpTVmFsdWU+IGV4
Y2VwdGlvbjsKQEAgLTIzOSw3ICsyMzksNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXggPSBlbGVtZW50Lm9mZnNldC5pc0ds
b2JhbEltcG9ydCgpCi0gICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9p
bnN0YW5jZS0+bG9hZEkzMkdsb2JhbChlbGVtZW50Lm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgp
KSkKKyAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5p
bnN0YW5jZSgpLmxvYWRJMzJHbG9iYWwoZWxlbWVudC5vZmZzZXQuZ2xvYmFsSW1wb3J0SW5kZXgo
KSkpCiAgICAgICAgICAgICAgICAgOiBlbGVtZW50Lm9mZnNldC5jb25zdFZhbHVlKCk7CiAKICAg
ICAgICAgICAgIGZuKGVsZW1lbnQsIHRhYmxlSW5kZXgpOwpAQCAtMjU1LDcgKzI1NSw3IEBAIEpT
VmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykK
IAogICAgICAgICBmb3IgKGNvbnN0IFdhc206OlNlZ21lbnQ6OlB0ciYgc2VnbWVudCA6IGRhdGEp
IHsKICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IHNlZ21lbnQtPm9mZnNldC5pc0dsb2Jh
bEltcG9ydCgpCi0gICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9pbnN0
YW5jZS0+bG9hZEkzMkdsb2JhbChzZWdtZW50LT5vZmZzZXQuZ2xvYmFsSW1wb3J0SW5kZXgoKSkp
CisgICAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9pbnN0YW5jZS0+aW5z
dGFuY2UoKS5sb2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgp
KSkKICAgICAgICAgICAgICAgICA6IHNlZ21lbnQtPm9mZnNldC5jb25zdFZhbHVlKCk7CiAKICAg
ICAgICAgICAgIGZuKG1lbW9yeSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQsIG9mZnNldCk7CkBAIC0y
OTMsNyArMjkzLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUo
RXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCiAg
ICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gZWxlbWVudC5mdW5jdGlvbkluZGlj
ZXNbaV07Ci0gICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXgpOworICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBt
b2R1bGUuc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgp
OwogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1w
b3J0Q291bnQoKSkgewogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9
IGpzQ2FzdDxKU09iamVjdCo+KG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5k
ZXgpKTsKICAgICAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwg
ZnVuY3Rpb25JbXBvcnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKaW5kZXggZTlhNjM0YS4uMWZiOTQzYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5
cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJv
dG90eXBlLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVk
LmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVy
cy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKQEAgLTQwLDYgKzQxLDcgQEAKICNpbmNsdWRlICJQcm9taXNlRGVm
ZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJXYXNt
QkJRUGxhbi5oIgorI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0
LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgpAQCAtOTQsNyArOTYsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVGdW5jKEV4
ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOwogICAgIGVsc2UgewotICAgICAgICBX
YXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmModm0sIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hh
cmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGdsb2JhbE9iamVj
dF0gKFZNJiB2bSwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRh
YmxlIHsKKyAgICAgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29udGV4
dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJh
Y2tUeXBlPihbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlk
YXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICAgICAgdm0ucHJvbWlzZURl
ZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGdsb2JhbE9i
amVjdCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCAmdm1dICgpIG11dGFibGUgewogICAgICAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAg
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKQEAg
LTEzNSw3ICsxMzcsNyBAQCBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVwogewogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBw
b3RlbnRpYWxseSByZWNvbXBpbGluZyBhIG1vZHVsZS4gV2UgZmlyc3QgZ2F0aGVyIGFsbCB0aGUg
aW1wb3J0L21lbW9yeSBpbmZvcm1hdGlvbiBwcmlvciB0byBjb21waWxpbmcgY29kZS4KLSAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpj
cmVhdGUodm0sIGV4ZWMsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZt
LCBleGVjLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCksIFdhc206Okluc3RhbmNlOjpjcmVhdGUo
UmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSkpKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpKTsKIAogICAgIFZlY3Rv
cjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwpAQCAtMTQzLDEzICsxNDUsMTMgQEAgc3Rh
dGljIHZvaWQgaW5zdGFudGlhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlLCBKU1cKICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0Nl
bGw+KHZtLCBpbnN0YW5jZSkpOwogICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5hZGRQZW5k
aW5nUHJvbWlzZShwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOwogICAgIC8vIE5vdGU6
IFRoaXMgY29tcGxldGlvbiB0YXNrIG1heSBvciBtYXkgbm90IGdldCBjYWxsZWQgaW1tZWRpYXRl
bHkuCi0gICAgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlQXN5bmModm0sIGluc3RhbmNlLT5tZW1v
cnlNb2RlKCksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q29kZUJsb2NrOjpDYWxsYmFja1R5cGU+
KFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCByZXNvbHZlS2luZF0gKFZNJiB2bSwgUmVmPFdh
c206OkNvZGVCbG9jaz4mJiByZWZDb2RlQmxvY2spIG11dGFibGUgeworICAgIG1vZHVsZS0+bW9k
dWxlKCkuY29tcGlsZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2UtPm1lbW9yeU1vZGUo
KSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDb2RlQmxvY2s6OkNhbGxiYWNrVHlwZT4oW3Byb21p
c2UsIGluc3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kLCAmdm1dIChSZWY8V2FzbTo6Q29kZUJs
b2NrPiYmIHJlZkNvZGVCbG9jaykgbXV0YWJsZSB7CiAgICAgICAgIFJlZlB0cjxXYXNtOjpDb2Rl
QmxvY2s+IGNvZGVCbG9jayA9IFdURk1vdmUocmVmQ29kZUJsb2NrKTsKICAgICAgICAgdm0ucHJv
bWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGlu
c3RhbmNlLCBtb2R1bGUsIHJlc29sdmVLaW5kLCAmdm0sIGNvZGVCbG9jayA9IFdURk1vdmUoY29k
ZUJsb2NrKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBpbnN0
YW5jZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgICAgIHJlc29sdmUo
dm0sIGV4ZWMsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGNvZGVCbG9jay5yZWxlYXNlTm9u
TnVsbCgpLCByZXNvbHZlS2luZCk7CiAgICAgICAgIH0pOwotICAgIH0pKTsKKyAgICB9KSwgJldh
c206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Ondhc21Ub0pTRXhjZXB0aW9uKTsKIH0K
IAogc3RhdGljIHZvaWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNWYWx1ZSBidWZmZXIsIEpTT2JqZWN0
KiBpbXBvcnRPYmplY3QpCkBAIC0xNjUsNyArMTY3LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZUFu
ZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCog
cHIKICAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZh
bHVlKHZtLCBleGVjLCBidWZmZXIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJl
amVjdChleGVjLCBzY29wZSwgcHJvbWlzZSkpOwogCi0gICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0
ZUFzeW5jKHZtLCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxl
OjpDYWxsYmFja1R5cGU+KFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdF0gKFZN
JiB2bSwgV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsK
KyAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3Zl
KHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtw
cm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgJnZtXSAoV2FzbTo6TW9kdWxlOjpW
YWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgdm0ucHJvbWlzZURl
ZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGltcG9ydE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksICZ2bV0gKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CiAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKQEAgLTIxMyw3ICsyMTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgc2l6ZV90IGJ5
dGVTaXplOwogICAgIHVpbnQ4X3QqIGJhc2UgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLCBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgQkJRUGxhbiBwbGFuKCZ2
bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFu
Ojpkb250RmluYWxpemUoKSk7CisgICAgQkJRUGxhbiBwbGFuKCZ2bS53YXNtQ29udGV4dCwgYmFz
ZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250
RmluYWxpemUoKSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4gT09N
IGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDExODY1ZjUuLjJjNWJjNzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcApAQCAtOTAsOCArOTAsMTUgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKEV4
ZWNTdGF0ZSogZXhlYykKICAgICAgICAgfQogICAgIH0KIAorICAgIFJlZlB0cjxXYXNtOjpUYWJs
ZT4gd2FzbVRhYmxlID0gV2FzbTo6VGFibGU6OmNyZWF0ZShpbml0aWFsLCBtYXhpbXVtKTsKKyAg
ICBpZiAoIXdhc21UYWJsZSkgeworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiY291bGRuJ3QgY3JlYXRlIFRhYmxlIikpKSk7CisgICAgfQor
CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZShleGVjLCB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5XZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIGluaXRpYWwsIG1heGltdW0pKTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUo
ZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0
cnVjdHVyZSgpLCB3YXNtVGFibGUucmVsZWFzZU5vbk51bGwoKSkpOwogfQogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0
ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAppbmRleCBmNWY4ZjljLi4zNmEwZGNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCkBAIC02Myw3ICs2Myw3IEBAIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwg
SlNHbG9iYWxPCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzKHZt
LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6aW5mbygpKSwgIldlIHNob3VsZCBuZXZlciBk
b3VibGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7CiAgICAgU3RyaW5nIG5hbWUgPSAiIjsK
ICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNh
bGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rp
b25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3Ry
dWN0dXJlKCksIHsgc2lnbmF0dXJlSW5kZXgsIGluc3RhbmNlLT5jb2RlQmxvY2soKS0+d2FzbVRv
SnNDYWxsU3R1YkZvckltcG9ydChpbXBvcnRJbmRleCkgfSk7CisgICAgV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24o
dm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
blN0cnVjdHVyZSgpLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZp
bnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEluZGV4KS0+d2FzbVRvRW1iZWRkZXJT
dHViRXhlY3V0YWJsZUFkZHJlc3MgfSApOwogICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGluc3RhbmNlKTsKICAgICByZXR1cm4gcmVz
dWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDE4NzQ0M2EuLjA4YTVlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxNy0xMC0xOSAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViQXNzZW1ibHk6IG5vIFZNIC8gSlMgdmVyc2lvbiBvZiBldmVyeXRoaW5nIGJ1
dCBJbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8sIFNhYW0gQmFyYXRp
LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd2FzbS9XYXNtTW9kdWxlLmg6IEFkZGVk
LiBUaGlzIHVzZWQgdG8gYmUKKyAgICAgICAgaW5jbHVkZWQgaW4gSlNXZWJBc3NlbWJseU1vZHVs
ZS5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6IFVw
ZGF0ZSBwb3N0TWVzc2FnZSBjb2RlCisgICAgICAgIGFjY29yZGluZyB0byBDKysgQVBJIGNoYW5n
ZXMuCisKIDIwMTctMTAtMTYgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+
CiAKICAgICAgICAgTWFrZSBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VzIGFuZCBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VzIHBvcnQgYWdub3N0aWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oIGIvU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvd2FzbS9XYXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNWIwYjlkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3dhc20vV2FzbU1vZHVsZS5oCkBAIC0wLDAgKzEsMiBAQAor
I3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvV2FzbU1vZHVsZS5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKaW5kZXggOTc1YzljOS4uNzg0MDNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC03OSw2ICs3OSw3IEBACiAj
aW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
VHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaD4K
KyNpbmNsdWRlIDx3YXNtL1dhc21Nb2R1bGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5o
PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
LS0gCjIuOS4zCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>